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