Сглаживающее преобразование
Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( январь 2023 г. ) |
Сглаживающее преобразование — это алгоритм , который преобразует параллелизм вложенных данных в параллелизм плоских данных. Впервые он был разработан Гаем Блеллохом как часть языка программирования NESL . [1] Сглаживающее преобразование также иногда называют векторизацией , но оно совершенно не связано с автоматической векторизацией . Исходный алгоритм выравнивания касался исключительно многомерных массивов первого порядка, содержащих примитивные типы, но был расширен для обработки рекурсивных типов данных более высокого порядка в работе над Data Parallel Haskell . [2]
Обзор
[ редактировать ]Сглаживание работает путем подъема функций для работы с массивами, а не с отдельными значениями. Например, функция поднимается до функции . Это означает выражение можно заменить применением поднятой функции: . Интуитивно понятно, что сглаживание работает путем замены всех приложений функций приложениями соответствующей поднятой функции.
После выравнивания массивы представляются как одномерный вектор значений V , содержащий скалярные элементы, а также вспомогательную информацию, записывающую вложенную структуру, обычно в форме вектора логического флага F . Вектор флага указывает для соответствующего элемента вектора значений, является ли он началом нового сегмента . Например, двумерный нерегулярный массив может быть представлен как вектор данных рядом с вектором флага .
Этот вектор флагов необходим для правильного выравнивания вложенного параллелизма. Например, он используется для сведения суммы префикса к сегментированному сканированию .
Сглаживание может увеличить асимптотическую работу и пространственную сложность исходной программы, что приведет к гораздо менее эффективному результату. [3]
Использование
[ редактировать ]Первоначально выравнивание было разработано для векторных машин, таких как Connection Machine , и часто создает код, который не подходит для современных многоядерных процессоров. [4] Однако принципы, лежащие в основе его более простых случаев, можно найти в таких конструкциях, как vmap
в Гугл Джаксе .
Ссылки
[ редактировать ]- ^ Беллох, Гай (1995). «NESL: вложенный язык параллельных данных».
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Параллельные данные Haskell: отчет о состоянии
- ^ Спунхауэр, Дэниел; Харпер; Блеллох; Гиббонс (2008). «Профилирование пространства для параллельных функциональных программ».
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Бергстрем, Ларс; Флейт, Мэтью; Рейни, Майк; Реппи, Джон, «Сглаживание только данных для вложенного параллелизма данных», PPoPP , doi : 10.1145/2442516.2442525 , S2CID 1005665