Использование свойств устройства

Опубликовано марта 6, 2018 в Технология CUDA

Ну а помимо написания приложения, которое красиво распечатывает все свойства устройства с поддержкой CUDА, для чего еще можно их использовать?

Поскольку мы как разработчики программы хотели бы, чтобы она работала максимально быстро, интересно было бы выбрать для исполнения программы CPU с наибольшим числом мультипроцессоров.

А если ядро должно тесно взаимодействовать с CPU, то хорошо бы исполнять программу на интегрированном GPU, который разделяет системную память с CPU. То и другое можно узнать, вызвав функцию cudaGetDeviceProperties ().

Предположим, что наша программа зависит от поддержки чисел с плавающей точкой двойной точности. Заглянув в приложение А руководства NVIDIA CUDA Programming Guide, мы узнаем, что арифметику двойной точности для чисел с плавающей точкой поддерживают устройства с уровнем вычислительных возможностей не ниже 1.3. Поэтому, чтобы наша программа заработала, необходимо найти хотя бы одно такое устройство.

С помощью функций cudaGetDeviceCount () и cudaGetOeviceProperties () мы могли бы перебрать все устройства и найти те, для которых старшая часть уровня больше 1 или старшая часть равна единице, а дополнительная — не меньше 3. Но поскольку эту относительно простую процедуру выполнять скучно, исполняющая среда CUDA позволяет ее автоматизировать. Сначала запишем в структуру cudaDeviceProp свойства, которыми должно обладать устройство:

Использование свойств устройства

Затем передадим эту структуру функции cudaChooseDeviceO, поручив исполняющей среде CUDA найти устройство, удовлетворяющее заданным ограничениям. Эта функция вернет идентификатор устройства, который мы затем сможем передать функции cudaSetDevice (). Начиная с этого момента, все операции, относящиеся к устройству, будут производиться на устройстве, обнаруженном функцией cudaChooseDevice ().

Системы с несколькими GPU получают все большее распространение. Например, многие наборы микросхем для материнских плат производства NVIDIA содержат интегрированный GPU с поддержкой CUDA.

Если в компьютер с такой материнской платой добавить еще и дискретный GPU, то получится платформа с несколькими GPU. Кроме того, разработанная NVIDIA технология SLI позволяет устанавливать в один компьютер сразу несколько дискретных GPU.

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