SetThreadIdealProcessor ne force pas une thread à s'executer sur un cpu/core particulier, c'est seulement une indication. Pas plus d'ailleurs que cpuid ne retourne de numero logique puisque celà n'a pas de sens localement mais seulement au niveau de l'OS.
Pour effectivement forcer l'execution sur un cpu/core/noeud - ou plusieurs - il faut toucher le masque d'affinité, cf SetProcessAffinityMask/SetThreadAffinityMask. Notons qu'xp n'est que partiellement NUMA-aware, neanmoins les allocations, par exemple via VirtualAlloc, serons affectées; la localité de la mémoire est une excellente raison pour tripoter le masque d'affinité. Et puis ce n'est pas comme si le scheduler de windows était un modele du genre: il a une facheuse et lamentable tendance au pingpong.
PS: les k8 (athlon64 & co) utilisent un modèle NUMA et non un basique SMP comme les Intel, ce qui n'est pas sans consequences.
Message édité par tbp le 11-10-2006 à 17:06:44