マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 題名: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: まるち
- 日時: 2006/12/26 16:07:26
- ID: 18629
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: オショウ
- 日時: 2006/12/28 0:01:39
- ID: 18648
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: まるち
- 日時: 2006/12/28 14:13:41
- ID: 18653
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: 渋木宏明(ひどり)
- URL: http://hidori.jp/
- 日時: 2006/12/29 11:49:17
- ID: 18659
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: オショウ
- 日時: 2007/01/01 21:13:53
- ID: 18666
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: マルチコア上でのWaitForSingleObjectのパフォーマンスについて
- 著者: まるち
- 日時: 2007/01/04 13:04:43
- ID: 18686
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[その他]
はじめまして。まるちと申します。
マルチコア(CoreDuo)上でのWaitForSingleObjectについて質問があります。
疑問は、マルチコアでプロセス間同期をした場合、CPUのパワーを使い切っていない?ということです。
現在、2つのプロセスを同期させて動作するアプリを開発しています。
プロセス間同期にはSetEvent、WaitForSingleObjectを使用しています。
プロセス間の同期はかなり頻繁に行われるので、同期部分のみを抽出し、
パフォーマンスを測定しました。
ソースコードは以下のようになります。
■exe1.cpp
void wait() {
HANDLE event_1 = CreateEvent(NULL, FALSE, FALSE, "event_1");
HANDLE event_2 = CreateEvent(NULL, FALSE, FALSE, "event_2");
for (int i = 0; i < 10000000; i++) {
WaitForSingleObject(event_1, INFINITE);
SetEvent(event_2);
}
}
■exe2.exe
HANDLE event_1 = CreateEvent(NULL, FALSE, FALSE, "event_1");
HANDLE event_2 = CreateEvent(NULL, FALSE, FALSE, "event_2");
for (int i = 0; i < 10000000; i++) {
SetEvent(event_1);
WaitForSingleObject(event_2, INFINITE);
}
}
シングルプロセッサ(Pentium4 2.8GHz)で実行させたところ、
10,000,000(1000万)回の同期に掛かる時間は44316ms(44秒)でした。
このとき、CPU負荷は100%(カーネル時間が80%程度)でした。
これはまぁ問題ないように思います。
マルチプロセッサ(CoreDuo 1.66GHz)で実行させたところ、
10,000,000(1000万)回の同期に掛かる時間は17141ms(17141秒)でした。
分からないのは、マルチコアの場合のCPU負荷が100%にならないことです。
上記のテストではCPU負荷は10%程度(CPU0、1共5%程度、ほぼカーネル時間)でした。
残りの90%程度はアイドルとなっていました。
なぜ、マルチコアの場合にはCPU負荷100%にならないのでしょうか?
CPUパワーをフルに使いきっていない理由がわかりません。
理由をご存知の方はご教示いただけたら幸いです。
また、どうにかしてCPU負荷100%にして高速化できるのであれば
その方法もお教えいただきたいと思います。
なお、上記のテストではCPUアフィニティは設定していません。
両プロセスを同じCPUに割り当てた場合はシングルプロセッサ同様
CPU負荷100%になることは確認しました。