Hier ist mein Test-Code für OpenMPWarum eine einfache for-Schleife ohne OpenMP schneller, als es mit OpenMP ist
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
int main(int argc, char const *argv[]){
double x[10000];
clock_t start, end;
double cpu_time_used;
start = clock();
#pragma omp parallel
#pragma omp for
for (int i = 0; i < 10000; ++i){
x[i] = 1;
}
end = clock();
cpu_time_used = ((double) (end - start))/CLOCKS_PER_SEC;
printf("%lf\n", cpu_time_used);
return 0;
}
ich den Code mit den folgenden zwei Befehle zusammengestellt:
gcc test.c -o main
Der Ausgang main
Rum ist 0.000039
Dann habe ich mit OpenMP zusammengestellt
und der Ausgang ist 0.008020
Könnte jemand mir helfen zu verstehen, warum es passiert. Danke im Voraus.
Ich denke, Sie müssen Klammern nach der '#pragma omp parallel 'Anweisung um die' #pragma omp für' Schleife –
meinst du so? '#pragma omp parallel {......}', habe ich versucht und es ist das gleiche und funktioniert nicht. –
Es ist eine Weile her, seit ich openMP benutzt habe, aber der größte Kostenfaktor für den Code ist die Overhead-Verwaltung von Threads. Sie werden größere Erträge bei viel größeren Ausführungen sehen (versuchen Sie etwa 1 Million). –