2011-09-14 24 views
11

का सशर्त उपयोग मैं लूप पर अपनी प्रोग्राम दक्षता में सुधार के लिए ओपनएमपी का उपयोग कर रहा हूं।ओपनएमपी: #pragma

लेकिन हाल ही में मुझे पता चला कि छोटे लूपों पर इस पुस्तकालय के उपयोग ने प्रदर्शन में कमी आई और सामान्य तरीके से उपयोग करना बेहतर था।

वास्तव में, मैं केवल तभी एक शर्त संतुष्ट हो जाता है OpenMP उपयोग करना चाहते हैं, मेरे कोड

#pragma omp parallel for 
for (unsigned i = 0; i < size; ++i) 
    do_some_stuff(); 

है लेकिन मुझे क्या करना चाहते हैं #pragma निष्क्रिय करने के लिए करता है, तो आकार काफी छोटा है अर्थात्:

if (size > OMP_MIN_VALUE) 
    #pragma omp parallel for 
for (unsigned i = 0; i < size; ++i) 
do_some_stuff(); 

लेकिन काम नहीं करता है, बेहतर तरीका पाश दो बार लिखने के लिए है, लेकिन मुझे लगता है कि जिस तरह से करने के लिए नहीं चाहता ...

if (size > OMP_MIN_VALUE) 
{ 
    #pragma omp parallel for 
    for (unsigned i = 0; i < size; ++i) 
    do_some_stuff(); 
} 
else 
{ 
    for (unsigned i = 0; i < size; ++i) 
    do_some_stuff(); 
} 

ऐसा करने का बेहतर तरीका क्या है?

उत्तर

7

मुझे लगता है कि आप अपने parallel for निर्देश पर वैकल्पिक schedule clause का उपयोग करके प्रभाव आप देख रहे हैं प्राप्त करने के लिए सक्षम होना चाहिए:

#pragma omp parallel for schedule(static, OMP_MIN_VALUE) 
for (unsigned i = 0; i < size; ++i) 
    do_some_stuff(); 

आप हालांकि और विभिन्न समय निर्धारण के विभिन्न प्रकार के साथ चारों ओर खेलने के लिए चाहते हो सकता है यह देखने के लिए कि आपकी लाइब्रेरी दिनचर्या सबसे अच्छी तरह से उपयुक्त है।

+11

मैंने #pragma omp समानांतर (आकार> = OMP_MIN_VALUE) के लिए समानांतर उपयोग किया – Arthur

संबंधित मुद्दे