2010-01-12 28 views
27

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 programa básico que compila y ejecuta.¿Cómo comienzo un nuevo proyecto CUDA en Visual Studio 2008?

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 compilar. Cuando compilo eso, template_gold.cpp se quejó de no tener stdafx.h incluido, así que lo incluí. Ahora, la generació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 ========== 
+0

He comentado mi publicación con respuestas a sus ediciones. – Tom

+0

(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

Respuesta

45

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

  1. 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].
  2. 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!
  3. 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.
  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 definidos de forma múltiple para funciones de biblioteca estándar, este debería ser su primer sospechoso.
+0

Intenté su configuración y tuve algunos problemas. Edité mi publicación original con los detalles. –

+0

Cuando crea el nuevo proyecto de consola, debe elegir crear un proyecto vacío. Parece que ha elegido usar encabezados precompilados, eso debería ser posible, pero es más simple comenzar con un proyecto vacío. El error de enlace dice que no pudo encontrar * main *, ¿está esto en el archivo .cpp o .cu? También parece que los archivos .cu no se están compilando, verifique que la regla de Compilación de CUDA esté habilitada (tiene una marca al lado en el cuadro de diálogo * Reglas de compilación personalizadas *). – Tom

+0

Ok, comenzar desde un proyecto vacío parece haber ayudado. Gracias. Considero su punto acerca de que el cutil no es una buena solución a largo plazo. Sin embargo, en este momento solo quiero obtener mi propio proyecto compilando así que estoy usando el código de plantilla básico que nVidia proporciona con sdk, y hace uso de las cosas más simples. En este momento estoy recibiendo el error: indentifer "cutilBankChecker" no está definido –

3
  • asistente de instalación VS CUDA. Configurará VS y agregará el Proyecto CUDA al menú "nuevo proyecto".
  • Asegúrese de tener instalado el compilador x64 (se debe comprobar durante la instalación de VS).
  • Compruebe si tiene x 64 libs, includes, nvcc dir y en la ruta de búsqueda.
  • Crear nuevo proyecto usando la plantilla CUDA.
  • Cambie el tipo de proyecto a x64 y la configuración CUDA a Nativo (si tiene nv tarjeta habilitada para cuda) o la emulación en caso contrario.
  • La plantilla creará reglas de compilación personalizadas que compilan archivos .cu con nvcc y otros archivos con el compilador predeterminado.
  • si, VS es intentar compilar .cu archivos con C/C++, haga clic en ese archivo en el explorador de soluciones y compilación de bloqueo para que los archivos (punto rojo en el icono del archivo)

información adicional sobre la instalación de CUDA asistente en VS2008 se puede encontrar here y here

[editar]
Si no desea utilizar el asistente de configuración que tiene que CUDA lib/incluir caminos/NVCC manualmente y añadir reglas de generación personalizada a cada nuevo programa CUDA. Para obtener información adicional sobre cómo hacerlo, eche un vistazo a la respuesta de Tom.

+0

¿Cómo lo haces sin el asistente de CUDA? –

+0

Gracias por su nota sobre cómo establecer las rutas, agregué los detalles a mi respuesta para completarla. – Tom

4

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 correcta para que VS produzca un programa CUDA desde cero.

Cuando tuve que iniciar un nuevo programa CUDA, siempre acabo de copiar y modificar el ejemplo "plantilla" del directorio SDK. Esto puede no ser exactamente lo que está buscando, porque no comienza de cero, pero es una manera rápida de obtener un proyecto compatible con CUDA que funcione en VS con todos los nombres correctos de proyecto/archivo ...

  1. hacer una copia de la "plantilla " ejemplo del SDK, y cambiar el nombre del directorio - los únicos necesarios contenidos en el directorio son el código fuente y .sln VS y archivos .vcproj
  2. Cambiar nombre ambos archivos .sln y .vcproj
  3. Abra el archivo .sln en un editor de texto y cambie el nombre al Proyecto variable y .vcproj nombre de archivo en la tercera línea del archivo
  4. Abrir el archivo .vcproj en un editor de texto, y cambiar el nombre del Nombre y RootNamespace las variables en las primeras líneas del archivo
  5. Abra el proyecto, con el VS y abra las Páginas de propiedades (haga clic con el botón derecho sobre 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" del Configuración desplegable y "x 64" de la Plataforma desplegable, ya que estoy en un sistema de 64 bits
  7. Cambiar el programa de base de datos de archivos nombre 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 las listas desplegables.
Cuestiones relacionadas