นี่คือสารสกัดจากโปรแกรมที่เป็นปัญหา เมทริกซ์img[][]
มีขนาด SIZE × SIZE และเริ่มต้นได้ที่:
img[j][i] = 2 * j + i
จากนั้นคุณสร้างเมทริกซ์res[][]
และแต่ละฟิลด์ในที่นี้จะถูกทำให้เป็นค่าเฉลี่ยของ 9 ฟิลด์รอบ ๆ มันในเมทริกซ์ img เส้นขอบจะเหลือ 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
คอมไพเลอร์คือ GCC จากสิ่งที่ฉันรู้นี่เป็นเพราะการจัดการหน่วยความจำ แต่ฉันไม่รู้เกี่ยวกับเรื่องนั้นมากเกินไปซึ่งเป็นสาเหตุที่ฉันถามที่นี่
นอกจากนี้วิธีการแก้ไขนี้จะดี แต่ถ้ามีคนสามารถอธิบายเวลาดำเนินการเหล่านี้ฉันมีความสุขมากพอ
ฉันรู้แล้วว่า malloc / free แต่ปัญหาไม่ใช่จำนวนหน่วยความจำที่ใช้มันเป็นเพียงเวลาดำเนินการดังนั้นฉันจึงไม่ทราบว่าจะช่วยได้อย่างไร