Para los bucles, ¿cuál será más eficiente si se ha eliminado la optimización del compilador?

Tu pregunta está incompleta. La eficiencia de los bucles anidados depende de lo que sucede dentro del bucle y no solo de la estructura del bucle.

De todos modos, digamos que está haciendo las siguientes operaciones en el interior:

ar [i] [j] = br [i] [j] + cr [i] [j];
ar [i] [j + 1] = 2 * br [i] [j + 1];

Acceso a 5 arreglos.

Suponiendo que las matrices se almacenan en forma principal de fila, en el primer caso, en el bucle interno al que accede cerca de elementos 1000 veces. Y después de 1000 acceso cercano, está cambiando a otra fila. Por lo tanto, la localidad de referencia está allí y, por lo tanto, habrá una buena utilización de la memoria caché. Además, debido a que en la iteración actual ya ha accedido a [i] [j + 1] y, por lo tanto, en la siguiente iteración, [i] [j] estará directamente disponible en la memoria caché. Ahora compare esto con el segundo bucle anidado y verá por qué el primero es mejor.