मेरे सीपीयू 2 कोर और 4 धागे के साथ एक Core i3 330M है। जब मैं अपने टर्मिनल में बिल्ली /proc/cpuinfo
कमांड निष्पादित करता हूं, तो ऐसा लगता है कि मेरे पास 4 सीपीयूएस है। जब मैं ओपनएमपी फ़ंक्शन get_omp_num_procs()
का उपयोग करता हूं तो मुझे भी 4.OpenMP और कोर/धागे
अब मेरे पास मानक सी ++ वेक्टर क्लास है, मेरा मतलब है कि एक निश्चित आकार की डबल सरणी कक्षा है जो अभिव्यक्ति टेम्पलेट्स का उपयोग नहीं करती है। मैंने सावधानीपूर्वक मेरी कक्षा के सभी तरीकों को समानांतर किया है और मुझे "अपेक्षित" गति मिलती है।
सवाल यह है: मैं इस तरह के एक सरल मामले में की उम्मीद speedup अनुमान लगा सकते हैं? उदाहरण के लिए, यदि मैं समानांतर लूप के बिना दो वैक्टर जोड़ता हूं तो मुझे कुछ समय मिलता है (शेल टाइम कमांड का उपयोग करके)। अब अगर मैं ओपनएमपी का उपयोग करता हूं, तो क्या मुझे कोर/थ्रेड्स की संख्या के अनुसार 2 या 4 से विभाजित समय मिलना चाहिए? मैं जोर देता हूं कि मैं केवल इस विशेष साधारण समस्या के लिए पूछ रहा हूं, जहां डेटा में कोई परस्पर निर्भरता नहीं है और सबकुछ रैखिक (वेक्टर अतिरिक्त) है।
Vector Vector::operator+(const Vector& rhs) const
{
assert(m_size == rhs.m_size);
Vector result(m_size);
#pragma omp parallel for schedule(static)
for (unsigned int i = 0; i < m_size; i++)
result.m_data[i] = m_data[i]+rhs.m_data[i];
return result;
}
मैं पहले से ही इस पोस्ट को पढ़ लिया है: OpenMP thread mapping to physical cores
यहाँ कुछ कोड है।
मुझे आशा है कि किसी ने मुझसे बारे में कैसे OpenMP काम इस सरल मामले में करवाने अधिक बता देंगे। मुझे कहना चाहिए कि मैं समांतर कंप्यूटिंग में एक नौसिखिया हूं।
धन्यवाद!