2

OpenCL マーチング キューブの実装を作成する必要があります。

マーチング キューブ アルゴリズムは、ボリューム データを取得し、そこから等値面を作成します。このプロセスには非常に時間がかかるため、パフォーマンスを向上させるために、n 個のスレッドで OpenCL で記述しなければなりません。

私はすでにコードを持っていますが、私の問題は頂点を保存することです。私が理解している限り、十分なメモリを割り当てるためにアルゴリズムが作成する頂点の数を知る必要がありますが、この数は不明です。ベクターや numpy.array などの動的データ構造を追加機能などで作成する方法はありますか。

私は OpenCL __kernel をロードするための Python コードを書いていますが、頂点を使って他の処理を行う必要があるため、Python で読み取れるようにする必要があります。アイデアは、ブレンダー プラグインを作成することです。

4

1 に答える 1

1

私が知る限り、OpenCL はいかなる種類の動的メモリ管理も許可していません。その理由の 1 つは、GPU の動作方法です。OpenCL コードを CPU でのみ動作させ、GPU では動作させないというのは、OpenCL の背後にある考え方ではありません。

次の方法で問題を解決できます。

  • 巨大なメモリ バッファを作成します。必要に応じて大きくします。
  • 新しい頂点がある場合は、バッファー内の最後に追加された位置に単純に追加します。
  • そのように続けてください。

ある時点でまだメモリが不足しているとしましょう。その場合、より大きなバッファを作成し、メモリを古いものから新しいものにコピーし、古いものを削除するだけです。

これが役に立ったことを願っています。

于 2013-02-17T18:06:16.193 に答える