This shows you the differences between two versions of the page.
|
asc:laboratoare:07 [2026/02/23 18:47] giorgiana.vlasceanu |
asc:laboratoare:07 [2026/04/22 07:25] (current) alexandru.bala [Executie si transfer date asincron] |
||
|---|---|---|---|
| Line 220: | Line 220: | ||
| - Functii memorie set (setare / initializare de memorie la o valoare) | - Functii memorie set (setare / initializare de memorie la o valoare) | ||
| - | Pentru a face debug unor scenarii de executie asincrona se poate dezactiva complet executia asincrona setand variabila de mediu CUDA_LAUNCH_BLOCKING la 1. Executia de kernels este sincrona cand se ruleaza cu un profiler (Nsight, Visual Profiler). | + | Pentru a face debug unor scenarii de execuție asincronă, se poate dezactiva complet asincronismul CPU-GPU setând variabila de mediu ''CUDA_LAUNCH_BLOCKING'' la 1. De asemenea, execuția kernel-urilor este adesea serializată în timpul profilării: în timp ce Nsight Systems permite vizualizarea asincronismului real, unelte de analiză detaliată precum Nsight Compute (sau vechiul Visual Profiler) forțează o execuție sincronă și secvențială pentru a putea colecta metricii hardware. |
| ==== Fluxuri nonimplicite ==== | ==== Fluxuri nonimplicite ==== | ||
| Line 249: | Line 248: | ||
| ==== Executie asincrona programe kernel ==== | ==== Executie asincrona programe kernel ==== | ||
| - | Arhitecturile cu compute capability 2.x sau mai nou, pot executa in paralel instante de kernel diferite. Aceste unitati de executie o sa aibe proprietate concurrentKernels setata la 1 (se face query la device properties inainte). Numarul maxim de lansari asincrone de kernele diferite este dependent de arhitectura (se verifica in functie de compute capability). Singura restrictie este ca programele kernel sa fie in acelasi context. | + | Arhitecturile cu compute capability 2.x sau mai nou, pot executa in paralel instante de kernel diferite. Aceste unitati de executie o sa aibe proprietate ''concurrentKernels'' setata la 1 (se face query la ''device properties'' inainte). Numarul maxim de lansari asincrone de kernele diferite este dependent de arhitectura (se verifica in functie de compute capability). Singura restrictie este ca programele kernel sa fie in acelasi context. |
| + | <note important> | ||
| + | Deși hardware-ul permite execuția paralelă, activarea variabilei ''CUDA_LAUNCH_BLOCKING=1'' anulează practic această capacitate. Deoarece driverul este forțat să aștepte finalizarea fiecărui kernel înainte de a lansa următorul, kernelele vor fi executate strict secvențial, indiferent de disponibilitatea resurselor hardware sau de utilizarea fluxurilor (streams) diferite. | ||
| + | </note> | ||
| ==== Executie si transfer date asincron ==== | ==== Executie si transfer date asincron ==== | ||
| - | Anumite device-uri pot executa un transfer asincron memorie alaturi de o executie de kernel. Acest lucru este dependent de compute capability si se poate verifica in device property asyncEngineCount. | + | Anumite device-uri pot executa un transfer asincron memorie alaturi de o executie de kernel. Acest lucru este dependent de compute capability si se poate verifica in device property ''asyncEngineCount''. |
| {{:asc:lab9:cuda_async.png?900|}} | {{:asc:lab9:cuda_async.png?900|}} | ||
| - | De asemenea, se pot face transferuri de memorie intra-device simultan cu executia de kernel cand atat device property concurrentKernels, cat si asyncEngineCount sunt 1. | + | De asemenea, se pot face transferuri de memorie intra-device simultan cu executia de kernel cand atat device property ''concurrentKernels'', cat si ''asyncEngineCount'' sunt 1. |
| {{:asc:lab9:cuda_async_2.png?900|}} | {{:asc:lab9:cuda_async_2.png?900|}} | ||