W rozmowie z administratorem sieci wspomniałem, że mój komputer jest dwurdzeniowy. Powiedział mi, że tak nie jest. Przywołałem menedżera zadań, przeszedłem do zakładki wydajności i pokazałem mu, że istnieją dwa osobne wykresy wykorzystania procesora. W domu mam czterordzeniową maszynę i ma ona cztery wykresy. Powiedział, że na tej konkretnej maszynie są dwa wykresy z powodu hiperwątkowości. Kiedyś miałem procesor pentium 4 z bardzo krótkim wątkiem, ale nigdy w pełni nie rozumiałem, co to znaczy. Jaka jest różnica między hiperwątkowością a dwurdzeniowym? A jak powiedzieć, który masz?
źródło
Hiperwątkowość polega na tym, że twój procesor udaje, że ma 2 fizyczne rdzenie procesora, ale ma tylko 1 i dodatkowe śmieci.
Chodzi o to, że wiele razy podczas wykonywania kodu w procesorze występują części bezczynności procesora. Uwzględniając dodatkowy zestaw rejestrów procesora, procesor może zachowywać się tak, jakby miał dwa rdzenie, a tym samym używać wszystkich części procesora równolegle. Gdy oba rdzenie muszą używać jednego elementu procesora, jeden rdzeń oczywiście czeka. Dlatego nie może zastąpić dwurdzeniowych i takich procesorów.
Zobacz także: To pytanie
źródło
Hyperthreading jest tańszą i wolniejszą alternatywą niż posiadanie podwójnych rdzeni
Intel Manual Volume 3 System Programming Guide - 325384-056US wrzesień 2015 8,7 "Intel Hyper-Threading Technology ARCHITEKTURA" opisuje HT krótko. Zawiera następujący schemat:
TODO jest wolniejszy o ile procent średnio w rzeczywistych aplikacjach?
Hyperthreading jest możliwy, ponieważ współczesne pojedyncze rdzenie procesorów wykonują już wiele instrukcji jednocześnie za pomocą potoku instrukcji https://en.wikipedia.org/wiki/Instruction_pipelining
Potok instrukcji jest rozdziałem funkcji wewnątrz jednego rdzenia, aby zapewnić, że każda część obwodu jest używana w danym momencie: czytanie pamięci, instrukcje dekodowania, wykonywanie instrukcji itp.
Hyperthreading oddziela funkcje dalej za pomocą:
pojedynczy backend, który faktycznie uruchamia instrukcje za pomocą potoku.
Dwurdzeniowy ma dwa backendy, co tłumaczy większy koszt i wydajność.
dwa interfejsy, które pobierają dwa strumienie instrukcji i porządkują je w taki sposób, aby zmaksymalizować wykorzystanie potokowego pojedynczego zaplecza przez unikanie zagrożeń .
Dwurdzeniowy miałby również 2 interfejsy, po jednym dla każdego backendu.
Zdarzają się przypadki skrajne, w których zmiana kolejności instrukcji nie przynosi żadnych korzyści, dzięki czemu hiperwątkowanie jest bezużyteczne. Ale powoduje znaczną poprawę średniej.
Dwa hiperwątki w jednym rdzeniu współużytkują kolejne poziomy pamięci podręcznej (TODO ile? L1?) Niż dwa różne rdzenie, które współużytkują tylko L3, patrz:
Interfejs, który każdy hyperthread udostępnia systemowi operacyjnemu, jest podobny do interfejsu rzeczywistego rdzenia i oba mogą być kontrolowane osobno. To
cat /proc/cpuinfo
pokazuje mi 4 procesory, mimo że mam tylko 2 rdzenie z 2 hiperwątkami każdy.Systemy operacyjne mogą jednak skorzystać z wiedzy, które hiperwątki znajdują się w tym samym rdzeniu, aby uruchomić wiele wątków danego programu na jednym rdzeniu, co może poprawić wykorzystanie pamięci podręcznej.
Ten film LinusTechTips zawiera beztroskie wyjaśnienie nietechniczne: https://www.youtube.com/watch?v=wnS50lJicXc
źródło