Новости
О Центре
Кластер
Обучение
Основной курс по параллельному программированию
Учебные курсы
Магистратура
Дополнительное образование
Работы студентов
Библиотека
Исследования
Конференции
Полезные ссылки
NVIDIA
Контакты
О сайте
Имя:
Пароль:
запомнить:
Забыли пароль? Регистрация

Реализация алгоритма

Рассмотрим основные этапы параллельного алгоритма сортировки слиянием.

1. Нулевой процесс рассылает массив по блокам на остальные процессы. Блоки принимаются и сортируются слиянием (последовательный алгоритм слияния реализован в функции MergeSort ).

    t1=MPI_Wtime(); //начало отсчета времени

    MPI_Bcast(&size, 1, MPI_INT, 0, MPI_COMM_WORLD);

    int sizeBlock=size/n; //определяем размер блоков

    int ost = size%n;

    pmas = new int[sizeBlock];

    MPI_Scatter(&mas[rank*sizeBlock], sizeBlock, MPI_INT, pmas, sizeBlock, MPI_INT, 0, MPI_COMM_WORLD); //рассылка блоков

    MergeSort(pmas,0,sizeBlock-1);     //сортировка блоков

2. Процессы отправляют отсортированные блоки нулевому, он принимает их и последовательно сливает с помощью функции MergeMas.

if (rank==0) {

for (i=0; i<sizeBlock;i++) mas[i]=pmas[i];

for (i=1; i<n; i++){

            MPI_Recv (&mas[i*sizeBlock], sizeBlock, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &Status);

            MergeMas(mas, 0, (i+1)*sizeBlock-1, i*sizeBlock-1);

}}

    else MPI_Send (pmas, sizeBlock, MPI_INT, 0 , 0 , MPI_COMM_WORLD);

    t2=MPI_Wtime();

Новости

22.10.2012
04.09.2012
05.04.2012
06.03.2012
02.03.2012