Если мой процессор рассчитан на 2 ГГц и имеет 4 ядра, поддерживающие 8 потоков, все ли 8 потоков работают с номинальной тактовой частотой? Или они работают на 1 ГГц каждый, так как есть в два раза больше потоков, как ядер?
Потоки (по сравнению с ядрами) и номинальная тактовая частота процессора, каков эффект?
2 ответа
во-первых, ядра не имеют потоков. Поток является свойством процесса. Процессы и потоки-это вещи, которые создает операционная система, и процессор действительно не имеет прямого представления о них. Рекламодатели, которые утверждают, что их продукт имеет "четыре ядра и восемь потоков", используют вводящую в заблуждение терминологию.
ваши ядра имеют один или два логических процессоров. Что касается ОС, то логический процессор (LP) - это то, что может работать поток. Вы имейте по одному LP на ядро, если вы отключили hyperthreading в настройках прошивки или если ваш процессор не поддерживает HT. Два LPs на ядро, если он поддерживает HT. (Будущие процессоры x86/x64 могут реализовать более двух LPs на ядро.)
процессы в типичной системе Windows могут иметь, в совокупности, от сотен до тысяч потоков в любой момент времени. Количество потоков в каждом процессе можно увидеть на вкладке "Сведения" Диспетчера задач (называемой вкладкой "процессы" в Windows 7 и раньше) - просто включите колонку" потоки".
подавляющее большинство потоков в большинстве систем Windows" ждут " чего-то большую часть времени: они ждут завершения ввода-вывода, они ждут истечения таймеров, они ждут ошибки страницы, которая будет решена. Ожидающие потоки - Unix и Linux используют термин "заблокированные" - не пытаются использовать процессорное время и не используют его до тех пор, пока не произойдет то, чего они ждут.
большинство потоков, которые не ожидание либо "выполняется", что означает, что они фактически выполняются на логическом процессоре, либо" готово", что означает, что они будут работать, но все LP заняты другими потоками в данный момент. (Помимо Ready, Running и Wait, есть еще несколько государств, которые здесь не представляют интереса.)
все, что следует, касается только" запущенных " потоков.
Если у вас нет HT включен, или если у вас есть HT включен, но количество не-ожидающих потоков не выше чем количество ядер, то производительность должна быть идентична HT отключается. Большинство современных операционных систем, включая Windows, пытаются использовать только один LP на ядро, пока не будет запущено больше потоков, чем LPs. Это (обычно) не имело бы смысла помещать два потока в LPs одного ядра, оставляя оба LPs в другом простаивающем ядре. OSs не всегда на 100% успешны в этом, но большую часть времени они делают довольно хорошо.
Если два LP в ядре являются выполняющимися потоками, то сумма "вычислительной" работы двух потоков наверное быть несколько большей... вообще 40 до 60%... чем, если бы у вас было только одно ядро, что ОС было время нарезки между двумя потоками. И общая проделанная работа почти наверняка будет несколько меньше, чем если бы каждый поток работал на ядре сам по себе.
обратите внимание, что поток, который работает (насколько известно ОС), тем не менее может быть остановлен в своем LP. Распространенный случай это когда нить доступ к оперативной памяти, которая еще не находится в кэше CPU L1. Это занимает время, чтобы принести необходимые данные из кэша внешнего уровня, или из оперативной памяти, в кэш L1. В течение этого времени поток может не продвигаться в потоке инструкций, но Windows этого не знает. Микропрограмма ЦП может использовать это время для выполнения некоторой работы в другом LP в ядре. Или он может выполнить некоторую неупорядоченную работу для потока, ожидающего содержимого ОЗУ. ОС блаженно не знает о таких вещах, просто сообщает нить как "бег", и продолжает наращивать свое "время ЦП", хотя это может быть никакого прогресса в "стойло".
Так... мы можем запускать два потока одновременно через Hyperthreading, по одному на каждом LP в ядре. Но это не означает, что каждое ядро теперь имеет вычислительные ресурсы в два ядра ("единицы выполнения"), и не означает, что тактовая частота делится между двумя LP.
Hyperthreading использует тот факт, что большинство потоков не используйте все исполнительные модули ядра в полной мере. На самом деле, такая ситуация встречается довольно редко... И вот почему HT может делать так же хорошо, как это делает. HT позволяет второму потоку сосуществовать в процессоре одновременно в качестве первого, и в идеале этот второй поток может использовать исполняемые единицы, которых первый не использует. Это реализовано в микрокоде процессора.
на самом деле в прошивке процессора нет никакого различия между" первым "и" вторым " потоками; он не выбирает уделять одному больше внимания, чем другому. Прошивка просто пытается сохранить как можно больше исполнительных блоков процессора, насколько это возможно, получая как можно больше работы. Hyperthreading просто дает ему два потока команд для работы одновременно, тем самым используя больше единиц выполнения процессора больше времени.
прошивка процессора даже не знает, что ОС рассматривает как потоки, а также "переключатели контекста потока" вообще. Он просто знает, что у него есть два различные потоки команд для работы, каждый из которых имеет свой собственный набор значений для указателя инструкций, указателя стека и многих других архитектурных регистров. И иногда, по причинам, неизвестным прошивке, ОС приходит и меняет все это (переключатель контекста потока).
другое дело, что HT не делает, это реализовать какую-либо часть ОС понятие приоритета потока. Поэтому, если у вас есть два потока в LPs одного ядра HT'D, и ОС думает, что эти потоки имеют разные приоритеты, прошивка HT в процессоре не будет знать об этом. В частности, он не будет назначать блоки выполнения преимущественно потоку с более высоким приоритетом. ОС использует приоритеты потоков, чтобы решить, какие потоки выбрать для запуска на каких процессорах.
подробнее о том, как работает hyperthreading, см. в этой статье в Ars Technica. К сожалению, иллюстрации не появляются, так как они повторно разместили свой сайт-возможно, электронное письмо им исправит это. Подробнее о как Windows " планирует "потоки, см. главу" планирование"Внутренности Windows Соломон, Руссинович, et al.
в принципе, ваша операционная система видит количество потоков как количество ядер. Когда один поток не на полную мощность, он использует другой поток больше, и ваш компьютер быстрее. (Я думаю)
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]