Elemental Здесь мы описываем наш фреймворк Elemental, цели разработки которого заключаются в следующем: * Реализуйте гибкую структуру для плотной линейной алгебры с распределенной памятью, используя современные технологии. * Обеспечьте эффективную и переносимую реализацию базовой функциональности C++11. * Обеспечить полезные строительные блоки для эффективной обработки разреженных и неразреженных разреженных матриц. * Обеспечьте высокую степень повторного использования кода для общих задач. * Быть реализованным академическими и промышленными исследовательскими группами. * Обладают хорошим сочетанием удобства использования и производительности. Здесь мы опишем нашу базовую структуру общего назначения, уделив особое внимание строительным блокам и разработке функций, характерных для поэлементного распределения. Элементарная среда: Основная идея нашей реализации заключается в том, что мы сохраняем среды, которые по большей части независимы друг от друга. Например, у нас есть следующие среды: * Параллельная среда, позволяющая выполнять циклы параллельно, например цикл for. * Среда разгрузки, которая позволяет нам разгрузить операцию цикла в отдельный поток, подобно тому, как работает функция разгрузки параллельного программирования в Cilk++. * Среда поэлементного распределения, которая позволяет нам выполнять операции над элементами матриц сразу поэлементно, подобно тому, как Fortran и большинство других поэлементных языков реализуют вычисление операции для каждого элемента матрицы. * Среда для работы с разреженными матрицами, позволяющая эффективно работать с разреженными матрицами. * Среда для работы с неразреженными матрицами, позволяющая эффективно работать и с плотными матрицами. * Среда для обработки разреженных итераторов, позволяющая эффективно обрабатывать разреженные итераторы в таких функциях, как std::vector::operator[]. * Среда для обработки индексов, позволяющая эффективно обрабатывать индексы разреженных матриц. * Среда обработки статистики, позволяющая эффективно вычислять статистику любых числовых величин, в том числе и тех, которые просто не умещаются в памяти. Большинство целей проектирования достигаются с помощью структур блокировки и абстрактных типов данных (ADT), которые обеспечивают единообразную и удобную реализацию всех функций. Параллельная среда: Одной из ключевых концепций Elemental является то, что все операции в цикле выполняются параллельно, независимо от того, является ли цикл сильно вложенным или нет. Предположим, что у нас есть параллельный цикл, в котором цикл содержит цикл по вектору, for (целое без знака i = 0 Можно построить операции линейной алгебры для нескольких узлов с помощью абстракций «Map» и «Reduce». Elemental не содержит собственной реализации разреженной и распределенной линейной алгебры, но предоставляет собственные операции Map и Reduce. Карта: Elemental строит двоичную матрицу и карту индексов из двух наборов индексов, которые сообщаются в операции карты. Эта операция атомарна и вызывается как часть операций map/reduce. Есть два подвида картографических операций: Подвид карты 1: Многомерная карта: Эта операция использует 1 измерение для индексации строк и столбцов, в то время как второе измерение входной матрицы индексируется в другом сообщении. Это типичный вариант использования поэлементной связи в Elemental. Он вызывается в следующем виде: карта Точно так же его можно преобразовать в операцию сокращения. Подвид карты 2: 1-мерная карта: Эта операция использует измерение для индексации строк и столбцов и должна вызываться в следующей форме: карта Уменьшать: Реализация операции сокращения в Elemental является атомарной и использует обычную троичную операцию «обмена» для выполнения двустороннего транспонирования распределенной матрицы. Он вызывается следующим образом: уменьшать Чтобы оптимизировать операции сокращения, подход Elementals commit использует алгоритмы BFS для связи между узлами, а для узлов, которые находятся ближе в матрице, используется более эффективный BFS. Внутри Elemental использует алгоритм постоянного времени для BFS и предоставляет возможность использования BFS с переменным количеством переходов. Однако в случае по умолчанию переменный скачок работает намного лучше, чем постоянный. Elemental содержит встроенную реализацию подпрограмм LAPACK, необходимых для операций отображения и сокращения. Elemental распределяет операцию: Elemental предоставляет интерфейс для распределенных матриц, который используется для распределения матрицы по нескольким узлам. Он обеспечивает комбинацию операций Map и Reduce, которые формируют распределенную матрицу. Пользователь распределенной матрицы должен построить матрицу преобразования (сайт вызова), которая используется в распределенной матрице. Elemental обрабатывает распределенные матрицы с помощью операции «Restrict», которая вызывается следующим образом: fb6ded4ff2
Related links:
Σχόλια