मैंने मार्क हैरिस द्वारा सीयूडीए में समांतर कमी को अनुकूलित करने वाले लेख को पढ़ा है, और मैंने इसे वास्तव में बहुत उपयोगी पाया है, लेकिन फिर भी मैं कभी-कभी 1 या 2 अवधारणाओं को समझने में असमर्थ हूं।समांतर कमी
//First add during load
// each thread loads one element from global to shared mem
unsigned int tid = threadIdx.x;
unsigned int i = blockIdx.x*blockDim.x + threadIdx.x;
sdata[tid] = g_idata[i];
__syncthreads();
अनुकूलित कोड:: यह स्नातकोत्तर 18 पर लिखा है 2 भार और कमी के 1 जोड़ने के साथ:
// perform first level of reduction,
// reading from global memory, writing to shared memory
unsigned int tid = threadIdx.x; ...1
unsigned int i = blockIdx.x*(blockDim.x*2) + threadIdx.x; ...2
sdata[tid] = g_idata[i] + g_idata[i+blockDim.x]; ...3
__syncthreads(); ...4
मैं लाइन 2 को समझने में असमर्थ हूँ, अगर मेरे पास 256 तत्व हैं, और यदि मैं 128 को अपने ब्लॉकइज़ के रूप में चुनता हूं, तो मैं इसे 2 से गुणा क्यों कर रहा हूं? कृपया बताएं कि ब्लॉकइज़ को कैसे निर्धारित किया जाए?
आपके उत्तर के लिए धन्यवाद। मैं समाधान को समझने की कोशिश कर रहा हूं, लेकिन यदि आप मुझे बता सकते हैं कि तत्वों की कुल संख्या क्या है; और प्रति ब्लॉक कितने तत्व संसाधित किए जाते हैं? इसके अलावा यदि आप मुझे बता सकते हैं, शुरुआत में हम 4 ब्लॉक वाले तत्वों को प्रोसेस कर रहे थे और अब तत्वों की संख्या समान है लेकिन 2 ब्लॉक के साथ? – robot
: एच क्यों प्रत्येक धागा केवल 2 तत्वों की गणना करेगा? चूंकि कुल 16 तत्व और 4 धागे/ब्लॉक हैं, प्रत्येक ब्लॉक के 2 थ्रेड 4 तत्वों की गणना करेंगे। – robot
उत्तर के लिए धन्यवाद। यदि पहले 2 ब्लॉक के प्रत्येक थ्रेड 2 तत्वों की गणना करेगा, तो अंतिम 2 ब्लॉक के लिए प्रत्येक थ्रेड क्या करेगा? – robot