算术 Cuda 程序编译错误 [关闭]

Posted

技术标签:

【中文标题】算术 Cuda 程序编译错误 [关闭]【英文标题】:Arithmetic Cuda program compilation error [closed] 【发布时间】:2014-06-13 20:44:12 【问题描述】:

我正在开发一个新的 CUDA 程序。我遇到了以下错误,尝试修复但停止了。任何人都可以看看并告诉我我可能会错过什么吗?任何帮助将不胜感激。

Error   5   error : too few arguments in function call   
Error   6   error : argument of type "int *" is incompatible with parameter of type "size_t"    
Error   7   error : argument of type "unsigned int" is incompatible with parameter of type "cudaMemcpyKind" 
Error   8   error : too many arguments in function call 2010\Projects\lab\lab\kernel.cu 54  1   lab
Error   9   error MSB3721: The command ""C:\Program Files\NVIDIA GPU 

这是我的代码:

#include <stdio.h>

#define SIZE 500
#include <cuda.h>

__global__ void InitialAdd(int *a, int *b, int *c, int *z, int n, float aspa, float bspb, float apa, float bpb)

    int i = blockIdx.x + blockIdx.x * threadIdx.x;
    aspa = (-*a);
    bspb = (-*b);
    aspa = (10,*a);
    bspb = (10,*b);
    *z = (a,2) + (b,2) + aspa + bspb + apa + bpb;
    if(i < n)
        c[i] = a[i] * b[i];


int main(void)

    int *a, *b, *c, *z;
    int *d_a, *d_b, *d_c, *d_z;


    a = (int *)malloc(SIZE*sizeof(int));
    b = (int *)malloc(SIZE*sizeof(int));
    c = (int *)malloc(SIZE*sizeof(int));
    z = (int *)malloc(SIZE*sizeof(int));

    cudaMalloc( &d_a, SIZE*sizeof(int));
    cudaMalloc( &d_b, SIZE*sizeof(int));
    cudaMalloc( &d_c, SIZE*sizeof(int));
    cudaMalloc( &d_z, SIZE*sizeof(int));

    for( int i = 0; i < SIZE; i++ )
    
        a[i] =i;
        b[i] =i;
        c[i] =0;
        z[i] =i;

    

    cudaMemcpy( d_a, a, SIZE*sizeof(int), cudaMemcpyHostToDevice );
    cudaMemcpy( d_b, b, SIZE*sizeof(int), cudaMemcpyHostToDevice );
    cudaMemcpy( d_c, c, SIZE*sizeof(int), cudaMemcpyHostToDevice );
    cudaMemcpy( d_z, z, SIZE*sizeof(int), cudaMemcpyHostToDevice );


    InitialAdd<<< 4 , SIZE >>>( d_a, d_b, d_c, d_z, SIZE);


    cudaMemcpy( c, d_z, d_c, SIZE*sizeof(int), cudaMemcpyDeviceToHost );

    for( int i = 0; i < 1000; i++)
        printf("c[%d] = %d\n", i, c[i], *z);

    free(a);
    free(b);
    free(c);
    free(z);

    cudaFree(d_a);
    cudaFree(d_b);
    cudaFree(d_c);
    cudaFree(d_z);

    return 0;

【问题讨论】:

错误中有哪些不清楚的地方?除了您的参数数量和类型错误之外,我们还能告诉您什么? 【参考方案1】:

我可以在这一行中看到一个明显的问题:

cudaMemcpy( c, d_z, d_c, SIZE*sizeof(int), cudaMemcpyDeviceToHost );

您正在传递 5 个参数,而 cudaMemcpy 只需要 4 个。我猜您正在尝试从 d_z 复制到 c,所以它会是:

cudaMemcpy( c, d_z, SIZE*sizeof(int), cudaMemcpyDeviceToHost );

即删除d_c

【讨论】:

感谢它的工作,但在这一行 InitialAdd>>( d_a, d_b, d_c, d_z, SIZE);我懂了;错误 5 错误:函数调用中的参数太少 那是因为你没有传递足够的参数!您的内核 InitialAdd 预计为 9。 我已经实施了这样的建议,但在此行 InitialAdd>>( d_a, d_b, d_c, d_z, SIZE, d_aspa, d_bspb, d_apa , d_bpb); 7 错误:“float *”类型的参数与“float”类型的参数不兼容 该错误消息准确地告诉您问题出在哪里。这些变量的类型应该是float,而不是float* global void InitialAdd(int *a, int *b, int *z, int n, float *aspa, float *bspb, float *apa, float *bpb) int i = blockIdx.x + blockIdx.x * threadIdx.x; *aspa = (-*a); *bspb = (-*b); *aspa = (10,*a); *bspb = (10,*b); *z = (a,2) + (b,2) + aspa + bspb + apa + bpb; for(int i = 0; i

以上是关于算术 Cuda 程序编译错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从命令提示符编译 CUDA 时出现链接错误

CUDA 7.5 安装:不支持的编译器错误

cuda中的编译错误

由于多个重新定义错误,CUDA 样本无法编译

编译 CUDA cuSolver 特征值示例时出现编译错误

在makefile错误中编译cuda文件