上的錯誤我在編譯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 ==========
這只是編輯器中的紅色下劃線,還是實際的編譯錯誤?請在編譯項目時提供Visual Studio的實際錯誤輸出。 –
你是如何命名該文件的? MSVC可能會對'.cpp'和'.cu'進行挑剔。另外,你能解釋一下你的意思嗎?「我把構建配置改爲cuda 6.0?」 – Angew
這是編輯器中的下劃線。錯誤是「錯誤1錯誤C2059:語法錯誤:'<'」 該文件名稱爲CUDATest.cpp。我右鍵單擊解決方案資源管理器中的項目並選擇「構建自定義...」。然後我通過CUDA 6.0檢查了這個盒子。 – Rafal