我已经使用 CUDA 4.2 一周了,但遇到了一些问题。当我编写 __syncthreads() 函数时,它会带有下划线,看起来是错误的......
然后,如果我将鼠标放在该函数上,则会出现一条消息:
标识符 __syncthreads(); 未定义。
但是当我编译我的项目时,输出表单构建显示:
========== 构建:1 成功,0 失败,0 最新,0 跳过 ==========
所以我猜一切正常,但 Visual Studio 强调该函数的事实让我感到困惑......我怎样才能让 Visual studio 知道这个函数是在编译过程之前定义的?
注意:内核调用也会发生同样的情况: kernel<<<...,...>>> 其中第三个“<”也带有红色下划线...
我知道这可能是一个小问题,但我想解决它......非常感谢!我在 win7 上使用 Visual Studio 2010 以及 Cuda 4.2 和 Nsight 2.2
我是cuda的新手,我有一个问题.我想对我的线程进行同步,所以我尝试使用syncthreads.问题是Visual Studio 2010说:idetifier __syncthreads()是未定义的......我顺便使用cuda 4.2.所以我决定使用cudaDeviceSynchronize()代替并从主机调用它.我的代码就像上面那样(我只向你发送重要的部分):
__global__ void sum( float avg[]){
avg[0]+=1;
avg[1]+=2;
}
int main(){
float avg[2];
float *devAvg;
cudaError_t cudaStatus;
size_t size=sizeof(unsigned char)*2;
cudaStatus = cudaMalloc((void**)&devAvg, size2);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc 2 failed!");
return -1;
}
avg[0]=0;
avg[1]=0;
cudaStatus = cudaMemcpy(devAvg,avg, size, cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
return -1;
}
dim3 nblocks(40,40);
dim3 nthreads(20,20);
sum<<<nblocks,nthreads,msBytes>>>(devAvg);
cudaStatus = cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", …Run Code Online (Sandbox Code Playgroud)