¿Por qué mi programa es lento cuando se repite sobre exactamente 8192 elementos?


Aquí está el extracto del programa en cuestión. La matriz img[][] tiene el tamaño SIZE×SIZE, y se inicializa en:

img[j][i] = 2 * j + i

Entonces, haces una matriz res[][], y cada campo aquí está hecho para ser el promedio de los 9 campos alrededor de él en la matriz img. El borde se deja en 0 para simplificar.

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;
}

Eso es todo lo que hay en el programa. Para completar, esto es lo que viene antes. Ningún código viene después. Como puedes ver, es sólo inicialización.

#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;

Básicamente, este programa es lento cuando el TAMAÑO es un múltiplo de 2048, por ejemplo, los tiempos de ejecución:

SIZE = 8191: 3.44 secs
SIZE = 8192: 7.20 secs
SIZE = 8193: 3.18 secs

El compilador es GCC. Por lo que sé, esto se debe a la gestión de la memoria, pero realmente no sé demasiado sobre ese tema, por lo que estoy preguntando aquí.

También sería bueno cómo arreglar esto, pero si alguien pudiera explicar estos tiempos de ejecución ya estaría lo suficientemente feliz.

Ya sé de malloc / free, pero el problema no es la cantidad de memoria utilizada, es simplemente tiempo de ejecución, así que no se como eso ayudaría.


Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52