Una CPU tiene una caché de asignación directa de 32 KB con un tamaño de bloque de 128 bytes. Suponga que A es una array bidimensional de tamaño 512 × 512 con elementos que ocupan 8 bytes cada uno. Considere el segmento de código
for (i =0; i < 512; i++) { for (j =0; j < 512; j++) { x += A[i][j]; } }
Suponiendo que la array se almacena en el orden A[0][0], A[0][1], A[0][2]……, el número de errores de caché es
(A) 16384
(B) 512
(C) 2048
(D) 1024
Respuesta: (A)
Explicación:
Block size = 128 Byte Number of elements in 1 block = 128/8 = 16 Block 0: A[0][0] to A[0][15] Block 1: A[0][16] to A[0][31] and so on For i=0: A[0][0] is not present in the cache, so there will be a miss but for the next 15 elements (j=1 to j=15), there will be no miss. j runs from 0 to 512 and there will be a miss after every 16 elements. So total number of misses for i=0 is (512/16) = 32. The outer loop of i runs from 0 to 512 so the total number of misses will be 512 * 16 = 16834
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA