instalar - nvidia cuda
cuda con mingw-actualizado (3)
Hemos estado desarrollando nuestro código en Linux, pero nos gustaría compilar un ejecutable de Windows. La versión anterior no gpu compila muy bien con mingw en Windows, así que esperaba poder hacer lo mismo con la versión CUDA.
La estrategia es compilar el código kernel con nvcc en visual studio, y el resto con gcc in mingw.
Hasta ahora, compilamos fácilmente el archivo .cu (con los lanzamientos kernel y kernel) en Visual Studio. Sin embargo, todavía no podemos compilar el código c en mingw. El código c contiene llamadas cuda api como cudaMalloc
y tipos cudaEvent_t
como cudaEvent_t
, por lo que debemos incluir cuda.h y cuda_runtime.h. Sin embargo, gcc da advertencias y errores para estos encabezados, por ejemplo:
../include/host_defines.h:57:0: warning: "__cdecl" redefined
y
../include/vector_functions.h:127:14: error: ''short_4'' has no member named ''x''
¿Alguna idea sobre cómo podemos incluir estos encabezados y compilar la parte c del código?
Es posible que desee ver cómo maneja el procesador de ciclos esto, consulte https://developer.blender.org/diffusion/B/browse/master/extern/cuew/ y https://developer.blender.org/ difusión / B / browse / master / pasante / cycles / device / device_cuda.cpp
Sé que no es un truco automático, pero podría ayudarte a empezar.
Hasta donde yo sé, es imposible usar CUDA sin MSVC. Entonces, necesita MSVC para hacer funcionar nvcc, y puede compilar código de CPU con mingw y vincular todo junto.
De acuerdo con http://forums.nvidia.com/index.php?showtopic=30743
"No hay planes actuales para apoyar a mingw".
Si estás realmente desesperado, podría haber una manera. El nvcc es realmente solo una interfaz para un grupo de compiladores. Invoca mucho a g ++ para quitar comentarios, separar el dispositivo y el código de host, manipular nombres, volver a vincular cosas, etc. (use --verbose
) para obtener los detalles.
Mi idea es la siguiente: Debería poder compilar el código del host con mingw mientras compila el código del dispositivo en un fatbin en una máquina Linux (ya que supongo que el dispositivo binario es independiente de la máquina host). Después, vincule ambas partes del código junto con mingw o use el controlador API para cargar el fatbin dinámicamente. Descargo de responsabilidad: ¡No hizo la prueba!