Как работают многоядерные процессоры?

Я знаю, смутное название вопроса, но мой главный вопрос: 1 ядро ​​должен выполнять только одну программу за раз? Нужно ли «многозадачность» на уровне ЦП переключаться между задачами, и если да, то почему? Почему процессоры не могут работать одновременно с несколькими задачами? У них миллиарды транзисторов, почему некоторые транзисторы не могут работать над одной проблемой, а другие работают над другой? Это аппаратное ограничение или просто ограничение ОС?

  • Windows BSOD при включении всех ядер процессора
  • Как узнать, сколько процессоров (ядер) у вас на Windows 7
  • Многоядерный процессор: могу ли я сказать, что у меня 3x2,1 ГГц = 6,3 ГГц процессор?
  • Почему команда «топ» показывает использование процессора в 799%?
  • Динамически отключать ядра мощным способом?
  • 4 Solutions collect form web for “Как работают многоядерные процессоры?”

    Транзистор не может «работать над проблемой». Это базовый строительный блок CPU, бесполезный сам по себе, но необходимый для построения логических ворот (которые затем могут вычислять простые операции, такие как добавление и т. Д.). В одном ядре много аппаратного обеспечения, а не только один транзистор.

    В процессоре гораздо больше, чем просто «делать вещи». Существует диспетчер виртуальной памяти, менеджер аппаратного кэша, различные интерфейсы для подключения процессора к материнской плате и к системной памяти и т. Д. Многоядерные процессоры часто используют большое количество аппаратного обеспечения внутри реального процессора.

    «Программа» – это концепция программного обеспечения – ЦП не знает, что это такое. Весь процессор выполняет операции, отправленные операционной системой. В этом смысле одноядерный процессор может выполнять только одну логическую операцию за раз. Но вы все же можете делать несколько файлов одновременно, даже на одноядерном процессоре, потому что операционная система переключает программу, которая в настоящее время работает с очень высокой скоростью. Многоядерные процессоры позволяют одновременно запускать несколько задач, которые могут быть использованы операционной системой, позволяя вам одновременно запускать больше программ одновременно или иметь одну программу, чтобы использовать несколько ядер для ускорения работы.

    Технически «программа» представляет собой процесс, разделенный на один или несколько потоков, каждый из которых независим в своем исполнении, все они имеют свой собственный стек, контекст процессора (регистры и т. Д.) И другие вещи, хотя они все еще могут общаться Очевидно, между собой.

    Классический цикл, за которым следуют процессоры:

    Инструкция Fetch -> Decode It -> Execute It

    Причина в том, что большинство проблем, которые люди исторически хотели решить с помощью компьютеров, включали следующие шаги, по одному за раз и в порядке, когда результат некоторых из этих шагов может повлиять на последующие шаги. С такими проблемами, прыгая вокруг и атакуя его из середины, используя несколько «рабочих», работает не так хорошо. Таким образом, эта модель хорошо обслуживала эти типы программ, которые на самом деле все еще очень распространены. (То есть, пока рендеринг 3D-графики не стал распространенным …)

    Разумеется, вышеупомянутая модель была оптимизирована и модифицирована на протяжении многих лет. И работа прогрессировала в том, чтобы гарантировать, что меньше процессор остается бездействующим с течением времени. Еще в 68000 году у вас была «конвейерная обработка», где несколько инструкций действительно «в полете» в разных частях ЦП (и именно поэтому предсказание ветвлений было разработано, потому что, если у вас есть несколько инструкций, конвейеризованных, а затем Выбросить результаты из-за ветки, вы теряете производительность). Сегодня у вас есть дополнительные вещи, которые мешают процессору задерживаться или ждать чего-то вроде:

    • Кеш (не позволяет процессору иногда ждать медленную память)
    • (Переупорядочивает принятые команды в порядке, который выполняется более эффективно)
    • Переименование регистра (позволяет работать не по порядку, чтобы лучше работать, предоставляя инструкции своим собственным копиям регистров, в то время как другие инструкции завершают работу)

    Таким образом, каждый процессор или ядро ​​содержит несколько подсистем, которые работают вместе для интерпретации и выполнения потока команд. В некотором смысле части современных процессоров действительно работают над чем-то, а другие части работают над чем-то еще, в то же время.

    Но, хотя они могут быть сделаны очень эффективно с использованием вышеуказанных методов, в конечном счете, они все работают вместе над одним и тем же потоком команд. Поэтому они не могут быть полностью независимыми друг от друга. Если вы хотите выполнить сразу два потока инструкций, вам понадобятся два процессора или ядра.

    Современная многозадачная ОС подпрыгивает между различными потоками команд, хранящимися (т.е. программами) в памяти. То, что делает ОС, отключается от программы, когда она занимает слишком много времени (большинство процессоров, предназначенных для многозадачных сред, имеют таймер, который вызывает IRQ через определенный интервал или такой же механизм) или переключается на другую задачу Если процесс ожидает какой-либо тип ввода-вывода или ввода. Он никогда физически не выполняет сразу две команды на одном процессоре.

    Я думаю, что что-то вроде идеи, о которой вы говорите, было опробовано с помощью Itanium и его архитектуры VLIW . Читайте статью в Википедии, она объясняет вещи немного лучше и глубже, чем я пытаюсь здесь.

    Фактически часть «задач переключения» выполняется ОС. Процессор – относительно «тупой» кусок оборудования, который просто «сжимает цифры». С технической точки зрения, процессор не может работать над несколькими задачами, поскольку все задачи написаны в предположении, что они имеют полный контроль над процессором во время выполнения. Это частично наследие из-за необходимой обратной совместимости.

    Благодаря многоядерному процессору доступно более одного «полного процессора», поэтому более чем одна программа может иметь «полный процессор», доступный на данный момент, поэтому они могут выполняться одновременно.

    ОС могла запустить только один поток процесса на ОДНОМ ядре в одно и то же время, но как только вы узнаете, что один процесс разделен на несколько потоков ОС, прежде чем они смогут работать на Core, а любая современная ОС обычно работает около 100 Или больше процессов, вы сможете себе представить, насколько быстро произойдет переключение, если Core будет синхронизирован с частотой 1 ГГц, он будет обновляться примерно миллиард раз в секунду, чтобы освободить «пространство» для предстоящих потоков для выполнения.

    Недавно в процессорах Intel вы, возможно, слышали о своей технологии Multi-Threading, которая делает ОДИН ядро ​​ABLE для запуска двух потоков в точное САМОЕ время, теоретически удваивая производительность Core.

    Interesting Posts

    Нумерация основных документов / поддокументов

    Дублировать строки на основе своих данных

    Как я могу применить цветовую схему (файл .el) в emacs?

    Удалите пользователя в Windows XP, не можете найти кнопку удаления или не показывать

    Как получить RTM Windows 8 без учетной записи MSDN?

    Процессор всегда с максимальной скоростью

    Преобразование VMDK в VHD

    CTRL-Space всегда переключает китайский IME (Windows 7)

    Как максимально использовать приложение на весь экран в Mac OS X

    Как изменить оставшееся предупреждение на дисковое пространство в Windows 7?

    Как мне получить завершение aws cli для работы с zsh на ubuntu?

    Могу ли я заставить браузер автоматически переадресовывать на некоторые страницы?

    Почему обратная косая черта отображается как «W» + зачеркивание в Netbeans?

    Chrome – изменение навигационных клавиш на странице в программе просмотра PDF

    Найти записи разделов на физических дисках с помощью wmic

    Давайте будем гением компьютера.