- je potřeba speciální alokace
cudaMallocManaged()
- výhoda:
- nemusíme explicitně starat o
- zápis z cpu do managed pamětí je o něco pomalejší!
- může být problém, měli bychom dělat po větších částech a pomocí blokového algoritmu
- abychom zapisovali po stránkách
- platí něco jako numa first touch
- kernely jsou asynchronní, je potřeba synchronizace!!
cudaDeviceSynchronize() nebo stream synchronize, abychom počkali na konec výpočtu
- funguje swapování na cpu, když doje paměť na gpu
- bacha na rozmezí dat mezi více gpu, aby nespadli do 1 stránky -> false sharing
- hranice stránky zarovnaná s hranicí stránky
- např i volání knihovních funkcí z kernelu!
- komunikace s různými kartami
- např. broadcast poloh z jednotlivých karet na ostatní karty
- volá se to per vlákno!
- není sdílená sdílená paměť
- parametry přes globální paměť!
cudaDeviceSynchronize()
- chybí constexpr definice pro std třídy
- cuda nezvládne udělat device funkci
- obsahují i věci z moderního c++ pro straší verzi kompilátoru