おちゃっこLAB Easy3D 過去ログ(投稿不可)
[記事リスト] [新着記事] [ワード検索] [過去ログ] [管理用]

タイトル 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
↑これなんかが近いと思います。


- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)