суббота, 16 февраля 2013 г.

Быстрый старт. NVIDIA CUDA Toolkit & VS 2010 C++

   Данная статья поможет вам быстро начать программировать приложения использующие библиотеку NVIDIA CUDA, при условии, что вы уже умеете программировать на С++ в среде Microsoft Visual Studio (в данной статье показано на примере версии 2010 года) и владеете навыками установки сторонних библиотек и компонентов, а также прямыми руками ;) Поехали!
   1. Устанавливаем Microsoft Visual Studio 2010 и необходимые компоненты.
   2. Далее скачиваем по ссылке: https://developer.nvidia.com/cuda-downloads, дистрибутив CUDA Toolkit+SDK в соответствии с конфигурацией того компьютера на котором вы будете программировать. Например в моем случае это ноутбук с 64-x разрядной операционной системой Windows 7 для которого я скачиваю соответствующий дистрибутив.

   3. Устанавливаем скачанный SDK, установка стандартная, единственное лишь обратите внимание на попытку установщика установить видеодрайвер более старой версии, я эту опцию отключил так как у меня уже стоял обновленный драйвер.
   4. Запускаем MVS. Далее Файл => Создать => Проект => NVIDIA => CUDA => вводим имя проекта => ОК.
   5. Теперь у нас есть MVS CUDA проект, в нем мы видим файл  kernel.cu с примером кода. Нам этот код не понадобиться, смело удаляйте его и вставляйте вместо него вот этот:

#include "cuda_runtime.h"
#include "device_launch_parameters.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");
  }
  system("pause");
  return 0;
}
  6. Компилируем (F7), запускаем (F5). Если все сделали правильно, на экране отобразяться параметры вашего GPU устройства.

Исходники проекта (MVS2010) выложил здесь: http://code.google.com/p/re-cuda-team/

Комментариев нет: