-
1. Data: 2011-01-16 16:47:06
Temat: Programowanie wielowątkowe w architekturze NUMA
Od: Fil <f...@p...onet.pl>
Witam!
Mam program wielowątkowy, który poprawnie pracuje na kompie (laptop):
CPU: Intel i7 X920 2GHz, 16MB RAM (4 rdzenie + HT = 8 CPU logicznych w
architekturze UMA), OS: Windows 7 64bit Prof.
W programie odpalam 8 wątków (lub 16 wątków), które intensywnie
korzystają ze wspólnej, dwuwymiarowej tablicy liczb rzeczywistych.
Wszystkie wątki ładnie obciążają każdy z rdzeni w 100%. Można ustawiać
dowolnie koligację na poszczególnych rdzeniach - śmiga aż miło.
Następnie ten sam program odpalam w systemie:
8 x CPU: AMD Opteron 8493SE 2.8GHz , 64MB RAM (8 x 6 rdzeni = 48 CPU
logicznych w architekturze NUMA, 8 węzłów po 6 CPU w każdym), OS:
Windows Server 2008 R2 Enterprise (płyta Tyan n4250QE S4985 + M4985).
I tu klapa. W programie odpalam 48 wątków, analogicznie jak wyżej. Wątki
nie są przydzielane przez system do poszczególnych, logicznych CPU tylko
(takie mam wrażenie) są przełączane pomiędzy CPU tak, jakby stanowiły
program jednowątkowy. Czyli: po ustawieniu koligacji na 1 rdzeń mam
obciążenie tego rdzenia na 100%, natomiast jak ustawię na 2 rdzenie to
obciążenie rozkłada się po 50%, itd. Zatem obciążenie dla całego
programu rozkładane jest pomiędzy rdzenie tak jakby był on jednowątkowy.
Czy zna ktoś na to receptę? Jedyne wyjście jakie przychodzi mi do głowy
to przeprogramowanie algorytmu i dostosowanie go do NUMA, co nie będzie
proste :(.
A przy okazji: może ktoś zna jakiś link do dobrej dokumentacji o
programowaniu w NUMA pod Winde?
Fil.
-
2. Data: 2011-01-16 17:45:10
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Michoo <m...@v...pl>
W dniu 16.01.2011 17:47, Fil pisze:
> Następnie ten sam program odpalam w systemie:
> 8 x CPU: AMD Opteron 8493SE 2.8GHz , 64MB RAM (8 x 6 rdzeni = 48 CPU
> logicznych w architekturze NUMA, 8 węzłów po 6 CPU w każdym), OS:
> Windows Server 2008 R2 Enterprise (płyta Tyan n4250QE S4985 + M4985).
>
> I tu klapa. W programie odpalam 48 wątków, analogicznie jak wyżej.
Używanie współdzielonej tablicy w architekturze NUMA to może być
samobójstwo.
Powinno dać się ustawić Twój program na jednym procesorze fizycznym
("node" w nomenklaturze MS) - wtedy będziesz miał 6 rdzeni w SMP. Coś
więcej wymaga zmian w kodzie.
> Czy zna ktoś na to receptę? Jedyne wyjście jakie przychodzi mi do głowy
> to przeprogramowanie algorytmu i dostosowanie go do NUMA, co nie będzie
> proste :(.
Tylko czytasz czy też zapisujesz do tej tablicy? Może starczy ją
powielić dla każdego MMU?
--
Pozdrawiam
Michoo
-
3. Data: 2011-01-16 18:10:43
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Fil <f...@p...onet.pl>
W dniu 2011-01-16 18:45, Michoo pisze:
> W dniu 16.01.2011 17:47, Fil pisze:
>> Następnie ten sam program odpalam w systemie:
>> 8 x CPU: AMD Opteron 8493SE 2.8GHz , 64MB RAM (8 x 6 rdzeni = 48 CPU
>> logicznych w architekturze NUMA, 8 węzłów po 6 CPU w każdym), OS:
>> Windows Server 2008 R2 Enterprise (płyta Tyan n4250QE S4985 + M4985).
>>
>> I tu klapa. W programie odpalam 48 wątków, analogicznie jak wyżej.
> Używanie współdzielonej tablicy w architekturze NUMA to może być
> samobójstwo.
Tak też sądzę.
> Powinno dać się ustawić Twój program na jednym procesorze fizycznym
> ("node" w nomenklaturze MS) - wtedy będziesz miał 6 rdzeni w SMP. Coś
> więcej wymaga zmian w kodzie.
To mnie nie satysfakcjonuje - za mało rdzeni.
>> Czy zna ktoś na to receptę? Jedyne wyjście jakie przychodzi mi do głowy
>> to przeprogramowanie algorytmu i dostosowanie go do NUMA, co nie będzie
>> proste :(.
> Tylko czytasz czy też zapisujesz do tej tablicy? Może starczy ją
> powielić dla każdego MMU?
Tylko czytam dane.
Tak sądziłem, że nie da się tu wiele zrobić.
Zaczynam powoli oswajać się z myślą o przerabianiu kodu... niestety.
Potrzebne mi są tylko jakieś dobre materiały z programowania pod NUMA w
Windows. Jak rezerwować pamięć w konkretnych węzłach? Jak szybko
"rozklonować" dane na poszczególne węzły? itp.
Fil.
-
4. Data: 2011-01-16 18:25:33
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Michoo <m...@v...pl>
W dniu 16.01.2011 19:10, Fil pisze:
> W dniu 2011-01-16 18:45, Michoo pisze:
>> Tylko czytasz czy też zapisujesz do tej tablicy? Może starczy ją
>> powielić dla każdego MMU?
>
> Tylko czytam dane.
> Tak sądziłem, że nie da się tu wiele zrobić.
>
> Zaczynam powoli oswajać się z myślą o przerabianiu kodu... niestety.
> Potrzebne mi są tylko jakieś dobre materiały z programowania pod NUMA w
> Windows. Jak rezerwować pamięć w konkretnych węzłach? Jak szybko
> "rozklonować" dane na poszczególne węzły? itp.
Zobacz to i okolice:
http://msdn.microsoft.com/en-us/library/aa363804%28v
=vs.85%29.aspx
Nie jestem "windowsiany" więc Ci tu więcej nie pomogę.
--
Pozdrawiam
Michoo
-
5. Data: 2011-01-16 19:22:19
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Fil <f...@p...onet.pl>
W dniu 2011-01-16 19:25, Michoo pisze:
> W dniu 16.01.2011 19:10, Fil pisze:
>> W dniu 2011-01-16 18:45, Michoo pisze:
>>> Tylko czytasz czy też zapisujesz do tej tablicy? Może starczy ją
>>> powielić dla każdego MMU?
>>
>> Tylko czytam dane.
>> Tak sądziłem, że nie da się tu wiele zrobić.
>>
>> Zaczynam powoli oswajać się z myślą o przerabianiu kodu... niestety.
>> Potrzebne mi są tylko jakieś dobre materiały z programowania pod NUMA w
>> Windows. Jak rezerwować pamięć w konkretnych węzłach? Jak szybko
>> "rozklonować" dane na poszczególne węzły? itp.
> Zobacz to i okolice:
> http://msdn.microsoft.com/en-us/library/aa363804%28v
=vs.85%29.aspx
>
> Nie jestem "windowsiany" więc Ci tu więcej nie pomogę.
>
Dzięki - na początek dobry zbiorek funkcji do pobawienia się. Pobrałem z
netu już troszkę materiałów i biorę się do pracy.
-
6. Data: 2011-01-16 22:07:53
Temat: Re: Programowanie wielow?tkowe w architekturze NUMA
Od: A.L. <l...@a...com>
On Sun, 16 Jan 2011 17:47:06 +0100, Fil <f...@p...onet.pl>
wrote:
>
>A przy okazji: może ktoś zna jakiś link do dobrej dokumentacji o
>programowaniu w NUMA pod Winde?
>
>Fil.
czy ejst dobra, to nie wiem, ale coskolwiek jest:
http://terboven.spaces.live.com/blog/cns!EA3D3C75648
3FECB!163.entry
Uwage: sa 4 czesci tego tekstu na tym samym blogu
Microsoft tez pisze to i owo
http://msdn.microsoft.com/en-us/library/aa363804(v=v
s.85).aspx
AMD tez pisze
http://developer.amd.com/pages/1162007106.aspx
A.L.
-
7. Data: 2011-01-18 11:25:33
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Sebastian Kaliszewski <s...@r...this.informa.and.that.pl>
Fil wrote:
> Witam!
>
> Mam program wielowątkowy, który poprawnie pracuje na kompie (laptop):
> CPU: Intel i7 X920 2GHz, 16MB RAM (4 rdzenie + HT = 8 CPU logicznych w
> architekturze UMA), OS: Windows 7 64bit Prof.
>
> W programie odpalam 8 wątków (lub 16 wątków), które intensywnie
> korzystają ze wspólnej, dwuwymiarowej tablicy liczb rzeczywistych.
> Wszystkie wątki ładnie obciążają każdy z rdzeni w 100%. Można ustawiać
> dowolnie koligację na poszczególnych rdzeniach - śmiga aż miło.
>
> Następnie ten sam program odpalam w systemie:
> 8 x CPU: AMD Opteron 8493SE 2.8GHz , 64MB RAM (8 x 6 rdzeni = 48 CPU
> logicznych w architekturze NUMA, 8 węzłów po 6 CPU w każdym), OS:
> Windows Server 2008 R2 Enterprise (płyta Tyan n4250QE S4985 + M4985).
>
> I tu klapa. W programie odpalam 48 wątków, analogicznie jak wyżej. Wątki
> nie są przydzielane przez system do poszczególnych, logicznych CPU tylko
> (takie mam wrażenie) są przełączane pomiędzy CPU tak, jakby stanowiły
> program jednowątkowy. Czyli: po ustawieniu koligacji na 1 rdzeń mam
> obciążenie tego rdzenia na 100%, natomiast jak ustawię na 2 rdzenie to
> obciążenie rozkłada się po 50%, itd. Zatem obciążenie dla całego
> programu rozkładane jest pomiędzy rdzenie tak jakby był on jednowątkowy.
Cóś mi się wydawało, że w windzie (od 2000 lub XP) jest możliwość
przypisania CPU affinity per wątek. Choć mogę się kompletnie mylić bo
dawno tam nie zaglądałem.
> Czy zna ktoś na to receptę? Jedyne wyjście jakie przychodzi mi do głowy
> to przeprogramowanie algorytmu i dostosowanie go do NUMA, co nie będzie
> proste :(.
Jak duży masz working set? I jak insensywnie korzystasz z danych
(inaczej: jaki masz "bandwidth" per operacja i jak czasochłonna jest
taka operacja)[*]. Jak się w cache nie mieści i ma wymagania więcej niż
1 jedna nowa (z pamięci, nie cacheowana) liczba double na ok 200
podstawowych operacji FP), to bez rozrzucenia danych pomiędzy węzły
będzie wooolno.
> A przy okazji: może ktoś zna jakiś link do dobrej dokumentacji o
> programowaniu w NUMA pod Winde?
tu nie pomogę, ale chyba inni coś podwiedzieli
pzdr
\SK
--
"Never underestimate the power of human stupidity" -- L. Lang
--
http://www.tajga.org -- (some photos from my travels)
-
8. Data: 2011-01-18 19:47:16
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Fil <f...@p...onet.pl>
W dniu 2011-01-18 12:25, Sebastian Kaliszewski pisze:
> Cóś mi się wydawało, że w windzie (od 2000 lub XP) jest możliwość
> przypisania CPU affinity per wątek. Choć mogę się kompletnie mylić bo
> dawno tam nie zaglądałem.
Jak najbardziej, ale nie tutaj leży problem. Sądzę, że należy umieszczać
odpowiednie dane w odpowiednich częściach RAM, aby poszczególne
(logiczne) CPU miały "swoją" wersję danych... Przypisanie (affinity)
może się również przydać, ale samo w sobie nie rozwiąze problemu.
> Jak duży masz working set? I jak insensywnie korzystasz z danych
> (inaczej: jaki masz "bandwidth" per operacja i jak czasochłonna jest
> taka operacja)[*]. Jak się w cache nie mieści i ma wymagania więcej niż
> 1 jedna nowa (z pamięci, nie cacheowana) liczba double na ok 200
> podstawowych operacji FP), to bez rozrzucenia danych pomiędzy węzły
> będzie wooolno.
Dane to tablice dwuwymiarowe z max. wymiarami 20tys. wierszy x 10tys.
kolumn liczb double, czyli 800MB danych nie licząc tablic wskaźników
spinających to wszystko i jeszcze kilka drobnych struktur ułatwiających
dostęp do danych.
Cache odpada.
Liczba odczytów per operacja bardzo duża.
Mam już troszkę materiałów na ten temat - m.in. linki podane we
wcześniejszych postach - wielkie dzięki wszystkim.
Przydałaby się może opinia jakiegoś praktyka, który takie kompy
programował - bo diabeł zawsze tkwi w szczegółach...
A po za tym jeszcze takie lamerskie (może) pytanie - jest sens zjechać z
dokładnością obliczeń z double do float na rzecz większej szybkości?
Obliczenia dotyczą problemów sterowania, rozpoznawania obrazów,
klasyfikacji, itp. czyli obszar tzw. computational intelligence.
Pozdrawiam,
Fil.
-
9. Data: 2011-01-19 08:46:58
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Mariusz Marszałkowski <m...@g...com>
On 18 Sty, 20:47, Fil <f...@p...onet.pl> wrote:
> A po za tym jeszcze takie lamerskie (może) pytanie - jest sens zjechać z
> dokładnością obliczeń z double do float na rzecz większej szybkości?
Dokladna odpowiedz zajelaby kilkaset stron... a ja nigdy w to nie
wnikalem
zbyt dokladnie. Powiem tylko, ze w kilku ostatnich testach jakie
zrobilem,
w jezyku C/C++, kompilatorach VC i GCC i na kilku nowych procesorach,
ku mojemu wielkiemu zdziwieniu, nie zaobserwowalem zadnego wyraznego
przyspieszenia po przejsciu z double na float. Ale moze trafilem na
jakies
specyficzne przypadki... nie wiem.
Pozdrawiam
-
10. Data: 2011-01-19 10:54:35
Temat: Re: Programowanie wielowątkowe w architekturze NUMA
Od: Michoo <m...@v...pl>
W dniu 19.01.2011 09:46, Mariusz Marszałkowski pisze:
> w jezyku C/C++, kompilatorach VC i GCC i na kilku nowych procesorach,
> ku mojemu wielkiemu zdziwieniu, nie zaobserwowalem zadnego wyraznego
> przyspieszenia po przejsciu z double na float. Ale moze trafilem na
> jakies
> specyficzne przypadki... nie wiem.
Chyba specyficzne. Ja wprawdzie ostatnio robiłem testy z rok temu, ale
wychodziło, że przyspieszenie jest znaczne. Szybsze przerzucanie danych
pamięć-cache, szybsze wykonywanie instrukcji. Po kolokwium poszukam -
może mam gdzieś wyniki z vtune.
--
Pozdrawiam
Michoo