The CPU cache

O cache é uma área da memória muito rápida que nós encontramos no processador do PSP. De fato é o único componente que funciona realmente na velocidade do processador (222 MHz), as outras áreas (como a RAM, ou o VRAM) são bem mais lentas
Quando você lê ou escreve dados em algum lugar, de fato este é escrito no Cache, e não diretamente na memória. Desta forma se você precisar resgatar esta informação mais tarde, as mesmas serão enviadas imediatamente do cache, porque é rápido.
Os dados são arquivados no cache (64 bytes de cada vez) e quando este está cheio, os dados mais velhos são removidos do cache (neste momento é escritos na RAM) para que se tenha espaço para os novos dados.
Geralmente este processo é transparente: você não escolhe quais dados vão para o cache, isto é feito por conta própria.
Você não teria que saber que ele existe, e tudo seria maravilhoso... se fosse tão simples assim.

No PSP, o processador não é a única coisa que pode alcançar todos os componentes, como a RAM. Por exemplo, o processador gráfico (formalmente GE no PSP, Graphic Engine, que eu chamarei de GPU como para os outros consoles) têm também acesso à RAM
Se você o quiser extrair uma imagem, você tem apenas que escrever a imagem na RAM (ou em VRAM) e pedir para extrai-la. Mas, por causa do cache, não é possível, porque a imagem não está realmente na RAM, e sim no cache do processador! Obviamente, o GPU tem acesso somente a RAM, e não ao cache do processador. Se você fizer isto,você terá uma imagem corrompida porque parte dela está no cache e o restante na RAM (32 kB, somente a parte mais velha estára na RAM, a outra estará no cache). Para evitar isto é necessário remover a imagem do cache antes de solicitar a GPU para extraí-la. Também necessário quando usar palettes.
Veja as funções a seguir:

void oslUncacheImage(OSL_IMAGE *img);

void oslUncachePalette(OSL_PALETTE *pal);

E em uma maneira mais geral, remove um grupo de dados que está no cache:

void oslUncacheData(void *data, size_t size);

É necessário ter em mente que está operação é pesada nos termos de desempenho, caso você venha utilizar,lembre-se que se você remover seus dados do cache, você o faz parecer inútil, e o desempenho também irá cair.

Sobre desempenhos, é necessário ter em mente que no PSP, o cache é 32 kB para dados e 32 kB para o código. Para o código, é melhor já que a parte principal do jogo é menor que 32 kB, assim estará completa no cache e irá rodar rapidamente, porque não será necessário ler a RAM (que é muito lenta) e você terá o máximo velocidade do processador. Isto também depende da otimização do código, para se obter melhor velocidade, utilizar laços por exemplo terá talvez o efeito inverso, porque mesmo se executado mais rapidamente, o irá fazer grande, reduzindo o desempenho do cache. Tome cuidado, porque fatores minúsculos podem fazer diferenças grandes (por exemplo, movendo uma função antes ou depois outra no código pode fazer a vitória ou perder 10 em 20% do desempenho, visto que nada mudado altera a ordem).