1. ホーム
  2. cuda

[解決済み] cudaMemcpyToSymbolとcudaMemcpyの比較 なぜまだ残っているのか (cudaMemcpyToSymbol)

2022-02-18 19:23:22

質問

他の質問にもあるように、またリンク先によると、この機能にはシンボル名は使えなくなったようです。この機能がなくなった今、この機能を使いたいのはいつなのでしょうか? cudaMemCpy ? 全く使いたくないと思うのはいつですか?トレードオフまたは利点は何ですか?

https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html#group__CUDART__MEMORY_1g9bcf02b53644eee2bef9983d807084c7

解決方法は?

要するに cudaMemcpy と同じことはできません。 cudaMemcpyToSymbol を追加でAPIコールする必要があります。定数メモリ配列について考えてみましょう。

__constant__ float coeffs[8];

この配列に値をコピーするには cudaMemcpyToSymbol を実行するだけです。

cudaMemcpyToSymbol(coeffs, hostData, 8*sizeof(float));

と同じことをするには cudaMemcpy はこれを必要とします。

float *dcoeffs;
cudaGetSymbolAddress((void **)&dcoeffs, coeffs);
cudaMemcpy(dcoeffs, hostData, 8*sizeof(float), cudaMemcpyHostToDevice);

を直接呼び出す。 cudaMemcpy は、事前にシンボル検索を行わないと不正となります。

[標準的な免責事項:すべてのコードは、ドキュメントやコンパイラにアクセスすることなく、ブラウザで書かれており、自己責任で使用すること]。