0

グラフィックカードにOpenCLを使用してPythonでデータをコピーしています。そこには、n 個のスレッドでデータを処理するカーネルがあります。このステップの後、結果を Python と新しいカーネルにコピーします。(データは 900MB と非常に大きく、結果は 100MB です) この結果を使用して、約 200MB の三角形を計算する必要があります。すべてのデータがグラフィック カードのメモリを超えています。

最初のカーネルが作業を終了した後、最初の 900MB はもう必要ありません。

私の質問は、グラフィック カードから最初のデータセット (1 つの配列に格納されている) を削除するにはどうすればよいですか?

ここにいくつかのコード:

#Write
self.gridBuf = cl.Buffer(self.context, cl.mem_flags.READ_ONLY | cl.mem_flags.COPY_HOST_PTR, hostbuf=self.grid)
#DO PART 1
...
#Read result
cl.enqueue_read_buffer(self.queue, self.indexBuf,index).wait()
4

1 に答える 1

1

clCreateBufferの呼び出しで作成したmemオブジェクトを使用してclReleaseMemObjectを呼び出す必要があります。この呼び出しで参照カウントがゼロになると、基盤となるデバイス/共有メモリが実装によって解放されます。

于 2012-06-22T14:36:24.007 に答える