Weryfikowanie poprawności numerycznej
Porównuj wyniki z implementacją referencyjną.
Weryfikowanie poprawności numerycznej 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.
Szybki, ale błędny kod jest bezużyteczny
Zoptymalizowany kernel ma wartość tylko wtedy, gdy oblicza poprawny wynik. Zawsze weryfikuj kod, zanim zaufasz przyspieszeniu.
Zachowaj wynik odniesienia
Zachowaj prostą, niewątpliwie poprawną wersję. Jest ona Twoim odniesieniem — źródłem prawdy, z którym musi zgadzać się każdy szybki kernel.
Liczby zmiennoprzecinkowe nie są dokładne
Obliczenia zmiennoprzecinkowe zaokrąglają wyniki, więc zmiana kolejności sumowania może zmienić ostatnie cyfry. Zoptymalizowane wyniki mogą nieznacznie się różnić, nie będąc błędne.
Unikaj porównywania dokładnej równości
Ze względu na zaokrąglenia nigdy nie porównuj liczb zmiennoprzecinkowych za pomocą ==. Drobne różnice sprawią, że poprawny kod będzie wyglądać na zepsuty.
if fast == ref: # fragile, avoidPorównuj z tolerancją
Zamiast tego sprawdzaj, czy wartości są zbliżone w ramach niewielkiej tolerancji. Jeśli różnica jest mniejsza niż epsilon, uznaj je za równe.
if abs(fast - ref) <= 1e-5:
pass # close enoughBłąd bezwzględny a względny
Błąd bezwzględny to rzeczywista różnica, a błąd względny skaluje ją względem wielkości wartości. Dla dużych liczb potrzebne są testy względne, aby porównanie było miarodajne.
rel = abs(fast - ref) / abs(ref)Sprawdź każdy element
Przejdź przez cały wynik i sprawdź każdą komórkę. Jedna niezgodność wykraczająca poza tolerancję oznacza, że optymalizacja coś zepsuła.
for i in range(n):
if abs(fast[i] - ref[i]) > tol:
print("mismatch at", i)Śledź największą różnicę
Zapisuj największą zaobserwowaną różnicę. Maksymalny błąd wszystkich elementów to jasny, pojedynczy wskaźnik stanu kernela.
Testuj przypadki brzegowe
Wypróbuj puste dane wejściowe, pojedynczy element oraz rozmiary niebędące wielokrotnością szerokości SIMD. Przypadki brzegowe szybko ujawniają błędy końcówki.
Używaj znanych wyników
Wykonaj mnożenie przez macierz jednostkową albo zsumuj wektor jedynek. Przewidywalne dane wejściowe dają wyniki, które można sprawdzić ręcznie.
Zautomatyzuj sprawdzanie
Umieść weryfikację w małym teście, który wyraźnie zgłasza każdą niezgodność. Uruchamiaj go po każdej zmianie, aby regresje nie pozostały niezauważone.
Szybkie sprawdzenie
Wynik SIMD matmul różni się od wyniku odniesienia o 0.0000007. Jaki należy wyciągnąć wniosek?
Podsumowanie
Weryfikuj szybki kod względem zaufanego odniesienia, porównuj z tolerancją zamiast używać ==, sprawdzaj przypadki brzegowe i znane wyniki oraz automatyzuj ten proces. ✅
Często zadawane pytania
Czy lekcja „Weryfikowanie poprawności numerycznej” jest bezpłatna?
Tak — pełny tekst „Weryfikowanie poprawności numerycznej” 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 „Weryfikowanie poprawności numerycznej”?
Porównuj wyniki z implementacją referencyjną. Ć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 „Weryfikowanie poprawności numerycznej”?
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
- Modelowanie tensora w Mojo
- Budowanie mnożenia macierzy krok po kroku
- Optymalizacja iloczynu skalarnego
- Weryfikowanie poprawności numerycznej