0

我安装了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;
}

发生地

4

2 回答 2

1

正如我在上面的评论中指出的那样,这是一个智能感知问题。在 Visual Studio 2010 CUDA 项目上启用 Intellisense 支持的步骤总结在

为 Visual Studio 2010 CUDA 项目设置 Intellisense 支持

于 2013-09-23T21:33:11.393 回答
1

你至少应该从

cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToDevice);

cudaMemcpy(A,A_d,N*sizeof(float),cudaMemcpyDeviceToHost);

还有一些建议

  • 运行一些 CUDA 示例代码以查看您是否正确设置了 CUDA。
  • 确保您的源代码文件具有外部名称.cu

解决cudaMemcpyDeviceToDevice问题后,我可以编译并运行您的代码。结果得到纠正。您的代码应该没有阻止编译的问题。

于 2013-09-23T07:52:27.503 回答