カテゴリー別アーカイブ: Thread

std::shared_ptrが内部で確保するメモリについての調査&スレッド対応について

C++11で追加されたstd::shared_ptrやstd::unique_ptrなどのポインタを管理するテンプレートクラスは本当に便利です。ですが、内部で確保されるメモリや処理について考えておかないと思わぬところで処理速度の低下やメモリ不足に陥ります。特にゲームプログラムのメモリ管理は厳しくなる傾向があるため、shared_ptrが内部で確保するメモリのサイズや回数について調べてみました。ちなみにunique_ptrはほぼデメリットはありません。生ポインタと同じサイズ、includeとテンプレート処理でコンパイルがほんの少し遅くなる程度です。
※VisualStudio2017 x86プラットフォームでの調査 他の環境では結果が異なる場合があります

続きを読む std::shared_ptrが内部で確保するメモリについての調査&スレッド対応について

Bullet Physicsのマルチスレッド対応について2(Bullet2.86 VS2017)

前回Bullet2.87のマルチスレッド機能の検証を行いましたが、思ったほど効果が得られませんでした。今回はスレッド使用の方針を変えます。Bullet内部のマルチスレッド機能ではなく、外部で用意したスレッドでstepSimulation関数を実行することで並列処理を行いました。結果は、一部デバッグ機能で問題がありましたが問題なく動作し、条件は限定されますが3コアでの並列実行により2倍以上の高速化が実現できました。ゲームプログラムでの描画処理、ゲーム判定用物理計算、物理エフェクトの3つ処理を想定した検証プログラムを作成します。

続きを読む Bullet Physicsのマルチスレッド対応について2(Bullet2.86 VS2017)

Bullet Physicsのマルチスレッド対応について(Bullet2.87 VS2017)

Bullet2.86は対応途中で2.87から対応するようです。Githubから開発中の2.87を取得してマルチスレッド対応について調べてみました。結論から言えば、ゲームプログラムでは使えそうにありません。できるだけマルチスレッドに有利な状況を作っても、それほど処理時間は短縮されませんでした。大量のオブジェクトを扱う3DCGレンダリングなどで効果を発揮するかもしれません。
検証は4コアCPU(AMD A8-7650k)で行いました。CPUの種類、メーカー、PC環境で結果が大きく変わる可能性があります。また、使い方が間違っているだけかもしれません。

続きを読む Bullet Physicsのマルチスレッド対応について(Bullet2.87 VS2017)