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

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

  • Почему «Все является файлом», уникальным для операционных систем Unix?
  • Как безопасно удалить материал из% SystemDrive% \ Windows \ Installer?
  • Установка Windows 8 pro на встроенный ПК
  • Переустановка iPhone OS
  • Unix не является операционной системой для ПК?
  • Время создания MBR
  • Почему мое использование процессора ломается в Process Explorer?
  • Влияние кэша L3 на производительность - стоит двухпроцессорная система?
  • Как узнать, сколько процессоров (ядер) у вас на Windows 7
  • Почему мы по-прежнему используем процессоры вместо графических процессоров?
  • Windows 7 - Высокая загрузка процессора во время простоя
  • OpenSolaris и NTFS
  • 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.

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