Bullet 2.76 Physics SDK マニュアル
15. 並列処理: SPU, CUDA, OpenCL
Cell SPU / SPURS の最適化
Bullet衝突判定および物理演算は、Cell SPUに最適化されています。すなわち、衝突判定コードは複数のSPUプロセッサで並列処理できるように、また衝突判定のコードやデータはSPUのローカル・ストア・サイズである256kbに収まるように書かれています。これを使う場合は、SPUに処理させる特別な衝突ディスパッチャ(SpuGatheringCollisionDispatcher)を使用してください。Bullet/src/BulletMultiThreadedにこれが実装されています。
BulletのPlaystation3に最適化されたバージョンについては、PS3 DevnetのSonyデベロッパーサポートにお問い合わせください。
統合マルチスレッド
SPU並列処理に使った方法を、マルチコアプロセッサなど他のマルチスレッド環境に利用することができます。すなわち、マルチコアプロセッサを利用して、Windows上でSPUコードをデバッグすることができます。SPUを使用しないマルチスレッド環境では、memcpyによるDMA転送を仮想化しており、各スレッドはメモリに配置された256kbの'ローカルストア'を利用することになります。
Win32 Thread、pthread、sequential threadのサポート
Win32のthread、pthread、sequential threadを使って、SPUタスクが実行可能です。デモの中に、この準備作業が示されています。Demos/ConcaveDemo と ConvexDecompositionDemo にある#define USE_PARALLEL_DISPATCHERをご覧ください。
IBM Cell SDK 3.1, libspe2 SPU への最適化
IBMは、CellブレードやPS3 Linux platformのlibspe2を使ってSPUにアクセスするCell SDKを提供しています。libspe2スレッドは、SpuLibspe2Supportにより利用可能です。
libspe2バージョンをコンパイルする場合は、まずBullet/src/ibmsdkのmakeを実行してください。
その後、Bullet/src/BulletMultiThreadedディレクトリにてmake –f Makefile.original spu ppuを実行し、更にBullet/Demos/CellSpuDemo/ibmsdkディレクトリのmakeを実行してください。
btCudaBroadphase
現在、我々は物理パイプラインの一部のパフォーマンスを上げるために、CUDAやOpenCLの研究と開発を行っています。Extras/CUDA と Extras/CDTestFramework にて、この初期段階の研究内容を見ることができます。