मैं एक छोटे से अनुप्रयोग पर काम कर रहा हूं जो मैट्रिक्स के साथ एक सरणी को गुणा करता है। यह बिना किसी समस्या के काम करता है। मैं आवेदन के निष्पादन समय को मापने के लिए loking हूँ। मैं प्रत्येक प्रक्रिया (इसके आरंभ और समापन) के निष्पादन के व्यक्तिगत समय को पा सकता हूं लेकिन मुझे वैश्विक समय की आवश्यकता है।एमपीआई वैश्विक निष्पादन समय
यह मेरा कोड है:
int main(int argc, char **argv){
int rang, procesus;
MPI_Status statut;
double start, end, max_end = 0, min_start = 10000;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rang);
MPI_Comm_size(MPI_COMM_WORLD, &procesus);
MPI_Barrier(MPI_COMM_WORLD);
start = MPI_Wtime();
printf("Starting time of process n. %d %f\n",rang, start);
if(rang==0){
//Master work
}else{
//slaves work
}
MPI_Barrier(MPI_COMM_WORLD);
end = MPI_Wtime();
printf("Ending time of process n.%d %f\n\n\n",rang, end);
MPI_Finalize();
//Out of the Parallelized task
if(min_start > start){
min_start = start;
printf("New minumum starting time %f\n", min_start);
}
if(max_end < end){
max_end = end;
printf("New maximum ending time %f\n", max_end);
}
if(rang == 0){
printf("Start %f\n", min_start);
printf("End %f\n", max_end);
}
return 0;
}
मैं varables min_start और के रूप में "वैश्विक" चर max_end का उपयोग अधिकतम और सभी प्रक्रियाओं का न्यूनतम temps को पकड़ने की कोशिश करने के लिए, लेकिन मैं हमेशा शुरू हो जाते हैं और न खत्म होने वाली निष्पादित करने की आखिरी प्रक्रिया का टीएम, समापन समय ठीक है, लेकिन शुरुआती समय गलत है क्योंकि आखिरी प्रक्रिया शुरू करने वाली पहली थी। मैं क्या गलत कर रहा हूं? क्या मैं सभी प्रक्रियाओं के लिए एमपीआई में वास्तव में वैश्विक चर का उपयोग कर सकता हूं, और यदि मैं कैसे कर सकता हूं?
है यही कारण है कि मैं उत्पादन
Starting time of process n.2. 0.101562
Ending time of process n.2. 0.105469
New minumum starting time 0.101562
New maximum ending time 0.105469
Starting time of process n.3. 0.058594
Ending time of process n.3. 0.062500
New minumum starting time 0.058594
New maximum ending time 0.062500
Starting time of process n. 4. 0.007812
Ending time of process n. 4. 0.011719
New minumum starting time 0.007812
New maximum ending time 0.011719
Starting time of process n.1. 0.148438
Ending time of process n.1. 0.152344
New minumum starting time 0.148438
New maximum ending time 0.152344
Starting time of process n.0. 0.207031
Ending time of process n.0. 0.210938
New minumum starting time 0.207031
New maximum ending time 0.210938
Start 0.207031
End 0.210938
अलग-अलग नोड्स से प्रारंभ/समाप्ति समय का उपयोग कर रनटाइम की गणना करने से अमान्य परिणाम मिल सकते हैं यदि घड़ियों को सिंक्रनाइज़ नहीं किया जाता है। –
हाय ... हाँ ... समस्या को हल करने के लिए मैं MPI_Reduce को सभी प्रक्रियाओं के प्रारंभिक और समाप्ति समय के अधिकतम और मिनट को खोजने के लिए जोड़ता हूं ... टिप के लिए धन्यवाद ... :) – jomaora
@ShawnChin, आपका मतलब क्या है? यदि घड़ी सिंक्रनाइज़ नहीं होती है तो प्रारंभ और समाप्ति समय अलग-अलग हो सकता है (संभवतः पूरी तरह से) अलग है, लेकिन वर्तमान में प्रक्रिया के लिए उनका अंतर समाप्त हो गया है, इसलिए या तो मैं कुछ गलत कह रहा हूं या आपका मतलब कुछ और है। क्या तुम समझा सकते हो? पहले ही, आपका बहुत धन्यवाद। –