Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Тема: Колективні операції.
Мета: Навчитися обчислювати значення певного одновимірного інтеграла через функції: MPI_Bcast, MPI_Reduce
Обладнання: IBM сумісні ПК
Програмне забезпечення: ОС Windows, MS Visual C++
Контрольні питання:
1. За рахунок чого гібридні MPI-OpenMP програми можуть бути ефективніше звичайних MPI-програм?
2. Чи потрібно повідомляти MPI-бібліотеці про те, що MPI-процес буде викликати функції з паралельних потоків?
Короткі теоретичні відомості
У колективних комунікаціях беруть участь всі процеси комунікатора. Відповідні функції повинні бути викликані в кожному з процесів. MPI гарантує коректну спільну роботу колективних комунікацій та комунікацій "точка-точка". У MPI містяться функції наступних типів:
Функція MPI_Bcast.
int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm )
INPUT/OUTPUT PARAMETER
buffer - Адрес.
INPUT PARAMETERS
count - Число елементів у буфері
datatype - тип даних
root - ранг кореневого процесу
comm - комунікатор
Дані, находяшіеся за адресою buffer в процесі з рангом root копіюються всім сталевим процесам за адресою buffer
Функція MPI_Reduce.
int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
INPUT PARAMETERS
sendbuf - Адреса, за якою знаходяться данні які відправляються
count - число елементів в sendbuf, до якого потрібно примінити операцію
datatype - Тип даних
op - Редукційна операція
root - ранг процесу, який отримає підсумкове значення (кореневого процесу)
comm - Комунікатор
OUTPUT PARAMETER
recvbuf - Адреса, за якою буде записано підсумкове значення
Приклад рішення задачі:
Пошук k-тої порядкової статистики
Визначення: k-тою порядковою статистикою x(k) масиву x називається к-тий за не зменшенням елемент масиву x.
Визначення: медіаною масиву x називається x (N / 2 +1), де N - довжина масиву.
Позначення: | x | - число елементів масиву x.
Опис послідовного алгоритму: Нехай заданий масив S з n елементів і число k. Необхідно знайти S (k). Застосовується рекурсивна процедура select
val_type select(int k, val_type* S)
{
if(|S|<50)
{
sort(S);
return S[k]
}
else
{
if(|S1|>k)
return select(k,S1);
else
if(|S1|+|S2|>k)
return m;
else
return select(k-|S1|-|S2|,S3);
}
}
Опис паралельного алгоритму: Нехай заданий масив S з length елементів і число k. Необхідно знайти S (k). Застосовуються рекурсивні функції selectparallel і select
int selectparallel(int k, int* s, int size)
{
if(size<50)
{
if(!rank)
{
sort(s,size);
result=s[k];
}
MPI_Bcast(&result,1,MPI_INT,0,MPI_COMM_WORLD);
return result;
}
else
{
if (tc1>k)
{
return selectparallel(k,s,tc1);
}
else if (tc1+tc2>k)
{
return m;
}
else
{
return selectparallel(k-tc1-tc2,s,tc3);
}
}
}
Хід роботи:
Завдання:
1 частина
1. Написати паралельну програму пошуку k-тої порядкової статистики в масиві за лінійний час. Масив зчитується з файлу, ім'я якого передається виконуваному файлу в командному рядку. Формат файлу: в першому рядку число елементів масиву і номер статистики, далі йдуть самі елементи через пробіл. Тип елементів int.
Зміст звіту :
Рекомендована література:
1. Книга «Параллельное программирование для многопроцессорних вичислительних систем» (С. Немнюгин, О. Стесик, Изд БХВ-Петербург, 2002).