Creo una nueva aplicación de consola Win32 como un proyecto vacío Estoy ejecutando Windows 7 de 64 bits con Visual Studio 2008 C++. Estoy intentando obtener el código de muestra de la parte inferior de este artículo para compilar: http://www.ddj.com/architect/207200659Símbolos externos no resueltos en principiantes Programa CUDA
Agrego CUDA Build Rule v2.3.0 a las reglas de compilación personalizadas del proyecto. Es la única cosa con una casilla de verificación en la lista de archivos de reglas disponibles
creo moveArrays.cu en los archivos de origen (carpeta/filtro ???)
En ese archivo agrego el siguiente código:
// moveArrays.cu
//
// demonstrates CUDA interface to data allocation on device (GPU)
// and data movement between host (CPU) and device.
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
int main(void)
{
float *a_h, *b_h; // pointers to host memory
float *a_d, *b_d; // pointers to device memory
int N = 14;
int i;
// allocate arrays on host
a_h = (float *)malloc(sizeof(float)*N);
b_h = (float *)malloc(sizeof(float)*N);
// allocate arrays on device
cudaMalloc((void **) &a_d, sizeof(float)*N);
cudaMalloc((void **) &b_d, sizeof(float)*N);
// initialize host data
for (i=0; i<N; i++) {
a_h[i] = 10.f+i;
b_h[i] = 0.f;
}
// send data from host to device: a_h to a_d
cudaMemcpy(a_d, a_h, sizeof(float)*N, cudaMemcpyHostToDevice);
// copy data within device: a_d to b_d
cudaMemcpy(b_d, a_d, sizeof(float)*N, cudaMemcpyDeviceToDevice);
// retrieve data from device: b_d to b_h
cudaMemcpy(b_h, b_d, sizeof(float)*N, cudaMemcpyDeviceToHost);
// check result
for (i=0; i<N; i++)
assert(a_h[i] == b_h[i]);
// cleanup
free(a_h); free(b_h);
cudaFree(a_d); cudaFree(b_d);
}
Cuando construyo me sale estos errores:
1>------ Build started: Project: CUDASandbox, Configuration: Debug x64 ------ 1>Linking... 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaFree referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMemcpy referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol cudaMalloc referenced in function main 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaUnregisterFatBinary referenced in function __cudaUnregisterBinaryUtil 1>moveArrays.cu.obj : error LNK2019: unresolved external symbol __cudaRegisterFatBinary referenced in function __sti____cudaRegisterAll_45_tmpxft_00001264_00000000_6_moveArrays_cpp1_ii_main 1>D:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\x64\Debug\CUDASandbox.exe : fatal error LNK1120: 5 unresolved externals 1>Build log was saved at "file://d:\Stuff\Programming\Visual Studio 2008\Projects\CUDASandbox\CUDASandbox\x64\Debug\BuildLog.htm" 1>CUDASandbox - 6 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
que puede compilar y ejecutar los programas de ejemplo CUDA que vienen con el SDK. Sé que me falta algo simple aquí, pero ¿qué es?
Usted está correcto. Tuve que agregar "$ (CUDA_LIB_PATH); ../../ common/lib" a Propiedades de Configuración-> Enlazador-> General-> Directorios Adicionales de Librería y "cudart.lib" a Propiedades de configuración-> Enlazador -> Entrada -> Dependencias Adicionales –
Anteriormente había creado mi proyecto cuando quería convertirlo en un programa CUDA y agregué un archivo '.cu'. Independientemente del hecho de que seleccioné Cuda 5.5 en "Proyecto -> Personalización de compilación", la biblioteca correcta a la que se refiere, 'cudart.lib' no se puede encontrar en" Propiedades de configuración-> Enlazador-> Entrada-> Dependencias adicionales ", pero' $ (CudaToolkitLibDir) 'se encontró en" Propiedades de configuración-> Enlazador-> General-> Directorios de biblioteca adicionales ". – DanielTuzes