0Pricing
Mojo Academy · Lekcja

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, avoid

Poró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 enough

Błą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

  1. Modelowanie tensora w Mojo
  2. Budowanie mnożenia macierzy krok po kroku
  3. Optymalizacja iloczynu skalarnego
  4. Weryfikowanie poprawności numerycznej
← Powrót do Mojo Academy