1

Windows 7 と VC++ 2010 を使用しています。これは 32 ビット アプリケーションです。

レンダラーをマルチスレッドで動作させようとしていますが、マルチスレッドを使用しない場合よりも遅くなることが判明しました。

リストにレンダリング コマンドを追加するメイン スレッドと、これらのコマンドのレンダリングを行うワーカー スレッドが必要です。

これはすべて発生し、画面にうまく描画されますが、そうするとfpsが少なくなります...

Fraps のベンチマーク ツールを使用して、このデータを取得しました。

Time はベンチマークされた時間で、この場合は 30 秒です。

最小、最大、平均はすべて FPS 値です。

マルチスレッドの場合:

    Frames, Time (ms), Min, Max, Avg
     28100,     30000, 861,1025, 936.667

マルチスレッドなし:

Frames, Time (ms), Min, Max, Avg
 21483,     30000, 565, 755, 716.100

ここにいくつかの疑似コードがあります (関連するイベント関数呼び出しを含む):

Main Thread:
    Add render comands to queue
    ResetEvent (renderCompletedEvent);
    SetEvent (renderCommandsEvent);
    WaitForSingleObject (renderCompletedEvent, INFINITE);

Render Thread:
    WaitForSingleObject (renderCommandsEvent, INFINITE);
    Process commands
    SetEvent (renderCompletedEvent);
    ResetEvent (renderCommandsEvent);
4

2 に答える 2

3

なぜこれがより速いと期待するのですか?

1 つのスレッドでコマンドを作成し、もう 1 つのスレッドでシグナルを作成し、それが終了するのを待ちます。これは、最初のスレッドでそれを実行するのと同じくらい時間がかかりますが、オーバーヘッドが増えるだけです。

マルチスレッドを利用するには、両方のスレッドが同時に何かを実行していることを確認する必要があります。

于 2012-08-10T13:41:32.167 に答える