0Pricing
CUDA Academy · Lezione

Vettori e trasformazioni Thrust

Parallelismo in stile STL sulla GPU

Vettori e trasformazioni Thrust è una lezione CUDA Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento CUDA Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso CUDA Academy include 4 lezioni in totale.

La STL per la tua GPU

Thrust è una libreria di alto livello che ricorda la STL di C++, ma viene eseguita sulla GPU. Scrivi autonomamente pochissimo codice dei kernel. 🎉

Due tipi di vector

Thrust mette a disposizione host_vector per la memoria della CPU e device_vector per quella della GPU. Hanno lo stesso aspetto, ma vivono in mondi diversi.

thrust::host_vector<int> h(100);
thrust::device_vector<int> d(100);

Copia oltre il confine

Assegnare un host_vector a un device_vector avvia automaticamente un trasferimento di memoria. Non serve scrivere a mano il codice boilerplate di cudaMemcpy.

thrust::device_vector<int> d = h; // host to device

L'allocazione è automatica

Un device_vector alloca e libera la memoria della GPU al posto tuo usando RAII. Quando esce dall'ambito, la memoria viene rilasciata correttamente.

Riempimento e sequenze

Helper come thrust::fill e thrust::sequence inizializzano un intero device_vector con una sola chiamata parallela, invece di un ciclo manuale.

thrust::sequence(d.begin(), d.end()); // 0,1,2,...

Transform associa ogni elemento a un elemento

thrust::transform applica una funzione a ogni elemento in parallelo e scrive il risultato in un intervallo di output. È il classico schema map.

thrust::transform(d.begin(), d.end(),
  out.begin(), op);

I functor sono l'operazione

L'operazione passata è un functor: una struct con un operator() contrassegnato da __host__ __device__, in modo da poter essere eseguito sulla GPU.

struct Square { __host__ __device__
  float operator()(float x){ return x*x; } };

Operatori integrati

Per la matematica comune, Thrust include functor come thrust::plus e thrust::multiplies, così non devi scrivere un functor per le operazioni semplici.

thrust::transform(a.begin(), a.end(),
  b.begin(), c.begin(), thrust::plus<float>());

Due input, un output

La forma binaria di transform accetta due intervalli di input e li combina elemento per elemento, ideale per la somma vettoriale elemento per elemento.

Ottieni il puntatore grezzo

Devi passare a un kernel scritto a mano? thrust::raw_pointer_cast ti fornisce il puntatore al device sottostante da passare alla funzione.

float* p = thrust::raw_pointer_cast(d.data());

Meno codice, meno bug

Thrust nasconde allocazioni, copie e configurazioni dei launch. In cambio di un po' di controllo, ottieni codice GPU leggibile e sicuro che funziona senza complicazioni.

Verifica rapida

Ricorda come Thrust applica un'operazione a un intero vettore.

Riepilogo

Hai usato device_vector per gestire automaticamente la memoria, trasferito i dati tramite assegnazione ed eseguito transform con i functor. Potenza GPU in stile STL. 💪

Domande Frequenti

La lezione «Vettori e trasformazioni Thrust» è gratuita?

Sì — il testo completo di «Vettori e trasformazioni Thrust» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso CUDA Academy, passa a CoddyKit PRO. Il corso CUDA Academy include 4 lezioni in totale.

Cosa imparerò in «Vettori e trasformazioni Thrust»?

Parallelismo in stile STL sulla GPU Eserciti CUDA Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare CUDA Academy?

Non è richiesta alcuna esperienza precedente. CUDA Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Vettori e trasformazioni Thrust»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione CUDA Academy?

Sì. Ogni lezione CUDA Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. cuBLAS GEMM nel modo corretto
  2. Vettori e trasformazioni Thrust
  3. Reduce, Scan e Sort con Thrust
  4. cuDNN per il deep learning
← Torna a CUDA Academy