Ich habe folgendes Programm C++ Programm, das keine Kommunikation verwendet, und die gleiche identische Arbeit auf allen Kernen getan, ich weiß, dass dies nicht ein parallele Verarbeitung überhaupt nicht verwenden:Kosten OpenMPI in C++
unsigned n = 130000000;
std::vector<double>vec1(n,1.0);
std::vector<double>vec2(n,1.0);
double precision :: t1,t2,dt;
t1 = MPI_Wtime();
for (unsigned i = 0; i < n; i++)
{
// Do something so it's not a trivial loop
vec1[i] = vec2[i]+i;
}
t2 = MPI_Wtime();
dt = t2-t1;
Ich führe dieses Programm in einem einzigen Knoten mit zwei Intel® Xeon® Prozessor E5-2690 v3, so habe ich 24 Kerne alle zusammen. Dies ist ein dedizierter Knoten, niemand benutzt ihn. Da es keine Kommunikation gibt und jeder Prozessor die gleiche Menge an (identischer) Arbeit leistet, sollte die Ausführung auf mehreren Prozessoren die gleiche Zeit ergeben. Allerdings bekomme ich die folgenden Zeiten (gemittelt Zeit über alle Kerne):
1 Kern: 0,237
2 Kerne: 0,240
4 Kerne: 0.241
8 Cores: 0,261
16 Adern: 0,454
Was coul d verursacht die Zunahme der Zeit? Besonders für 16 Kerne. Ich habe Callgrind ran und ich bekomme die ungefähr gleiche Menge an Daten/Befehl fehlt auf allen Kernen (der Prozentsatz der Fehlschläge sind die gleichen).
Ich habe den gleichen Test auf einem Knoten mit zwei Intel® Xeon® Prozessor E5-2628L v2 wiederholt (16 Kerne alle zusammen), beobachte ich die gleiche Zunahme der Ausführungszeiten. Hat das etwas mit der MPI-Implementierung zu tun?
Ich verstehe nicht ganz, was Sie tun - führen Sie eine einzelne Instanz des gleichen Programms auf jedem Kern separat? Außerdem sprichst du über Cores (24) und dann über Prozessoren - was ist das? – MikeMB
Ja, ich renne, ich führe eine einzelne Instanz des gleichen Programms auf jedem Kern. Sorry über die Mischung von Wörtern, ich habe es bearbeitet. – user302157