版本后:
我想知道为什么cudaMalloc
的第一个参数应该转换为void**
,例如(void**)&d_A
其中d_A
是指针。我不理解语法,但特别是使用它的内容
cudaError_t cudaMalloc(void ** devPtr,
size_t size
)
干杯
答案 0 :(得分:4)
从来没有必要为void**
转换为cudaMemcpy
,因为它需要void*
。您可能会对{em> <{1}}的{{1}}感到困惑。
从任何指针类型到cudaMalloc
的转换隐含在C中,但在C ++中则不需要强制转换。
答案 1 :(得分:0)
来自NVidia教程:
int main()
{
int a[N], b[N], c[N];
int *dev_a, *dev_b, *dev_c;
// I deleted the code here, we don't need it
cudaMemcpy(dev_a, a, N * sizeof(int), cudaMemcpyHostToDevice);
}
似乎没有必要将cudaMemcpy的第一个参数转换为void **。但是,您可能必须将其转换为void *。