Курсовой проект. Исследование эффективности алгоритмов коллективных обменов информацией между ветвями параллельных программ.

Задание

  1. Реализовать в стандарте MPI заданные алгоритмы (см. ниже) коллективных обменов информацией между ветвями параллельных программ.
  2. Построить графики зависимости времени выполнения алгоритмов от размера передаваемого сообщения на подсистемах следующих конфигураций (эксперименты проводить на кластере Xeon80): 4 узла по 8 процессорных ядер; 8 узлов по 4 ядра; 8 узлов по 8 ядер.

Пример отчета размещен в каталоге /home/public/dcsft/fall2011/course-project/report

Требования к реализации алгоритмов

  1. Алгоритмы должны быть реализованы на языке программирования С (ANSI C89) и поддерживать только MPI-интракоммуникаторы (Intracommunicators).
  2. При реализации алгоритмов допускается использование MPI-функции только с префиксом ‘P’: PMPI_Comm_size, PMPI_Comm_rank, PMPI_Sendrecv и т. д.
  3. Необходимо корректно (в соответствии с описанием функции в стандарте MPI 2.2) обрабатывать специальные значения аргументов: MPI_IN_PLACE, MPI_PROC_NULL, MPI_COMM_SELF, MPI_COMM_NULL и др.

Этапы выполнения работы

Пример реализации размещен на кластере Xeon80: /home/public/dcsft/fall2011/course-project/coll.

В файл coll.c необходимо добавить реализацию заданных алгоритмов. Имя функции, реализующей алгоритм, должно начинаться с префикса <операция>_<алгоритм>.

Например:

  • allgather_bruck
  • bcast_btree
  • barrier_ring

Прототип функции (тип возвращаемого значений и список аргументов) должен соответствовать описанию функции в стандарте MPI 2.2. В файл coll.h следует добавить прототипы реализованных функций – их объявления.

Описание алгоритмов можно найти в работе [1], а примеры реализации разрешается смотреть в исходных текстах библиотек MPICH2 [2] и OpenMPI [3].

Литература (/home/public/dcsft/fall2011/course-project/doc)

  1. Thakur R., Rabenseifner R. and William Gropp. Optimization of Collective Communication Operations in MPICH // Int. Journal of High Performance Computing Applications. – 2005. – (19)1:49-66.
  2. MPICH2 Source Code // mpich2/src/mpi/coll
  3. OpenMPI Source Code // openmpi/ompi/mca/coll/tuned

Распределения алгоритмов по исполнителям

Перечень функций и алгоритмов их реализации

  1. MPI_Barrier :: Dissemination algorithm
  2. MPI_Barrier :: Double ring
  3. MPI_Barrier :: Recursive doubling
  4. MPI_Bcast :: Binomial tree
  5. MPI_Bcast :: Scatter (Binomial tree) + Allgather (Ring)
  6. MPI_Bcast :: Van De Geijn
  7. MPI_Gather :: Binomial tree
  8. MPI_Allgather :: Ring
  9. MPI_Allgather :: Recursive doubling
  10. MPI_Allgather :: Bruck
  11. MPI_Reduce (только для операции MPI_SUM) :: Binomial tree