我安装了CUDA5.5。 开发环境正在使用Visual Studio 2010 Professional。 我尝试像下面那样运行源代码。 但是,红线被绘制为“<<<<<<<出于某种原因在Visual Studio上。 它显示错误“表达式。必需”和。 如果有人发生同样的现象,请告诉我如何解决。
开发环境--------------------------------------------- -----------------------------
OS:Windows7 64bit
Visual Studio 2010 Professional SP1
CUDA 5.5
现象---------------------------------------------- -------------------------------------------
↓“<<<<<<<<<<<<源代码你会看到以下内容。 但是,第三个下划线仅显示“<”。 它似乎是:“表达式必需。错误”并将鼠标指针移动到红线的位置。
源代码--------------------------------------------- ------------------------------
#include <cuda_runtime.h>
#include <stdio.h>
#include <math.h>
#include <cuda.h>
#define N 256
__global__ void matrix_vector_multi_gpu_1_1(float *A_d, float *B_d, float *C_d){
int i,j;
for(j=0;j<N;j++){
A_d[j]=0.0F;
for(i=0;i<N;i++){
A_d[j]=A_d[j]+B_d[j*N+i]*C_d[i];
}
}
}
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(1,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_1<<<blocks,threads>>>(A_d,B_d,C_d);
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToDevice);
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;
}
答案 0 :(得分:1)
你至少应该改变
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToDevice);
到
cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToHost);
更多建议
.cu
解决cudaMemcpyDeviceToDevice
问题后,我可以编译并运行您的代码。结果得到纠正。您的代码应该没有任何阻止编译的问题。
答案 1 :(得分:1)
正如我在上面的评论中所指出的,这是一个智能感知问题。
总结了在Visual Studio 2010 CUDA项目上启用Intellisense支持的步骤Setting Intellisense support for a Visual Studio 2010 CUDA project