Система параллельного программирования Sieve C ++ - Sieve C++ Parallel Programming System

В Система параллельного программирования Sieve C ++ это C ++ компилятор и параллельная среда выполнения, разработанная и выпущенная Codeplay который направлен на упрощение распараллеливание кода, чтобы он мог эффективно работать в многопроцессорных или многоядерных системах. Это альтернатива другим хорошо известным методам распараллеливания, таким как OpenMP, то RapidMind Платформа разработки и Заправка строительных блоков (TBB).

Вступление

Sieve - это компилятор C ++, который берет раздел последовательного кода, помеченный маркерами сита, и автоматически распараллеливает его. Программист оборачивает код, который он хочет распараллелить, внутри лексическая область, который помечен как "сито". Внутри этой области, обычно называемой «ситовым блоком», применяются определенные правила. [1]:

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

Задержка побочных эффектов устраняет множество мелких зависимостей, которые обычно препятствуют автоматическому распараллеливанию. Компилятор может безопасно переупорядочивать операции чтения и записи, чтобы лучше использовать различные механизмы перемещения данных, такие как Прямой доступ к памяти (DMA). Кроме того, анализ псевдонимов и анализ потока данных можно упростить [2]. Затем компилятор может намного проще разделить код внутри блока сита, чтобы использовать параллелизм.

Конфигурация памяти

Такое разделение областей видимости также означает, что система Sieve System может использоваться в неоднородных архитектурах памяти. Многоядерные процессоры, такие как Микропроцессор клетки используется в PlayStation 3 относятся к этому типу, в которых быстрые ядра имеют локальную память, которая должна использоваться для использования производительности, присущей системе. Он также может работать в системах с общей памятью, таких как x86, что означает, что он может работать на различных архитектурах. Блоки сит также могут быть вложены друг в друга [3] для систем с иерархией различных элементов памяти и обработки.

Распараллеливание и масштабируемость

Компилятор sieve может неявно или явно разделять код в блоке sieve на фрагменты с помощью оператора splithere. Например, в следующем примере показано распараллеливание цикла:

 сито {    за (итератор я(0); я<длина; ++я)    {       р[я] = А[я] * B[я]          раскол здесь;    } }

Компилятор неявно добавит точку разделения над телом конструкции цикла for в качестве точки входа. Точно так же один будет добавлен после как точка выхода.

В системе сит только локальные переменные в области ситового блока могут иметь зависимости. Однако эти зависимости не должны пересекать точки разделения; они будут генерировать предупреждения компилятора[нужна цитата ]. Чтобы распараллелить этот цикл, вместо стандартного счетчика целочисленных циклов можно использовать специальный класс Iterator. Это безопасно для распараллеливания, и программист может создавать новые классы Iterator по своему желанию. [4]. В дополнение к этим классам Iterator программист может реализовать классы, называемые «Accumulators», которые используются для выполнения операций сокращения.

Способ реализации классов Iterator открывает различные средства для масштабируемости. Sieve Parallel Runtime использует динамические спекулятивное исполнение при выполнении на целевой платформе. Это может дать очень хорошее ускорение, однако работа на одноядерной машине может повлечь за собой накладные расходы. [5].

Детерминизм

Детерминизм - необычная особенность ситовой системы. Если выполнение параллельной программы Sieve на многоядерной машине приводит к ошибке, ошибка не исчезнет при запуске на одном ядре, чтобы помочь отладка[6][7]. Это имеет то преимущество, что устраняет условия гонки, одна из самых распространенных ошибок в параллельное программирование. Устранение необходимости учитывать контроль параллелизма структуры внутри блока сита могут ускорить время разработки и привести к более безопасному коду.

Поддерживаемые системы

Система разработана для иерархических систем с однородными или гетерогенными ядрами ЦП, которые имеют локальную память, подключенную через механизмы DMA или аналогичные модели передачи памяти.

Сито было показано [8] успешно работает на многоядерных системах x86, Ageia PhysX Блок обработки физики, и IBM Микропроцессор клетки. ANSI C генерируется, если компилятор генератор кода недоступен для определенной целевой платформы. Это позволяет выполнять автоматическое распараллеливание с использованием существующих наборов инструментов компиляции C. [9][постоянная мертвая ссылка ].

Смотрите также

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

внешняя ссылка