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
,因此它创建的每个值都是相同的。
我写了一些代码,但由于某种原因无法让它工作...但它已经从 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
,因此它创建的每个值都是相同的。