cudaMemcpy 无效参数没有关于错误的线索

cudMemcpy invalid argument no clues about what is wrong

我写了一些代码,但由于某种原因无法让它工作...但它已经从 VisualStudio 生成的工作测试程序中复制粘贴:

__device__ int pseudoRandomFunction(int seed)
{
    unsigned int m_w = 150;
    unsigned int m_z = 40;

    m_z = 36969 * (m_z & 65535) + (m_z >> 16);
    m_w = 18000 * (m_w & 65535) + (m_w >> 16);

    return (m_z << 16) + m_w;
}
__global__ void fillArrayWithRandom(int* vector, int seed = 0)
{
    int i = threadIdx.x;
    vector[i] = pseudoRandomFunction(seed^i);
}

void Lab1(int* array, int size)
{
    int* gpuArray = 0;
    gpuErrorCheck(cudaSetDevice(0));
    gpuErrorCheck(cudaMalloc(&gpuArray, size));
    gpuErrorCheck(cudaMemcpy(gpuArray, array, size * sizeof(int), cudaMemcpyHostToDevice)); // <--- here is invalid argument exception!
    fillArrayWithRandom<<<1,size>>>(gpuArray,0);
    gpuErrorCheck(cudaGetLastError());
    gpuErrorCheck(cudaDeviceSynchronize());
    gpuErrorCheck(cudaMemcpy(array, gpuArray, size * sizeof(int), cudaMemcpyDeviceToHost));
    cudaFree(gpuArray);
    gpuErrorCheck(cudaDeviceReset());
}

我什至尝试更改参数类型但没有任何进展...请帮忙!我的 gpu GeForce 9600GT,和 cuda 6.5

我能看到的唯一问题是这一行不正确:

gpuErrorCheck(cudaMalloc(&gpuArray, size));

应该是:

gpuErrorCheck(cudaMalloc(&gpuArray, size*sizeof(int)));

有了这个改变,当 size = 10 时,我可以 运行 你的代码没有错误。

请注意,您的 pseudoRandomFunction 例程不使用 seed,因此它创建的每个值都是相同的。