【发布时间】:2013-10-26 02:08:38
【问题描述】:
Visual Studio 在以下示例中用红线突出显示“threadIdx”。
看起来程序执行成功了,所以问题只是VisualStudio中的显示问题。
如何使 Visual Studio 不再将 threadIdx 突出显示为无效?
我的环境: * 操作系统:Windows7,64bit * VisualStudio2010,CUDA5.5
源代码:
#include <cuda_runtime.h>
#include <stdio.h>
#include <math.h>
#include <cuda.h>
#define N 256
__global__ void matrix_vector_multi_gpu_1_256(float *A_d, float *B_d, float *C_d);
int main(){
int i,j;
float A[N], B[N*N], C[N];
float *A_d, *B_d, *C_d;
dim3 blocks(1,1,1);
dim3 threads(256,1,1);
for(j=0;j<N;j++){
for(i=0;i<N;i++){
B[j*N+i]=((float)j)/256.0;
}
}
for(j=0;j<N;j++){
C[j]=1.0F;
}
cudaMalloc((void**)&A_d, N*sizeof(float));
cudaMalloc((void**)&B_d, N*N*sizeof(float));
cudaMalloc((void**)&C_d, N*sizeof(float));
cudaMemcpy(A_d,A,N*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(B_d,B,N*N*sizeof(float),cudaMemcpyHostToDevice);
cudaMemcpy(C_d,C,N*sizeof(float),cudaMemcpyHostToDevice);
matrix_vector_multi_gpu_1_256<<<blocks,threads>>>(A_d,B_d,C_d);
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToHost);
for(j=0;j<N;j++){
printf("A[ %d ]=%f \n",j,A[j]);
}
getchar();
cudaFree(A_d);
cudaFree(B_d);
cudaFree(C_d);
return 0;
}
__global__ void matrix_vector_multi_gpu_1_256(float *A_d, float *B_d, float *C_d){
int i;
A_d[threadIdx.x]=0.0F;
for(i=0;i<N;i++){
A_d[threadIdx.x]=A_d[threadIdx.x]+B_d[threadIdx.x*N+i]*C_d[i];
}
}
【问题讨论】:
-
请在右上角的搜索框中输入“cuda red underline”,您将获得大量相关信息。红色下划线本身就是一个智能感知功能,它本身不会阻止您编译或构建 CUDA 代码。
-
我猜这是 Visual Studio 的 CUDA 支持中的设计限制。
-
Kovi 的回答解决了这个问题。如果您还需要语法高亮,请参阅Setting Visual Studio 2010 support (syntax highlighting) for CUDA projects 和Setting Visual Studio 2010 Intellisense for CUDA projects。
标签: c++ visual-studio-2010 visual-studio cuda gpgpu