Nem vagyok cache szakértő, csak tapasztalatból tudok pár dolgot, mert gyorsítani akartam a kódjaimon. Meg persze olvastam azért utána.
Sajnos, a mai gépek nem adnak rá eszközt, hogy gazdálkodjon az ember a CPU-cache területtel. Ellentétben a virtuális memória kezeléssel, ahol ugye megmondhatom egy memóriaterületről, hogy ezt sose swappeld ki, kedves oprendszer. Jó volna hasonló a CPU cache-re, legalább a legkülsőre, de nincs ilyen tudtommal.
Ellenszerem:
a) néhány core-t kiszedek a scheduler hatálya alól az "isolcpus" kernel paraméterrel. (Pl. "isolcpus=1,3" az 1-es és 3-as core-t úgy állítja be, hogy a Linux nem ad ki rá semmit magától. Egy 4 core-os gépen marad az oprendszernek a 0 és 2 sorszámú.)
b) A védendő programot "schedtool"-lal futtatom. (Pl. "schedtool -a 3 -e ./szamolosprogram" a 3-as core-on futtatja a szamolsoprogram-ot.)
Persze, hogy ez hatásos legyen, meg kell nézni, melyik core-ok osztoznak a cache-eken, de ez a /sys/devices/system/cpu/ -ből kideríthető.
A programírás része már kicsit összetettebb, ezt most nem tudnám egy fórum-hozzászólásban összefoglalni. De baromira nem mindegy pl. a memóriaműveletek sorrendje sem. Nem csak az számít, hogy a használt adatok férjenek bele a cache-be.