私はCUDAプログラミングを始めたばかりで、それは非常にうまくいっています。私のGPUは認識されており、すべてです。この非常に役立つガイドを使用して、Visual StudioでIntellisenseを部分的にセットアップしました: http://www.ademiller.com/blogs/tech/2010/10/visual-studio-2010-adding-intellisense-support-for-cuda-c/
そしてここ: - http://www.ademiller.com/blogs/tech/2011/05/visual-studio-2010-and-cuda-easier-with-rc2/
ただし、Intellisenseは、次のようなカーネル呼び出しをまだ認識していません。
// KernelCall.cu
#include <iostream>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
__global__ void kernel(void){}
int main()
{
kernel<<<1,1>>>();
system("pause");
return 0;
}
カーネル<<< 1,1 >>>()の行には赤の下線が引かれています。具体的には、最初の矢印の左側にある1つの矢印で、「エラー:予期された式」というエラーが表示されます。ただし、関数にカーソルを合わせると、戻り値の型とパラメーターが正しく表示されます。それでも問題なくコンパイルされます。この小さな煩わしさを取り除く方法を考えています。
VisualStudioはIntelliSensefor C++を提供します。ロケット科学者のブログのトリックは、基本的にCUDA-CがC++と類似していることに依存しています。
C++言語では、山かっこを適切に解析するのは面倒です。テンプレートの場合は<
未満、シフトの場合は<<
があります。少し前に、ネストされたテンプレート宣言の間にスペースを入れなければならなかったことを思い出してください。
したがって、この構文を思いついたNVIDIAの人は言語の専門家ではなく、たまたま最悪の区切り文字を選択し、それを3倍にしたことがわかりました。まあ、問題が発生するでしょう。これを見ると、Intellisenseがまったく機能するのは驚くべきことです。
CUDAで完全なIntelliSenseを取得するために私が知っている唯一の方法は、ランタイムAPIからドライバーAPIに切り替えることです。 C++は単なるC++であり、CUDAはまだ(一種の)C++であり、言語解析が回避しなければならないという<<<>>>
の悪さはありません。
うわー、このスレッドにはたくさんのほこりがあります。私はこれについてマクロ修正(まあ、回避策のようなもの...)を思いついたので、共有したいと思いました:
// nvcc does not seem to like variadic macros, so we have to define
// one for each kernel parameter list:
#ifdef __CUDACC__
#define KERNEL_ARGS2(grid, block) <<< grid, block >>>
#define KERNEL_ARGS3(grid, block, sh_mem) <<< grid, block, sh_mem >>>
#define KERNEL_ARGS4(grid, block, sh_mem, stream) <<< grid, block, sh_mem, stream >>>
#else
#define KERNEL_ARGS2(grid, block)
#define KERNEL_ARGS3(grid, block, sh_mem)
#define KERNEL_ARGS4(grid, block, sh_mem, stream)
#endif
// Now launch your kernel using the appropriate macro:
kernel KERNEL_ARGS2(dim3(nBlockCount), dim3(nThreadCount)) (param1);
何らかの理由でコード内の '<<<'が常に失われるため、この方法を好みますが、マクロは構文の色付けによって助けを得ます:)。
VS2015およびCUDA7以降、ファイルの拡張子が.cu
の場合、これら2つのインクルードを他のインクルードの前に追加できます。
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
MACROSなどは必要ありません。その後、すべてが完全に機能します。