0Pricing
CUDA Academy · Lezione

Partizionare il lavoro tra le GPU

Strategie di decomposizione del dominio

Partizionare il lavoro tra le GPU è 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.

Molte GPU, un solo lavoro

Due GPU possono completare un lavoro in circa la metà del tempo, ma solo se il lavoro viene suddiviso. La difficoltà sta nel partizionamento: decidere quale GPU gestisce ciascuna parte.

Scomposizione del dominio

La strategia classica consiste nel suddividere i dati, non il codice. Con la scomposizione del dominio, ogni GPU riceve la propria porzione dell'array o della griglia da elaborare.

Suddividere un array

Per un array 1D, è sufficiente dividerne la lunghezza. Assegni il primo chunk di elementi alla GPU 0, quello successivo alla GPU 1 e così via.

int chunk = n / count;

Calcolare ogni offset

Ogni GPU ha bisogno dell'inizio della propria porzione. L'offset del device d è semplicemente d moltiplicato per la dimensione del chunk e indica dove iniziano i suoi dati.

int offset = d * chunk;

Allocare per dispositivo

Ogni GPU ha bisogno del proprio buffer. Imposti il dispositivo, quindi esegua cudaMalloc per allocare spazio solo per la slice di quella scheda, invece che per l'intero array.

cudaSetDevice(d);
cudaMalloc(&dptr[d], chunk * sizeof(float));

Copiare solo la porzione

Carichi su ogni GPU solo la parte che le appartiene. Copi da host[offset] nel buffer del dispositivo, così nessuna scheda contiene dati che non utilizzerà.

Eseguire il lancio su ogni dispositivo

Iteri sulle GPU, imposti ciascun dispositivo come corrente ed esegua il kernel sulla relativa slice. I lanci sono asincroni, quindi tutte le schede iniziano a lavorare in parallelo.

Raccogliere i risultati

Quando i kernel terminano, copi l'output di ogni dispositivo nella posizione corretta dell'array host usando il relativo offset. Le parti si ricompongono in un unico risultato.

Gestire l'elemento residuo

Se n non è divisibile in modo esatto, l'ultima GPU deve gestire il remainder. Le assegni gli elementi aggiuntivi, così nessun elemento dell'array viene saltato.

int last = n - offset;

Prestare attenzione ai confini

Le operazioni stencil e quelle sui vicini leggono oltre i confini delle slice. Queste regioni di halo devono essere condivise tra le GPU, altrimenti i risultati sui bordi saranno errati.

Bilanciare il carico

Se una GPU è più veloce, una suddivisione uniforme la lascia inutilizzata. Un buon bilanciamento del carico assegna alla scheda più potente una slice più grande, così entrambe terminano nello stesso momento.

Controllo rapido

Ricordi il metodo standard per distribuire un grande dataset tra più GPU.

Riepilogo

Suddivide i dati in slice, alloca e copia per ogni dispositivo, esegue il lancio su ciascuno e infine raccoglie i risultati. Presti attenzione al remainder e agli halo. Prossimo argomento: copiare direttamente da GPU a GPU. ✨

Domande Frequenti

La lezione «Partizionare il lavoro tra le GPU» è gratuita?

Sì — il testo completo di «Partizionare il lavoro tra le GPU» è 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 «Partizionare il lavoro tra le GPU»?

Strategie di decomposizione del dominio 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 «Partizionare il lavoro tra le GPU»?

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. Enumerare e selezionare i dispositivi
  2. Partizionare il lavoro tra le GPU
  3. Accesso peer-to-peer alla memoria
  4. Multi-GPU con NCCL
← Torna a CUDA Academy