Планирование потоков при неравномерном времени доступа к памяти - PullRequest
2 голосов
/ 16 января 2020

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

Очевидно, что планировщик также принимает во внимание такие вещи, как число потоков, уже назначенных процессору, среди многих других переменных, но я специально ищу алгоритмы планирования, которые в первую очередь пытаются минимизировать время доступа к памяти в архитектурах NUMA.

1 Ответ

0 голосов
/ 19 января 2020

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

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

Основа c планирование с привязкой процессора достаточно просто реализовать: вы просто берете существующий алгоритм планирования и модифицируете его таким образом, чтобы каждое ядро ​​имело свою собственную очередь потоков (или очереди). В системе NUMA все остальное зависит от того, когда выгодно перенести поток на другое ядро; Я не думаю, что можно дать общеприменимый алгоритм для этого, потому что выгоды и затраты сильно зависят от специфики рассматриваемой системы.

Обратите внимание, что тип процессора связан с планировщиком потребность в слабом и automati c: к какому ядру прикреплен поток, полностью зависит от планировщика и может изменяться всякий раз, когда планировщик считает это полезным. Это резко контрастирует со сродством процессора, например, в планировщике Linux, где сродство процессора равно hard (поток не может быть запущен на ядре, которого у него нет сходство с) и вручную , управляемым пользователем (см. sched_setaffinity и pthread_setaffinity_np ).

...