1

例:配列でアルゴリズムを実行するには、配列で作成されたバッファーを使用する必要があります。ただし、Intel / AMD CPUでは、グローバルメモリなどのシステムのDDRを使用します。最後に、テーブルが2回作成されます。バッファを割り当てずに、すでにメモリにあるテーブルを使用する方法はありますか?

4

2 に答える 2

4

バッファーを作成するときにCL_MEM_USE_HOST_PTRフラグを設定することにより、OpenCL に元のメモリ領域を使用するように要求できます。

カーネルが CPU 上で実行されている場合、メモリ コピーは発生しません。

GPU で実行すると、OpenCL ランタイムがより適していると判断した場合にコピーが発生する可能性があります。

于 2012-11-12T17:35:54.687 に答える
3

CPU はマシンのメモリにアクセスできますが、GPU のメモリにはアクセスできません。同様に、GPU は自身のメモリにアクセスできますが、ホスト マシンのメモリにはアクセスできません。これが、これらの間で情報を転送する必要がある理由です。これらは 2 つの完全に別個のメモリ空間です。

gpgpu とは対照的に、OpenCL ではカーネルが CPU 自体で実行される可能性があるため、バッファーをコピーする必要はありません。ただし、OpenCL では常にメモリを明示的に転送する必要があります。ホスト コンピューターで実行されている場合、その実装はそれを無視するだけです。

于 2012-11-12T13:45:57.970 に答える