Скачать книгу

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

      По тем же соображениям, в качестве конечных средств распараллеливания выбраны OpenMP, OpenCL и Cilk++, реализующие основные виды параллелизма (по данным и по задачам) на широком классе вычислительных систем. Проанализирован состав подзадач, потенциально решаемых при автоматическом распараллеливании. Показано, что такие подзадачи могут потребовать применения как стандартных автоматных, так и нестандартных сканирующих средств лексико-синтаксического анализа и средств интеллектуальной трансформации распознанных алгоритмов с генерацией программ по трансформированным алгоритмам. С учетом сказанного, в качестве программной платформы был выбран компилятор Planning C 2.0 [19], имеющий серьезные предпосылки для реализации указанных средств на базе аппарата сканеров и дедуктивных макросов, задействуемого на уровне многостадийной гибкой схемы препроцессинга, поддерживающей последовательную многократную переработку кода.

      Глава 2. Встроенная трансформация программ в языке Planning C

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

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

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

      2.1. Дедуктивные макромодули: средства решения задач распараллеливания и генерации выходной программы

      Первоначально в языке Planning C дедуктивные макромодули предназначались для гибкой генерации описаний вычислительных топологий (этим и объясняются некоторые их не вполне очевидные синтаксические особенности), впоследствии же их применение было расширено: в настоящее время дедуктивные макромодули используются для гибкой дедуктивной генерации произвольных фрагментов программы на основе логических правил, записанных

Скачать книгу