Все намного сложнее, чем в те дни, когда одна инструкция процессора выполнялась за один такт.
Теперь для каждой инструкции есть конвейер , состоящий из нескольких шагов. Я слышал целых 41, хотя это было некоторое время назад, и я понятия не имею, как выглядят текущие конвейеры ЦП. Я знаю, что, если конвейер достаточно длинный, вы можете запустить новую инструкцию в конвейере до завершения последней инструкции, иногда в одном и том же тактовом цикле, так что ваше одно ядро эффективно выполняет две вещи одновременно.
Здесь есть хитрость. Вы не можете просто использовать это, чтобы ускорить скорость, с которой ваш процессор обрабатывает инструкции определенной программы. Существует проблема правильности: следующая инструкция может зависеть от еще не определенного результата предыдущей инструкции. Для того, чтобы воспользоваться преимуществами длинного конвейера безопасно, чип представит два отдельных процессорных ядер в планировщик операционной системы, а также дополнительные команды , посылаемых для каждого ядра , так что две команд в одной и то же "ядро" никогда в трубопроводе , в то же время. Таким образом, мы можем быть уверены, что любые инструкции, выполняемые одновременно, не будут мешать друг другу. Это называется гиперпоточностью.
Здесь стоит отметить, что хотя гиперпоточность может значительно увеличить объем работы, выполняемой вашим процессором, это далеко не так хорошо, как наличие такого большого количества физических ядер. В зависимости от вашей рабочей нагрузки, это может означать всего лишь 15% улучшение или 40% улучшение. В некоторых случаях вы можете даже захотеть отключить эту функцию, чтобы оставшиеся ядра имели полный монопольный доступ к кэшу L1/L2 для этого ядра (иногда это делается на выделенных серверах баз данных).
Когда ваш чип объявляет себя имеющим 2 ядра с 4 потоками, это означает, что это двухъядерный процессор, поддерживающий гиперпоточность.