Ich möchte die Schleifenleistung mit openmp durch einen Teil des einfachen Codes vergleichen. Aber das Ergebnis ist falsch.OpenMP für Schleife verursacht falsches Ergebnis
Ich benutze bereits Reduktion um Race Condition zu vermeiden, aber nie arbeiten.
hier ist mein Code: Vielen Dank für jede Anregung
void TestMP_1(){
float afValueTmp[MP_TEST_NUM] = { 0 }; // MP_TEST_NUM = 10000
float sum = 0, sumNoMP = 0;
float fDiff = 0;
double eTDiff = 0;
double t0 = 0;
double t1 = 0;
for (int i = 0; i < MP_TEST_NUM; i++)
{
afValueTmp[i] = i;
}
t0 = (double)getTickCount();
for (int i = 0; i < MP_TEST_NUM; i++)
{
for (int k = 0; k < MP_TEST_NUM; k++); // just for delay
sumNoMP += afValueTmp[i]; // equation 4
}
t0 = ((double)getTickCount() - t0)/getTickFrequency();
t1 = (double)getTickCount();
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < MP_TEST_NUM; i++)
{
for (int k = 0; k < MP_TEST_NUM; k++); // just for delay
sum += afValueTmp[i];
}
t1 = ((double)getTickCount() - t1)/getTickFrequency();
eTDiff = t0 - t1; // time improve
fDiff = sum - sumNoMP; // check result
printf("%.3f\n", eTDiff);
}
'für (int k = 0; k
@ Johnny Mopp danke für die Nachricht. aber nach dem Hinzufügen von ";" für die Verzögerungsschleife. das Ergebnis fehlt noch. –
Ich manuell berechnen das Ergebnis ist 49995000 und sumNoMP = 49992896 sum = 49994736 ..... –