10

clEnqueueMapBuffer関数の動作メカニズムについて誰か話してもらえますか。実際、私は主に、この関数から得られる速度の利点に関心がありますclEnqueueRead/WriteBuffer

PS : clEnqueueMapBuffer/clEnqueueMapImageCPU からのバッファも自動的に割り当てますか? もし、そうなら。
CPU バッファを管理したい。つまり、最初に大きなバッファを malloc します。次に、バッファが必要な場合。最初に割り当てた大きなバッファから割り当てることができます。clEnqueueMapBuffer/clEnqueueMapImage大きなバッファから割り当てバッファを作成する方法。

4

2 に答える 2

6

clEnqueueMapBuffer/clEnqueueMapImage

clEnqueueRead/を使用する代わりにメモリ オブジェクトにアクセスするための OpenCL メカニズムWrite。デバイス上のメモリ オブジェクトをホスト上のメモリ領域にマップできます。オブジェクトをマップしたら、好きなように読み書きまたは変更できます。

Read/ Writebuffer とのもう 1 つの違いclEnqueueMapBuffermap_flags引数です。map_flagsが に設定されている場合CL_MAP_READ、マップされたメモリは読み取り専用になりCL_MAP_WRITE、マップされたメモリが書き込み専用になるように設定されている場合、読み取りと書き込みの両方が必要な場合はフラグを作成しCL_MAP_READ | CL_MAP_WRITEます。

読み取り/書き込み fns と比較して、メモリ マッピングには 3 つのステップのプロセスが必要です。

  1. を使用してメモリをマップしますclEnqueueMapBuffer
  2. 経由でデバイスからホストへ/からメモリを転送しますmemcpy
  3. を使用してマップを解除しclEnqueueUnmapObjectます。

メモリ マッピングにより、通常の読み取り/書き込みと比較してパフォーマンスが大幅に向上することは、一般的なコンセンサスです。こちらを参照してください: what's fast - AMD devgurus フォーラム リンク

画像または画像の長方形の領域をコピーする場合は、clEnqueueMapImage呼び出しも利用できます。

参考文献:

于 2012-09-04T03:01:12.053 に答える