Differences

This shows you the differences between two versions of the page.

Link to this comparison view

asc:laboratoare:06 [2024/04/09 01:02]
alexandru.bala [Executie si transfer date asincron]
asc:laboratoare:06 [2024/04/10 12:02] (current)
emil.slusanschi [Executie asincrona Host si Device]
Line 218: Line 218:
   - 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
-  - Functii memorie set+  - Functii memorie set (setare / initializare de memorie la o valoare)
  
-{{:​asc:​lab9:​cuda_async.png?900|}}+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 executie asincrona se poate dezactiva complet executia asincrona setand variabila de mediu CUDA_LAUNCH_BLOCKING la 1, care este mai ales utila in momentul in care copierea memoriei host -> device si device -> host se face pe stream-uri separate (a se vedea figura de mai jos). Executia de kernels este sincrona cand se ruleaza cu un profiler (Nsight, Visual Profiler). +==== Fluxuri nonimplicite ​====
- +
-{{:​asc:​lab9:​cuda_async_2.png?​900|}} +
- +
-=== 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 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: 
Line 243: Line 239:
 </​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 folosi ​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ă device-ului (GPU-ului), utilizându-se 0 dacă nu se dorește acest aspect.
  
 <code C> <code C>
Line 255: Line 251:
 ==== 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. 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.+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|}} 
 + 
 +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|}}
  
 ===== Dynamic Paralellism ​ ===== ===== Dynamic Paralellism ​ =====
asc/laboratoare/06.1712613765.txt.gz · Last modified: 2024/04/09 01:02 by alexandru.bala
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0