声明 cudaError_t 变量时出现无法识别的标记错误
Unrecognized token error when declaring a cudaError_t variable
我是 Cuda 的新手,刚开始编写一个简单的程序来测试它。它可能有很多问题,但现在对我来说最糟糕的是我在标题中描述的错误:每当我声明一个简单的 cudaError_t 变量时,我都会得到一个 "Unrecognized token" 编译错误。
这是我的代码示例:
#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 变量声明,代码编译正常(执行不正常,但那是另一回事)。
我已经用谷歌搜索了这个问题,但只发现了与我的示例无关的错误:space 错误、printf 错误...
据我了解,cudaError_t 是在 cuda_runtime_api.h 中定义的枚举,因此通过包含它我应该没有任何问题...
有人知道发生了什么事吗?
编辑
我刚刚附加的文件是mycuda.cu。还有另一个名为 main.cpp 的文件,它只是从 mycuda.cu 调用 callCudaCode() 函数。
我正在使用 Qt Creator 和 qmake 来构建项目。是的,我仔细配置了 .pro 文件,这样 Qt 就不会尝试编译 .cu 项目。
如果我评论声明 myCudaError 变量的行,项目编译正常。如果我取消注释,我会遇到编译问题。
cudaError
是保留的 CUDA 关键字。
不要将其用作变量名。
将其更改为:
cudaError_t my_cudaError;
(cudaError
已经在driver_types.h
中定义了。它是枚举类型。)
行
cudaError_t myCudaError;// = cudaGetLastError();
似乎在 cudaError_t
之前有一个 Unicode 0x200B "zero-width space" 字符。删除它(如果不确定,则删除并重新键入整行)并重试。
我是 Cuda 的新手,刚开始编写一个简单的程序来测试它。它可能有很多问题,但现在对我来说最糟糕的是我在标题中描述的错误:每当我声明一个简单的 cudaError_t 变量时,我都会得到一个 "Unrecognized token" 编译错误。 这是我的代码示例:
#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 变量声明,代码编译正常(执行不正常,但那是另一回事)。
我已经用谷歌搜索了这个问题,但只发现了与我的示例无关的错误:space 错误、printf 错误...
据我了解,cudaError_t 是在 cuda_runtime_api.h 中定义的枚举,因此通过包含它我应该没有任何问题...
有人知道发生了什么事吗?
编辑
我刚刚附加的文件是mycuda.cu。还有另一个名为 main.cpp 的文件,它只是从 mycuda.cu 调用 callCudaCode() 函数。 我正在使用 Qt Creator 和 qmake 来构建项目。是的,我仔细配置了 .pro 文件,这样 Qt 就不会尝试编译 .cu 项目。 如果我评论声明 myCudaError 变量的行,项目编译正常。如果我取消注释,我会遇到编译问题。
cudaError
是保留的 CUDA 关键字。
不要将其用作变量名。
将其更改为:
cudaError_t my_cudaError;
(cudaError
已经在driver_types.h
中定义了。它是枚举类型。)
行
cudaError_t myCudaError;// = cudaGetLastError();
似乎在 cudaError_t
之前有一个 Unicode 0x200B "zero-width space" 字符。删除它(如果不确定,则删除并重新键入整行)并重试。