-
1. Data: 2009-09-16 12:33:56
Temat: Hyper Threading
Od: mgk <m...@w...pl>
Mam algorytm ktory nie skaluje sie liniowo. Przyrost wydajnosci to
pierwiastek z liczby procesorow. Czyli na 4 rdzeniach jest 2 razy. Na
2 jest jakies 1.4 raza.
Algorytm ten nie korzysta z operacji zmiennoprzecinkowych.
Mam obawy co do HT.
Z tego co wiem o HyperThreading to dziala to tak ze na 1 rdzeniu
procesor wykonuje 2 watki. Ale tylko wtedy gdy jeden watek
wykorzystuje operacje zmiennoprzecinkowe a drugi staloprzecinkowe.
Jesli sie myle to prosze o skorygowanie. Tak gdzies czytalem. Nie
dotarlem nigdzie jak to jest do konca.
Ale jesli tak jest to oznacza ze nie ma sensu tworzyc 2 watkow na 1
rdzen HT.
Czyli jesli moja aplikacja dzieli zadanie na tyle watkow ile mam
procesorow, a system mi zglasza bledna ich liczbe poniewaz na 4ro
rdzeniowym procesorze HT system mi zglosi 8 procesorow moja aplikacja
moze dzialac wolniej niz jakby bylo 4 zwykle rdzenie bez HT.
Przykladowo na 2 rdzeniowym CPU moja aplikacja przyspiesza 1.4 raza
wzgledem 1 rdzeniowego. Gdy procesor jest 1 rdzeniowy z HT i jesli HT
dziala tak jak napisalem to aplikacja przyspiesza 1.4/2 raza... czyli
0.7 czyli spowolni...
Czy moje obawy sa sluszne?
W przypadku algorytmow ktore skaluja sie liniowo to pal licho ze
narobimy tyle watkow ile jest logicznych procesorow a nie fizycznych
rdzeni. Ale w tym przypadku juz chyba nie jest to "pal licho".
Chociaz nie wiem czy na HT gdy jeden watek wykonuje np kopiowanie
zmiennej z pamieci do rejestru, albo wrzucenie na stos, a drugi watek
wykonuje dodawanie na ALU to czy nie wykonaja sie te operacje
rownolegle?
-
2. Data: 2009-09-17 05:40:20
Temat: Re: Hyper Threading
Od: Adam Kłobukowski <a...@k...pl>
mgk wrote:
> Mam algorytm ktory nie skaluje sie liniowo. Przyrost wydajnosci to
> pierwiastek z liczby procesorow. Czyli na 4 rdzeniach jest 2 razy. Na
> 2 jest jakies 1.4 raza.
To nie jest liniowo.
> Algorytm ten nie korzysta z operacji zmiennoprzecinkowych.
>
> Mam obawy co do HT.
> Z tego co wiem o HyperThreading to dziala to tak ze na 1 rdzeniu
> procesor wykonuje 2 watki. Ale tylko wtedy gdy jeden watek
> wykorzystuje operacje zmiennoprzecinkowe a drugi staloprzecinkowe.
> Jesli sie myle to prosze o skorygowanie. Tak gdzies czytalem. Nie
> dotarlem nigdzie jak to jest do konca.
>
> Ale jesli tak jest to oznacza ze nie ma sensu tworzyc 2 watkow na 1
> rdzen HT.
>
> Czyli jesli moja aplikacja dzieli zadanie na tyle watkow ile mam
> procesorow, a system mi zglasza bledna ich liczbe poniewaz na 4ro
> rdzeniowym procesorze HT system mi zglosi 8 procesorow moja aplikacja
> moze dzialac wolniej niz jakby bylo 4 zwykle rdzenie bez HT.
>
> Przykladowo na 2 rdzeniowym CPU moja aplikacja przyspiesza 1.4 raza
> wzgledem 1 rdzeniowego. Gdy procesor jest 1 rdzeniowy z HT i jesli HT
> dziala tak jak napisalem to aplikacja przyspiesza 1.4/2 raza... czyli
> 0.7 czyli spowolni...
>
> Czy moje obawy sa sluszne?
>
> W przypadku algorytmow ktore skaluja sie liniowo to pal licho ze
> narobimy tyle watkow ile jest logicznych procesorow a nie fizycznych
> rdzeni. Ale w tym przypadku juz chyba nie jest to "pal licho".
>
> Chociaz nie wiem czy na HT gdy jeden watek wykonuje np kopiowanie
> zmiennej z pamieci do rejestru, albo wrzucenie na stos, a drugi watek
> wykonuje dodawanie na ALU to czy nie wykonaja sie te operacje
> rownolegle?
Zależy od procesora, może być różnie. Najlepiej odpytywać OS o ilość
dostępnych rdzeni i tego się trzymać.
Adam Kłobukowski
-
3. Data: 2009-09-17 07:54:29
Temat: Re: Hyper Threading
Od: mgk <m...@w...pl>
No wlasnie o to chodzi ze jak odpytac o ilosc dostepnych rdzeni?
Na procesorze HT system Ci zwroci ilosc logicznych procesorow a nie
rdzeni. Czyli na 4ro rdzeniowym HT system zwroci wartosc 8 a nie 4. I
w tym problem.
-
4. Data: 2009-09-18 06:36:31
Temat: Re: Hyper Threading
Od: Bernard <b...@e...net>
mgk wrote:
> Mam algorytm ktory nie skaluje sie liniowo. Przyrost wydajnosci to
> pierwiastek z liczby procesorow. Czyli na 4 rdzeniach jest 2 razy. Na
> 2 jest jakies 1.4 raza.
> Algorytm ten nie korzysta z operacji zmiennoprzecinkowych.
>
> Mam obawy co do HT.
> Z tego co wiem o HyperThreading to dziala to tak ze na 1 rdzeniu
> procesor wykonuje 2 watki. Ale tylko wtedy gdy jeden watek
> wykorzystuje operacje zmiennoprzecinkowe a drugi staloprzecinkowe.
> Jesli sie myle to prosze o skorygowanie. Tak gdzies czytalem. Nie
> dotarlem nigdzie jak to jest do konca.
Mylisz się. Po prostu procesor wykonuje na przemian instrukcje obu
wątków. Robi to dość elatycznie - kiedy jeden strumień instrukcji
dostaje czkawki, wykonuje się ten drugi.
> Ale jesli tak jest to oznacza ze nie ma sensu tworzyc 2 watkow na 1
> rdzen HT.
>
> Czyli jesli moja aplikacja dzieli zadanie na tyle watkow ile mam
> procesorow, a system mi zglasza bledna ich liczbe poniewaz na 4ro
> rdzeniowym procesorze HT system mi zglosi 8 procesorow moja aplikacja
> moze dzialac wolniej niz jakby bylo 4 zwykle rdzenie bez HT.
Jedne aplikacje dziają lepiej z SMT, inne bez. Multimedia i masowe
obliczenia mogą być sprawniejsze bez HT.
> Przykladowo na 2 rdzeniowym CPU moja aplikacja przyspiesza 1.4 raza
> wzgledem 1 rdzeniowego. Gdy procesor jest 1 rdzeniowy z HT i jesli HT
> dziala tak jak napisalem to aplikacja przyspiesza 1.4/2 raza... czyli
> 0.7 czyli spowolni...
>
> Czy moje obawy sa sluszne?
Może są, może nie. Wszystko zależy od zależności międzyinstrukcyjnych i
od sposobu korzystania z kieszeni.
> Chociaz nie wiem czy na HT gdy jeden watek wykonuje np kopiowanie
> zmiennej z pamieci do rejestru, albo wrzucenie na stos, a drugi watek
> wykonuje dodawanie na ALU to czy nie wykonaja sie te operacje
> rownolegle?
Dowolne operacje przy HT wykonują się quasi-równolegle. Z grubsza
intuicyjnie można to opisać tak, że procesor w kolejnych cyklach
wykonuje na przemian instrukcje dwóch wątków, i są to zupełnie dowolne
instrukcje.
-
5. Data: 2009-09-18 06:49:05
Temat: Re: Hyper Threading
Od: "Mariusz Marszałkowski" <b...@N...gazeta.pl>
mgk <m...@w...pl> napisał(a):
> Mam algorytm ktory nie skaluje sie liniowo. Przyrost wydajnosci to
> pierwiastek z liczby procesorow. Czyli na 4 rdzeniach jest 2 razy. Na
> 2 jest jakies 1.4 raza.
> Algorytm ten nie korzysta z operacji zmiennoprzecinkowych.
Nigdy nie zrobiłem żadnych dokładnych testów ani pomiarów.
Ale na oko wygląda to tak, jakbym przy jednym wątku miał jeden procesor
wydany na 100%, a przy dwóch wątkach tak jakbym miał dwa procesory wydajne
na 50-80%. Oczywiście mowa o komputerze z jednym rdzeniem zawierającym HP.
Pozdrawiam
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
6. Data: 2009-09-18 07:22:37
Temat: Re: Hyper Threading
Od: mgk <m...@w...pl>
> Dowolne operacje przy HT wykonują się quasi-równolegle. Z grubsza
> intuicyjnie można to opisać tak, że procesor w kolejnych cyklach
> wykonuje na przemian instrukcje dwóch wątków, i są to zupełnie dowolne
> instrukcje.
No tak, ale czy wykonywanie na przemian trwa 2 razy dluzej? :) czy
jest to rownolegle.
Z tego co napisales to zrozumialem ze dla dowolnych instrukcji da sie
czasem wykonac je rownolegle. No to OK. Niestety nie mam procesora HT
by sprawdzic jak moj program sie zachowuje na nim.
-
7. Data: 2009-09-18 07:24:52
Temat: Re: Hyper Threading
Od: mgk <m...@w...pl>
> > Mam algorytm ktory nie skaluje sie liniowo. Przyrost wydajnosci to
> > pierwiastek z liczby procesorow. Czyli na 4 rdzeniach jest 2 razy. Na
> > 2 jest jakies 1.4 raza.
> > Algorytm ten nie korzysta z operacji zmiennoprzecinkowych.
> Ale na oko wygląda to tak, jakbym przy jednym wątku miał jeden procesor
> wydany na 100%, a przy dwóch wątkach tak jakbym miał dwa procesory wydajne
> na 50-80%. Oczywiście mowa o komputerze z jednym rdzeniem zawierającym HP.
Poprostu algorytm ten z natury jest szeregowy. Podzial zadan na kilka
watkow wymusza liczenie wiecej z tego powodu ze rdzen 2, 3, 4 musza
zaczynac juz liczyc gdy nie ma jeszcze wynikow z rdzen 1, a te wyniki
przyspieszyly by dalsze obliczenia. Spadek predkosci wynika z samego
rozciecia szeregowych zaleznych od siebie obliczen na kilka grup nie
zaleznych.
-
8. Data: 2009-09-18 10:26:34
Temat: Re: Hyper Threading
Od: "Mariusz Marszałkowski" <b...@N...gazeta.pl>
mgk <m...@w...pl> napisał(a):
> Poprostu algorytm ten z natury jest szeregowy. Podzial zadan na kilka
> watkow wymusza liczenie wiecej z tego powodu ze rdzen 2, 3, 4 musza
> zaczynac juz liczyc gdy nie ma jeszcze wynikow z rdzen 1, a te wyniki
> przyspieszyly by dalsze obliczenia. Spadek predkosci wynika z samego
> rozciecia szeregowych zaleznych od siebie obliczen na kilka grup nie
> zaleznych.
Domyślam się, mój problem przy zrównoleglaniu ma podobne cechy
Mogę zaproponować dwie rzeczy:
1) Opracować lepszy algorytm:
a) o mniejszej zlożoności algorytmicznej
b) o mniejszym narzucie liniowym (lepiej zapisany)
c) dający się lepiej zrównoleglać
2) Program instalacyjny może uruchomić program na różnych ilościach
wątków, zmierzyć czasy i zaproponować użytownikowi konfigurację,
która działa najszybciej.
Pozdrawiam
P.S.
Co oblicza ten algorytm?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
-
9. Data: 2009-09-18 16:53:48
Temat: Re: Hyper Threading
Od: Wojciech Jaczewski <w...@o...pl>
mgk wrote:
>> Dowolne operacje przy HT wykonują się quasi-równolegle. Z grubsza
>> intuicyjnie można to opisać tak, że procesor w kolejnych cyklach
>> wykonuje na przemian instrukcje dwóch wątków, i są to zupełnie dowolne
>> instrukcje.
>
> No tak, ale czy wykonywanie na przemian trwa 2 razy dluzej? :) czy
> jest to rownolegle.
Procesor ma - przykładowo - trzy jednostki obliczeń zmiennoprzecinkowych,
trzy jednostki stałoprzecinkowych i kilka jednostek spełniających inne
funkcje.
Jeśli mamy na przykład fragment programu wykonujący obliczenia
zmiennoprzecinkowe takie, że do wykonania kolejnej operacji potrzebny jest
wynik poprzedniej, a jednocześnie nie ma w tej sekwencji skoków
warunkowych, to taki wątek będzie w stanie dać zajęcie tylko jednej
jednostce zmiennoprzecinkowej. Dwie pozostałe jednostki zmiennoprzecinkowe
może wtedy wykorzystać drugi wątek.
Podobnie będzie, jeśli się trafi, że jeden wątek akurat zapragnął wykonywać
operacje zmiennoprzecinkowe, drugi - stałoprzecinkowe.
Z kolei zmniejszanie wydajności wskutek HT wynika z tego, że każdy wątek
potrzebuje korzystać z pamięci, często z całkowicie różnych obszarów. Poza
tym, że daną przepustowość pamięci trzeba rozdzielić na dwa wątki, zwiększy
się prawdopodobieństwo, że oczekiwany blok pamięci nie znajduje się w cache
procesora.
Nie wiem, czy istnieje jakakolwiek reguła pomagająca oszacować, na ile
przyda się w danym wypadku HT. Niestety jak zwykle jedynie słuszną jest
rada: zmierzyć.
-
10. Data: 2009-09-18 16:56:56
Temat: Re: Hyper Threading
Od: Wojciech Jaczewski <w...@o...pl>
Dorzucę jeszcze odnośnik do pewnego artykułu.
W zasadzie od razu powinienem go dać, zamiast samemu próbować to wyjaśnić:
http://arstechnica.com/old/content/2002/10/hyperthre
ading.ars