This shows you the differences between two versions of the page.
|
asc:laboratoare:06 [2025/04/09 08:32] alexandru.bala [Executie asincrona Host si Device] |
asc:laboratoare:06 [2025/04/09 09:11] (current) alexandru.bala [Fluxuri nonimplicite] |
||
|---|---|---|---|
| Line 215: | Line 215: | ||
| Urmatoarele operatii sunt asincrone relativ la host: | Urmatoarele operatii sunt asincrone relativ la host: | ||
| - Lansari de kernel | - Lansari de kernel | ||
| - | - Copieri in cadrul spatiului de memorie a unui device | + | - Copieri in cadrul spatiului de memorie al unui device |
| - Copiere memorie host -> device, avand < 64 KB | - Copiere memorie host -> device, avand < 64 KB | ||
| - Copiere memorie host -> device, avand functii cu sufix Async | - Copiere memorie host -> device, avand functii cu sufix Async | ||
| Line 224: | Line 224: | ||
| ==== Fluxuri nonimplicite ==== | ==== Fluxuri nonimplicite ==== | ||
| - | Pentru a folosi cudaMemcpyAsync, este necesar lucrul cu fluxuri nonimplictie (non-default streams), care, in C/C++ pot fi declarate, create si distruse in partea de cod de pe host (CPU) in urmatorul fel: | + | Pentru a folosi cudaMemcpyAsync, este necesar lucrul cu fluxuri nonimplicite (non-default streams), care, in C/C++ pot fi declarate, create si distruse in partea de cod de pe host (CPU) in urmatorul fel: |
| <code C> | <code C> | ||
| Line 237: | Line 237: | ||
| <code C> | <code C> | ||
| - | result = cudaMemcpyAsync(d_a, a, N, cudaMemcpyHostToDevice, stream1); | + | // num_bytes = N * sizeof (type_a); |
| + | result = cudaMemcpyAsync(d_a, a, num_bytes, cudaMemcpyHostToDevice, stream1); | ||
| </code> | </code> | ||
| - | Pentru a emite un kernel către un flux nonimplicit, specificăm identificatorul fluxului ca al patrulea parametru de configurare a execuției. Se observă și un al treilea parametru de configurare a execuției, care este folosit pentru a aloca memorie partajată device-ului (GPU-ului), utilizându-se 0 dacă nu se dorește acest aspect. | + | Pentru a emite un kernel către un flux nonimplicit, specificăm identificatorul fluxului ca al patrulea parametru de configurare a execuției. Se observă și un al treilea parametru de configurare a execuției, care este folosit pentru a aloca memorie partajată (shared memory) device-ului (GPU-ului), utilizându-se 0 dacă nu se dorește acest aspect. |
| <code C> | <code C> | ||