cudaMemcpyToSymbol vs. cudaMemcpy why is it still around (cudaMemcpyToSymbol)

cuda

Solution

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]

Problem

As stated by other questions and according to the link, you can no longer use the symbol name for this function. Now that the feature is gone, when would ever want to use this over `cudaMemCpy`? When would you ever want to use it at all? What is the tradeoff or benefit? https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1g9bcf02b53644eee2bef9983d807084c7

Original source