2017-01-02 51 views
0

を宣言するとき、私はクーダに新しいですし、それをテストするための簡単なプログラムを書き始めました。おそらくそれには多くの問題がありますが、私のストッパーは私がタイトルに書いたエラーです:単純なcudaError_t変数を宣言するたびに、 "Unrecognized token"コンパイルエラーが発生します。認識されないトークンエラーcudaError_t変数

#include <cuda_runtime.h> 
#include <cuda_runtime_api.h> 

extern "C" void callCudaCode(int*); 

__global__ void mykernel (int *a, int *b, int *c) 
{ 
    //*c = *a + *b; 
    *c = 34; 
} 


void callCudaCode(int* results) 
{ 
    int a=3, b=8; 
    int *da, *db, *dc; 
    int size = sizeof(int); 

    ​cudaError_t myCudaError;// = cudaGetLastError(); 
    //const char* errorStr = cudaGetErrorName(cudaError); 

    cudaMalloc((void**)da, size); 
    cudaMalloc((void**)db, size); 
    cudaMalloc((void**)dc, size); 

    cudaMemcpy(da, &a, size, cudaMemcpyHostToDevice); 
    cudaMemcpy(db, &b, size, cudaMemcpyHostToDevice); 

    mykernel<<<1,1>>>(da,db,dc); 

    cudaMemcpy(results, dc, size, cudaMemcpyDeviceToHost); 

    cudaFree(da); 
    cudaFree(db); 
    cudaFree(dc); 
} 

あり、このファイルを使用する別のmain.cppにファイルがあるが、私はそれがこのエラーを説明するのに関連する何かを持っているとは思わないので、私はそれが含まれていませんでした: はここに私のコードサンプルです。 私がcudaError_t変数の宣言をコメントすると、コードはコンパイルされます(これはうまく実行されませんが、別の話です)。

私はすでにこの問題をグーグルだけ私の例とは何の関係もありませんエラーが見つけた:私が理解から、スペース・エラー、printfのエラー...

を、cudaError_tが列挙型でありますそれを含めることによって、私は何の問題があってはならないので、cuda_runtime_api.hで定義された...

誰もが何が起こっている上の任意の手掛かりを持っていますか?

EDIT

私は添付ファイルがmycuda.cuです。 my.cuda.cuからcallCudaCode()関数を呼び出すmain.cppという別のファイルがあります。 Qt Creatorとqmakeを使ってプロジェクトをビルドしています。はい、Qtが.cuプロジェクトをコンパイルしようとしないように.proファイルを設定するように注意しました。 myCudaError変数を宣言する行にコメントすると、プロジェクトは正常にコンパイルされます。コメントを外すと、コンパイルの問題が発生します。

+0

何問題のファイルの名前です - あなたは '万が一.cpp'で終わるファイル名を使用していますか? – tera

+0

このファイルはcuda.cuです。このファイルからcallCudaCode()を呼び出すだけのmain.cppがあります。 –

+0

ファイルに '.cu'拡張子がある場合、CUDAランタイムインクルードは不要です.nvccは自動的にCUDAヘッダーをインクルードします。 – tera

答えて

1

ライン

​cudaError_t myCudaError;// = cudaGetLastError(); 

はUnicodeを持っているように見えますcudaError_tの前に0x200B "ゼロ幅スペース"文字。それを削除してください(または確かであれば、削除して、行全体を再入力してください)。もう一度やり直してください。

+0

それはそれでした。このスペースがどのようにそこに終わったのか分かりませんが、それが問題でした。テラありがとう! –

5

cudaErrorは予約CUDAキーワードです。

変数名としては使用しないでください。

のようなものに変更し、それを:(。。cudaErrorがすでにdriver_types.hに定義されていることが列挙型である)

cudaError_t my_cudaError; 

+0

あなたの答えはロバートありがとう、私はそれを認識していませんでした。変数の名前をmyCudaErrorに変更しましたが、問題はまだ残ります。 他のアイデアはありますか? ところで、QtCreatorとqmakeを使ってプロジェクトをビルドしています。変数宣言行なしでビルドするので、これは役に立たないと思うが、もしこれがエラーの診断に役立つかもしれないと感じたら、教えてください。 –

+0

QUはCUDAと同様に、私の(限られた)経験ではCUDAと互換性のない独自の前処理ステップを導入しています。したがって、QTが '.cpp'ファイルのみを扱い、すべてのCUDAコードが' .cu'ファイルに限定されていることを確認してください。 – tera

+0

既にそれをしました。 QTは.cuファイルを扱うことになりました。この問題を解決する前に、多くのコンパイルエラーが存在します。 –

関連する問題