मेरे पास एक सी कोड है जो नोड्स के दो सेट (प्रत्येक को तीन समन्वयित करता है) के बीच की दूरी की गणना करता है, भले ही मेरा कोड अभी तक पर्याप्त तेज़ हो गया है, मैं इसे थोड़ा और अधिक बढ़ा देना चाहता हूं समांतर कंप्यूटिंग। मुझे पहले से ही ओपनएमपी के बारे में कुछ जानकारी मिली है और मैं अभी इसका उपयोग करने की कोशिश कर रहा हूं, लेकिन कुछ अजीब बात है। Omp के बिना कोड cpu समय 20s है, दो प्रज्ञा लाइनों को 160s लेता है! यह कैसे हो सकता है?दूरी गणना के लिए समानांतर सी कोड
मैं अक्सर यहां मेरी कोड संलग्न
float computedist(float **vG1, float **vG2, int ncft, int ntri2, int jump, float *dist){
int k = 0, i, j;
float min = 0;
float max = 0;
float avg = 0;
float *d = malloc(3*sizeof(float));
float diff;
#pragma omp parallel
for(i=0;i<ncft;i+=jump){
#pragma omp parallel
for(j=0;j<ntri2;j++){
d[0] = vG1[i][0] - vG2[j][0];
d[1] = vG1[i][1] - vG2[j][1];
d[2] = vG1[i][2] - vG2[j][2];
diff = sqrt(pow(d[0],2) + pow(d[1],2) + pow(d[2],2));
if(j==0)
dist[k] = diff;
else
if(diff<dist[k])
dist[k] = diff;
}
avg += dist[k];
if(dist[k]>max)
max = dist[k];
k++;
}
printf("max distance: %f\n",max);
printf("average distance: %f\n",avg/(int)(ncft/jump));
free(d);
return max;
}
आप कोई मदद
"यह कैसे हो सकता है?" - सामान्य कारण अनुचित समानांतर योजना है, या तो संदर्भ के इलाके या बहुत अधिक सिंक्रनाइज़ेशन (या दोनों) के माध्यम से। –
आप 1 के लिए एक वातावरण चर OMP_NUM_THREADS निर्धारित करते हैं, और एक ही धागे के साथ अपने OpenMP कार्यक्रम चलाते हैं, कितना समय लगेगा? –
@AlexeyKukanov यह ठीक डाल शून्य omp_set_num_threads (NUM_THREADS int) समानांतर पाश से पहले है? – Nicholas