Tu n'as jamais access explicitement au cache, le cache est entierement controlle par les access que tu fais a la memoire.
On peut aussi demander au cache de precacher une partie des donnes de facon a eviter des defaut de cache successif, mais la masse de donnnees transferer depuis la memeoire vers le cache reste la meme. (soit avec des instructions zarbi du processeur, ou en accedeant de la memoire "pour rien" ou encore, en utilisant un thread auxiliaire.)
Souvent, on cherche a ameliorer la localite des access a la memoire ou a reduire le montant de memoire utiliser.
Passer de int a short permet de couper l'allocation memoire en deux exemple. Si tu n'as pas besoin de valeur superieur a 65K, tu viens de permettre a ton tableau de rentrer en cache. Si tu as une structure de donne qui fait 3 octets, il y a fort a parier que ton compilateur/langage aligne sur 4 octets et "gaspille" 1/4 de la memoire, retirer l'alignement manuellement permet de gagner significativement des performances. Tu peux aussi voir pour compresser tes donnees. Il y a plein de cas, ou tu peux representer tes donnees dans une autre forme plus compacte et qui va permettre de rentrer en cache.
L'autre technique est de changer comment on accede au donnees en reecrivant l'algo. Un exemple classique est le floutage d'une image qui typiquement s'ecrit comme ca:
for (int i=0; i<N; i++) for (int j=0; j<M; j++) new[i][j] =
old[i][j]+old[i-1][j]+old[i+1][j]+old[i][j-1]+old[
i][j+1];
(oui, je sais, les access au bord tout ca...)
Regarde visuellement comment tu accedes a la memoire dans un cas comme ca. les lignes de l'image sont acceder par groupe de 3. quand tu traites la ligne 5, tu accedes a la ligne 4 et 6. Quand tu vas traiter la ligne 6, tu accedera a la ligne 5 et 7. Si ton image est tres grande, quand tu traite la ligne 6, la ligne 5 n'est deja plus en cache (parceque M est tres grand). Du coup, tu te retrouve a charger cache ligne de old 3 fois. A la place, tu peux decouper ton image en bloc de taille calcule pour que ca tienne en cache. Et traiter l'image par bloc. Ainsi l'image n'est charge qu'une seule fois en memoire. Pour plus d'information, regarde la notion de Z-order et comment ecrire le produit de matrice par matrice (dense).