Не собирается шаблонный проект CUDA 8.0 в VS15

359
06 января 2017, 10:30

Доброго времени суток! Порядок моих действий:

  1. поставил CUDA Toolkit
  2. поставил NVIDIA Nsight Visual Studio Edition
  3. обновил драйвера(и на удивление Nsight)
  4. обновил VS15 до Update 3

Создал проект по шаблону CUDA 8.0 и при попытке его собрать получаю ошибку:

1>------ Сборка начата: проект: test, Конфигурация: Debug x64 ------
1>  Compiling CUDA source file kernel.cu...
1>
1>  C:\test\test>"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2015 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64"  -I"C:\Program Files (x86)\Visual Leak Detector\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd " -o x64\Debug\kernel.cu.obj "C:\test\test\kernel.cu"
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations\CUDA 8.0.targets(687,9): error MSB3721: выход из команды ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2015 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\x86_amd64"  -I"C:\Program Files (x86)\Visual Leak Detector\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include"  -G   --keep-dir x64\Debug -maxrregcount=0  --machine 64 --compile -cudart static  -g   -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd " -o x64\Debug\kernel.cu.obj "C:\test\test\kernel.cu"" с кодом "1".
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

В проекте ничего не изменял. Никак не могу разобраться, где я повернул не туда.

Answer 1

Прежде всего нужно понимать, как собирается CUDA приложение. Файлы с расширением *.cpp обрабатываются компилятором MS C++ (cl.exe), а файлы c расширением *.cu компилятором CUDA (nvcc.exe), который в свою очередь определяет, какой код будет работать на GPU, а какой на CPU. Код из *.cu, работающий на CPU, передается на компиляцию MS C++, эту особенность удобно использовать для написания динамических библиотек, которые будут экспортировать функции, использующие для расчетов GPU.

Далее привожу листинг простой программы на CUDA, который выводит на экран информацию об аппаратных возможностях GPU.

//FileName: cudaInfo.cu
#include <stdio.h>
#include <cuda_runtime_api.h>
int main()
{
  int deviceCount;
  cudaDeviceProp deviceProp;
  //Сколько устройств CUDA установлено на PC.
  cudaGetDeviceCount(&deviceCount);
  printf("Device count: %d\n\n", deviceCount);
  for (int i = 0; i < deviceCount; i++)
  {
    //Получаем информацию об устройстве
    cudaGetDeviceProperties(&deviceProp, i);
    //Выводим иформацию об устройстве
    printf("Device name: %s\n", deviceProp.name);
    printf("Total global memory: %d\n", deviceProp.totalGlobalMem);
    printf("Shared memory per block: %d\n", deviceProp.sharedMemPerBlock);
    printf("Registers per block: %d\n", deviceProp.regsPerBlock);
    printf("Warp size: %d\n", deviceProp.warpSize);
    printf("Memory pitch: %d\n", deviceProp.memPitch);
    printf("Max threads per block: %d\n", deviceProp.maxThreadsPerBlock);
    printf("Max threads dimensions: x = %d, y = %d, z = %d\n",
      deviceProp.maxThreadsDim[0],
      deviceProp.maxThreadsDim[1],
      deviceProp.maxThreadsDim[2]);
    printf("Max grid size: x = %d, y = %d, z = %d\n", 
      deviceProp.maxGridSize[0], 
      deviceProp.maxGridSize[1], 
      deviceProp.maxGridSize[2]); 
    printf("Clock rate: %d\n", deviceProp.clockRate);
    printf("Total constant memory: %d\n", deviceProp.totalConstMem); 
    printf("Compute capability: %d.%d\n", deviceProp.major, deviceProp.minor);
    printf("Texture alignment: %d\n", deviceProp.textureAlignment);
    printf("Device overlap: %d\n", deviceProp.deviceOverlap);
    printf("Multiprocessor count: %d\n", deviceProp.multiProcessorCount);
    printf("Kernel execution timeout enabled: %s\n",
      deviceProp.kernelExecTimeoutEnabled ? "true" : "false");
  }
  return 0;
}
* This source code was highlighted with Source Code Highlighter.
READ ALSO
Проблема с созданием аналога SetLength на C++

Проблема с созданием аналога SetLength на C++

Пытаюсь сделать аналог SetLength (паскаль) в C++ Просто уже нет сил без такой же удобной вещи, но мой код почему-то не работает Вот код:

372
оздал TEdit динамически, не могу в него ничего писать в программе, даже выделить не могу

оздал TEdit динамически, не могу в него ничего писать в программе, даже выделить не могу

Создал TEdit динамически, не могу в него ничего писать в программе, даже выделить не могу

387
Размещения без повторений,c++

Размещения без повторений,c++

Есть код размещений с повторениями,не могу понять реализацию алгоритма без повторений,везде нахожу что нужна функция аля"NextSet",которая бы как...

362
Подключение ffmpeg в NetBeans

Подключение ffmpeg в NetBeans

Не получается слинковать ffmpeg библиотеки в NetBeansУказал путь для дополнительных библиотек, указал сами библиотеки, а в результате undefined reference:

308