Bullet Physics OpenCL版を試してみる(Bullet3 VS2017)

まだ開発中(?)のBullet3OpenCLを試してみました。GPUを使って剛体の計算を高速に実行できることは確認できましたが、開発中のためか問題も多いようです。剛体1個でも10ms以上かかったり、フリーズ、GPUフリーズ等々、実戦投入はまだ先のようです。
デモの実行方法、HelloWorldプログラムの作成、処理時間の計測結果などについて説明していきます。



使用上の注意

実験中のプログラムのためPCがフリーズしたり、画面がおかしくなる可能性があります。実行の際は、他のアプリを終了させるなどPCが操作不能になることを想定しておいてください。
発生するタイミングは不定、ほとんどがOpenCL関数内で停止(デバッガでの確認)。今回自作したプログラムでも同様の現象が発生します。Bullet3OpenCLかOpenCLドライバーに問題があるようです。
以下のPC環境においてOpenCLデモプログラムのフリーズ、GPUフリーズなどの不具合を確認しています。
Windows10(64bit)
CPU : A8-7650k
GPU : Radeon R7
OpenCL Driver : 22.19.162.4
OpenGL Driver : 6.14.10.1374
Provider : Advanced Micro Devices, Inc.


Bullet3 (Bullet2.86)

最新のリリースver2.86に新バージョンのBullet3が同梱されています。ver3.xxとなってないため、まだ正式なものではなく開発中のものだと思われます。
http://bulletphysics.org/
https://github.com/bulletphysics/bullet3/releases
よりダウンロードしたソースコードを利用します。

OpenCLのインストール

比較的新しいGPUであれば、グラフィックボードのドライバーインストールでOpenCLドライバーも一緒にインストールされるようです。SDKなどのダウンロード、インストールは不要です。


Bullet3OpenCLデモのビルドと実行

基本的な手順は、Bullet Physicsを使ってみる (Bullet2.86 VS2017 DirectX11)のデモプログラムのビルドと実行と同じです。
build_visual_studio.batでVSプロジェクト作成、0_Bullet3Solution.slnを開き、ビルド&実行。ただし、デフォルトだとOpenCLデモが無効になっているため有効にする必要があります。
VSプロジェクト(App_BulletExampleBrowser)の「プロパティー>デバッグ>コマンド引数」に

を追加して実行するとデモプログラムのリストに「OpenCL (experimental)」が表示されOpenCLデモが実行可能になります。experimentalとあるのでまだ実験中のようです。

OpenCL.DLL読み込み失敗
VSプロジェクトでUNICODEを使用している場合、OpenCLの初期化時にDLLの読み込みに失敗してデモを実行できません。Bullet3のソースコード(clew.c)を修正する必要があります。

剛体の数や位置を変更


処理時間の測定

剛体の数を変えて処理時間を計測しました。

実行環境

Windows10(64bit)
CPU : A8-7650k
GPU : Radeon R7

計測結果
剛体の数 処理時間
2 10ms
126 13ms
1216 17ms
5626 20ms
12376 58ms
34376 128ms

Bullet2(CPU)では剛体5000個で140ms程なので、GPUの計算はかなり速いことがわかります。ただし、オーバーヘッドが10msほどあるため、数が少ないと効率がかなり悪くなっています。


まとめ

まだ開発中のためか問題が多いです。フリーズバグはプログラムやドライバーの修正でなんとこなるかもしれませんが、オーバーヘッドが大きすぎてゲームなどのリアルタイム計算に不向きです。安定したものなるには時間がかかりそうなので、しばらくは従来のBullet2を使ったほうがよさそうです。処理の高速化には Bullet Physicsのマルチスレッド対応について2(Bullet2.86 VS2017) のような描画などの他の処理と並列処理する方法が一番現実的だと思います。


Hello Bullet3OpenCL

剛体を追加して位置座標を出力するだけのプログラムです。まだ開発中、実験中のライブラリのため使用方法などが大きく変わる可能性があります。

広告

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

認証:数字を入力してください(必須) * Time limit is exhausted. Please reload CAPTCHA.