2010/8/22:本掲示板は閲覧専用です。データが一部破損しておりますがご了承ください。
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
587 / 2351 ←次へ | 前へ→

【1785】Re:SetThreadAffinityMask() の実装について
←back ↑menu ↑top forward→
 oT  - 05/9/18(日) 14:36 -

引用なし
パスワード
   >1. SetThreadAffinityMask() の mask フラグについて
>SetThreadAffinityMask() の第2パラメータはビットフラグで扱うのではないかと思うのですが、所々、数値で表されているように見えます(cpuinfo.cpp の実装辺り)。2 processor の場合、問題は無いと思うのですが、4 processor 以上の場合、意味合いが異なる気がします。

 for( i = 1; i <= Number; i++ ){
#ifdef _WIN32
 DWORD mask;
 if( IsNT() ){
 mask = (DWORD)SetThreadAffinityMask(GetCurrentThread(),i);
 if( i >= 2 ){
   Sleep(DualWaitTime);
 }
#endif
上の部分ですよね。
 mask = (DWORD)SetThreadAffinityMask(GetCurrentThread(),1<<(i-1));
が、正解ではないかと思います。
結果論ですが2プロセッサまでは結果同一、それに加えて
3プロセッサ以上で使用している人が殆どいなかった事が、そのまま残った理由かと思います。(どっかで見たコードも同じだった記憶があります。)

>2. SetProcessAffinityMask()/GetProcessAffinityMask() を使用しない理由について
>何か理由があって SetProcessAffinityMask() を使用していないのであれば理由を教えていただけないでしょうか。

特定プロセッサ・リソース(TSC/MSR etc)の取得/変更が主目的と思われますので、どちらを
使っても大差無いと思いますが...
逆にSetProcessAffinityMask()/GetProcessAffinityMask()を使った場合の利点はなんでしょうか?
瞬間的なプロセッサの変更が主目的の場合、ProcessよりもSetThread変更程度に留めて
おいた方がオーバーヘッドが小さいような気がしますが どうでしょう?
ソフトの性格上”マルチプロセッサでのパフォーマンスを追求”と言った事が趣旨ではない
と思われますので、結局の処 どちらでも変わりないと思います。

---
後は、作者の方のお考えを伺いましょう。
2,497 hits

【1784】SetThreadAffinityMask() の実装について Mc.N 05/9/17(土) 16:21
【1785】Re:SetThreadAffinityMask() の実装について oT 05/9/18(日) 14:36
【1786】Re:SetThreadAffinityMask() の実装について ひよひよ 05/9/18(日) 16:32
【1788】Re:SetThreadAffinityMask() の実装について ひよひよ 05/9/19(月) 8:45
【1791】Re:SetThreadAffinityMask() の実装について Mc.N 05/9/19(月) 13:29
【2194】Re:SetThreadAffinityMask() の実装について ひよひよ 07/7/27(金) 0:12
【2195】Re:SetThreadAffinityMask() の実装について ひよひよ 07/7/27(金) 0:16

587 / 2351 ←次へ | 前へ→
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃ホーム  
ページ:  ┃  記事番号:   
54596
(SS)C-BOARD v3.8(とほほ改ver2.1) is Free