调用子例程时键入不匹配

时间:2019-09-16 04:07:05

标签: c++ vector gpu thrust

“ int *”类型的参数与“ int”类型的参数不兼容

__global__ void DeviceFun(thrust::device_vector<int>* arr, int len0, int len1)
{
    int i = threadIdx;
    if ( (i>=len0) && (i<len1) )
        printf("arr[%d] = %d    ", i, arr[i]);
}

int main()
{
    thrust::device_vector<int> v(4);
    thrust::fill(v.begin(), v.end(), 137);

    int len = 4;
    int len0 = 0;
    int len1 = len;

    DeviceFun<<<1, len>>>(&v, &len0, &len1);
    cudaDeviceSynchronize();

    return 0;
}

尝试修复错误以编译和运行程序。

1 个答案:

答案 0 :(得分:0)

  

DeviceFun <<< 1,len >>>(&v,&len0,&len1);

DeviceFun的签名是:

DeviceFun(int* arr, int len0, int len1)

但是,您要将指向len0和len1的指针传递给该函数。我认为您应该像这样呼叫DeviceFun:

DeviceFun<<1, len>>(&v[0], len0, len1);