2014-05-14 81 views
0

上的錯誤我在編譯VisualStudio2012中的「Hello world」CUDA程序時遇到了一些問題。我已經下載並例子來自Nvidia:C++ CUDA項目沒有在VS2012中編譯,「<<<」

#include "stdafx.h" 
#include "cuda.h" 
#include "cuda_runtime.h" 
#include "device_launch_parameters.h" 

#include <stdio.h> 

__device__ const char *STR = "HELLO WORLD!"; 
const char STR_LENGTH = 12; 

__global__ void hello() 
{ 
    printf("%c\n", STR[threadIdx.x % STR_LENGTH]); 
} 

int main(void) 
{ 
    int num_threads = STR_LENGTH; 
    int num_blocks = 1; 
    hello<<<num_blocks,num_threads>>>(); 
    cudaDeviceSynchronize(); 

    return 0; 
} 

我改變了構建配置到CUDA 6.0,加入包括在項目屬性庫路徑。儘管如此,它給了我此行一個錯誤:

hello<<<num_blocks,num_threads>>>(); 

它反應< < <,告訴我,有預期的表現。有沒有辦法來解決這個問題?在過去的幾個小時裏,這讓我發瘋。

編輯:

我改變在屬性文件以 「CUDA C/C++」>一般的項目類型。現在它編譯,但有錯誤:

1>------ Build started: Project: CUDATest, Configuration: Debug Win32 ------ 
1> Compiling CUDA source file CUDATest.cu... 
1> 
1> C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files\Microsoft Visual Studio 11.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\CUDATest.cu.obj "C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest\CUDATest.cu" 
1>nvcc : warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. 
1>C:/Users/Rafa│/Documents/Visual Studio 2012/Projects/CUDATest/CUDATest/CUDATest.cu(15): error : calling a __host__ function("printf") from a __global__ function("hello") is not allowed 
1> CUDATest.cu 
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 6.0.targets(597,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files\Microsoft Visual Studio 11.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\CUDATest.cu.obj "C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest\CUDATest.cu"" exited with code 2. 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

如果我評論printf函數,然後我就得到這樣的:

1>------ Build started: Project: CUDATest, Configuration: Debug Win32 ------ 
1> Compiling CUDA source file CUDATest.cu... 
1> 
1> C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files\Microsoft Visual Studio 11.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\CUDATest.cu.obj "C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest\CUDATest.cu" 
1>nvcc : warning : The 'compute_10' and 'sm_10' architectures are deprecated, and may be removed in a future release. 
1>ptxas : fatal error : Ptx assembly aborted due to errors 
1> CUDATest.cu 
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\BuildCustomizations\CUDA 6.0.targets(597,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_10,compute_10\" --use-local-env --cl-version 2012 -ccbin "C:\Program Files\Microsoft Visual Studio 11.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.0\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_UNICODE -DUNICODE -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\CUDATest.cu.obj "C:\Users\Rafał\Documents\Visual Studio 2012\Projects\CUDATest\CUDATest\CUDATest.cu"" exited with code -1. 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+1

這只是編輯器中的紅色下劃線,還是實際的編譯錯誤?請在編譯項目時提供Visual Studio的實際錯誤輸出。 –

+1

你是如何命名該文件的? MSVC可能會對'.cpp'和'.cu'進行挑剔。另外,你能解釋一下你的意思嗎?「我把構建配置改爲cuda 6.0?」 – Angew

+0

這是編輯器中的下劃線。錯誤是「錯誤1錯誤C2059:語法錯誤:'<'」 該文件名稱爲CUDATest.cpp。我右鍵單擊解決方案資源管理器中的項目並選擇「構建自定義...」。然後我通過CUDA 6.0檢查了這個盒子。 – Rafal

回答

2

我已經成功地運行例子,但是你的GPU需要計算能力> = 2.0。

右鍵單擊項目並選擇「屬性」。

轉到CUDA/C++ - >設備。

關於「代碼生成」,請使用「compute_20,sm_20」(爲了清楚起見,引號)替換您的內容。

編輯(關於Ptx assembly aborted due to errors):如果從const char *STR中刪除__device__限定符,它應該編譯。 (當你註釋掉printf函數) - 這是ptxas錯誤的原因。

+0

我編輯了答案。現在作者的兩個問題都應該解決,但我認爲他只是想讓程序運行。 – Geto

+0

更改計算和sm幫助,非常感謝! – Rafal

相關問題