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


Esta es una pregunta increíblemente básica, pero ¿cómo comienzo 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 iniciar 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 programa básico que se compila y se ejecuta.

Editar:

Probé tus pasos Tom. Configuré una aplicación de consola. Entonces eliminado el valor predeterminado .cpp se introduce y se copia sobre los tres archivos del proyecto de plantilla solo para tener algo que compilar. Cuando compilo eso, template_gold.cpp se quejó de no tener stdafx.h incluido, así que incluí eso. Ahora la compilación falla con esto:

1>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------
1>Compiling...
1>template_gold.cpp
1>Linking...
1>LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm"
1>CUDASandbox - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Author: Ashwin Nanjappa, 2010-01-12

4 answers

NOTA Con el lanzamiento de la versión 3.2 del Kit de herramientas CUDA, NVIDIA ahora incluye el archivo rules con el Kit de herramientas en lugar del SDK. Por lo tanto, he dividido esta respuesta en dos mitades, utilice las instrucciones correctas para su versión del Kit de herramientas.

NOTA Estas instrucciones son válidas para Visual Studio 2005 y 2008. Para Visual Studio 2010 ver esta respuesta.


KIT DE HERRAMIENTAS CUDA 3.2 y más tarde

Recomiendo usar el archivo NvCudaRuntimeApi.rules (o NvCudaDriverApi.rules si se usa la API del controlador) proporcionado por NVIDIA, este se publica con el kit de herramientas y admite los últimos indicadores del compilador de una manera amigable. Personalmente le aconsejaría no usar el asistente 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 a compilar y vincular cualquier archivo .cu de su proyecto a su aplicación.

  • Crear un nuevo proyecto utilizando los asistentes estándar de MS (por ejemplo, un proyecto de consola vacío)
  • Implemente su código de host (serie) en .c or .cpp files
  • Implemente sus envoltorios y núcleos en archivos .cu
  • Agregue el NvCudaRuntimeApi.rules (haga clic derecho en el proyecto, Reglas de compilación personalizadas , marque la casilla correspondiente), consulte la nota 1
  • Agregue la biblioteca de tiempo de ejecución CUDA (haga clic derecho en el proyecto y elija Propiedades , luego en Enlazador - > General add $(CUDA_PATH)\lib\$(PlatformName) to the Additional Library Directories and in Linker - > Input add cudart.lib to the Additional Dependencies ), see notes [2] and[3]
  • Opcionalmente agregue los archivos CUDA include a la ruta de búsqueda, requerido si incluye cualquier archivo CUDA en su .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 a la Inclusión adicional Directorios ), véase la nota[3]
  • Entonces simplemente construya su proyecto y los archivos. cu serán compilados.obj y añadido al enlace automáticamente

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 con el botón 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 reflejar esto en Runtime API - > Host - > Runtime Library ), consulte la nota[4]
  • Habilita el resaltado de sintaxis usando usertype.archivo dat incluido con el SDK, vea el readme.txt in <sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8

También recomiendo habilitar Intellisense support con la siguiente entrada del 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, me gustaría abogar evitar 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 usted escribe su propio entonces usted tendrá mucho mejor control y sabrá lo que está sucediendo. Por ejemplo, el wrapper cutilSafeCall llama a exit() si la función falla, una aplicación real (en lugar de una muestra) probablemente debería manejar el error más ¡elegantemente!


KIT DE HERRAMIENTAS CUDA 3.1 y anteriores

Usaría el archivo Cuda.rules proporcionado por NVIDIA con el SDK, este se publica junto con el kit de herramientas y admite los últimos indicadores del compilador de una manera amigable. Personalmente le aconsejaría no usar el asistente 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 any. cu archivos en su proyecto en su aplicación.

  • Crear un nuevo proyecto utilizando los asistentes estándar de MS (por ejemplo, un proyecto de consola vacío)
  • Implemente su código de host (serie) en .c or .cpp files
  • Implemente sus envoltorios y núcleos en archivos .cu
  • Agregue el Cuda.rules (haga clic derecho en el proyecto, Reglas de compilación personalizadas , busque el archivo de reglas y asegúrese de que esté marcado)
  • Agregue la biblioteca de tiempo de ejecución CUDA (haga clic derecho en el proyecto y elija Properties , luego en Linker - > General add $(CUDA_LIB_PATH) to the Additional Library Directories and in Linker - > Input add cudart.lib to the Additional Dependencies ), véase la nota [2] a continuación
  • Opcionalmente agregue los archivos CUDA include a la ruta de búsqueda, requerido si incluye cualquier archivo CUDA en su .archivos cpp (a diferencia de los archivos. cu) (haga clic derecho en el proyecto y elija Properties , luego en C / C++ - > General add $(CUDA_INC_PATH) para los Directorios Adicionales )
  • Entonces simplemente construya su proyecto y los archivos. cu serán compilados.obj y añadido al enlace automáticamente

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 con el botón 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 en caso de que necesite reflejar esto en Regla de compilación de CUDA - > Opciones híbridas de CUDA/C++ ), consulte la nota[4]
  • Habilita el resaltado de sintaxis usando usertype.archivo dat incluido con el SDK, vea el readme.txt in <sdk_install_dir>\C\doc\syntax_highlighting\visual_studio_8

También recomiendo habilitar Intellisense support con la siguiente entrada del 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 abogaría evitar 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 usted escribe su propio entonces usted tendrá mucho mejor control y sabrá lo que está sucediendo. Por ejemplo, el wrapper cutilSafeCall llama a exit() si la función falla, una aplicación real (en lugar de una muestra) probablemente debería manejar el error más ¡elegantemente!


NOTA

  1. También puede utilizar un fule de reglas específicas de la versión del kit de herramientas, por ejemplo, NvCudaRuntimeApi.v3.2.rules. Esto significa que en lugar de buscar el Kit de herramientas de CUDA en %CUDA_PATH%, buscará en %CUDA_PATH_V3_2%, lo que a su vez significa que puede tener varias versiones del Kit de herramientas de CUDA instaladas en su sistema y diferentes proyectos pueden dirigirse a diferentes versiones. Véase también la nota [3].
  2. El archivo de reglas no puede modificar la compilación de C / C++ y configuración del enlazador, ya que simplemente está agregando la configuración de compilación para el código CUDA. Por lo tanto, debe hacer este paso manualmente. Recuerde hacerlo para todas las configuraciones!
  3. Si desea estabilizarse en una versión específica del kit de herramientas de CUDA, debe reemplazar CUDA_PATH con CUDA_PATH_V3_2. Véase también la 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 multiplicar símbolos definidos para funciones de biblioteca estándar, entonces este debería ser su primer sospechoso.
 45
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:00:31

¡Qué gran pregunta!! Para toda la documentación CUDA por ahí, esto es algo que siempre he pensado que era una omisión obvia... De hecho, estoy muy contento de haber encontrado este post, porque después de usar CUDA durante bastante tiempo, todavía no había encontrado un oficial, correcto manera de obtener VS para producir un programa CUDA desde cero.

Cuando he necesitado iniciar un nuevo programa CUDA, siempre he copiado y modificado el ejemplo "template" del directorio SDK. Este puede que no sea exactamente lo que estás buscando, porque no comienza de nuevo, pero es una forma rápida de obtener un proyecto capaz de CUDA trabajando en VS con todos los nombres de proyecto/archivo correctos...

  1. Haga una copia del ejemplo " template" del SDK, y cambie el nombre del directorio the los únicos contenidos necesarios en el directorio son código fuente y VS .sln y .vcproj files
  2. Cambie el nombre de ambos .sln y .vcproj files
  3. Abra el .archivo sln en un texto editor, y cambie el nombre de la variable Project y .vcproj nombre de archivo en la 3a 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" desde el menú desplegable de Configuración y "x64" desde el menú desplegable de la Plataforma, ya que estoy en un sistema de 64 bits
  7. Cambie el nombre del Archivo de Base de datos del programa en las Páginas de Propiedades (en Propiedades de configuración -> Enlazador -> Depuración) ... Antes de cambiar el nombre del archivo, selecciono "Debug" y "x64" en los pull-downs.
 4
Author: tpm1510,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-05 21:40:55
  • Instalar CUDA VS wizard. Configurará VS y agregará el proyecto CUDA al menú" nuevo proyecto".
  • Asegúrese de que tiene instalado el compilador x64 (debe verificarse durante VS install).
  • Compruebe si tiene x64 libs, includes, nvcc dir y en la ruta de búsqueda.
  • Crear un nuevo proyecto utilizando la plantilla CUDA.
  • Cambie el tipo de proyecto a x64 y la configuración de CUDA a Nativa (si tiene una tarjeta habilitada para nv cuda) o emulación de lo contrario.
  • La plantilla se cree reglas de compilación personalizadas que compilen archivos. cu con nvcc y otros archivos con el compilador predeterminado.
  • si, vs está tratando de compilar archivos. cu con el compilador C / C++, haga clic en ese archivo en el explorador de soluciones y deshabilite la compilación para esos archivos (punto rojo en el icono del archivo)

Se puede encontrar información adicional sobre la instalación de CUDA wizard en VS2008 aquí y aquí

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

 3
Author: beermann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-13 11:47:20

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

 3
Author: Salman Ul Haq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-05 10:24:33