Шаг 7.
Технология CUDA.
Пример получения информации об имеющихся GPU

    На этом шаге мы рассмотрим небольшой пример приложения с использованием технологии CUDA.

  1.     Создадим приложение, которое получает информацию о всех видеокартах компании NVIDIA, имеющихся на компьютере.Для этого откроем NVIDIA Nsight Eclipse Edition Release 6.5. Появится следующее окно:


    Рис. 1. Установка рабочей директории

        В этом окне нужно задать место расположения рабочей директории, в которой будет находиться папка нашего будущего проекта. Для примера мы выберем значение по умолчанию, после чего откроется среда программирования:


    Рис. 2. Среда программирования NVIDIA Nsight Eclipse Edition Release 6.5

  2.     Создадим проект. Для этого нажмем сочетание клавиш Shift + Alt + N. Откроется окно, в котором выберем CUDA C/C++ Project.

        Появится следующее окно:


    Рис. 3. Создание пустого проекта

        В поле Project name зададим имя проекта. Пусть имя проекта будет firstProject.

        Далее нажмем кнопку Next>. Потом нажмем кнопку Finish. После этого у нас будет пустой проект.

  3.     В левой части среды программирования располагается дерево каталогов нашего проекта.


    Рис. 4. Дерево каталогов проекта

        Добавим к проекту файл, в котором будет находиться текст программы. Для этого щелкнем правой клавишей мыши на имени папки firstProject. Далее выберем New -> File. Пусть имя нашего файла будет main.cu. Далее нажимаем кнопку Finish.

  4.     Теперь все готово для работы. Напишем следующую программу:

    #include <cstdio>
    #include <cuda.h>
    #include <cuda_runtime.h>
    int main(){
     int deviceCount = 0;
     cudaDeviceProp devProp;
    
     cudaGetDeviceCount(&deviceCount);
     printf("Найдено устройств: %d\n", deviceCount);
    
     for(int i = 0; i < deviceCount; ++i){
      cudaGetDeviceProperties(&devProp, i);
    
      printf("Устройство %d\n", i+1);
      printf("Compute Capability: %d.%d\n", devProp.major, devProp.minor);
      printf("Имя: %s\n", devProp.name);
      printf("Общая глобальная память: %d\n", devProp.totalGlobalMem);
      printf("Разделяемая память на блок: %d\n", devProp.sharedMemPerBlock);
      printf("Количество регистров на блок: %d\n", devProp.regsPerBlock);
      printf("Общая константная память: %d\n", devProp.totalConstMem);
      printf("Максимальное количество нитей на блоке: %d\n", 
        devProp.maxThreadsPerBlock);
      printf("Максимальное количество нитей в сетке: %d %d %d\n", 
        devProp.maxThreadsDim[0],devProp.maxThreadsDim[1],devProp.maxThreadsDim[2]);
      printf("Максимальный размер сетки: %d %d %d\n", 
        devProp.maxGridSize[0],devProp.maxGridSize[1],devProp.maxGridSize[2]);
      printf("Размер wrap-a: %d\n", devProp.warpSize);
     }
    
      return 0;
    }
    

        Проект можно взять здесь.

  5.     Для того, чтобы скомпилировать проект нужно сначала нажать Ctrl+B, потом Ctrl+F11, потом OK. Если все было сделано без ошибок, то в нижней части среды программирования появится информация об имеющихся GPU.


    Рис. 5. Окно консоли

    На следующем шаге мы рассмотрим спецификаторы доступа.




Предыдущий шаг Содержание Следующий шаг