Инструмент автоматического распараллеливания
Эту статью необходимо обновить . ( сентябрь 2019 г. ) |
Эта статья нуждается в дополнительных цитатах для проверки . ( май 2011 г. ) |
В течение нескольких лет параллельное оборудование было доступно только для распределенных вычислений , но в последнее время оно становится доступным и для компьютеров начального уровня. Следовательно, для программистов стало неизбежным начать писать параллельные приложения. Для программистов вполне естественно мыслить последовательно, и поэтому они менее знакомы с написанием приложений с многопоточной или параллельной обработкой . Параллельное программирование требует решения различных проблем, таких как синхронизация и предотвращение тупиковых ситуаций . Программистам требуются дополнительные знания для написания таких приложений, помимо их опыта в области приложений. Следовательно, программисты предпочитают писать последовательный код, и большинство популярных языков программирования поддерживают его. Это позволяет им больше сосредоточиться на приложении. Поэтому возникает необходимость преобразования таких последовательных приложений в параллельные с помощью автоматизированных средств. Потребность также нетривиальна, поскольку большое количество устаревшего кода, написанного за последние несколько десятилетий, необходимо повторно использовать и распараллеливать.
Необходимость автоматического распараллеливания
[ редактировать ]Предыдущие методы обеспечивали решения для таких языков, как FORTRAN и C; однако этого недостаточно. Эти методы касались разделов распараллеливания с учетом конкретной системы, например цикла или определенного раздела кода. Определение возможностей для распараллеливания — важнейший шаг при создании многопоточного приложения. Эту потребность в распараллеливании приложений частично решают инструменты, которые анализируют код на предмет использования параллелизма. Эти инструменты используют либо методы компиляции , либо методы времени выполнения . Эти методы встроены в некоторые распараллеливающие компиляторы, но пользователю необходимо идентифицировать код распараллеливания и пометить его специальными языковыми конструкциями. Компилятор идентифицирует эти языковые конструкции и анализирует размеченный код на предмет распараллеливания. Некоторые инструменты распараллеливают только особую форму кода, например циклы. Следовательно, требуется полностью автоматический инструмент для преобразования последовательного кода в параллельный. [1]
Общая процедура распараллеливания
[ редактировать ]1. Процесс начинается с определения участков кода, которые, по мнению программиста, имеют возможности параллелизма. Зачастую эта задача сложнапоскольку программист, желающий распараллелить код, изначально не писал рассматриваемый код. Другая возможность заключается в том, чтопрограммист новичок в области приложений. Таким образом, хотя этот первый этап процесса распараллеливания на первый взгляд кажется простым, он можетне будь так.
2. Следующим этапом является отбор участков кода из выявленных, которые фактически являются распараллеливанием. Этот этап снова наиболееважно и сложно, поскольку требует большого количества анализа. Обычно для кодов на C / C++ , где используются указатели, сложноанализировать. Чтобы сделать вывод о том, является ли разделкода зависит от любого другого кода. Если зависимостей в выявленных участках кода больше, то возможности распараллеливанияуменьшается.
3. Иногда зависимости убираются изменением кода и это следующий этап распараллеливания. Код преобразуется так, чтофункциональность и, следовательно, выходные данные не изменяются, но зависимость, если таковая имеется, от другого раздела кода или другой инструкции удаляется.
4. Последний этап распараллеливания — генерация параллельного кода. Этот код всегда функционально аналогичен исходному последовательному коду.но имеет дополнительные конструкции или разделы кода, которые при выполнении создают несколько потоков или процессов.
Метод автоматического распараллеливания
[ редактировать ]См. также основную статью автоматическое распараллеливание .
Сканировать
[ редактировать ]Это первый этап, на котором сканер считывает входные исходные файлы, чтобы идентифицировать все статические и внешние варианты использования. Каждая строка в файле будет проверена на соответствие заранее определенным шаблонам для разделения на токены . Эти токены будут сохранены в файле, который позже будет использоватьсяграмматический движок. Грамматический движок будет проверять шаблоны токенов, соответствующие заранее определенным правилам, для идентификации переменных, циклов и элементов управления.операторы, функции и т. д. в коде.....
Анализировать
[ редактировать ]Анализатор . используется для определения участков кода, которые могут выполняться одновременно Анализатор использует статическую информацию, предоставляемую сканером-парсером. Анализатор сначала найдет все функции, полностью независимые друг от друга, и пометит их какиндивидуальные задачи. Затем анализатор определяет, какие задачи имеют зависимости.
Расписание
[ редактировать ]Планировщик . перечисляет все задачи и их зависимости друг от друга с точки зрения времени выполнения и начала Планировщик составит оптимальное расписание с точки зрения количества используемых процессоров или общего времени выполнения приложения.
Генерация кода
[ редактировать ]Планировщик . сгенерирует список всех задач и подробную информацию о ядрах, на которых они будут выполняться, а также время, в течение которого они будут выполняться будет выполняться за. Генератор кода будет вставлять в код специальные конструкции, которые будут считываться планировщиком во время выполнения. Этиконструкции будут указывать планировщику, на каком ядре будет выполняться конкретная задача, а также время начала и окончания...
Инструменты распараллеливания
[ редактировать ]Существует ряд инструментов автоматического распараллеливания для Fortran, C, C++ и некоторых других языков.
ЮККА
[ редактировать ]YUCCA — это инструмент автоматического преобразования кода из последовательного в параллельный, разработанный компанией KPIT Technologies Ltd., Пуна. Он принимает входные данные в виде исходного кода C, который может иметь несколько исходных файлов и файлов заголовков. Он выдает выходные данные в виде преобразованного многопоточного параллельного кода с использованием функций pthreads и OpenMP конструкций . Инструмент YUCCA выполняет распараллеливание на уровне задач и циклов.
Пар4Все
[ редактировать ]Par4All — это автоматический распараллеливающий и оптимизирующий компилятор (рабочая среда) для последовательных программ на C и Fortran. Цель этого Компилятор исходного кода предназначен для адаптации существующих приложений к различным аппаратным средствам, таким как многоядерные системы, высокопроизводительные компьютеры и графические процессоры . Он создает новый исходный код и, таким образом, позволяет исходному исходному коду приложения оставаться неизменным.
Кит
[ редактировать ]Cetus — это инфраструктура компилятора для преобразования исходного кода программ. Этот проект разработан Университетом Пердью . Cetus написан на Java . Он предоставляет базовую инфраструктуру для написания инструментов или компиляторов автоматического распараллеливания. Основными методами распараллеливания, которые в настоящее время реализует Cetus, являются приватизация , распознавание редукционных переменных и замена индукционных переменных .
новый графический интерфейс пользователя (GUI). В феврале 2013 года был добавлен В мае 2013 года были добавлены расчеты ускорения и отображение графиков. В мае 2013 года был добавлен удаленный сервер Cetus в модели клиент-сервер , и пользователи могут при желании преобразовывать код C через сервер. . Это особенно полезно, когда пользователи запускают Cetus на платформе, отличной от Linux. Экспериментальная версия Cetus для Hubzero также была реализована в мае 2013 года, и пользователи также могут запускать Cetus через веб-браузер.
ПЛУТОН
[ редактировать ]PLUTO — инструмент автоматического распараллеливания, основанный на многогранной модели . Полиэдральная модель для оптимизации компилятора — это представление программ, которое позволяет удобно выполнять преобразования высокого уровня, такие как оптимизация гнезд циклов и распараллеливание циклов. Pluto преобразует программы C из исходного кода в исходный для одновременного крупнозернистого параллелизма и локальности данных. Базовая структура преобразований в основном работает путем поиска аффинных преобразований для эффективного разбиения на мозаику и слияния, но не ограничивается ими. Параллельный код OpenMP для многоядерных процессоров может автоматически генерироваться из последовательных разделов программы на языке C.
Компилятор Полярис
[ редактировать ]Компилятор Polaris принимает на вход программу Fortran77, преобразует эту программу так, чтобы она эффективно работала на параллельном компьютере , и выводит эту версию программы на одном из нескольких возможных параллельных FORTRAN диалектов . Polaris выполняет свои преобразования за несколько «проходов компиляции». В дополнение ко многим широко известным проходам, Polaris включает расширенные возможности, выполняющие следующие задачи: приватизация массива, зависимости данных тестирование , распознавание индукционных переменных , межпроцедурный анализ и символьный программный анализ.
Компилятор Intel C++
[ редактировать ]Функция автоматического распараллеливания компилятора Intel C++ автоматически преобразует последовательные части входной программы в семантически эквивалентный многопоточный код. Автоматическое распараллеливание определяет циклы, которые являются хорошими кандидатами на разделение работы.выполняет анализ потока данных для проверки правильности параллельного выполнения и разделяет данные для генерации многопоточного кода, как это необходимо впрограммирование с использованием директив OpenMP . Приложения OpenMP . и автоматического распараллеливания обеспечивают прирост производительности за счет совместного использования память в многопроцессорных системах.
Советник Intel
[ редактировать ]Intel Advisor 2017 — это инструмент оптимизации векторизации и создания прототипов потоков. Он объединяет несколько шагов в свой рабочий процесс для поиска параллельных сайтов, позволяет пользователям помечать циклы для векторизации и многопоточности, проверять переносимые циклами зависимости и шаблоны доступа к памяти для отмеченных циклов, а также вставлять прагмы для векторизации и многопоточности.
Автопар
[ редактировать ]AutoPar — это инструмент, который может автоматически вставлять прагмы OpenMP во входные последовательные коды C/C++. Для программ ввода с существующими директивами OpenMP инструмент дважды проверит правильность при включении нужной опции. По сравнению с традиционными инструментами AutoPar может использовать знания пользователя (семантику), чтобы открыть больше возможностей распараллеливания.
iPat/OMP
[ редактировать ]Этот инструмент предоставляет пользователям помощь, необходимую для распараллеливания OpenMP последовательной программы. Этот инструмент реализован как набор функций в редакторе Emacs. Все действия, связанные с распараллеливанием программы, такие как выбор целевой части программы, вызов вспомогательной команды и изменение программы на основе вспомогательной информации, отображаемой инструментом, могут выполняться в среде редактора исходной программы. [2]
Венский компилятор Фортрана (VFC)
[ редактировать ]Это новая система распараллеливания между источниками для HPF+ (оптимизированная версия HPF), которая удовлетворяет требованиям нерегулярныхприложения.
SUIF компиляция
[ редактировать ]SUIF ( промежуточный формат Стэнфордского университета ) — это бесплатная инфраструктура, предназначенная для поддержки совместных исследований по оптимизации и распараллеливанию компиляторов. SUIF — это полнофункциональный компилятор, который использует в качестве языков ввода как Fortran, так и C. Распараллеленный код выводится как параллельная версия программы на языке C SPMD (Single Program Multiple Data), которая может быть скомпилирована собственными компиляторами C на различных архитектурах. [3]
Омни-компилятор OpenMP
[ редактировать ]Он преобразует C и Fortran программы с прагмами OpenMP в код C, пригодный для компиляции с помощью собственного компилятора, связанного с библиотекой времени выполнения Omni OpenMP. Это подходит для распараллеливания циклов.
Оптимизатор Timing-Architects
[ редактировать ]Он использует подход, основанный на моделировании, для улучшения распределения задач и распараллеливания задач на нескольких ядрах. Благодаря использованию производительности на основе моделирования и анализа в реальном времени различные варианты распределения задач сравниваются друг с другом. Рассмотрены зависимости, а также влияние специфики процессорной платформы. TA Optimizer используется при разработке встроенных систем.
фракийский
[ редактировать ]Он использует срез итерационного пространства и структуру свободного расписания. Ядро основано на арифметике Пресбургера и операции транзитивного замыкания. Зависимости цикла представлены отношениями. TRACO использует калькулятор Omega, библиотеки CLOOG и ISL, а также анализатор зависимостей Petit. Компилятор обеспечивает лучшую локальность благодаря мелко- и крупнозернистому параллелизму для приложений C/C++. Инструмент разработан командой Западно-Поморского технологического университета; (Белецкий, Палковски, Климек и другие авторы) http://traco.sourceforge.net .
ПоследовательностьL
[ редактировать ]SequenceL — это универсальный язык функционального программирования и набор инструментов для автоматического распараллеливания, основными целями разработки которого являются производительность на многоядерном процессорном оборудовании, простота программирования, переносимость/оптимизация платформы, а также ясность и читаемость кода. Его главное преимущество заключается в том, что его можно использовать для написания простого кода, который автоматически использует всю доступную вычислительную мощность, при этом программистам не нужно беспокоиться о выявлении параллелизма, указании векторизации, избежании условий гонки и других проблемах, связанных с ручным управлением директивами. подходы к программированию, такие как OpenMP.
Программы, написанные на SequenceL, можно скомпилировать в многопоточный код, который выполняется параллельно, без явных указаний со стороны программиста, как и что распараллеливать. По состоянию на 2015 год версии компилятора SequenceL генерируют параллельный код на C++ и OpenCL, что позволяет ему работать с большинством популярных языков программирования, включая C, C++, C#, Fortran, Java и Python. Среда выполнения, специфичная для платформы, безопасно управляет потоками, автоматически обеспечивая параллельную производительность в зависимости от количества доступных ядер.
ОМП2МПИ
[ редактировать ]ОМП2МПИ [4] Автоматически генерирует MPI исходный код из OpenMP . Разрешение программе использовать архитектуры без общей памяти, такие как кластер или многопроцессорная система на кристалле на основе сети на кристалле (на базе NoC) (MPSoC). OMP2MPI предлагает решение, позволяющее эксперту выполнить дальнейшую оптимизацию, желающему добиться лучших результатов.
ОМП2ХМПП
[ редактировать ]ОМП2ХМПП, [5] инструмент, который автоматически переводит исходный код C высокого уровня ( OpenMP ) в HMPP . Сгенерированная версия редко будет отличаться от версии HMPP, написанной вручную , и обеспечит значительное ускорение, около 113%, которое позже может быть улучшено с помощью CUDA, написанного вручную .
emmtrix параллельная студия
[ редактировать ]emmtrix Parallel Studio — это инструмент распараллеливания исходных кодов в сочетании с интерактивным графическим интерфейсом, разработанный emmtrix Technologies GmbH. Он принимает исходный код C, MATLAB , Simulink , Scilab или Xcos в качестве входных данных и генерирует параллельный код C в качестве выходных данных. Он основан на статическом расписании и API передачи сообщений для параллельной программы. Весь процесс распараллеливания контролируется и визуализируется в интерактивном графическом интерфейсе, позволяющем конечному пользователю принимать решения о распараллеливании. Он предназначен для встроенных многоядерных архитектур в сочетании с ускорителями графических процессоров и FPGA.
CLAW-компилятор
[ редактировать ]Компилятор CLAW транслирует программы Fortran с прагмами Claw в код Fortran, подходящий для конкретной цели суперкомпьютера, дополненный прагмами OpenMP или OpenACC.
отчет о прибылях и убытках
[ редактировать ]PaSH — это распараллеливающий компилятор для сценариев оболочки Unix . [6]
См. также
[ редактировать ]- Автоматическое распараллеливание
- Компилятор Intel C++
- Масштабируемый параллелизм
- ПоследовательностьL
- БМДФМ
Ссылки
[ редактировать ]- ^ «Увеличение параллелизма на многоядерных процессорах с использованием индуцированного параллелизма», Винай Г. Вайдья, ПушпРадж Агравал, Адити Атавале, Аниш Сане, Судхакар Сах и Прити Ранадив
- ^ «Разработка и внедрение интерактивного инструмента помощи в распараллеливании для OpenMP: iPat/OMP» Макото Исихара, Хироки Хонда и Мицухиса Сато
- ^ «Обзор компилятора SUIF для масштабируемых параллельных машин», в материалах седьмой конференции SIAM по параллельной обработке для научных вычислений, 1993, Саман П. Амарасингхе, Дженнифер М. Андерсон, Моника С. Лам, Чаувен Ценг
- ^ Альберт Саа-Гаррига, Дэвид Кастельс-Руфас и Хорди Карабина. 2015. OMP2MPI: Автоматическая генерация кода MPI из программ OpenMP . В высокопроизводительных энергоэффективных встраиваемых системах. АКМ.
- ^ Альберт Саа-Гаррига, Дэвид Кастельс-Руфас и Хорди Карабина. 2014. OMP2HMPP: Генерация исходного кода HMPP из программ с расширениями Pragma. В высокопроизводительных энергоэффективных встраиваемых системах. АКМ.
- ^ Зеве, Адам; Технологии, Массачусетский институт. «Техника значительно повышает скорость работы программ, работающих в оболочке Unix» . techxplore.com . Проверено 8 июня 2022 г.