タイトル | : Re^2: MQOモデルのスレッド読み込みについて |
投稿日 | : 2011/12/16(Fri) 17:51 |
投稿者 | : ナゾビーフ |
> e3dhsp3_LoadByNewThread.hspで試したところ
> 描画しながら読み込めるので
> マルチスレッドには間違いないと思います。
すみません。
ProcessExplorerで確認したところ、
確かにスレッドはちゃんと起動しているようです。
ですが、ためしに1万5千ポリゴンのMQO読み込みを20スレッド起動して
みましたが、CPU使用率が50%(1コア)を超えることはありませんでした。
この処理は1スレッド立てるだけでもCPUを1コア占有してしまうほどの処理です。
流石にOSのスケジューリングだけが原因とは思えないのです。
そして今分かったことなのですが、
E3Dを使用中はどのようなスレッドをいくつ作成しても
強制的に1コアしか使わないようになるようです。(自前の関数もです)
ためしに以下のような関数を作成して、スレッドとして20個起動してみました
static unsigned __stdcall threadTest(LPVOID pParam){
int i;
While(true){
for(int j=0; j<10; j++){
i= j*j+i*i;
}
Sleep(1)
}
return 0;
}
最適化が働かないようにデバッグモードでテストしました。
(中身の処理にはまったく意味はありません)
E3Dを使用せずに、新しく作成したC++のプロジェクトでこれを行うと
CPU使用率は80%程度を中心に大きく振れました。
ですが、SimpleMotionの中で全く同じ処理を行うとCPU使用率は50%を超えません。
恐らくプロセスが使用するCPUのコアを限定するような関数が
まだどこかで呼ばれているんじゃないかと思うのですが、どうでしょうか…?
ttp://msdn.microsoft.com/ja-jp/library/cc429334.aspx
↑これなんかが近いと思います。