Я пытаюсь распараллелить цикл в моей программе, поэтому я искал многопоточность. Сначала я взглянул на многопоточный учебник по POSIX, это было так сложно, поэтому я попытался сделать что-то более простое. Я пробовал с OpenMP. Я успешно распараллеливал свой код, но проблема времени выполнения становится хуже, чем серийный. это ниже, чем часть моей программы. Хотел бы ты рассказать мне, в чем проблема. Должен ли я указывать, какие переменные являются общими, а какие - частными? и как я могу узнать тип каждой переменной? Я хочу, чтобы вы ответили мне, потому что я искал на многих форумах, и я до сих пор не знаю, что делать.OpenMP низкая производительность
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#define D 0.215 // magnetic dipolar constant
main()
{
int i,j,n,p,NTOT = 1600,Nc = NTOT-1;
float r[2],spin[2*NTOT],w[2],d;
double E,F,V,G,dU;
.
.
.
for(n = 1; n <= Nc; n++){
fscanf(voisins,"%d%d%f%f%f",&i,&j,&r[0],&r[1],&d);
V = 0.0;E = 0.0;F = 0.0;
#pragma omp parallel num_threads(4)
{
#pragma omp for schedule(auto)
for(p = 0;p < 2;p++)
{
V += (D/pow(d,3.0))*(spin[2*i-2+p]-w[p])*spin[2*j-2+p];
E += (spin[2*i-2+p]-w[p])*r[p];
F += spin[2*j-2+p]*r[p];
}
}
G = -3*(D/pow(d,5.0))*E*F;
dU += (V+G);
}
.
.
.
}//End of main()
* проблема время выполнения становится хуже, чем серийный случай * Это часто является результатом использования неправильной процедуры (ы) синхронизации. Ваш код не показывает, что вы используете, лучше всего убедитесь, что это 'omp_get_wtime'. –