यहाँ प्रश्न में कार्यक्रम से अर्क है। मैट्रिक्स img[][]
का आकार SIZE × SIZE है, और इसे यहां आरंभ किया गया है:
img[j][i] = 2 * j + i
फिर, आप एक मैट्रिक्स बनाते हैं res[][]
, और यहां प्रत्येक फ़ील्ड को img मैट्रिक्स में इसके चारों ओर 9 फ़ील्ड का औसत बनाया जाता है। सीमा को सादगी के लिए 0 पर छोड़ दिया जाता है।
for(i=1;i<SIZE-1;i++)
for(j=1;j<SIZE-1;j++) {
res[j][i]=0;
for(k=-1;k<2;k++)
for(l=-1;l<2;l++)
res[j][i] += img[j+l][i+k];
res[j][i] /= 9;
}
यह सब वहाँ कार्यक्रम के लिए है। पूर्णता की खातिर, यहाँ पहले जो आता है। इसके बाद कोई कोड नहीं आता है। जैसा कि आप देख सकते हैं, यह सिर्फ आरंभीकरण है।
#define SIZE 8192
float img[SIZE][SIZE]; // input image
float res[SIZE][SIZE]; //result of mean filter
int i,j,k,l;
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
img[j][i] = (2*j+i)%8196;
मूल रूप से, यह कार्यक्रम धीमा है जब SIZE 2048 से अधिक है, उदाहरण के लिए निष्पादन समय:
SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs
संकलक जीसीसी है। मैं जो जानता हूं, यह स्मृति प्रबंधन के कारण है, लेकिन मैं वास्तव में उस विषय के बारे में बहुत अधिक नहीं जानता हूं, यही कारण है कि मैं यहां पूछ रहा हूं।
यह भी तय करने के लिए कि यह कैसे अच्छा होगा, लेकिन अगर कोई इन निष्पादन समय की व्याख्या कर सकता है तो मैं पहले ही काफी खुश हो जाऊंगा।
मैं पहले से ही मॉलॉक / मुफ्त का पता है, लेकिन समस्या का उपयोग की गई मेमोरी की मात्रा नहीं है, यह केवल निष्पादन का समय है, इसलिए मुझे नहीं पता कि यह कैसे मदद करेगा।