Optymalizacja dostępu do pamięci
Cache'uj dane z wyprzedneniem

Jeżeli dane są wykorzystywane wielokrotnie albo wykorzystujemy wielu danych z ciągłęgo obszaru dobrze jest wczesniej pobrać je do odpowiedniego poziomu pamięci podręcznej. Służą do tego instrukcje

PREFETCH0 mem ;  załaduj do wszystkich poziomów cache 
PREFETCH1 mem ; załaduj do wszystich poziomów poza L1
PREFETCH2 mem ; ... poza L1 i L2

Używaj PREFETCH wewnątrz pętli. Rozwiń częściowo pętlę tak aby w jednej iteracji "zużyć" cały wiersz cache'u.

mov rbx, tab
 mov rcx, [n]
 .loop:
 PREFETCH [rbx + 16] 
 add eax, [rbx]
 add ebx, [rbx+4]
 add dcx, [rbx+8]
 add esi, [rbx+12]
 add rbx, 16
 sub rcx, 4
 jg .loop
 

We współczesnych procesorach mechanizmy przewidywania rozgałęzień i wstępnego pobierania danych i kodu działają tak dobrze, że dają często lepsze rezultaty niż ręczna optymalizacja.


Tomasz Kapela, Kraków 2011-2020