Intel® Moderncode for Parallel Architectures
Support for developing parallel programming applications on Intel® Architecture.
1696 Discussions

Windows 7 only scheduling four threads on eight-hyperthread system?

ssilsbee
Beginner
388 Views
I have a Core i7 950 system with four hyperthreaded physical cores (8 hardware threads total) running 64-bit Windows 7. My application creates eight task threads, but often it seems that only four of these threads get scheduled at any one time, even though there is enough work to keep all eight threads busy. Originally I thought this might be a bug in my task system, but now I think perhaps Windows is simply choosing to schedule only one thread per physical core. Is this expected behavior? Could anyone point me to a document describing how Windows 7 schedules hyperthreaded CPUs (if such information is publicly available)?

GPA Screenshot (eight task threads, but only four active at any one time):



Thanks!
0 Kudos
4 Replies
SergeyKostrov
Valued Contributor II
388 Views
Quoting ssilsbee
I have a Core i7 950 system with four hyperthreaded physical cores (8 hardware threads total) running 64-bit Windows 7.
My application creates eight task threads, but often it seems that only four of these threads get scheduled at any one time...

Did you try to calla Win32 API function SetThreadAffinityMask ( for every thread ) after threads created?

Best regards,
Sergey
0 Kudos
Vladimir_P_1234567890
388 Views
I'm almost next to Sergey,
but suggest to no set affinify but check affinity settings inside your code. AFAIK Win7 schedules threads to phisical cores then to logical cores then to next numa package. But for 4 working threads every thread can be migrated within a core from one logical unit to another. So if your caseIt looks that somebody set affinity settings for your process explicitly.
--Vladimir
0 Kudos
SergeyKostrov
Valued Contributor II
388 Views
I'm almost next to Sergey,
but suggest to no set affinify but check affinity settings inside your code. AFAIK Win7 schedules threads to phisical cores
then to logical cores then to next numa package. But for 4 working threads every thread can be migrated within a core from
one logical unit to another. So if your caseIt looks that somebody set affinity settings for your process explicitly.
--Vladimir


Hi everybody,

That'sinteresting point of view. I justlooked at MSDN and I don't see a Win32 APIfunction like GetThreadAffinityMask.
Also, this is what another topic on MSDN says:

...

Multiple Processors
The system uses a symmetric multiprocessing (SMP) model to schedule threads on multiple processors. With
this model, any thread can be assigned to any processor. Therefore, scheduling threads on a computer
with multiple processors is similar to scheduling threads on a computer with a single processor. However,
the scheduler has a pool of processors, so that it can schedule threads to run concurrently. Scheduling is still
determined by thread priority. However, on a multiprocessor computer, you can also affect scheduling by
setting thread affinity and thread ideal processor, as discussed here.

Thread Affinity
Thread affinity forces a thread to run on a specific subset of processors. Use the SetProcessAffinityMask
function to specify thread affinity for all threads of the process. To set the thread affinity for a single thread,
use the SetThreadAffinityMask function. The thread affinity must be a subset of the process affinity. You
can obtain the current process affinity by calling the GetProcessAffinityMask function.
Setting thread affinity should generally be avoided, because it can interfere with the scheduler's ability to
schedule threads effectively across processors. This can decrease the performance gains produced by
parallel processing. An appropriate use of thread affinity is testing each processor.

Thread Ideal Processor
When you specify a thread ideal processor, the scheduler runs the thread on the specified processor when
possible. Use the SetThreadIdealProcessor function to specify a preferred processor for a thread. This
does not guarantee that the ideal processor will be chosen, but provides a useful hint to the scheduler.
...

From my point of view it looks like there is some limitation, possibly CPU licensing,of a Windows operating system
user 'ssilsbee' uses.

Best regards,
Sergey

0 Kudos
tomorrowwillbefine
388 Views

Microsoft Office 2010 is actually the newest software from microsoft office 2010 keys Microsoft Corporation introduced in the last year. Its leading aims tend to be to catch the present business requirements and to be on top of every competition with regard to the international market criteria. This can be a very good idea to obtain Microsoft Office 2010 Key immediately to maintain norton antivirus keys yourself up-to-date and to present you with the vast qualified progress opportunities for success. Microsoft Office 2010 is available in both 32-bit and 64-bit editions, but attention please the two are not able to co-exist on the very same personal computer. All of the Office 2010 editions are kaspersky antivirus keys suitable for Windows XP SP3, Windows Vista and Windows 7.

www.keyyeah.com

0 Kudos
Reply