Blokowanie dla lokalności pamięci podręcznej
Dziel pracę na bloki mieszczące się w cache.
Blokowanie dla lokalności pamięci podręcznej to bezpłatna lekcja Mojo Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Mojo Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Mojo Academy zawiera 4 lekcji w sumie.
Idea cache
Procesor przechowuje niedawno używane dane w małej, szybkiej pamięci cache. Trafienia są szybkie, a chybienia wymuszają powolne odwołanie do pamięci głównej.
Czym jest lokalność?
Lokalność cache oznacza ponowne wykorzystywanie danych, które są już w pobliżu w cache, zanim zostaną usunięte, aby zrobić miejsce innym.
Duże dane wypierają zawartość cache
Jeśli kernel przechodzi po ogromnej tablicy, początkowe elementy zostaną usunięte z cache, zanim zostaną ponownie użyte, co powoduje powtarzające się chybienia cache.
Dziel pracę na kafelki
Dzielenie na kafelki rozbija dużą pętlę na małe bloki mieszczące się w pamięci podręcznej, dzięki czemu dane każdego bloku pozostają w niej podczas pracy.
alias tile = 64Pętla zewnętrzna i wewnętrzna
Dzielenie na kafelki zamienia jedną pętlę w dwie: zewnętrzną iterującą po blokach i wewnętrzną iterującą po elementach każdego bloku.
for t in range(0, n, tile):
for i in range(t, min(t + tile, n)):
out[i] = a[i] * 2Jeden blok naraz
Każdy blok jest na tyle mały, by zmieścić się w pamięci podręcznej. Kończysz całą pracę z nim, zanim przejdziesz dalej, więc ponowne użycie danych pozostaje tanie.
Idealne do macierzy
Mnożenie macierzy intensywnie ponownie wykorzystuje wiersze i kolumny. Blokowanie matmul na kafelki utrzymuje ponownie używane dane w pamięci podręcznej i ogranicza liczbę chybień.
Wybierz rozmiar kafelka
Najlepszy kafelek wypełnia pamięć podręczną, ale jej nie przepełnia. Zbyt mały ogranicza ponowne użycie danych, a zbyt duży powoduje ich wypieranie, więc należy dostroić jego rozmiar.
Najpierw kafelkowanie, potem wektoryzacja
Kafelkowanie i SIMD dobrze się uzupełniają. Wektoryzuj wewnętrzną pętlę każdego bloku, aby jednocześnie uzyskać lokalność pamięci podręcznej i szybkość wektorów.
for t in range(0, n, tile):
vectorize[body, width](min(tile, n - t))Uważaj na krawędzie
Ostatni blok może być mniejszy niż pełny kafelek. Ogranicz jego zakres za pomocą min, aby nigdy nie odczytać danych poza buforem.
var end = min(t + tile, n)Zmierz zysk
Kafelkowanie może pomóc bardzo lub tylko trochę, zależnie od rozmiarów. Zawsze wykonaj benchmark dla kilku wartości kafelka na rzeczywistych danych, aby wybrać najlepszą.
Szybkie sprawdzenie
Jądro programu często nie trafia do pamięci podręcznej, ponieważ przechodzi przez ogromną tablicę od początku do końca. Jaka technika może pomóc?
Podsumowanie
Dzielenie na kafelki rozbija dużą pętlę tak, aby każdy fragment mieścił się w pamięci podręcznej; dostrój rozmiar kafelka, zwektoryzuj wewnętrzną pętlę i ogranicz krawędzie. 🧱
Często zadawane pytania
Czy lekcja „Blokowanie dla lokalności pamięci podręcznej” jest bezpłatna?
Tak — pełny tekst „Blokowanie dla lokalności pamięci podręcznej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Mojo Academy, przejdź na CoddyKit PRO. Kurs Mojo Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Blokowanie dla lokalności pamięci podręcznej”?
Dziel pracę na bloki mieszczące się w cache. Ćwiczysz Mojo Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Mojo Academy?
Nie wymagamy żadnego doświadczenia. Mojo Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Blokowanie dla lokalności pamięci podręcznej”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Mojo Academy?
Tak. Każda lekcja Mojo Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Anatomia jądra obliczeniowego
- Łączenie SIMD z pętlami
- Ograniczanie ruchu danych w pamięci
- Blokowanie dla lokalności pamięci podręcznej