2012-02-15 5 views
10

NVIDIAはメモリ転送のオーバーヘッドを減らすためにGPUDirectを提供しています。私はAMD/ATIのための同様の概念があるかどうか疑問に思いますか?具体的には、AMDのOpenCLはCUDAのGPUDirectに似たものを提供していますか?

1)ネットワークカードとのインターフェイス時にAMD GPUが2回目のメモリ転送を行わないようにしてください(as described here)。グラフィックスがある時点で失われた場合、GPUダイレクトが1つのマシン上のGPUからのデータをネットワークインタフェースを介して転送する際の影響の説明を以下に示します。GPUDirectを使用すると、GPUメモリはホストメモリに移動し、インターフェイスカード。 GPUDirectがなければ、GPUメモリは1つのアドレス空間でホストメモリに送られ、CPUはコピーを行って別のホストメモリアドレス空間にメモリを取得しなければなりません。

2)同じPCIeバス上で2つのGPUを共有する場合、AMD GPUはP2Pメモリ転送を許可しますか?as described here。 GPUDirectを使用すると、同じPCIeバス上のGPU間で、ホストメモリに触れることなく直接データを移動できます。 GPUDirectを使用しないと、データはGPUがどこにあるかにかかわらず、別のGPUに到達する前に必ずホストに戻る必要があります。

編集:BTW、私はGPUDirectのどれが実際にどのくらいのものが実際にどれだけ有用であるかはわかりません。私は実際に何かのためにそれを使用してGPUのプログラマのことを聞いたことがない。これについての考えも大歓迎です。

+0

は、リンクされたグラフィックスは後日ダウン取られた場合の二つの技術のテキスト記述を提供してもらえますか?また、私は2番目のグラフィックが何が提供されているか不明であることがわかります。 – James

+0

ジェームズ、これが行われます。 – arrayfire

+0

@gpu:mvapich2は、最近のリリースではGPUの直接サポートを持っています。私はこれを使っていますが、実際には速いです。 'MPI_Send'と' MPI_recv'を呼び出し、引数としてGPUメモリポインタを渡し、 – talonmies

答えて

2

あなたはclCreateBufferのCL_MEM_ALLOC_HOST_PTRフラグを探しているかもしれないと思います。 OpenCL仕様では、このフラグ「このフラグは、アプリケーションがOpenCL実装でホストからアクセス可能なメモリにメモリを割り当てることを指定しています」と述べていますが、AMDの実装(または他の実装)がどのようなことを行うのかは不明です。

ここhttp://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440

は、この情報がお役に立てば幸いトピックに関する有益なスレッドがあります。

編集:私は、nVidiaのOpenCL SDKがこれを固定/ページロックメモリの割り当てとして実装していることを知っています。私は、これがAMDのOpenCL SDKがGPU上で動作しているときのことだと確信しています。

+4

CUDAはCL_MEM_ALLOC_HOST_PTRと同等ですが、GPUDirectと同じではありません。 CUDAは、GPUカーネル内からホストメモリ割り当てにアクセスできます。 GPUへのDMAをより効率的にするために、ページロックされたホストポインタを割り当てることもできます。しかし、GPUDirectは、@ gpuの質問で説明されているように、これらの両方を超えています。 – harrism

+0

。それでは、現時点では、OpenCLに相当するものはありません。 – Ani

2

@ananthonlineと@harrismによって指摘されているように、GPUDirectの多くの機能はOpenCLに直接対応していません。ただし、質問の最初の文で説明したように、メモリ転送のオーバーヘッドを減らそうとすると、ゼロコピーメモリが役立つ可能性があります。通常、アプリケーションがGPU上にバッファを作成すると、バッファの内容がCPUメモリからGPUメモリに一括してコピーされます。コピー・メモリがゼロの場合、初期コピーはありません。その代わりに、データはGPUカーネルによってアクセスされるときにコピーされます。

ゼロコピーはすべてのアプリケーションで意味をなさない。ホスト メモリがまばらな方法でたりするときに大きな ホストデバイスによってアクセスされたときに

ゼロコピーホスト常駐メモリオブジェクトは、パフォーマンスを向上させることができます:ここではそれを使用するときにAMD APPのOpenCLプログラミングガイドからのアドバイスですメモリバッファは複数のデバイス間で共有され、コピー は高価すぎます。これを選択する場合、転送コストは より遅いアクセスの余分なコストより大きくなければなりません。

表4。3プログラミングガイドの第3章では、clCreateBufferに渡してゼロコピー(CL_MEM_ALLOC_HOST_PTRまたはCL_MEM_USE_PERSISTENT_MEM_AMD、デバイスアクセス可能なホストメモリかホストアクセス可能なデバイスメモリかどうか)の利点を利用するフラグを説明しています。ゼロコピーのサポートは、OSとハードウェアの両方に依存します。 LinuxやWindowsの古いバージョンではサポートされていないようです。

AMD APPのOpenCLプログラミングガイド:http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

関連する問題