11

私のtest.cuファイル(cuファイルのアイテムタイプはCUDA C / C ++です)

__global__ void foo()
{
}

void CudaMain()
{

  foo<<<1,1>>>();
}

そして私のtest.cppファイルで

#include "mycuda.cu"

int main()
{

CudaMain();
return 0;

}

およびコンパイラは、test.cuファイルで「エラーc2059構文エラー '<'」というエラーを送信します

4

3 に答える 3

4

C++ファイルにCUDAソースファイルを含めることは機能しません。これは単にCUDAソースをC++プログラムコードの一部にし、通常のC++コンパイラはCUDA構文拡張を理解しないためです。それでもCUDAコードを非CUDAC++コードとは別にしたい場合は、別のコンパイルを検討することをお勧めします。CUDAソースコードは通常のオブジェクトファイルにコンパイルでき、それを他のオブジェクトファイルとリンクして実行可能ファイルを生成できます。

次のようにC++コードを変更します。

extern void CudaMain(void);

int main()
{
    CudaMain();
    return 0;
}

CUDAファイルをでコンパイルしnvcc、C++コードをC++コンパイラでコンパイルしてから、結果のオブジェクトファイルを次のようにリンクしますnvcc(linkコマンドで標準のC ++ライブラリを指定する必要がある場合もあります)。

$ nvcc -c -o test_cuda.o test.cu
$ g++ -c -o test_cpp.o test.cpp
$ nvcc -o test.exe test_cuda.o test_cpp.o -lstdc++

編集:あなたの質問はVS2010についてです。そこでカスタムビルドステップを作成する必要があるかもしれません。

于 2012-12-11T18:24:10.930 に答える
3

ここのスレッドに基づく: https://forums.developer.nvidia.com/t/cuda-build-error/52615/4

テスト ファイルの拡張子も .cu にする必要がありますが、MSCV の名前変更を使用している場合は、VS プロジェクトで新しい CUDA C/C++ ソース モジュールを作成する必要があります。

また、 <> 演算子の間にスペースを入れる必要があります。

foo< < <1,1> > >();

C++ は <<<>>> を解析できないためです。

于 2020-05-29T12:36:40.590 に答える