में लागू की जा सकती है यह मेरी पहली पोस्ट है। मैं इसे छोटा रखने की कोशिश करूंगा क्योंकि मैं आपके समय का महत्व देता हूं। यह समुदाय मेरे लिए अविश्वसनीय रहा है।क्या यह समांतरता ओपनसीएल
मैं ओपनसीएल सीख रहा हूं और नीचे एल्गोरिदम से समानांतरता को निकालना चाहता हूं। मैं केवल आपको वह हिस्सा दिखाऊंगा जिस पर मैं काम कर रहा हूं, जिसे मैंने जितना संभव बनाया उतना सरल बना दिया है।
1) इनपुट: दो 1 डी सरणी लंबाई (एन): ए, बी, और एन का मान। सी [0], डी [0] भी मानता है।
2) आउटपुट: लंबाई के दो -1 डी सरणियों (एन): सी, डी
C[i] = function1(C[i-1])
D[i] = function2(C[i-1],D[i-1])
तो इन पुनरावर्ती परिभाषा, एक दिया मैं मूल्य के लिए सी & डी की लेकिन गणना में किया जा सकता है समानांतर (वे स्पष्ट रूप से अधिक जटिल हैं, इसलिए समझने के लिए)। दो काम आइटम (संख्या 0,1) में से प्रत्येक के
__kernel void test (__global float* A, __global float* B, __global float* C,
__global float* D, int n, float C0, float D0) {
int i, j=get_global_id(0);
if (j==0) {
C[0] = C0;
for (i=1;i<=n-1;i++) {
C[i] = function1(C[i-1]);
[WAIT FOR W.I. 1 TO FINISH CALCULATING D[i]];
}
return;
}
else {
D[0] = D0;
for (i=1;i<=n-1;i++) {
D[i] = function2(C[i-1],D[i-1]);
[WAIT FOR W.I. 0 TO FINISH CALCULATING C[i]];
}
return;
}
}
आदर्श रूप में एक प्रारंभिक तुलना करना होगा और उसके बाद अपने-अपने पाश में प्रवेश, प्रत्येक यात्रा के लिए सिंक्रनाइज़ किया जा रहा है: एक अनुभवहीन सोचा निम्नलिखित कर्नेल के लिए दो काम आइटम बनाने की जाएगी । अब GPUs के सिम कार्यान्वयन को देखते हुए, मुझे लगता है कि यह काम नहीं करेगा (काम आइटम सभी कर्नेल कोड के लिए इंतजार कर रहे हैं), हालांकि क्या इस प्रकार के काम को दो सीपीयू कोरों में असाइन करना संभव है और यह अपेक्षा के अनुसार काम करता है? इस मामले में बाधा क्या होगी?
क्या आपको आवश्यकता है कि सी और डी के सभी मूल्यों को बचाया जाए, या आप केवल अंतिम परिणाम की परवाह करते हैं? – mfa
क्या आप कृपया 'function1' और' function2' को परिभाषित कर सकते हैं? –