?
Оптимизация графов потока управления в промежуточных представлениях языка функционально-потокового параллельного программирования
Функционально-потоковые языки программирования предназначены для разработки архитектурно-независимых параллельных программ и поддерживают управление вычислениями
по готовности данных. В связи с тем, что в настоящее время преобладают параллельные вычислительные системы, а их программирование на императивных языках сопряжено с проблемами переносимости, разработка инструментальных средств архитектурно-независимого параллельного программирования является актуальной задачей. Формируемая на функционально-потоковых языках программа задает граф потока данных. В ходе ее трансляции формируются промежуточные представления в виде информационного графа и накладываемого на него управляющего графа. В процессе выполнения программы по дугам управляющего графа передаются сигналы готовности данных. Явное выделение управляющего графа позволяет не только изменять стратегии управления вычислениями и обеспечивать адаптацию программы под особенности архитектуры, но и применять специфические методы оптимизации управляющих зависимостей.
В работе предлагаются методы трансформации, обеспечивающие оптимизацию управляющего графа. При генерации управляющего графа по информационному в него вносятся избыточные дуги, удаление которых не влияет на результат работы программы, однако приводит к более эффективному ее выполнению. Показано, что в функционально-потоковых программах, помимо зависимостей по управлению, свойственных для других языков программирования, возникают дополнительные, связанные с особенностями реализации отложенных или условных вычислений, описываемых задержанными списками. Приведено формальное описание избыточных зависимостей разного вида, а также эффективный алгоритм их выявления.
Разработанный подход может применяться для таких языков функционально-потокового программирования, как Пифагор и Smile.