Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Прошу оказать помощь в модификации существующей параллельной программы, написанной с использованием библиотеки OpenMP, в такую же программу, использующую библиотеку MPI.

Существует программа вычисления степени полинома, реализованная с помощью OMP.

-------------------------------------------

--- Необходимо реализовать ввод степени полинома пользователем (у меня реализовано в самом коде программы).

--- Реализовать взаимодействие между процессами. Для этого использовать библиотеку MPI.

Один из вариантов, самый простой - главный процесс ведет диалог с пользователем или считывает входные данные из файла, затем передает данные подчиненным процессам. Подчиненные выполняют действия, возвращают результат главному. Главный собирает результаты, производит суммирование и выводит результат.

Получше вариант - параллельность не только на этапе возведения в степень но и на этапе суммирования. Процессы группируются по два-три, каждый процесс в группе, возведя в степень элемент полинома, передает данные другому процессу, выполняющему суммирование. Группа процессов, выполняющих суммирование передает данные главному процессу, который выполнит окончательное суммирование и выведет результат.

--- Снабдить кодинг программы комментариями.

-------------------------------------------

Кодинг существующей программы:

#include "stdafx.h"

#include

#include

#include

#include

#include

#define N 1000

double a[N];

void GenerateFactor (double *a)

{

int RANGE_MIN = 0;

int RANGE_MAX = 100;

srand( (unsigned)time ( NULL ) );

for (int i=1; i

a = (double) rand() / (double)

RAND_MAX;

};

int main (int argc, char *argv[])

{

double x = 1;

double y = 1, S = 0;

clock_t start, finish;

start = clock();

GenerateFactor(a);

#pragma omp parallel sections shared(S), private(x,y), num_threads(2)

{

#pragma omp section

{

printf_s("Hello from thread %d\n",

omp_get_thread_num());

for (int i=1; i

{

x = (i-0.5) / N;

y = 1;

for (int j=0; j

{

S = S + a[j]*y;

y = y * x;

}

}

}

#pragma omp section

{

printf_s("Hello from thread %d\n",

omp_get_thread_num());

for (int i=(int)N/2; i

{

x = (i-0.5) / N;

y = 1;

for (int j=0; j

{

S = S + a[j]*y;

y = y * x;

}

}

}

};

printf("S = %f\n", S);

finish = clock();

printf("Time of calculation is %f\n",

(double) (finish - start) / CLOCKS_PER_SEC);

getch();

return 0;

}

Среда работы - Visual 2005-й

Заранее благодарю за отклик!

14 лет назад
P10neer
Максим 
34 годаУкраина
14 лет в сервисе
Был
14 лет назад