Які ядра відповідають кожному "CPU" нижче?
Якщо припустити, що у нас Core 1, 2, 3 і 4, CPU4 і CPU5 являють собою ядро 3.
Чи (скажімо) CPU 6 та CPU 7 нижче представляють одне ядро; HT і справжнє ядро?
Ніякої різниці немає - обидва вони мають фізичні апаратні інтерфейси до центрального процесора, логічний інтерфейс реалізований апаратно (детальніше див. Технічну таблицю процесорів Intel Core, том 1 ). В основному кожне ядро має два відокремлених підрозділи виконання, але воно ділиться деякими загальними ресурсами між ними. Ось чому в певних випадках гіперреалізація може фактично знизити продуктивність.
Якщо, наприклад, CPU 6 являє собою справжнє ядро, а CPU 7 - ядро HT, чи потік, призначений просто лише CPU7, отримає лише залишені ресурси реального ядра? (якщо ядро виконує інші завдання)
Дивись вище. Потік, призначений ТОЛЬКО CPU6 або ТІЛЬКИ CPU7, буде виконуватись з точно однаковою швидкістю (якщо припустимо, що потік працює однаково, а інші ядра в процесорі простоюють). Windows знає про процесори з підтримкою HT, і планувальник процесів враховує ці речі.
Чи керується гіперпотоком повністю всередині процесора таким чином, що потоки переміщуються всередині? Якщо так, то чи є це в області процесора чи в основній області застосування? Приклад: Якщо CPU 6 і 7 являють собою одне ядро, чи не має значення, якому процесу призначено, оскільки процесор призначить ресурси відповідно до запущеної нитки?
І те й інше. Сам апаратний апарат не планує, на яких ядрах запускати програми, це робота операційної системи. Однак сам процесор відповідає за обмін ресурсами між фактичними блоками виконання, а Intel диктує, як можна писати код, щоб зробити це максимально ефективним.
Я зауважую, що тривалі процеси з однопотоковими процесами трохи стрибають навколо ядер, принаймні на думку менеджера завдань. Чи означає це, що присвоєння процесу одному ядру трохи покращить продуктивність (уникаючи контекстних комутаторів та недійсних кеш-пам'яті тощо)? Якщо так, то чи можу я знати, що я не призначаю "просто віртуальне ядро"?
Це нормальна поведінка, і ні, віднесення її до єдиного ядра не покращить продуктивність. Це означає, що якщо ви з якоїсь причини хочете переконатися, що один процес виконується лише на одному фізичному ядрі, призначте його будь-якому одному логічному процесору.
Причина, що процес "відскакує", пов'язана з планувальником процесів. Це нормальна поведінка, і ви, швидше за все, відчуєте зниження продуктивності, обмеживши, які ядра процес може виконувати (незалежно від кількості потоків), оскільки планувальник процесів тепер повинен працювати більше, щоб все працювало з накладеними обмеженнями. Так, це покарання може бути незначним у більшості випадків, але суть полягає в тому випадку, якщо у вас немає підстав для цього, не варто !