Пример:
В примере мы создадим небольшую утилиту, которая будет отображать сведения о CUDA-совместимых устройствах.
1 Создание
Создадим проект в VS C# новый проект - консольное приложение и сошлёмся на сборку CUDA.NET:
Взаимодействие с API драйвера CUDA - это класс GASS.CUDA.CUDA.
2 Класс
Создадим объект класса GASS.CUDA.CUDA:
CUDA cuda = new CUDA(true);
Параметр true конструктора позволяет инициализировать драйвер CUDA.
3 Инициализация
Инициализация драйвера:
Console.WriteLine();
Console.WriteLine( "Список CUDA-оборудования:" );
Console.WriteLine();
var devices = cuda.Devices;
Console.WriteLine( "Количество устройств: " + devices.Count() );
Console.WriteLine();
foreach ( var dev in devices )
{
Console.WriteLine( "Название чипа видеоадаптера: " + dev.Name );
Console.WriteLine( "Объём доступной видеопамяти: {0}Кб", dev.TotalMemory / 1024 );
Console.WriteLine( "CUDA Compute Capability: " + dev.ComputeCapability );
Console.WriteLine();
Console.WriteLine( "Расширенные свойства:" );
var props = dev.Properties;
Console.WriteLine( "\tЧастота работы шейдерного домена: {0}МГц", props.ClockRate / 1000 );
Console.WriteLine( "\tМаксимальное число нитей в блоке: " + props.MaxThreadsPerBlock );
Console.WriteLine( "\tРегистров в мультипроцессоре: {0} шт.", props.RegistersPerBlock );
Console.WriteLine( "\tОбъём общей памяти в мультипроцессоре: {0} байт(а)", props.SharedMemoryPerBlock );
Console.WriteLine( "\tРазмер варпа: " + props.SIMDWidth );
Console.WriteLine();
Console.WriteLine( "Нажмите ENTER..." );
Console.ReadLine();
}
}
catch ( CUDAException ex )
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine( "CUDAException" );
Console.WriteLine( ex.Message );
}
Console.WriteLine( "Список CUDA-оборудования:" );
Console.WriteLine();
var devices = cuda.Devices;
Console.WriteLine( "Количество устройств: " + devices.Count() );
Console.WriteLine();
foreach ( var dev in devices )
{
Console.WriteLine( "Название чипа видеоадаптера: " + dev.Name );
Console.WriteLine( "Объём доступной видеопамяти: {0}Кб", dev.TotalMemory / 1024 );
Console.WriteLine( "CUDA Compute Capability: " + dev.ComputeCapability );
Console.WriteLine();
Console.WriteLine( "Расширенные свойства:" );
var props = dev.Properties;
Console.WriteLine( "\tЧастота работы шейдерного домена: {0}МГц", props.ClockRate / 1000 );
Console.WriteLine( "\tМаксимальное число нитей в блоке: " + props.MaxThreadsPerBlock );
Console.WriteLine( "\tРегистров в мультипроцессоре: {0} шт.", props.RegistersPerBlock );
Console.WriteLine( "\tОбъём общей памяти в мультипроцессоре: {0} байт(а)", props.SharedMemoryPerBlock );
Console.WriteLine( "\tРазмер варпа: " + props.SIMDWidth );
Console.WriteLine();
Console.WriteLine( "Нажмите ENTER..." );
Console.ReadLine();
}
}
catch ( CUDAException ex )
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine( "CUDAException" );
Console.WriteLine( ex.Message );
}
4 Суть
Мы обращаемся к коллекции описания устройств и выводим информацию о каждом из них. В примере отображается не вся доступная API информация. Получится нечто подобное: