Rendimiento de bucles (una pregunta de almacenamiento en caché)

Considere a continuación dos funciones del lenguaje C para calcular la suma de elementos en una array 2D. Ignorando las optimizaciones del compilador, ¿cuál de las dos es una mejor implementación de sum?

// Function 1
int fun1(int arr[R][C])
{
    int sum = 0;
    for (int i=0; i<R; i++)
      for (int j=0; j<C; j++)
          sum += arr[i][j];
}
  
// Function 2
int fun2(int arr[R][C])
{
    int sum = 0;
    for (int j=0; j<C; j++)
      for (int i=0; i<R; i++)
          sum += arr[i][j];
}

En C/C++, los elementos se almacenan en orden de fila principal. Entonces, la primera implementación tiene una mejor localidad espacial (las ubicaciones de memoria cercanas se referencian en iteraciones sucesivas). Por lo tanto, siempre se debe preferir la primera implementación para iterar arrays multidimensionales.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *