Задача 1
Разработать алгоритм написать и отладить параллельную программу умножения матрицы на матрицу в топологии "кольцо": А х В = С, при условии, что количество строк матрицы А и столбцов матрицы В нацело делится на количество компьютеров. Например, матрица А размером [20х20] и матрица В размером [20х20] на четырех компьютерах.
Задача 2
Разработать алгоритм написать и отладить параллельную программу умножения матрицы на вектор с использованием распределения работ для параллельных процессов директивой sections. Использовать алгоритм примера 3.5.
Алгоритм ( ПРИМЕР 3.3
Пример аналогичный предыдущему: Параллельное суммирование элементов двух векторов. Но суммирование осуществляется в цикле в отдельной подпрограмме. В программе применяется комбинация параллельного цикла и редуцированной операции по всем процессам.
#include
#include
#define VECLEN 100
float a[VECLEN], b[VECLEN], sum;
/* Подпрограмма, в которой суммируются элементы векторов */
float dotprod()
{
int i, rank;
rank = omp_get_thread_num();
#pragma omp for reduction(+:sum)
for (i = 0; i < VECLEN; i++)
{
sum = sum + (a[i] * b[i]);
printf(" rank = %d i=%d\n", rank, i);
}
return(sum);
}
int main()
{
int i;
/* Инициализация элементов векторов */
for (i = 0; i < VECLEN; i++)
a[i] = b[i] = 1.0 * i;
sum = 0.0;
/* Создание множества параллельных процессов */
#pragma omp parallel
sum = dotprod();
printf("Sum = %f\n", sum);
}
Задача 3
Разработать алгоритм написать и отладить параллельную программу умножения матрицы на матрицу с использованием директивы распараллеливания цикла по виткам.