9

私はなぜcudaMemcpyFromSymbol()存在するのかを理解しようとしています。'symbol' funcが実行できることはすべて、nonSymbolcmdが実行できるようです。

シンボル関数は、配列またはインデックスの一部を簡単に移動できるように見えますが、これはnonSymbol関数でも同じように簡単に実行できます。シンボルルックアップが必要ないため、nonSymbolアプローチの方が高速になると思います。(シンボルルックアップの計算がコンパイル時に行われるのか実行時に行われるのかは明確ではありません。)

なぜcudaMemcpyFromSymbol()vs cudaMemcpy()を使用するのですか?

4

1 に答える 1

11

cudaMemcpyFromSymbolデバイスメモリ内の静的に定義された変数からコピーする標準的な方法です。

cudaMemcpy静的に定義されたデバイス変数との間でコピーするために直接使用することはできません。これは、デバイス ポインターが必要であり、実行時にホスト コードに認識されないためです。したがって、デバイス コンテキスト シンボル テーブルを問い合わせることができる API 呼び出しが必要です。2 つの選択肢はcudaMemcpyFromSymbol、シンボルの検索とコピーを 1 回の操作で行うか、cudaGetSymbolAddressに渡すことができるアドレスを返すかのいずれかcudaMemcpyです。コピーを 1 回だけ行いたい場合は前者が効率的であり、ホスト コードでアドレスを複数回使用する場合は後者が効率的です。

于 2013-02-11T17:46:21.217 に答える