La risposta breve è che qui non c'è soluzione a questo problema.
Tutto ciò che normalmente viene eseguito su una CPU deve essere adattato per un ambiente CUDA senza alcuna garanzia che sia persino possibile farlo. Le funzioni host sono solo un altro nome in CUDA per le normali funzioni C. Cioè, le funzioni in esecuzione su una CPU-memoria Von Neumann come l'architettura C/C++ è stata fino a questo punto nei PC. Le GPU offrono enormi quantità di potenza di calcolo, ma il costo è che non è altrettanto flessibile o compatibile. Soprattutto, le funzioni funzionano senza la possibilità di accedere alla memoria principale e la memoria a cui possono accedere è limitata.
Se quello che stai cercando di ottenere è un generatore di numeri casuali, sei fortunato considerando che Nvidia si è presa la briga di implementare specificamente un Mersenne Twister altamente efficiente in grado di supportare fino a 256 thread per SMP. È richiamabile all'interno di una funzione del dispositivo, descritta in un precedente post della mia here. Se qualcuno trova un link migliore che descriva questa funzionalità, rimuovi il mio e sostituisci il testo appropriato qui insieme al link.
Una cosa di cui sono continuamente sorpreso è il numero di programmatori che sembrano inconsapevoli di come sono generatori di numeri pseudo-casuali di alta qualità standardizzati. "Rolling your own" non è davvero una buona idea considerando quanti dei numeri pseudo-casuali dell'arte sono. Verifica di un generatore a fornire numeri accettabile imprevedibili prende un sacco di lavoro e il talento accademico ...
Quanto è grave il downgrade delle prestazioni nel chiamare una funzione host anziché utilizzare uno integrato CUDA? – Mattia
Ciò implica che l'host e il dispositivo eseguiranno solo le rispettive copie delle funzioni? – avgvstvs