6

CUDA ブック (CUDA by Example: An Introduction to General-Purpose GPU Programming) の 1 つの例では、ポインターを初期化するときにポインターを無効にすることはないようです。

2 つの質問:

  1. GPU は 0x0 (または整数 0) を NULL ポインターとして使用しますか? デバイス ポインターを使用して C/C++ ポインターの慣行に従う必要があります (たとえば、初期化時にそれらを無効にするなど)。

  2. cudaFree する前に、ポインターが NULL かどうかを確認する必要がありますか? if (devPtr) HANDLE_ERROR(cudaFree(devPtr));

Fermi アーキテクチャでは、オンチップ共有メモリに 0x0 が使用されると誰かが言っていましたが、使用されているポインタが 0x0 を指してはならないと想定しても問題ないようです。
http://forums.thedailywtf.com/forums/p/25369/273567.aspx

ケプラー アーキテクチャについてはどうでしょうか。GPU は 0x0 アドレスで何をしますか?

ありがとうございました!

4

1 に答える 1

1

一般に、NULLポインターは、ホストポインターの場合と同じように扱うことができます。あなたの質問に答えるために。

  1. はい。ホストで使用しているのと同じ方法を自由に使用してください(自由に無効化してください)。

  2. NULLを解放する前にチェックするのは安全ですが、cudaFree(0)実際にはメモリを解放しようとしないため、必須ではありません。(実際cudaFree(0)、CUDAコンテキストを初期化するために一般的に使用されます!)最近のmalloc実装のほとんどは、ゼロ値のポインターを解放しようとはしていません。

于 2012-09-07T02:44:56.860 に答える