Нерешенные внешние символы в программе CUDA для начинающих - PullRequest
11 голосов
/ 14 января 2010

Я создаю новое консольное приложение Win32 как пустой проект Я использую Windows 7 64bit с Visual Studio 2008 C ++. Я пытаюсь получить пример кода из нижней части этой статьи для сборки: http://www.ddj.com/architect/207200659

Я добавляю CUDA Build Rule v2.3.0 в пользовательские правила сборки проекта. Это единственный флажок в списке доступных файлов правил

Я создаю moveArrays.cu в Исходных файлах (папка / фильтр ???)

В этот файл я добавляю следующий код:

// 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);
}

При сборке я получаю следующие ошибки:

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 ==========

Я могу скомпилировать и запустить примеры программ CUDA, поставляемых с SDK. Я знаю, что мне здесь не хватает чего-то простого, но что это?

Ответы [ 2 ]

16 голосов
/ 14 января 2010

Полагаю, вам не хватает ссылки на правильную библиотеку. Убедитесь, что у вас есть библиотека CUDA, добавленная в «Configuration Properties-> Linker-> Input». См. это .

7 голосов
/ 07 декабря 2015

Требуются две вещи:

  1. Добавить путь CUDA:
    Перейдите: «Свойства конфигурации-> Линкер-> Общие-> Дополнительные каталоги библиотек» и добавьте $(CudaToolkitLibDir) в список.

  2. Добавление библиотеки времени выполнения CUDA:
    Перейдите: «Свойства решения-> Линкер-> Ввод-> Дополнительные зависимости» и добавьте cudart.lib в список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...