Якщо другому віртуальному ядру дозволено робити внесок, коли першому в іншому випадку буде застряг, то краще, ніж ні , тож ви отримуєте (принаймні) трохи додаткової роботи.
Постає питання: коли наявність двох різних ниток призводить до того, що одна працює гірше? Прогнозування галузей та залежності між інструкціями не зміниться. Очікування доступу до пам'яті зараз ... два потоки конкурують за доступ до пам'яті, як за використання кешу, так і для пропускної здатності.
Якщо у вас є кілька процесорів, що працюють з HT, а інші - ні, це також означає, що ви присвоїте певні потоки одному чи іншому типу? Я думаю, що ні: ваші програми будуть запускати свої потоки на випадкових віртуальних ядрах. Тож як допомагає розділити конфігурацію? Оскільки кожен процесор має свій кеш-пам'ять, єдиний вплив пов'язаний з пропускною здатністю пам’яті та тягарем узгодженості кешу.
Загалом, ви досягнете точки , де маючи щось більше , ви могли б зробити це дорожче , ніж дозволити деякі виконавчі блоки процесора йдуть справи. Це залежить не від кількості потоків безпосередньо, а від того, що вони роблять , та детальної архітектури пам'яті та нюансів виконання різних компонентів.
Немає простої відповіді. Навіть маючи на увазі конкретну програму, машина може відрізнятися від роботи людей, що стосуються власного досвіду.
Ви повинні спробувати самостійно і виміряти, що найшвидше, з цією конкретною роботою на цій точній машині. І навіть тоді це може змінитися з оновленнями програмного забезпечення та зміною використання з часом.
Погляньте на том 3 магнуму опусу гніву . Якщо уважно подивитися на якийсь конкретний процесор, ви можете знайти обмежуючі ресурси серед глибокого конвеєра багатьох кроків, необхідних для виконання коду. Вам потрібно знайти випадок, коли перевиконання змушує його виконувати повільніше, на відміну від того, щоб не брати на себе більше роботи. Взагалі, це означало б якесь кешування; і де ресурс поділяється між потоками.
Що означає вимірювач процесора: він повідомляє про весь час, який не витрачається на пробіг холостого ходу. Обидва логічні потоки, призначені для ядра, не працюватимуть, хоча реальна робота над одним із них може бути невеликою. Час, витрачений на трубопровід, затримується протягом декількох циклів, поки результати не будуть готові, пам'ять витягнута, атомні операції обгороджені тощо. Так само не спричиняє, що нитка буде відкладена як "не готова", тому вона не буде простоювати, а час все ще відображається як використовується. Очікування в оперативній пам’яті не відображатиметься як простой. Тільки щось на зразок вводу / виводу змусить блокувати нитку і зупинить час зарядки до неї. Загалом, мутекс операційної системи зробить це так, але із зростанням багатоядерних систем це вже не є впевненою справою, оскільки "спінлок" не змусить нитку повернутися на полицю.
Таким чином, 100-відсотковий процесорний метр не означає, що все плавне плавання, якщо процесор часто затримується в очікуванні пам'яті. Менша кількість логічних ядер, що показують 90%, цілком може отримати більше роботи, оскільки вона закінчує хрускіт числа і тепер чекає на диску.
Тож не турбуйтеся про вимірювач процесора. Подивіться на реальні досягнення, тільки .