Распараллелить программу с помощью OpenMP

Рейтинг: 1Ответов: 1Опубликовано: 05.10.2014

Табулирование функции 1 /(корень 3й степени из x). В input.txt промежуток и шаг, в output.txt результаты. Как можно максимально распараллелить программу?

#include <stdio.h>

double function (double x) {
    double a, b;
    a = 0;
    b = x;
    while (1>0) {
        a = 0.5*(b + 3*x / (2*b*b + x/b)); 
        if(((a-b)<=(0.1) && (a-b)>=0) || ((a-b)>(-0.01) && (a-b)<0))
        return a;
        b = a;
        //a = 0.5*(b + 3*x / (2*b*b + x/b)); 
        //if (((a-b)<(0.1) && (a-b)>0) || ((a-b)>(-0.1) && (a-b)<0))
        //return 1/a;
        //a = b;
    }
}

int main() {
    FILE *f;
    FILE *fo;
    f = fopen("input.txt", "rt");
    fo = fopen("output.txt", "wt");
    double a, b, step;
    double i;
    fscanf(f, "%lf", &a);
    fscanf(f, "%lf", &b);
    fscanf(f, "%lf", &step);
    #pragma omp for (i = a; i <= b; i += step) {
        fprintf(fo, "%.14f\n", function(i));
    }
    fclose(f);
    fclose(fo);
}

Ответы

▲ 2

Очевидно что по заданию требуется найти именно последовательность, а не ту мешанину которую выдаст распараллеленый for. Записывай результаты в массив (индекс из for возьми), а потом массив в master-потоке или вне параллельной области запиши в файл.