Witam wszystkich,
mam następujący problem: w moim programie zawierającym 4 wątki rozkładam obliczenia na 4, ewentualnie 2 procesory. Zrobiłem to poprzez standardowe SetAffinityMask:
if (nCPUs>1)
{
int processor;
DWORD_PTR m_mask, result;
processor = i%nCPUs;
m_mask = 1<<processor;
result = SetThreadAffinityMask(threads[i], m_mask);
}
result zwraca poprawny wynik (poprzedni stan, czyli wszystkie procesory aktywne). Jeśli m_mask ustawiam na stała wartość na przykład na 4, wszystko zgodnie z oczekiwaniami uruchamia się na trzecim procesorze
Problem leży w tym, że kiedy dla każdego wątka przypisuje oddzielny procesor, rzeczywiście każdy procesor otrzymuje część pracy jak można by się było spodziewać, jednak sumaryczne obciążenie wynosi tyle, ile wynosiłoby dla jednego procesora. Innymi słowy dla komputera czterordzeniowego, mimo że działają wszystkie procesory, osiągam maksymalnie 25% wydajności a dla dwurdzeniowego 50% wydajności. Czy wie ktoś może czym jest to spowodowane?
używam Visual Studio 2005, Windows XP
Jacek