Nano Hash - криптовалюты, майнинг, программирование

Как использовать pdgemr2d для копирования распределенной матрицы во все процессы?

Я хотел бы скопировать матрицу (nxn), которая распределена по сетке процессов (pxq) для всех процессов, чтобы каждый процесс имел всю матрицу (nxn), аналогичную операции allgather из mpi.

Я понимаю, что подпрограмма scalapacks pdgemr2d — это то, что нужно, но примеры и документация не помогли мне разобраться. Моя идея заключалась в том, чтобы ввести второй контекст blacs, состоящий только из одного процесса, который также является mpi_root. pdgemr2d копирует всю информацию в эту сетку 1x1. Затем mpi_root выполняет широковещательную рассылку всем остальным процессам.

Я использую фортран-интерфейс scalapack/blacs.

Вот куча вопросов:

  1. Разумна ли моя идея, изложенная выше, или есть (канонический) способ с лучшей производительностью?
  2. В этом контексте очень много контекстов и я не до конца понимаю, правильно ли я их разделяю: Все мои процессы pxq находятся в MPI_WORLD_COMMUNICATOR, этот коммуникатор также используется как контекст blacs для сетки. Тогда корень является частью MPI_WORLD, контекста сетки и контекста 1x1. Таким образом, у него есть часть данных, которые также должны быть каким-то образом отправлены из контекста pxq в контекст 1x1. Правильно ли это и работает ли это вообще?
  3. Последний аргумент pdegemr2d — ictxt, который должен быть контекстно-унифицированным для всех участвующих процессов, это MPI_WORLD?
  4. Нужны ли мне разные вызовы для членов сетки pxq и одного члена сетки 1x1? И если да, то какая будет разница?
11.05.2015

  • Код, вероятно, не является строго необходимым, но он может сделать ваши пункты более ясными, если они у вас есть. 11.05.2015
  • Кажется, я сам со всем разобрался. Предоставлю ответ (с кодом)! 11.05.2015
  • Кажется, у меня не получилось, см. дополнительный вопрос здесь ссылка 09.06.2015

Ответы:


1

Ознакомьтесь с этим руководством, которое я считаю очень полезным, когда только начинаю использовать ScaLAPACK: https://www.sharcnet.ca/help/index.php/LAPACK_and_ScaLAPACK_Examples

Кроме того, вы в конечном итоге столкнетесь с проблемой 32-битных целых чисел при использовании pdgemr2d для матриц с более чем 2 ^ 31 элементом - он вылетит с предупреждением «xxmr2d: out of memory». Это связано с глобальным индексом массива, объявленным как C int, поэтому он взрывается, когда массив становится больше 2 ** 31. Исправление состоит в том, чтобы заменить pdgemr2d вашими собственными процедурами разброса и сбора, которые учитывают блочное циклическое матричное распределение, используемое scalapack. Я написал свой собственный код Fortran на основе a C пример я нашел в Интернете. До сих пор я тестировал его для плотного матричного умножения scalapack (pdsyrk) для матрицы 100 000 x 100 000, и он работал нормально. Заняло около 520 с на 320 ядрах, подключенных к QDR InfiniBand.

-Керри

20.05.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..