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

    На этом шаге мы рассмотрим получение информации об имеющихся GPU и их возможностей.

    Прежде чем начать работу с GPU, бывает важно получить максимально полную информацию обо всех имеющихся GPU (CUDA может работать сразу с несколькими GPU, если только они не соединены через SLI - Scalable Link Interface) и об их возможностях.

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

struct cudaDeviceProp 
(
char name [256];              // Название устройства.
size_t totalGlobalMem;        // Полный объем глобальной памяти в байтах.
size_t sharedHemPerBlock;     // Объем разделяемой памяти в блоке в байтах.
int regsPerBlock;             // Количество 32-битовых регистров в блоке.
int warpSize;                 // Размер waip'a.
size_t memPitch;              // Максимальный pitch в байтах, допустимый функциями
                              // копирования памяти, выделенной 
                              // через cudaMallocPitch
int maxThreadsPerBlock;       // Максилальное число активных нитей в блоке.
int maxThreadsDim [3];        // Максимальный размер блока по каждому измерению.
int maxGridSize [3];          // Максимальный размер сетки по каждому измерению.
size_t totalConstMem;         // Объем константной памяти в байтах.
int major;                    // Compute Capability, старший номер.
int minor;                    // Compute Capability, младший номер.
int clockRate;                // Частота в килогерцах.
size_t textureAlignment;      // Выравнивание памяти для текстур.
int deviceOverlap;	      // Можно ли осуществлять копирование параллельно
                              // с вычислениями.
int multiProcessorCount;      // Количество мультипроцессоров в GPU.
int kernelExecTimeoutEnables; // 1, если есть ограничение на время выполнения ядра
int integrated;	              // 1, если GPU встроено в материнскую плату
int canMapHostMemory;         // 1, если можно отображать память CPU в память
                              // CUDA. Для использования функциями cudaHostAlloc,  
                              // cudaHostGetDevicePointer
int computeMode;	      // Режим, в котором находится GPU.
                              // Возможные значения: 
                              // cudaComputeModeDefault,
                              // cudaComputeModeExclusive - только одна нить может 
                              // звать cudaSetDevice для данного GPU, 
                              // cudaComputeModeProhibited - ни одна нить не может 
                              // звать cudaSetDevice для данного GPU. 
}

    Для обозначения возможностей GPU CUDA использует понятие Compute Capability. Это пара целых чисел - major.minor, где major - обозначает глобальную архитектурную версию, а minor - небольшие изменения.

    На следующем шаге мы рассмотрим пример получения информации об имеющихся GPU.




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