eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Programowanie wielowątkowe w architekturze NUMA
Ilość wypowiedzi w tym wątku: 11

  • 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

strony : [ 1 ] . 2


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: