Ilość wątków a szybkość wykonywania operacji arytemtycznych na procesorze

0

Cześć, mam następujące pytanie. Niektóre procesory mają np. 4 rdzenie a 8 wątków. Czyli na jeden rdzeń przypadają 2 wątki.
Z tego co wiem każdy wątek wykonywany jest na zmianę. Czy w takim razie jeśli mam program, który wykorzystuje tylko 1 wątek to szybkość operacji będzie wolniejsza, niż na procesorze, na którym stosunek wątków do rdzeni jest taka sama?
Czy jeśli mam mniej wątków to działania - szczególnie arytmetyczne np. dodawanie, mnożenie wykonują się szybciej?

0
  1. Wątek nie działa na rdzeniu tylko na komputerze, może tak się stać że będzie obsługiwany przez wszystkie rdzenie (nie naraz oczywiście)
  2. Na jeden rdzeń może przypadać tysiące wątków.
0

Nie. Zauważ że nigdy nie jest tak że program wykonuje się "non stop" na procesorze. Chyba że masz jakiś system real-time, ale to raczej nie w tej sytuacji :)

0

nie należy mylić pojęcia „wątek” wynikającego z technologii Hyper-Threading, z pojęciem „wątek” w językach programowania.

Hyper-Threading to takie udawanie dodatkowych rdzeni: procesor ma naprawdę 4, ale każdy rdzeń składa się z dwóch „wątków” (ma dwa potoki wykonawcze), i otrzymujemy prawie efekt tak jakby tych rdzeni było 8.

Lepiej jednak, gdy procesor ma 8 prawdziwych rdzeni bez HT.

Na procesorze który ma „8 rdzeni” albo „8 wątków” rzeczywiście może jednocześnie działać osiem wątków rozumianych jako element języka programowania. Pozostałe wykonywane są na zmianę - zatrzymaniem jednego a wznowieniem innego zajmuje się system operacyjny.

Czy w takim razie jeśli mam program, który wykorzystuje tylko 1 wątek to szybkość operacji będzie wolniejsza, niż na procesorze, na którym stosunek wątków do rdzeni jest taka sama?
Pomijając obciążenie systemu innymi programami, dla jednowątkowego programu nie ma znaczenia czy procesor ma 1 rdzeń czy 256, bo korzysta i tak tylko z jednego.

0

Wielowątkowe rdzenie to nie tylko HT. Poza prockami Intela jest np SPARC T1, T2, T3 itd które nie wykonują wątków jednocześnie, a na zmianę. Jednak ta zmiana jest wykonywana nie poprzez system operacyjny i nie w ustalonym porządku, a przez sprzęt w wyniku wykonywania operacji o dużym opóźnieniu.

Generalnie dopóki ilość wątków z ciężkimi obliczeniami (tzn pomijając wątki obijające się) nie przekracza fizycznej ilości rdzeni to techniki sprzętowej wielowątkowości nie powinny wpływać na wydajność w żaden sposób (tzn nie jest to faktem, a raczej regułą). Dopiero gdy wątki muszą współdzielić zasoby to następuje spadek wydajności na pojedynczy wątek, ale z reguły wzrasta wydajność ogólnie (inaczej nie wpychano by sprzętowej wielowątkowości do procesorów).

Generalnie rozróżnianie pomiędzy rodzajami sprzętowej wielowątkowości jest dość śliskie. W SPARCach rdzenie wykonują jeden wątek na raz, ale dzięki sprytnemu przełączaniu następuje wzrost wydajności typowy dla techniki Hyper-Threading, gdzie jest duplikacja pewnych części rdzenia. Z drugiej strony w nowoczesnych GPU SIMDy także implementują sprzętowe przełączanie się między wątkami, a mimo tego żaden producent nie liczy shaderów wielokrotnie. Wszystko zależy od marketingu i rzeczywistej sprawności danego rozwiązania.

0

Dziękuję za odpowiedzi ;-).
Rzeczywiście trochę namieszałem z tymi wątkami :P.
Mylące jest to, że w tabeli Intela dot. nowych procesorów (link: http://www.benchmark.pl/uploads/backend_img/a/fotki_newsy/201212/PM/intel-haswell-procesory-specyfikacja%281%29.jpg) jest kolumna zatytułowana: cores/threads. Ja natomiast nie mam jeszcze wiedzy na temat programowania wielowątkowego :( więc trochę źle to zinterpretowałem.
Natomiast pytałem pod takim <ort>kontem [sam jesteś KONTO]</ort>, że gdybym chciał napisać program, który wykonuje bardzo dużo obliczeń - jakieś analizy (głównie mnożenie, dodawanie, wywoływanie funkcji etc.), których wykonanie zajmowałoby programowi np. 1h to zastanawiałem się, czy na te obliczenia miałby wpływ fakt, że procesor ma 4 rdzenie a 8 "wątków". Czy może lepiej byłoby wykonywać te obliczenia na procesorze, który ma 4 rdzenie i 4 wątki. Naturalnie różnice nawet jeśli wystąpią to będą minimalne, ale z ciekawości zapytałem ;-). Poza tym zdaję sobie sprawę, że część obliczeń można wykonywać na pozostałych rdzeniach/wątkach.
pozdrawiam

0

Poza tym zdaję sobie sprawę, że część obliczeń można wykonywać na pozostałych rdzeniach/wątkach.

@NowyM chyba czegoś nadal nie rozumiesz. System operacyjny przydziela czas procesora różnym procesom tylko na chwilę i cały czas jest to rotowane. Dzięki temu nawet jak masz 1 procesor i 1 rdzeń to możesz mieć uruchomione wiele programów. Bo każdy z tych programów dostaje procesor tylko na czas milisekund a potem musi "zabierac swoje zabawki" i pozwolic wykonać jakieś instrukcje innym procesom. Oczywiście jak masz wiele rdzeni to wtedy dany proces może praktycznie cały czas dostawać "slot na procesor". Co więcej to system decyduje na jakim rdzeniu / procesorze wykonywać dany proces. W efekcie twój program moze co chwila byc uruchomiony na różnym rdzeniu.

0

W efekcie twój program moze co chwila byc uruchomiony na różnym rdzeniu.
I o dziwo często tak jest, zapewne by równomiernie rozkładać wydzielanie ciepła przez procesor(y).

0

Dodam tylko od siebie spostrzeżenie co do tego rozkładu na rdzenie. Na Linuksie spotkałem się z tym, że "zmiana" rdzenia jest dopiero po jakimś czasie (zauważalnym). Chociaż był też jakiś patch, który to diametralnie zmieniał. Windows zapewne realizuje to inaczej. Oczywiście nie zmienia to faktu, że macie rację - w sumie to program może być wykonywany byle gdzie. Zastanawiam się tylko, czy taka zmiana jednostki wykonawczej nie wprowadza trochę większego opóźnienia?

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