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):