NOTA Con el lanzamiento de la versión 3.2 del kit de herramientas CUDA, NVIDIA ahora incluye la reglas archivo con el Kit de herramientas en comparación con el SDK. Por lo tanto, he dividido esta respuesta en dos mitades, use las instrucciones correctas para su versión de Toolkit.
NOTA Estas instrucciones son válidas para Visual Studio 2005 y 2008. Para Visual Studio 2010 Ver this answer.
CUDA HERRAMIENTAS 3.2 y más tarde
le recomiendo usar el archivo NvCudaRuntimeApi.rules
(o NvCudaDriverApi.rules
si se utiliza la API de controlador) proporcionado por NVIDIA, esta se libera con la caja de herramientas y soporta la última compilador banderas de manera amistosa.Personalmente, desaconsejaría usar el asistente de VS, pero solo porque realmente no creo que lo necesite.
El archivo de reglas (instalado en el directorio Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults
) "enseña" a Visual Studio cómo compilar y vincular cualquier archivo .cu de su proyecto a su aplicación.
- Crear un nuevo proyecto mediante los asistentes MS estándar (por ejemplo, un proyecto de consola vacío)
- Implementar su anfitrión código (de serie) en los archivos .c o .cpp
- implementar sus envolturas y núcleos en .cu
archivos
- Añadir la
NvCudaRuntimeApi.rules
(clic derecho sobre el proyecto, la estructura de encargo Reglas, marque la casilla correspondiente), véase la nota 1
- Añadir la biblioteca de ejecución de CUDA (clic derecho sobre el proyecto y elija Propiedades, a continuación, en Enlazador -> General añaden
$(CUDA_PATH)\lib\$(PlatformName)
a los directorios de librerías adicionales y en Enlazador -> Entrada añaden cudart.lib
a los Dependencias adicionales), véanse las notas [2] y [3]
- Opcionalmente agregue los archivos de inclusión CUDA a la ruta de búsqueda, necesarios si incluye cualquier archivo CUDA en sus archivos .cpp (a diferencia de los archivos .cu) (haga clic derecho en el proyecto y elija Propiedades, luego en C/C++ -> General agregar
$(CUDA_PATH)\include
al Includ adicional e Directorios), véase la nota [3]
- A continuación, sólo a construir su proyecto y los archivos .cu serán compilados a .obj y se añaden al enlace de forma automática
Algunos otros consejos:
- Cambie la generación de código para usar el tiempo de ejecución de C cargado estáticamente para que coincida con el tiempo de ejecución de CUDA; haga clic derecho sobre el proyecto y elija Propiedades, a continuación, en C/C++ -> Generación de código cambiar el Runtime Library a/MT (o/MTD para su depuración, en cuyo caso tendrá que reflejar esto en tiempo de ejecución API -> Host -> Tiempo de ejecución Biblioteca), véase la nota [4]
- Habilitar resaltado de sintaxis utilizando el archivo usertype.dat incluido con el SDK, consulte el readme.txt en
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
también me Se recomienda habilitar la compatibilidad con Intellisense con la siguiente entrada de registro (reemplace 9.0 con 8.0 para VS2005 en lugar de VS2008):
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
Por cierto yo estaría a favor de evitando cutil si es posible, en lugar de rodar su propia comprobación. Cutil no es compatible con NVIDIA, solo se usa para tratar de mantener los ejemplos en el SDK enfocados en el programa real y el diseño del algoritmo y evitar repetir las mismas cosas en cada ejemplo (por ejemplo, análisis de línea de comandos). Si escribe el suyo, tendrá un control mucho mejor y sabrá lo que está sucediendo.Por ejemplo, el contenedor cutilSafeCall
llama al exit()
si la función falla: una aplicación real (a diferencia de una muestra) probablemente debería manejar la falla de forma más elegante.
CUDA HERRAMIENTAS 3.1 y anteriores
me gustaría utilizar el archivo Cuda.rules
proporcionado por NVIDIA con el SDK, este es liberado junto con el kit de herramientas y soporta las últimas opciones del compilador de una manera amistosa. Personalmente, desaconsejaría usar el asistente de VS, pero solo porque realmente no creo que lo necesite.
El archivo de reglas (en el directorio C \ common del SDK) "enseña" a Visual Studio cómo compilar y vincular cualquier archivo .cu de su proyecto en su aplicación.
- Crear un nuevo proyecto mediante los asistentes MS estándar (por ejemplo, un proyecto de consola vacío)
- Implementar su anfitrión código (de serie) en los archivos .c o .cpp
- implementar sus envolturas y núcleos en .cu
archivos
- Añadir la
Cuda.rules
(clic derecho sobre el proyecto, la estructura de encargo reglas, buscar el archivo de reglas y asegúrese de que está marcada)
- Añadir la biblioteca de ejecución de CUDA (clic derecho sobre el proyecto y elija Propert IES, a continuación, en Enlazador -> General añaden
$(CUDA_LIB_PATH)
a los directorios de librerías adicionales y en Enlazador -> Entrada añaden cudart.lib
a los Dependencias adicionales), véase la nota [2] a continuación
- Opcionalmente añadir el CUDA incluye archivos en la ruta de búsqueda, necesarios si incluye cualquier archivo CUDA en sus archivos .cpp (a diferencia de los archivos .cu) (haga clic derecho en el proyecto y elija Propiedades, luego en C/C++ -> General agregar
$(CUDA_INC_PATH)
al Director de inclusión adicional s)
- A continuación, sólo construir su proyecto y los archivos .cu se compilará a .obj y se añade al enlace de forma automática
Algunos otros consejos:
- Cambiar la generación de código para utilizar estáticamente cargado en tiempo de ejecución C para que coincida con el tiempo de ejecución de CUDA, haga clic derecho sobre el proyecto y seleccione Propiedades , a continuación, en C/C++ -> Generación de código cambiar el tiempo de ejecución Biblioteca a/MT (o fO/MTD r depurar, en cuyo caso tendrá que reflejar esto en CUDA Build Rule -> Opciones híbridas CUDA/C++), ver nota [4]
- Habilite el resaltado de sintaxis con el archivo usertype.dat incluido con el SDK, consulte el archivo readme.txt en
<sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8
También recomiendo habilitar la compatibilidad con Intellisense con la siguiente entrada de registro (reemplace 9.0 por 8.0 para VS2005 en lugar de VS2008):
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Languages\Language Services\C/C++]
"NCB Default C/C++ Extensions"=".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.tli;.cu;.cuh;.cl"
Por cierto yo estaría a favor de evitando cutil si es posible, en lugar de rodar su propia comprobación. Cutil no es compatible con NVIDIA, solo se usa para tratar de mantener los ejemplos en el SDK enfocados en el programa real y el diseño del algoritmo y evitar repetir las mismas cosas en cada ejemplo (por ejemplo, análisis de línea de comandos). Si escribe el suyo, tendrá un control mucho mejor y sabrá lo que está sucediendo. Por ejemplo, el contenedor cutilSafeCall
llama al exit()
si la función falla: una aplicación real (a diferencia de una muestra) probablemente debería manejar la falla de forma más elegante.
NOTA
- También puede utilizar un kit de herramientas de reglas de la versión específica fule por ejemplo,
NvCudaRuntimeApi.v3.2.rules
. Esto significa que en lugar de buscar el Toolkit de CUDA en% CUDA_PATH% se verá en% CUDA_PATH_V3_2%, lo que a su vez significa que puede tener múltiples versiones de CUDA Toolkit instaladas en su sistema y diferentes proyectos pueden apuntar a diferentes versiones. Ver también nota [3].
- El archivo de reglas no puede modificar la compilación de C/C++ y la configuración del enlazador, ya que simplemente está agregando configuraciones de compilación para el código CUDA. Por lo tanto, debe hacer este paso manualmente. ¡Recuerde hacerlo para todas las configuraciones!
- Si desea estabilizar en una versión específica de CUDA Toolkit, entonces debe reemplazar CUDA_PATH con CUDA_PATH_V3_2. Consulte también la nota 1.
- Tener una versión no coincidente del tiempo de ejecución de C puede causar una variedad de problemas; en particular, si tiene algún error con respecto a LIBCMT (por ejemplo,
LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs
) o símbolos definidos de forma múltiple para funciones de biblioteca estándar, este debería ser su primer sospechoso.
He comentado mi publicación con respuestas a sus ediciones. – Tom
(jactancia) hey, los estoy construyendo con un archivo por lotes de 20 líneas (¡sin siquiera tocar IDE en absoluto)! ;) ver: http://stackoverflow.com/questions/9518403/smallest-possible-complete-set-of-source-and-batch-files-to-build-a-cuda-app-via/9526602#9526602 – mlvljr