параллельный код C для вычисления расстояния

У меня есть код C, который вычисляет расстояние между двумя наборами узлов (по три координаты каждый), хотя мой код еще был достаточно быстрым, я хочу немного увеличить его, используя параллельный вычисления. Я уже нашел некоторую информацию об openMP и пытаюсь использовать ее прямо сейчас, но есть кое-что немного странное. Без omp время процессора кода составляет 20 секунд, добавление двух строк прагмы занимает 160 секунд! Как это могло случиться?

Я добавляю сюда свой код

float computedist(float **vG1, float **vG2, int ncft, int ntri2, int jump, float *dist){
    int k = 0, i, j;
    float min = 0;
    float max = 0;
    float avg = 0;
    float *d = malloc(3*sizeof(float));
    float diff;

    #pragma omp parallel
    for(i=0;i<ncft;i+=jump){
        #pragma omp parallel
        for(j=0;j<ntri2;j++){
            d[0] = vG1[i][0] - vG2[j][0];
            d[1] = vG1[i][1] - vG2[j][1];
            d[2] = vG1[i][2] - vG2[j][2];
            diff = sqrt(pow(d[0],2) + pow(d[1],2) + pow(d[2],2));
            if(j==0)
                dist[k] = diff;
            else
                if(diff<dist[k])
                    dist[k] = diff;

        }
        avg += dist[k];
        if(dist[k]>max)
            max = dist[k];
        k++;
    }

    printf("max distance: %f\n",max);
    printf("average distance: %f\n",avg/(int)(ncft/jump));

    free(d);

    return max;
}

Большое спасибо за любую помощь

5
задан Vladimir F 9 May 2015 в 14:46
поделиться