¿Cómo comienzo un nuevo proyecto CUDA en Visual Studio 2008?

Esta es una pregunta increíblemente básica, pero ¿cómo empiezo un nuevo proyecto CUDA en Visual Studio 2008? He encontrado toneladas y toneladas de documentación sobre asuntos relacionados con CUDA, pero nada sobre cómo comenzar un nuevo proyecto. Estoy trabajando con Windows 7 x64 Visual Studio 2008 C ++. Realmente me gustaría encontrar algún tipo de aplicación Hello World realmente básica para obtener un progtwig básico que comstack y ejecuta.

Editar:

Probé tus pasos Tom. Configuré una aplicación de consola. Luego eliminé el .cpp predeterminado que aparece y copia en los tres archivos del proyecto de la plantilla solo para tener algo que comstackr. Cuando compilo eso, template_gold.cpp se quejó de no tener stdafx.h incluido, así que lo incluí. Ahora la construcción falla con esto:

 1> ------ Build started: Project: CUDASandbox, Configuración: Debug x64 ------
 1> Comstackción ...
 1> template_gold.cpp
 1> Enlazando ...
 1> LIBCMT.lib (crt0.obj): error LNK2019: símbolo externo no resuelto principal al que se hace referencia en la función __tmainCRTStartup
 1> D: \ Stuff \ Programming \ Visual Studio 2008 \ Projects \ CUDASandbox \ x64 \ Debug \ CUDASandbox.exe: error fatal LNK1120: 1 elementos externos no resueltos
 1> El registro de comstackción se guardó en "file: // d: \ Stuff \ Programming \ Visual Studio 2008 \ Projects \ CUDASandbox \ CUDASandbox \ x64 \ Debug \ BuildLog.htm"
 1> CUDASandbox - 2 error (s), 0 advertencia (es)
 ========== Build: 0 exitoso, 1 fallido, 0 actualizado, 0 omitido ==========

NOTA Con el lanzamiento de la versión 3.2 de CUDA Toolkit, NVIDIA ahora incluye el archivo de reglas con el Toolkit en lugar del 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, vea esta respuesta .


CUDA TOOLKIT 3.2 y posterior

Recomiendo usar el archivo NvCudaRuntimeApi.rules (o NvCudaDriverApi.rules si usa la API del controlador) proporcionado por NVIDIA, esto se lanza con el kit de herramientas y es compatible con las últimas banderas del comstackdor de manera amigable. 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 comstackr y vincular cualquier archivo .cu de su proyecto a su aplicación.

  • Cree un nuevo proyecto utilizando los asistentes de MS estándar (por ejemplo, un proyecto de consola vacío)
  • Implemente su código de host (serie) en archivos .c o .cpp
  • Implementa tus envoltorios y kernels en archivos .cu
  • Agregue NvCudaRuntimeApi.rules (haga clic con el botón derecho en el proyecto, Reglas personalizadas de comstackción , marque la casilla correspondiente), consulte la nota 1
  • Agregue la biblioteca de tiempo de ejecución de CUDA (haga clic con el botón derecho en el proyecto y elija Propiedades , luego en Enlazador -> General agregue $(CUDA_PATH)\lib\$(PlatformName) a los Directorios de biblioteca adicionales y en Enlazador -> Ingrese agregue cudart.lib al Dependencias Adicionales ), ver notas [2] y [3]
  • Opcionalmente, agregue los archivos de inclusión de 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 add $(CUDA_PATH)\include a los directorios de inclusión adicionales ), ver nota [3]
  • Luego, simplemente crea tu proyecto y los archivos .cu se comstackrán en .obj y se agregarán al enlace automáticamente.

Algunos otros consejos:

  • Cambie la generación de código para usar el tiempo de ejecución C cargado estáticamente para que coincida con el tiempo de ejecución de CUDA; haga clic derecho en el proyecto y elija Propiedades , luego en C / C ++ -> Generación de código cambie la Biblioteca de tiempo de ejecución a / MT (o / MTd para depuración, en cuyo caso tendrá que reflejar esto en Runtime API -> Host -> Runtime Biblioteca ), ver nota [4]
  • Habilite el resaltado de syntax con el archivo usertype.dat incluido con el SDK, consulte el archivo readme.txt en \C\doc\syntax_highlighting\visual_studio_8

También recomendaría 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" 

Incidentalmente, recomendaría evitar el corte si es posible, en lugar de eso, ejecute su propia verificación. Cutil no es compatible con NVIDIA, solo se usa para tratar de mantener los ejemplos en el SDK enfocados en el progtwig 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 envoltorio cutilSafeCall llama a 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 TOOLKIT 3.1 y versiones anteriores

Utilizaría el archivo Cuda.rules proporcionado por NVIDIA con el SDK, que se lanza junto con el kit de herramientas y es compatible con las últimas banderas del comstackdor de manera amigable. Personalmente, desaconsejaría usar el asistente de VS, pero solo porque realmente no creo que lo necesite.

El archivo de reglas (en el directorio común de C \ del SDK) “enseña” a Visual Studio a comstackr y vincular cualquier archivo .cu de su proyecto a su aplicación.

  • Cree un nuevo proyecto utilizando los asistentes de MS estándar (por ejemplo, un proyecto de consola vacío)
  • Implemente su código de host (serie) en archivos .c o .cpp
  • Implementa tus envoltorios y kernels en archivos .cu
  • Agregue Cuda.rules (haga clic con el botón derecho en el proyecto, Reglas de comstackción personalizadas , busque el archivo de reglas y asegúrese de que esté marcado)
  • Agregue la biblioteca de tiempo de ejecución de CUDA (haga clic derecho en el proyecto y elija Propiedades , luego en Enlazador -> General agregue $(CUDA_LIB_PATH) a los Directorios de biblioteca adicionales y en Enlazador -> Ingrese agregue cudart.lib a las Dependencias Adicionales ), vea la nota [ 2] abajo
  • Opcionalmente, agregue los archivos de inclusión de 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 add $(CUDA_INC_PATH) a los directorios de inclusión adicionales
  • Luego, simplemente crea tu proyecto y los archivos .cu se comstackrán en .obj y se agregarán al enlace automáticamente.

Algunos otros consejos:

  • Cambie la generación de código para usar tiempo de ejecución de C cargado estáticamente para que coincida con el tiempo de ejecución de CUDA, haga clic derecho en el proyecto y elija Propiedades , luego en C / C ++ -> Generación de código cambie la Biblioteca de tiempo de ejecución a / MT (o / MTd para depuración, caso necesitarás reflejar esto en CUDA Build Rule -> Opciones HUD CUDA / C ++ ), ver nota [4]
  • Habilite el resaltado de syntax con el archivo usertype.dat incluido con el SDK, consulte el archivo readme.txt en \C\doc\syntax_highlighting\visual_studio_8

También recomendaría 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" 

Incidentalmente, recomendaría evitar el corte si es posible, en lugar de eso, ejecute su propia verificación. Cutil no es compatible con NVIDIA, solo se usa para tratar de mantener los ejemplos en el SDK enfocados en el progtwig 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 envoltorio cutilSafeCall llama a 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

  1. También puede usar un juego de reglas específico de la versión de Toolkit, 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].
  2. El archivo de reglas no puede modificar la comstackción C / C ++ y la configuración del enlazador, ya que simplemente está agregando configuraciones de comstackción para el código CUDA. Por lo tanto, debe hacer este paso manualmente. ¡Recuerde hacerlo para todas las configuraciones!
  3. Si desea estabilizar en una versión específica de CUDA Toolkit, entonces debe reemplazar CUDA_PATH con CUDA_PATH_V3_2. Ver también nota 1 .
  4. 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 de multiplicación definida para funciones de biblioteca estándar, entonces este debería ser su primer sospechoso.

¡Qué gran pregunta! Para toda la documentación de CUDA, esto es algo que siempre pensé que era una omisión obvia … De hecho, estoy muy contento de haber encontrado esta publicación, porque después de usar CUDA durante bastante tiempo, todavía no lo había hecho. Encontré una forma oficial y correcta para que VS produzca un progtwig CUDA desde cero.

Cuando tuve que comenzar un nuevo progtwig CUDA, siempre acabo de copiar y modificar el ejemplo de ” plantilla ” del directorio SDK. Puede que esto no sea exactamente lo que está buscando, porque no comienza de cero, pero es una forma rápida de lograr que un proyecto compatible con CUDA funcione en VS con todos los nombres correctos de proyecto / archivo …

  1. Haga una copia del ejemplo de ” plantilla ” del SDK y cambie el nombre del directorio; los únicos contenidos necesarios en el directorio son el código fuente y los archivos VS.sln y .vcproj.
  2. Cambiar el nombre de ambos archivos .sln y .vcproj
  3. Abra el archivo .sln en un editor de texto y cambie el nombre de la variable Project y el nombre de archivo .vcproj en la tercera línea del archivo
  4. Abra el archivo .vcproj en un editor de texto y cambie el nombre de las variables Name y RootNamespace en las primeras líneas del archivo
  5. Abra el proyecto con VS y abra las Páginas de propiedades (haga clic con el botón derecho en el nombre del proyecto en el panel del explorador de soluciones, seleccione “Propiedades”)
  6. Cambie el nombre del archivo de salida en las páginas de propiedades (en Propiedades de configuración -> Enlazador -> General) … Antes de cambiar el nombre del archivo, selecciono “Todas las configuraciones” en el menú desplegable Configuración y “x64” desde la plataforma. abajo, ya que estoy en un sistema de 64 bits
  7. Cambie el nombre del archivo de la base de datos del progtwig en las páginas de propiedades (en Propiedades de configuración -> Enlazador -> Depuración) … Antes de cambiar el nombre del archivo, selecciono “Depurar” y “x64” en los menús desplegables.
  • Instalar el asistente de CUDA VS Configurará VS y agregará el Proyecto CUDA al menú “nuevo proyecto”.
  • Asegúrese de tener instalado el comstackdor x64 (debe verificarse durante la instalación de VS).
  • Compruebe si tiene libs x64, incluye, nvcc dir y en la ruta de búsqueda.
  • Crea un nuevo proyecto usando la plantilla CUDA.
  • Cambie el tipo de proyecto a x64 y CUDA a Native (si tiene nv cuda-enabled card) o la emulación en caso contrario.
  • La plantilla creará reglas de comstackción personalizadas que comstackn archivos .cu con nvcc y otros archivos con comstackdor predeterminado.
  • if, vs intenta comstackr archivos .cu con el comstackdor C / C ++, haga clic en ese archivo en el explorador de soluciones y deshabilite la comstackción para esos archivos (punto rojo en el ícono del archivo)

Puede encontrar información adicional sobre cómo instalar el asistente de CUDA en VS2008 aquí y aquí

[editar]
Si no desea utilizar el asistente, debe configurar las rutas de CUDA lib / include / nvcc manualmente y agregar reglas de comstackción personalizadas a cada nuevo progtwig CUDA. Para obtener información adicional sobre cómo hacerlo, eche un vistazo a la respuesta de Tom.

Es posible que desee echar un vistazo a esta guía: http://www.programmerfish.com/how-to-run-cuda-on-visual-studio-2008-vs08/