Author: Tony Werten
Date: 05:41:08 01/15/04
Go up one level in this thread
On January 14, 2004 at 23:25:52, Robert Hyatt wrote:
>On January 14, 2004 at 16:20:37, Frank Quisinsky wrote:
>
>>Hi there,
>>
>>OS=Windows Professional SP1a:
>>
>>Crafty.rc
>>mt=1 ... or 2, 4 possible ... of course 3 isn't possible :-)
>>computer
>>hash 192M
>>hashp 24M
>>cache 4M
>>resign 9
>>tbpath=c:\Chess\nalimov
>>egtb
>>
>>---
>>Crafty 19.09:
>>Total nodes: 85506521
>>Raw nodes per second: 1030199
>>Total elapsed time: 83
>>SMP time-to-ply measurement: 7.710843
>>---
>>Crafty 19.09 SMP MT=1
>>Total nodes: 85506521
>>Raw nodes per second: 1017934
>>Total elapsed time: 84
>>SMP time-to-ply measurement: 7.619048
>>---
>>Crafty 19.09 SMP MT=2
>>Total nodes: 91665964
>>Raw nodes per second: 1553660
>>Total elapsed time: 59
>>SMP time-to-ply measurement: 10.847458
>>---
>>Crafty 19.09 SMP MT=4
>>Total nodes: 100226709
>>Raw nodes per second: 2132483
>>Total elapsed time: 47
>>SMP time-to-ply measurement: 13.617021
>>
>>Not easy to understand for me:
>>MT=1 = 1017934 = + ~ 53% = MT2
>>MT=2 = 1553660 = + ~ 37% = MT4
>>MT=4 = 2132483
>>
>>MT=1 to MT=2 must be only Multi-Threading from the first processor!
>>20-30% but not 53%
>
>
>You are not understanding hyper-threading. You have two physical
>processors, and each is divided into two logical processors, giving you
>what _appears_ to be 4 cpus. When you run two threads, how do you
>guarantee that each thread runs on a different physical CPU? Answer:
>You can't. So you might get both threads on one physical processor
>or one on each physical processor, or they might bounce between the
>two states.
>
>The moral:
>
>don't _ever_ run two threads on a SMT-enabled dual. 3 is fine, as obviously
>two will be on one physical processor and one will be on the other. Four is
>fine. But _not_ two.
>
>As operating systems become aware of this, they will fix it. There are linux
>patches that solve this, for example. I don't know about windows.
I think this should do the trick:
The SetThreadIdealProcessor function is used to specify a preferred processor
for a thread. The system schedules threads on their preferred processors
whenever possible.
DWORD SetThreadIdealProcessor(
HANDLE hThread, // handle to the thread
DWORD dwIdealProcessor // ideal processor number
);
Parameters
hThread
Handle to the thread whose preferred processor is to be set. The handle must
have the THREAD_SET_INFORMATION access right associated with it. For more
information, see Thread Objects.
dwIdealProcessor
Specifies the number of the preferred processor for the thread. A value of
MAXIMUM_PROCESSORS tells the system that the thread has no preferred processor.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.