Помогите Распараллелить!

Unikum

New member
05.11.2011
1
0
#1
Эксперты помогите, распараллелить консольное приложение на два(или четыре) ядра. Раньше ни когда не сталкивался с этим, даже не знаю, что лучше использовать (MPI, OpenMP, и т.п.)

В задаче требуется вычислить n максимальных значений, значений произведений элементов двух исходных массивов.

Саму программу без распараллеливания я написал:

C++:
#include<iostream>;
#include<ctime>;
using namespace std;				//*****************************************************//
int main()								//	В задании требуется создать массив(С) максимальных //
{										//	значений, произведений элементов двух исходных	 //
setlocale(LC_ALL, "Russian");		//	массивов(А и В)используя параллельное вычисление. //
srand(time(0));						//*****************************************************//

int i,j,n,A[100],B[100],T,k,min;

cout<<"\n Размер массива С: ";
cin>>n;
int *C = new int[n];				// Создаем динам. массив с размерностью n (n<10000)

for(i=0;i<100;i++)					//
{									//	Заполняем два исходных массива А[100] и B[100]
A[i]=rand()%19-9;				// случайными числами 
B[i]=rand()%19-9;				//
cout<<A[i]<<"\t"<<B[i]<<endl;	//
}
for(i=0;i<10;i++)					//	Начало фрагмента для распараллеливания
for(j=0;j<10;j++)
{
T=A[i]*B[j];
if((i*10+j+1)<=n)
C[i*10+j]=T;
else
{
min=0;
for(k=1;k<n;k++)
if(C[min]>C[k])
min=k;
if(T>C[min])
C[min]=T;
}
}								//	Конец фрагмента для распараллеливания
for(k=0;k<n;k++)
cout<<C[k]<<" ";
cout<<endl;
system("pause");
}