0Pricing
CUDA Academy · Lekcja

Zwektoryzowane wczytywanie za pomocą float4

Szersze transakcje zapewniające większą przepustowość

Zwektoryzowane wczytywanie za pomocą float4 to bezpłatna lekcja CUDA Academy na CoddyKit. To lekcja 3 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 CUDA Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs CUDA Academy zawiera 4 lekcji w sumie.

Przenieś więcej danych jedną instrukcją

Zwykłe ładowanie pobiera jedną wartość naraz. Vectorized load pobiera kilka sąsiadujących wartości w jednej, szerszej instrukcji, wykonując więcej pracy na jedno żądanie.

Poznaj float4

CUDA udostępnia wbudowane typy wektorowe. float4 pakuje cztery wartości float w jeden 16-bajtowy pakiet, który można wspólnie załadować lub zapisać.

float4 v = make_float4(1, 2, 3, 4);
float first = v.x; // also .y .z .w

Jedno ładowanie, cztery wartości float

Odczyt float4 z pamięci pobiera cztery wartości float w jednej transakcji. Zmniejsza to czterokrotnie liczbę memory instructions, które musi wydać wątek.

float4 a = reinterpret_cast<float4*>(in)[i];

Zreinterpretuj wskaźnik

Aby używać ładowań wektorowych ze zwykłą tablicą float, należy rzutować wskaźnik. reinterpret_cast pozwala odczytywać te same bajty jako elementy float4.

float4* in4 = reinterpret_cast<float4*>(in);
float4 chunk = in4[idx];

Wyrównanie jest wymagane

Wartość float4 musi znajdować się na granicy 16 bajtów. Jeśli dane nie są prawidłowo aligned, ładowanie jest niedozwolone, a kernel może zakończyć się awarią lub odczytać śmieciowe dane.

cudaMalloc wyrównuje dane automatycznie

Dobra wiadomość: bufory zwracane przez cudaMalloc są wyrównane co najmniej do 256 bajtów. Świeżo zaalokowane tablice urządzenia można więc bezpiecznie od początku odczytywać jako float4.

Mniej żądań, większa przepustowość

Szersze ładowania oznaczają mniej oczekujących żądań dla tych samych danych. Może to zwiększyć osiąganą bandwidth, gdy kernel jest ograniczony przez pamięć, a nie przez obliczenia.

Indeksuj wektorami, nie wartościami float

Przy użyciu float4 każdy wątek obejmuje teraz cztery elementy. Globalny index przechodzi więc przez sloty float4, a całkowita liczba wątków zmniejsza się czterokrotnie.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float4 d = in4[i]; // covers 4 floats

Inne szerokości wektorów

float4 nie jest jedynym wyborem. Typy takie jak float2 i int4 zapewniają odczyty o rozmiarze 8 lub 16 bajtów, więc może Pan/Pani wybrać szerokość dopasowaną do danych.

Obsługa pozostałych elementów

Jeśli długość tablicy nie jest wielokrotnością czterech, należy obsłużyć dodatkowe elementy remainder zwykłą pętlą skalarną po części zwektoryzowanej.

Rejestry mają swoją cenę

float4 przechowuje cztery wartości, więc używa większej liczby registers na wątek. Jak zawsze należy sprawdzić, czy zysk przepustowości przewyższa ewentualny spadek zajętości.

Szybkie sprawdzenie

Tablica float została zreinterpretowana jako float4, ale kernel ulega awarii. Dlaczego?

Podsumowanie: większa szerokość oznacza większą szybkość

Dowiedział się Pan/Pani, że odczyty float4 pobierają jednocześnie cztery wartości float, zmniejszając liczbę instrukcji i zwiększając przepustowość. Należy zachować wyrównanie danych i obsłużyć pozostałe elementy. 📦

Często zadawane pytania

Czy lekcja „Zwektoryzowane wczytywanie za pomocą float4” jest bezpłatna?

Tak — pełny tekst „Zwektoryzowane wczytywanie za pomocą float4” 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 CUDA Academy, przejdź na CoddyKit PRO. Kurs CUDA Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zwektoryzowane wczytywanie za pomocą float4”?

Szersze transakcje zapewniające większą przepustowość Ćwiczysz CUDA 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ąć CUDA Academy?

Nie wymagamy żadnego doświadczenia. CUDA 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 3 z 4.

Ile czasu zajmuje lekcja „Zwektoryzowane wczytywanie za pomocą float4”?

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 CUDA Academy?

Tak. Każda lekcja CUDA 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. Równoległość na poziomie instrukcji
  2. Rozwijanie pętli za pomocą #pragma unroll
  3. Zwektoryzowane wczytywanie za pomocą float4
  4. Presja na rejestry i spillowanie
← Powrót do CUDA Academy