In short, because cudaMemcpy
can't do the same thing as cudaMemcpyToSymbol
without an additional API call. Consider a constant memory array:
__constant__ float coeffs[8];
To copy values to this array using cudaMemcpyToSymbol
, just do
cudaMemcpyToSymbol(coeffs, hostData, 8*sizeof(float));
To do the same with cudaMemcpy
requires this:
float *dcoeffs;
cudaGetSymbolAddress((void **)&dcoeffs, coeffs);
cudaMemcpy(dcoeffs, hostData, 8*sizeof(float), cudaMemcpyHostToDevice);
A direct call to cudaMemcpy
is illegal without prior symbol lookup.
[standard disclaimer: all code written in browser without access to documentation or compiler, use at own risk]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…