Потоки выполнения в ЦП и их отличие от программных процессов

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

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

Процессы в программном обеспечении

Потоки выполнения в ЦП

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

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

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

Концепция пузыря или остановки в процессоре

Бурбуджа Процессос

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

В мире аппаратного обеспечения в начале 2000-х годов появилось то, что мы называем многопоточностью с Hyperthreading Pentium IV. Хитрость заключалась в том, чтобы продублировать блок управления ЦП, который отвечает за захват и декодирование. Благодаря этому было достигнуто то, что операционная система в конечном итоге будет видеть ЦП, как если бы они были двумя разными ЦП, и назначила задачу второму блоку управления. Это не удваивает мощность, но когда сам ЦП застревает в одном потоке выполнения, он немедленно передается другому, чтобы воспользоваться имевшим место простоем и повысить производительность процессоров.

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

Производительность зависит от операционной системы

Процессос Система Оперативо

Хотя процессоры могут выполнять два потока выполнения на ядро, именно операционная система отвечает за управление различными процессами. И сегодня количество процессов, выполняемых в операционной системе, превышает количество ядер, которые ЦП может запускать одновременно.

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

Скачок к гибридным ядрам уже произошел в мире ARM процессоры, где операционные системы, такие как iOS и Android пришлось приспосабливаться к использованию ядер разной производительности, работающих одновременно. В то же время в x86 пришлось усложнить блок управления будущих проектов. Цель? Каждый процесс в программном обеспечении выполняется в соответствующем потоке оборудования, а сам ЦП имеет большую независимость при выполнении процессов.

Как происходит выполнение процессов на графических процессорах?

TFLOPS Скоростной графический процессор

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

  • Данные находятся рядом с инструкцией и могут быть выполнены напрямую.
  • Инструкция находит адрес памяти данных и должна ждать, пока данные поступят из памяти в регистры блока шейдера.
  • Данные зависят от выполнения предыдущего потока выполнения.

Но GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР не запускает операционную систему, которая может обрабатывать разные потоки. Решение? Все графические процессоры используют алгоритм в планировщике каждого шейдерного блока, эквивалент блока управления. Этот алгоритм называется Round-Robin и заключается в предоставлении времени выполнения в тактовых циклах каждому потоку выполнения / инструкции. Если за это время проблема не была решена, она помещается в очередь, и выполняется следующая инструкция в списке.

Шейдерные программы не компилируются в коде из-за того, что существуют существенные различия во внутренней ISA каждого графического процессора, контроллер отвечает за компиляцию и упаковку различных потоков выполнения, а программный код отвечает за управление их. . Таким образом, это другая парадигма, нежели то, как ЦП выполняет различные процессы.