2016-11-02 12 views
-1

CUDAの統合メモリ機能を使用すると、変数がmanagedメモリに格納され、コードが少し簡単になります。メモリはスレッドブロック内のスレッド間で共有されます。セクション3.2を参照してくださいCUDA Fortran.cudaの共有メモリと管理対象メモリの変数

私の質問は、sharedmanagedの両方のメモリにある可能性がありますか?ホスト内ではmanagedとなりますが、デバイス上ではsharedとなります。このタイプの変数にはどのような振る舞いが予想されますか?

私はCUDA Fortranを使用しています。この質問は、変数をmanagedと宣言するとコード化が容易になりますが、デバイス内でsharedにすると、グローバルデバイスのメモリよりも速くなります。

私はドキュメントに決定的な答えを与えたものは見つかりませんでした。

+0

CUDAで管理または固定されている変数を「宣言」することはありません。 – talonmies

+0

私はそこにいると思います:[doc](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-unified-memory-programming-hd)引用「最後に、言語の統合 " – rohand

+0

* GPU *宣言された変数のために、管理されたアドレス空間にマップする権利があります。しかし、それはあなたが求めていることではありません。固定された/ページロックされたメモリはホストメモリで、あなたはホストメモリについての質問です。そこには宣言構文はありません。ホストメモリが管理されているか固定されているかは、割り当てたAPIによって異なります。 – talonmies

答えて

1

私の質問は、変数が共有メモリと管理メモリの両方にあることができますか?

いいえ、不可能です。

管理メモリは、静的アロケータ(CUDA Cで__managed__、またはCUDAのFortranでmanaged属性)またはダイナミック割当(CUDA CでcudaMallocManaged、またはCUDAのFORTRANでmanaged(割り当て)属性)のいずれかとcreatedあります。

これらは両方とも、CUDAの論理グローバルメモリスペースに関連付けられています。 グローバルの領域使用量に関係なく、明示的に使用(割り当て、アクセス)されなければなりません。(またはshared)メモリ空間は別個の論理空間です。