суббота, 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/

пятница, 15 февраля 2013 г.

[WiKi] CUDA

   CUDA (англ. Compute Unified Device Architecture) — программно-аппаратная архитектура параллельных вычислений, которая позволяет существенно увеличить вычислительную производительность благодаря использованию графических процессоров фирмы NVIDIA.
  CUDA SDK позволяет программистам реализовывать на специальном упрощённом диалекте языка программирования Си алгоритмы, выполнимые на графических процессорах NVIDIA, и включать специальные функции в текст программы на Cи. Архитектура CUDA даёт разработчику возможность по своему усмотрению организовывать доступ к набору инструкций графического ускорителя и управлять его памятью.