में साझा वैक्टर मैं एक प्रोग्राम को लंबित करने की कोशिश कर रहा हूं जिसका उपयोग मैं कर रहा हूं और निम्नलिखित प्रश्न प्राप्त कर रहा हूं। क्या मुझे एक ही वेक्टर पर कई धागे पढ़ने/लिखने की आवश्यकता है, लेकिन वेक्टर के विभिन्न तत्वों को पढ़ने के लिए मुझे प्रदर्शन का नुकसान मिलेगा? मुझे यह महसूस हो रहा है कि मेरे प्रोग्राम को इसे लंबित करने पर शायद ही कोई तेज़ हो जाता है। निम्नलिखित कोड डालें:ओपनएमपी
#include <vector>
int main(){
vector<double> numbers;
vector<double> results(10);
double x;
//write 10 values in vector numbers
for (int i =0; i<10; i++){
numbers.push_back(cos(i));
}
#pragma omp parallel for \
private(x) \
shared(numbers, results)
for(int j = 0; j < 10; j++){
x = 2 * numbers[j] + 5;
#pragma omp critical // do I need this ?
{
results[j] = x;
}
}
return 0;
}
जाहिर है वास्तविक कार्यक्रम में कहीं अधिक महंगा संचालन करता है, लेकिन इस उदाहरण केवल मेरे सवाल व्याख्या करेगा। तो क्या लूप को तेज़ और पूरी तरह से समानांतर किया जा सकता है या अलग-अलग थ्रेडों को एक दूसरे के लिए इंतजार करना पड़ता है क्योंकि एक समय में केवल एक थ्रेड वेक्टर नंबर तक पहुंच सकता है, हालांकि वे सभी वेक्टर के विभिन्न तत्व पढ़ रहे हैं?
लेखन ऑपरेशन के साथ वही प्रश्न: क्या मुझे महत्वपूर्ण प्रगति की आवश्यकता है या क्या कोई समस्या नहीं है क्योंकि प्रत्येक थ्रेड वेक्टर परिणामों के एक अलग तत्व में लिखता है? मैं जो भी मदद प्राप्त कर सकता हूं उससे खुश हूं और यह जानना अच्छा होगा कि ऐसा करने का कोई बेहतर तरीका है (शायद वैक्टर का उपयोग न करें, लेकिन सरल सरणी और पॉइंटर्स इत्यादि?) मैंने वेक्टर भी पढ़े हैं कुछ मामलों में सुरक्षित धागा नहीं है और यह सूचक का उपयोग करने की अनुशंसा की जाती है: OpenMP and STL vector
आपकी मदद के लिए बहुत बहुत धन्यवाद!
वह बिल्कुल वेक्टर आकार बदलने नहीं है। – eudoxos
@ यूडॉक्सोस मुझे एहसास है कि कोड स्निपेट से, मैं बस यह सुनिश्चित करना चाहता था कि इसका उल्लेख किया गया था, खासकर जब से वह इस तथ्य को सामने लाए कि एसटीएल वैक्टर कुछ शर्तों के तहत थ्रेड-सुरक्षित नहीं हैं – SirGuy
+1: यह वास्तव में नहीं आता है यहां, लेकिन आपको यह ध्यान रखना होगा कि वेक्टर-विशिष्ट संचालन जैसे कि संलग्न करना, आकार बदलना आदि थ्रेडसेफ नहीं है और शायद टूट जाएगा।लेकिन बस एक वेक्टर के तत्वों पर परिचालन ठीक है जब तक कि प्रत्येक तत्व केवल एक धागे द्वारा लिखा जा रहा है। –