Jeśli drugi wirtualny rdzeń może uczestniczyć, gdy pierwszy utknie w innym przypadku, będzie lepiej niż nie , więc dostaniesz (przynajmniej) odrobinę dodatkowej pracy.
Powstaje pytanie: kiedy posiadanie dwóch różnych wątków powoduje pogorszenie jednego? Prognozowanie gałęzi i zależności między instrukcjami nie ulegną zmianie. Oczekiwanie na dostęp do pamięci teraz ... dwa wątki konkurują o dostęp do pamięci, zarówno pod względem wykorzystania pamięci podręcznej, jak i przepustowości.
Jeśli masz niektóre procesory działające z HT, a inne nie, czy to oznacza również, że przypisujesz określone wątki do jednego lub drugiego typu? Nie sądzę: twoje programy będą uruchamiać swoje wątki na losowych wirtualnych rdzeniach. Jak zatem pomaga podział konfiguracji? Ponieważ każdy procesor ma własną pamięć podręczną, jedyny wpływ na to ma przepustowość pamięci i ciężar spójności pamięci podręcznej.
Ogólnie rzecz biorąc, osiągasz punkt, w którym posiadanie czegoś więcej, co możesz zrobić, jest droższe niż pozwalanie niektórym jednostkom wykonawczym CPU na bezczynność. Nie zależy to bezpośrednio od liczby wątków, ale od tego, co robią wątki oraz szczegółowej architektury pamięci i niuansów wydajności różnych komponentów.
Nie ma prostej odpowiedzi. Nawet mając na uwadze konkretny program, maszyna może różnić się od ludzi opowiadających o swoich doświadczeniach.
Musisz spróbować sam i zmierzyć, co jest najszybsze, dzięki tej konkretnej pracy na tej konkretnej maszynie. I nawet wtedy może się to zmieniać wraz z aktualizacjami oprogramowania i zmianami użytkowania w miarę upływu czasu.
Spójrz na tom 3 magnum opus Anger . Jeśli przyjrzysz się uważnie konkretnemu procesorowi, możesz znaleźć ograniczające zasoby wśród głębokiego potoku wielu kroków niezbędnych do wykonania kodu. Musisz znaleźć przypadek, w którym nadmierne zaangażowanie powoduje jego wolniejsze działanie, a nie podejmowanie większej ilości pracy. Ogólnie oznaczałoby to pewien rodzaj buforowania; i gdzie zasób jest współużytkowany przez wątki.
Co oznacza miernik procesora: raportuje cały czas, który nie jest spędzony na uruchomieniu wątku bezczynności. Oba wątki logiczne przypisane do rdzenia nie będą bezczynne, nawet jeśli rzeczywista praca wykonana na jednym z nich może być niewielka. Czas spędzony z rurociągiem utknął na kilka cykli, aż wyniki są gotowe, pamięć jest pobierana, operacje atomowe są ogrodzone itp. Podobnie nie powoduje, że wątek jest odkładany jako „nie gotowy”, więc nie będzie bezczynny, a czas nadal pokazuje się jako używany. Oczekiwanie na pamięć RAM nie będzie wyświetlane jako bezczynne. Tylko coś takiego jak We / Wy spowoduje zablokowanie wątku i zatrzymanie czasu ładowania w jego kierunku. Muteks systemu operacyjnego w ogóle to zrobi, ale wraz z rozwojem systemów wielordzeniowych nie jest to już pewne, ponieważ „spinlock” nie sprawi, że nić powróci na półkę.
Tak więc miernik procesora 100% nie oznacza, że wszystko płynnie płynie, jeśli procesor często utknął w oczekiwaniu na pamięć. Mniejsza liczba rdzeni logicznych pokazujących 90% mogłaby równie dobrze wykonywać więcej pracy, ponieważ kończy się chrupanie liczb i teraz czeka na dysku.
Więc nie martw się miernikiem procesora. Spójrz na rzeczywistych postępów, tylko .