Микро-потоки (многоядерные) - Micro-Threads (multi core)

Микро-нити для многоядерных и многоядерных процессоров это механизм скрытия задержки памяти, аналогичный многопоточным архитектурам. Однако это делается в программного обеспечения для многоядерных процессоров, таких как Cell Broadband Engine, чтобы динамически скрывать задержки, возникающие из-за задержек памяти или операций ввода-вывода.

Вступление

Micro-threading - это программная структура потоковой передачи, которая создает небольшие потоки внутри многоядерных или многоядерных процессоров. Каждое ядро ​​может иметь два или более крошечных потока, которые используют время простоя. Это похоже на гиперпоточность, изобретенную Intel, или общую многопоточную архитектуру в современных микропроцессорах. Это позволяет иметь более одного потока, работающего на одном ядре, без дорогостоящего переключения контекста в основную память системы, даже если это ядро ​​не имеет многопоточности. аппаратная логика. Микропотоки в основном скрывают задержку памяти внутри каждого ядра, перекрывая вычисления с запросами памяти. Основное различие между микропотоками и текущими моделями потоков заключается в том, что накладные расходы на переключение контекста микропотоков очень малы. Например, реализация служебных микропотоков на Ячейка широкополосного доступа составляет 160 наносекунд; Между тем, накладные расходы на переключение контекста всего потока ядра (SPE) составляют около 2000 микросекунд. Столь низкие накладные расходы обусловлены тремя основными факторами. Во-первых, микропотоки очень маленькие. Каждый микропоток выполняет одну или две простые, но важные функции. Во-вторых, контекст микропотоков включает только регистровый файл ядра, на котором в данный момент выполняется микропоток. В-третьих, микропотоки переключаются на выделенный кэш ядра, что делает этот процесс очень быстрым и эффективным.

Фон

Поскольку микропроцессоры становятся быстрее, в основном из-за того, что ядра добавляются каждые несколько месяцев, разрыв в задержках памяти увеличивается. Задержка памяти составляла несколько циклов в 1980 году, а в настоящее время достигает почти 1000 циклов. Если у микропроцессора достаточно ядер и, надо надеяться, они не отправляют запросы в основную память одновременно, будет частичное совокупное сокрытие задержки памяти. Некоторые ядра могут выполняться, а другие ждут ответа памяти. Это не лучшая ситуация для многоядерных процессоров. Эксперты в области высокопроизводительных вычислений стремятся постоянно загружать все ядра. Итак, если каждое ядро ​​постоянно занято, возможно полное использование всего микропроцессора. Создание программных потоков не решит проблему по одной очевидной причине. Потоки переключения контекста в основную память - гораздо более дорогостоящая операция по сравнению с задержкой памяти. Например, в Cell Broadband Engine переключение контекста любого потока ядра в лучшем случае занимает 2000 микросекунд. Некоторые программные методы, такие как двойная или мультибуферизация, могут решить проблему задержки памяти. Однако их можно использовать в обычных алгоритмах, где программа знает, где находится следующий фрагмент данных, который нужно извлечь из памяти; в этом случае он отправляет запрос в память, пока обрабатывает данные предыдущего запроса. Однако этот метод не сработает, если программа не знает, какой следующий фрагмент данных нужно извлечь из памяти. Другими словами, он не будет работать в комбинаторных алгоритмах, таких как построение дерева или ранжирование случайным списком. Кроме того, мультибуферизация предполагает, что задержка памяти постоянна и может быть скрыта статически. Однако реальность показывает, что задержка памяти меняется от приложения к другому. Это зависит от общей нагрузки на общие ресурсы микропроцессора, например, от скорости запросов к памяти при взаимодействии общих ядер.

Текущая реализация

В настоящее время микропоточность реализована на Ячейка широкополосного доступа.[1] Может быть достигнуто увеличение производительности в три-пять раз. В настоящее время это доказано для обычных и комбинаторных алгоритмов. Некоторые другие попытки пытаются доказать его жизнеспособность для научных алгоритмов.

Спектакль

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

Критика

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

  • Требуется специальная аппаратная поддержка. Каждое ядро ​​должно иметь собственное локальное средство прерывания для эффективного планирования микропотоков. Однако, если соблюдается политика планирования без прерывания, встроенное средство прерывания не требуется.
  • Лучше всего работает, когда каждое ядро ​​имеет собственный локальный кеш, которым программист управляет вручную.
  • Добавление большего количества микропотоков на ядро ​​резко увеличивает нагрузку на общие ресурсы микропроцессора. Запросы большего объема памяти и синхронизации, вероятно, вызовут перегрузку общих ресурсов. Однако эту проблему можно смягчить, отслеживая критически важные параметры микропроцессора, такие как задержка памяти, и, соответственно, замедляя общее выполнение за счет сокращения микропотоков или изменения политики планирования.

Рекомендации

  1. ^ Ахмед, М .; Р. Аммар; С. Раджасекаран (2008 г.), «SPENK: добавление еще одного уровня параллелизма в ядро ​​широкополосной сотовой связи» (pdf), 1-й международный форум по многоядерным / многоядерным технологиям нового поколения, Каир, Египет: ACM, стр. 1–10., получено 2009-03-04 Cite имеет пустой неизвестный параметр: | редакторы = (помощь)