La respuesta corta es que aquí no hay solución a ese problema.
Todo lo que normalmente se ejecuta en una CPU debe adaptarse a un entorno CUDA sin garantías de que sea posible. Las funciones de host son solo otro nombre en CUDA para las funciones C ordinarias. Es decir, las funciones que se ejecutan en una arquitectura Von Neumann con memoria de CPU como todas las C/C++ han sido hasta este punto en las PC. Las GPU le brindan enormes cantidades de potencia informática, pero el costo es que no es tan flexible o compatible. Lo más importante es que las funciones se ejecutan sin la capacidad de acceder a la memoria principal y la memoria a la que pueden acceder es limitada.
Si lo que intenta obtener es un generador de números aleatorios, tiene suerte ya que Nvidia se tomó la molestia de implementar específicamente un Mersenne Twister altamente eficiente que puede admitir hasta 256 hilos por SMP. Se puede llamar dentro de una función del dispositivo, descrita en una publicación anterior de la mina here. Si alguien encuentra un enlace mejor que describa esta funcionalidad, por favor elimine el mío y reemplace el texto apropiado aquí junto con el enlace.
Una cosa que me sorprende continuamente es la cantidad de programadores que parecen desconocer qué tan estandarizados son los generadores de números pseudoaleatorios de alta calidad. "Rodar uno mismo" realmente no es una buena idea teniendo en cuenta la cantidad de números pseudoaleatorios de un arte. Verificación de un generador de números como proporcionar aceptablemente impredecibles requiere mucho trabajo y talento académico ...
¿Qué tan malo es la degradación del rendimiento al llamar a una función de host en lugar de usar una cuda incorporada? – Mattia
¿Esto implica que el host y el dispositivo solo ejecutarán sus propias copias respectivas de las funciones? – avgvstvs