トップページ > 過去ログ > 記事閲覧
マルチスレッド化の注意点
名前:wisteria 日時: 2010/03/28 17:21

DXライブラリ(ver.3以降)を使用して3Dゲームを作成しているのですが、 そこそこのマルチコアCPUを積んだPC(WindowsVista+Core2 Duo 2GHz)でもFPSが30〜40程度と非常に重いので、 マルチスレッド化を企んでいます。 DXライブラリを使用した、マルチスレッドのプログラムを作成する際 注意しなければならない点はございますでしょうか? 環境は, WindowsXPHEsp2 or Windows7HPにて BCC5.5でコンパイルしています。 またスレッドの作成にはCreateThread 関数を用いようとしていますが、 別の関数のほうがよい、というのがございましたら、教えていただければ幸いです。

Page: 1 |

Re: マルチスレッド化の注意点 ( No.1 )
名前:管理人 日時:2010/03/29 06:45

DXライブラリを使用したマルチスレッドのプログラムを作成する際に注意すべきことは ・サウンド・画像・モデルの読み込み関数や描画や描画の設定を行う関数を複数のスレッドから同時に呼ばないこと ・入力関係の関数を複数のスレッドから同時に呼ばないこと ・サウンド関係の関数を複数のスレッドから同時に呼ばないこと です、 モデルに関して言えば MV1LoadModel、MV1DrawModel、MV1DrawMesh、MV1DrawFrame は、複数のスレッドから 呼ぶのは避ける必要があります( つまり描画を行うスレッドは一つにする必要があります ) MV1SetPosition や MV1SetAttachAnimTime や当たり判定などの描画を行わない関数は複数の スレッドから同時に呼んでも問題ありません スレッドの作成は CreateThread で良いと思います ところで、フレーム落ちの原因はCPUである、ということは確定しているのでしょうか? もし描画しているモデルが複雑でポリゴン数も多い、ということになりますとGPUが原因で フレーム落ちしているかもしれません、その場合はマルチスレッドにしてCPUの負荷を下げても フレーム落ちは改善されません
Re: マルチスレッド化の注意点 ( No.2 )
名前:wisteria 日時:2010/03/31 16:02

主に、読み込み中...みたいなのを表示しておいて、 スレッドで読み込む、ということおよび Zバッファにより描く順番を気にしなくてよいため、 地面と建物を同時に描いていくということに 使おうと考えていたのですが、後者は不可能なのですね。 また、モデルは使わず、 すべてDrawPolygonIndexed3Dを用いています。 処理落ちに関しては、GPUはあくまで描画処理の補助をする存在だと 思っていたので、マザーボードに乗っているようなものなら ほとんど役に立たず描画処理はCPUがやっているものと思っていました。
Re: マルチスレッド化の注意点 ( No.3 )
名前:管理人 日時:2010/04/05 01:51

マザーボードに載っているような非力なGPUでも、GPUが非力だからといって代わりに CPU が処理しているというわけではありませんので、GPUが担当する処理が原因で フレーム落ちが発生してしまっている場合はCPU側の負荷を幾ら下げてもGPUの負担は減らず フレーム落ちを防ぐことはできません
Re: マルチスレッド化の注意点 ( No.4 )
名前:wisteria(解決) 日時:2010/04/05 09:38

ありがとうございました。 GPUもアクセラレータという補助的なものなのではなく、描画処理を主体的に(?)行っているのですね。

Page: 1 |