0

ARM Mali T604 GPU を使用しています。ALLOC_HOST_PTR を使用してメモリ オブジェクトを作成しました。次の手順が有効かどうかを知りたいですか? GPU のメモリ オブジェクトにアクセス (読み取り専用) し、CPU に同じメモリ オブジェクトを (読み取り専用として) 同時にマップすることはできますか?

手順 1: メモリ オブジェクトのマップを解除します (以前は CL_MAP_READ_WRITE としてマップされていました)。

ステップ 2: CL_MAP_READ (clEnqueueMapBuffer() への引数) を使用してメモリ オブジェクトをマップし直します。

ステップ 3: CPU と GPU で同時にデータを読み取り、処理します (ただし、このメモリ オブジェクトに対して書き込み操作は行いません)。

ステップ 4: メモリ オブジェクトのマップを解除する

ステップ 5: CL_MAP_READ_WRITE を使用してメモリ オブジェクトをホストにマップします。

言い換えれば、私の最終的な目標は、CPU と GPU が同時に読み取り可能なメモリ オブジェクトを用意することです。これは Mali OpenCL プラットフォームで可能ですか?

4

2 に答える 2

0

In OpenCL Specification 1.2
5.4.3 Accessing mapped regions of a memory object

Multiple commands in command-queues can map a region or overlapping regions of a memory object and associated memory objects (sub-buffer objects or 1D image buffer objects that overlap this region) for reading (i.e. map_flags = CL_MAP_READ ). The contents of the regions of a memory object mapped for reading can also be read by kernels and other OpenCL commands (such as clEnqueueCopyBuffer) executing on a device(s).

于 2016-06-03T06:34:47.910 に答える
0

Mali GPU だけでなく、どのバージョンの OpenCL 仕様およびプラットフォーム/デバイスでも可能です。あなたのアプローチは正しく、OpenCL 1.0 と互換性があります。

ただし、メモリの重複があることを知っておく必要があります (ホストは、実際の G​​PU データではなく、マップ操作によって生成されたローカル コピーにアクセスしています)。あなたの意図。

例として、マッピング中にカーネルからそのメモリに書き込む場合、読み取りのために再度マップを解除/マップするまで、CPU は古いデータを読み取ります。

于 2014-06-11T19:02:31.923 に答える