मैं होमवर्क असाइनमेंट पर काम कर रहा हूं, और मैं अपने समाधान पर घंटों तक फंस गया हूं। हमें जो समस्या दी गई है वह निम्नलिखित कोड को अनुकूलित करना है, ताकि यह तेजी से चलता है, भले ही यह कितना गन्दा हो जाए। हमें कैश ब्लॉक और लूप अनोलिंग का शोषण करने जैसी चीजों का उपयोग करना चाहिए।सरणी ट्रांसपोज़िंग फ़ंक्शन को अनुकूलित करना
समस्या:
//transpose a dim x dim matrix into dist by swapping all i,j with j,i
void transpose(int *dst, int *src, int dim) {
int i, j;
for(i = 0; i < dim; i++) {
for(j = 0; j < dim; j++) {
dst[j*dim + i] = src[i*dim + j];
}
}
}
क्या मैं अब तक है:
//attempt 1
void transpose(int *dst, int *src, int dim) {
int i, j, id, jd;
id = 0;
for(i = 0; i < dim; i++, id+=dim) {
jd = 0;
for(j = 0; j < dim; j++, jd+=dim) {
dst[jd + i] = src[id + j];
}
}
}
//attempt 2
void transpose(int *dst, int *src, int dim) {
int i, j, id;
int *pd, *ps;
id = 0;
for(i = 0; i < dim; i++, id+=dim) {
pd = dst + i;
ps = src + id;
for(j = 0; j < dim; j++) {
*pd = *ps++;
pd += dim;
}
}
}
कुछ विचार, मुझे सही करें यदि मैं गलत हूँ:
मैं पाश unrolling लेकिन मैं बारे में सोचा है ऐसा न सोचें कि इससे मदद मिलेगी, क्योंकि हम नहीं जानते कि एनएक्सएन मैट्रिक्स में प्रमुख आयाम हैं या नहीं। यदि मैंने इसके लिए चेक किया है, तो इसमें अतिरिक्त गणना शामिल होगी जो फ़ंक्शन को धीमा कर देगी।
कैश ब्लॉक बहुत उपयोगी नहीं होंगे, क्योंकि इससे कोई फर्क नहीं पड़ता कि हम एक सरणी को रैखिक रूप से (1,2,3,4) तक पहुंचेंगे जबकि दूसरा हम एन के कूद में पहुंचेंगे। जबकि हम प्राप्त कर सकते हैं कैश का दुरुपयोग करने और src block को तेज़ी से एक्सेस करने के लिए फ़ंक्शन, फिर भी उन्हें डीएसटी मैट्रिक्स में रखने के लिए एक लंबा समय लगेगा।
मैंने सरणी एक्सेसर्स के बजाय पॉइंटर्स का उपयोग करने का भी प्रयास किया है, लेकिन मुझे नहीं लगता कि वास्तव में प्रोग्राम को किसी भी तरह से गति देता है।
किसी भी मदद की सराहना की जाएगी।
धन्यवाद
यह जाने का रास्ता है। "कैश अनजान मैट्रिक्स ट्रांसपोजिशन" गूगल वाक्यांश है। नोट: 16 * 16 कैश लाइनों के 2 * 2 टाइल्स लेकर आप 4096 बाइट भरते हैं, जो कि अधिकांश (x) मशीनों पर एक मेमोरी पेज है। – wildplasser
हां !!! मेमोरी एक्सेस को अनुकूलित करने से मेरे अनुभव से कई गुना सुधार हो सकता है। – sharptooth
यह सही उत्तर है। कैश अनुकूलन >> बाकी। –