Основная идея распараллелеваня одинакова для всех трёх алгоритмов. Она
заключается в том, что мы разбиваем массив на несколько частей и каждый поток
выполняет базову операцию над своей частью данных. когда все потоки закончат
свою работу, главный поток соберёт все данные, редуцирует их, и будет получен
конечный результат.
Рассмотрим подобгую схему на примере поиска минимального значения (n -
количество потоков):
double *min;
min = new double[n];
for(int i=0;i<n;i++) min[i]=a[0];
#pragma omp parallel for
for(int i=0; i<n;i++)
{
min[i]=find_min(i*size/n,(i+1)*size/n);
}
double gmin=min[0];
for(int i=1;i<n;i++)
{
if(min[i]<gmin) gmin=min[i];
}