Определение нагрузки на конкретное ядро ​​в многоядерном процессоре

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


person Karthik Balaguru    schedule 17.06.2010    source источник
comment
Планировщики, поддерживающие работу с многоядерными процессорами, — это отдельная тема. Вы можете ознакомиться с этим:software.intel.com/sites/oss/pdfs/mclinux.pdf На уровне программиста вы должны разрабатывать свои алгоритмы таким образом, чтобы части, которые не зависят друг от друга, могли выполняться параллельно (потоки). Быстрый Фурье Преобразования — прекрасный пример параллельных вычислений. Существуют параллельные библиотеки, облегчающие многоядерное программирование.   -  person itisravi    schedule 18.06.2010
comment
Хотя я не получил точного ответа, это была очень хорошая ссылка.   -  person Karthik Balaguru    schedule 23.06.2010


Ответы (2)


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

Алгоритм планирования может иметь некоторое положение для «привязки к потоку», что означает, что ЦП предпочтет запустить ранее запланированный поток, поскольку этот поток, скорее всего, находится в кеше. Однако, в отличие от балансировки сетевой нагрузки, алгоритмы планирования обычно (но не всегда) заботятся о том, чтобы каждый ЦП был максимально загружен, даже если рабочая нагрузка оказывается несправедливой.

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

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

person jbarlow    schedule 20.06.2010

В Linux вы можете использовать taskset -c ### ./executable, где #### — список процессоров.

person Mikhail    schedule 04.10.2010