声明cudaError_t变量时无法识别的令牌错误

时间:2017-01-02 18:33:10

标签: c++ cuda

我是Cuda的新手,刚开始编写一个简单的程序来测试它。其中可能存在很多问题,但我现在的阻止是我在标题中描述的错误:每当我声明一个简单的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变量声明,代码编译正常(它执行不正常,但这是另一个故事)。

我已经使用Google搜索了这个问题,但只发现了与我的示例无关的错误:空格错误,printf错误......

据我所知,cudaError_t是一个在cuda_runtime_api.h中定义的枚举,所以通过包含它我不应该有任何问题......

有没有人知道发生了什么?

修改

我刚才附上的文件是mycuda.cu。另一个名为main.cpp的文件只是从mycuda.cu调用callCudaCode()函数。 我正在使用Qt Creator和qmake来构建项目。是的,我注意配置.pro文件,以便Qt不会尝试编译.cu项目。 如果我对声明myCudaError变量的行进行注释,则项目编译正常。如果我取消注释,我会收到编译问题。

2 个答案:

答案 0 :(得分:5)

cudaError_t my_cudaError; 是保留的CUDA关键字。

不要将其用作变量名称。

将其更改为:

cudaError

driver_types.h已在{{1}}中定义。它是枚举类型。)

答案 1 :(得分:1)

该行

    ​cudaError_t myCudaError;// = cudaGetLastError();

cudaError_t之前似乎有一个Unicode 0x200B“零宽度空格”字符。删除它(或删除并重新键入整行,如果不确定),然后重试。