Wenn ich den folgenden Code versuchenOpenMP Programm ist langsamer als sequenzielle ein
double start = omp_get_wtime();
long i;
#pragma omp parallel for
for (i = 0; i <= 1000000000; i++) {
double x = rand();
}
double end = omp_get_wtime();
printf("%f\n", end - start);
Ausführungszeit ca. 168 Sekunden, während die sequentielle Version verbringt nur 20 Sekunden.
Ich bin immer noch ein Neuling in der parallelen Programmierung. Wie könnte ich eine parallele Version bekommen, die schneller ist als die sequentielle Version?
Es sollte auch beachtet werden, dass, da 'double x = rand()' den externen Zustand nicht ändert, der Compiler versucht sein könnte, die Schleife in der sequentiellen Version zu optimieren. Im Allgemeinen sollten Sie mit Code testen, der nicht optimiert werden kann. – Vanwaril
@ Vanwaril, 'rand()' ist kein intrinsischer. Der Compiler weiß nicht, ob es eine reine Funktion ist oder nicht (es ist _nicht_) und sollte daher den Aufruf nicht optimieren. –
Vielen Dank. Jetzt gibt die parallele Version 5 Sekunden aus, während die sequentielle Version 9 Sekunden benötigt. –