Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
cuda.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
651.26 Кб
Скачать

2.3 Настройка jcuda для среды разработки Eclipse

После скачивания файлов JCUDA и файла jcudaUtils, необходимо поместить файлы в корневую папку проекта Java и подключить их к проекту в Eclipse (рисунок 2.2). Обязательны для копирования в проект ‘.jar‘ файлы ‘jcuda‘ и ‘jcudaUtils‘ и ‘.dll‘ файлы ‘JCudaDriver‘ и ‘JCudaRuntime‘. Остальные ‘.jar‘ файлы-библиотеки и соответствующие им ‘.dll‘ файлы можно не включать в проект, если их не использовать в программах. Этапы подключения файлов к проекту в Eclipse:

- 1 - после создания проекта необходимо в навигаторе проекта (Project Explorer) выбрать корень проекта и нажать правой кнопкой мыши;

- 2 - в выпавшем меню необходимо выбрать пункт ‘Properties‘;

- 3 - в появившемся окне в списке слева выбрать ‘Java Build Path‘;

- 4 - в том же окне справа нажать кнопку ‘Add JARs...‘;

- 5 - появится окно, в котором необходимо указать ‘.jar‘ файл из библиотеки JCUDA и нажать ‘ОК‘. Таким образом необходимо добавить все требуемые ‘.jar‘ файлы. Затем необходимо нажать кнопку справа ‘Add Library...‘, в появившемся окне выбрать ‘User Library‘;

- 6 - в следующем окне нажать ‘User Libraries...‘, в следующем окне нажать ‘New‘ и ввести название библиотеки. Затем необходимо вернуться на ‘User Library‘, где выбрать созданную библиотеку и нажать ‘Finish‘;

- 7 - затем в окне свойств проекта необходимо раскрыть дерево добавленной библиотеки, в котором выбрать ‘Native Library Location: (None)‘ и нажать кнопку справа ‘Edit...‘;

- 8 - в появившемся окне нажать кнопку ‘Workspace‘, в котором выбрать название проекта (то есть выбирается местоположение ‘.dll‘ файлов) и нажать ‘ОК‘;

- 9 - в окне свойств проекта нажать ‘ОК‘. Таким образом будет завершена настройка JCUDA.

Рисунок 2.2 - Настройка JCUDA в Eclipse

2.4 Решение возможных проблем при работе с cuda и jcuda

Ошибка CUDA_ERROR_LAUNCH_TIMEOUT при выполнении JCUDA-программы связана с превышением интервала ожидания GPU. Интервал ожидания для ОС WindowsXP обычно равен 20 секунд, для ОС Windows7 - 5 секунд. Данная ошибка означает, что GPU не может проводить расчеты дольше установленного интервала ожидания без ответа в основную часть JCUDA-программы. Для разрешения проблемы необходимо открыть редактор реестра ‘Пуск‘->‘Выполнить‘(‘regedit‘). В редакторе реестра найти папку ‘GraphicsDrivers‘ и добавить в нее и в папку ‘DCI‘ (вложенную в ‘GraphicsDrivers‘) параметр ‘TdrLevel‘ со значением 0 (рисунок 2.3).

Рисунок 2.3 - Добавление параметра ‘TdrLevel‘ в реестр Windows

2.5 Определение параметров cuda-устройства и системных параметров в Java-программе

При запуске программы полезно делать проверку на наличие CUDA-устройства:

if(cudaGetDeviceCount(new int[1])!=cudaSuccess)

System.out.println("Устройство с поддержкой CUDA отсутствует!");

Получение количества CUDA-устройств:

int deviceCountArray[] = new int[1];

cudaGetDeviceCount(deviceCountArray);

String cudaDeviceCount="CUDA устройств подключено: "+deviceCountArray[0];

Для получения параметров CUDA-устройства необходимо создать объект класса ‘cudaDeviceProp‘ и получить параметры методом ‘cudaGetDeviceProperties‘, вторым параметром которого указывается порядковый номер CUDA-устройства (при наличии одного CUDA-устройства его порядковый номер равен 0, для следующего - 1 и т.д.):

cudaDeviceProp deviceProp = new cudaDeviceProp();

cudaGetDeviceProperties(deviceProp, 0);

Затем с помощью ‘deviceProp‘ можно получить параметры CUDA-устройства:

"Видеокарта: "+new String(deviceProp.name).substring(0, new String(deviceProp.name).indexOf(0));

"Число ядер: "+deviceProp.multiProcessorCount*8+" (может быть неверным)";

"Глобальная память: "+new BigDecimal((float)(deviceProp.totalGlobalMem)/ 1048576).setScale(0,RoundingMode.UP).floatValue()+" Мбайт";

"Максимальное число потоков на блок: "+deviceProp.maxThreadsPerBlock;

"Максимальный размер блока: "+deviceProp.maxThreadsDim[0]+"x"+ deviceProp.maxThreadsDim[1]+"x"+deviceProp.maxThreadsDim[2];

"Максимальный размер сетки: "+deviceProp.maxGridSize[0]+ "x"+deviceProp. maxGridSize[1]+"x"+deviceProp.maxGridSize[2];

"Частота: "+new BigDecimal((float)(deviceProp.clockRate)/1000000).setScale (2, RoundingMode.UP).floatValue()+" ГГц";

"Лимит времени выполнения: "+(deviceProp.kernelExecTimeoutEnabled!= 0?"Yes":"No");

Получение ‘CUDA Driver Version‘ и ‘CUDA Runtime Version‘:

int driverVersionArray[] = new int[1];

cudaDriverGetVersion(driverVersionArray);

int runtimeVersionArray[] = new int[1];

cudaRuntimeGetVersion(runtimeVersionArray);

"CUDA Driver Version: "+(driverVersionArray[0]/1000)+"."+ (driverVersionArray[0]%100);

"CUDA Runtime Version: "+(runtimeVersionArray[0]/1000)+"."+ (runtimeVersionArray[0]%100);

Параметры ОС и другие параметры можно определить с помощью метода ‘System.getProperty‘:

"Операционная система: "+System.getProperty("os.name");

"Архитектура ОС: "+System.getProperty("os.arch");

"Версия ОС: "+System.getProperty("os.version");

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]