के साथ सरणी तत्वों की समानांतर वृद्धि, मेरे पास आकार संख्या के सरणी a
है यादृच्छिक संख्या के साथ। OpenMP का उपयोग करते हुए मैं तत्वों ए में हर नंबर के लिए आकार 10 की सरणी b
के 9 को 0 बढ़ाने के लिए भाषा चाहते सीओपनएमपी
#pragma omp parallel for
for(i = 0; i < N; i++)
b[a[i]]++;
दुर्भाग्य ख के कुछ तत्वों में जाहिरा तौर पर simultanous राईट देखते हैं और परिणाम नहीं है जैसा सोचा था। मैंने बी को पहली बार और आखिरी बार स्थापित करने की कोशिश की लेकिन इससे कोई मदद नहीं मिली।
कार्य आसान लगता है लेकिन मुझे नहीं पता कि इसे कैसे करें क्योंकि ओपनएमपी में सरणी के लिए atomic
नहीं है। मैं धागे की संख्या के लिए एक नई सरणी बना सकता हूं और फिर अंत में उन्हें एक साथ जोड़ सकता हूं लेकिन यह इष्टतम प्रतीत नहीं होता है।
सरणी b
के तत्वों में a
में संख्याओं के अवसरों की गणना करने का सबसे तेज़ तरीका कौन सा होगा?
योग है स्वतंत्र रूप से और फिर परिणामों मर्ज करें। –
@BrianCain मुझे यकीन नहीं है कि आप वास्तव में क्या मतलब है। 'योग' के साथ क्या आप वृद्धि का मतलब है? 'स्वतंत्र रूप से' के साथ आपका मतलब है कि मुझे एक नया निजी चर बनाना चाहिए? विलय के साथ आपका मतलब है कि मुझे अंत में निजी चर के सभी संस्करणों को जोड़ना चाहिए? क्योंकि यह मेरे लिए अक्षम लगता है। क्या आप मुझे एक साधारण कोड खंड के साथ दिखा सकते हैं जिसका मतलब है? – Michael
एल्गोरिदम उतना आसान नहीं है जितना मैंने माना था। लेकिन आखिरकार यह एक ट्रेडऑफ है और क्या यह संभवतः एन से 'बी 'के आकार के अनुपात पर निर्भर करता है (क्या यह वास्तव में हमेशा 10 है?)। म्यूटेक्स की श्रृंखला का उपयोग करना एक आसान विकल्प है। –