マルチスレッドプログラミング相談室 その4

このエントリーをはてなブックマークに追加
467デフォルトの名無しさん
Pentium XE 840 ではHyper-Threading有効となっているので、
デュアルコア×2スレッドで4スレッド同時処理ができますが、
HTの論理コアを判別する方法はないでしょうか?

SetThreadAffinityMask() を利用して1つのコアを
スレッドに対して独占的に割り当てた場合にHT論理コアだと
処理速度向上が余り望めません。

もしくはWindowsでCPU番号(コア番号)が
どのように割り当てられるかご存知ないですか?

単純に↓とか?
CPU1-Core1-Main
CPU1-Core1-HT
CPU1-Core2-Main
CPU1-Core2-HT

Opteron だと?
CPU1-Core1
CPU1-Core2
CPU2-Core1
CPU2-Core2
468デフォルトの名無しさん:2006/05/23(火) 18:35:25
>>467
何か勘違いしてないか?
469デフォルトの名無しさん:2006/05/23(火) 22:13:13
>>468
何か勘違いしてないか?
470デフォルトの名無しさん:2006/05/26(金) 02:28:01
>>467
それはOSの仕事
471デフォルトの名無しさん:2006/05/26(金) 09:01:15
SetThreadAffinityMask(hThread,0x01);
SetThreadAffinityMask(hThread,0x02);
SetThreadAffinityMask(hThread,0x04);
SetThreadAffinityMask(hThread,0x08);
とした時にどのコアが使用されるか知りたいってことじゃねーの?
472デフォルトの名無しさん:2006/05/26(金) 11:26:01
>>467
http://www.intel.com/cd/ids/developer/asmo-na/eng/269421.htm

SetThreadAffinityMaskでCPUにスレッドを固定した後、
当該スレッド APIC ID を入手して core id と SMT ID を入手すればよい。

用語が混乱してるようだけど、Coreっていうのはホントのcoreのことで、
コアの中で演算回路等を共有して独立したCPU風に振舞うのはlogical
cpu とか SMT とか言う。

例えばDualCore でコアあたり2つのSMTをサポートするCPUの論理CPU構成は
Core1-SMT1 / Core1-SMT2 / Core2-SMT1 / Core2-SMT2 だ、
とこんな風に言う。