Avatar ·

O que significa "código cache-friendly" e como isso afeta o desempenho do C++?

Olá! Estou estudando C++ e me deparei com o termo "cache-friendly" (amigável ao cache). Frequentemente vejo em discussões sobre desempenho que o código deve ser cache-friendly, mas não entendo completamente o que isso significa na prática. Tenho um exemplo simples. Trabalho com matrizes 1000×1000 (int). Aqui estão duas variações de código para somá-las: Variante 1: por linhas ```cpp int sum = 0; for (int i = 0; i < 1000; ++i) for (int j = 0; j < 1000; ++j) sum += matrix[i][j]; ``` Variante 2: por colunas ```cpp int sum = 0; for (int j = 0; j < 1000; ++j) for (int i = 0; i < 1000; ++i) sum += matrix[i][j]; ``` A primeira variante funciona 5 a 10 vezes mais rápido no meu computador! Li que isso está relacionado ao cache, mas por que uma diferença tão grande? Como determinar se o código é cache-friendly? E como escrever esse código de forma consciente, em vez de apenas memorizar padrões? Ficarei grato por uma explicação detalhada com exemplos. <<>>

O que é cache e por que é importante?