Ilosc rdzeni procesora.

0

Witam.

Mam problem z odczytaniem ilosci rdzeni w procesorze. Probowaem to zrobic za pomoca:

void WINAPI GetSystemInfo(
  __out  LPSYSTEM_INFO lpSystemInfo
);

Niestety problem polega na tym ze metoda ta pokazuje ilosc rdzeni 2 dla procesorow z HyperThreading Technology (czy jak to sie tam pisze). Czy istnieje jakas inna metoda odczytania ilosci rdzeni procesora?

0

Do czego jest ci to potrzebne ? Bo jeśli chcesz mieć pewność że jest to procesor dwurdzeniowy a nie np. dwa procesory albo procesor HTT, to musisz porównać jego model z jakąś bazą w której będziesz miał spisane wszystkie dwurdzeniowe modele. A na rynek wychodzą coraz to nowe modele i baza musiała by być aktualizowana.

Systemowi operacyjnemu nie robi różnicy czy fizycznie jest to jeden dwurdzeniowy, czy dwa jednordzeniowe, czy jeden udający dwa (HTT). Liczy się to, że funkcjonalnie są to 2 logiczne procesory.

Funkcja GetProcessAffinityMask wywołana z parametrem 0 zwróci maskę bitową - każdy bit ustawiony na 1 oznacza jeden logiczny procesor. Tą maskę całą lub "odchudzoną" można użyć w funkcjach SetProcessAffinityMask/SetThreadAffinityMask.

0
adf88 napisał(a)

Do czego jest ci to potrzebne ? Bo jeśli chcesz mieć pewność że jest to procesor dwurdzeniowy a nie np. dwa procesory albo procesor HTT.

Do przerobienia pewnego algorytmu zeby sie wykonywal wspolbierznie na wielu rdzeniach (1...n). Potrzebna mi wiedza o ilosci wiedzy zebym mogl odalac odpowiednia ilosc watkow jednoczesnie.

adf88 napisał(a)

to musisz porównać jego model z jakąś bazą w której będziesz miał spisane wszystkie dwurdzeniowe modele. A na rynek wychodzą coraz to nowe modele i baza musiała by być aktualizowana.

Takie rozwiazanie odpada.

adf88 napisał(a)

Systemowi operacyjnemu nie robi różnicy czy fizycznie jest to jeden dwurdzeniowy, czy dwa jednordzeniowe, czy jeden udający dwa (HTT). Liczy się to, że funkcjonalnie są to 2 logiczne procesory.

Mi robi roznice, HTT nie osiagnie takiej wydajnosci jak 2 czy 4 rdzeniowy procek a w przypadku odpalenia 2 watkow algorytmu moze nawet spowolnic.

adf88 napisał(a)

Funkcja GetProcessAffinityMask wywołana z parametrem 0 zwróci maskę bitową - każdy bit ustawiony na 1 oznacza jeden logiczny procesor. Tą maskę całą lub "odchudzoną" można użyć w funkcjach SetProcessAffinityMask/SetThreadAffinityMask.

Tu jest wlasnie pies pogrzebany. Patrz wyzej.

0
EgonOlsen napisał(a)

HTT nie osiagnie takiej wydajnosci jak 2 czy 4 rdzeniowy procek a w przypadku odpalenia 2 watkow algorytmu moze nawet spowolnic
Eee przesadzasz. Jak ktoś ma procek HTT i mu wydjaność spada to już jego problem. Może sobie wyłączyć HTT. W ogólnym przypadku jest wzrost wydajnośći ok. 15%-20%.
HTT jest wycofywane, teraz są wielordzeniowce. Możesz spokojnie sobie zrobić bazę procesorów HTT. W przypadku wykrycia poinformować usera "Wykryrto procesor z technologią HyperThreading. Prztetwarzać równollegle ?". Ale ja bym się nie przejmował, bo raczej będzie wzrost wydajności niż spadek.

0
adf88 napisał(a)

W przypadku wykrycia poinformować usera "Wykryrto procesor z technologią HyperThreading. Prztetwarzać równollegle ?".

Hmmm... lub jakis checkbox, jak wylaczone to zawsze przetwarzanie w jednym watku, jak wlaczone to wykrywanie jest prockow i przetwarzanie rownolegle. Tak to zrobimy ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1