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

2.8 Сборка программы

Созданный Java-проект можно экспортировать в запускаемый ‘.jar‘ файл. Для этого в навигаторе проекта (Project Explorer) необходимо нажать правой кнопкой мыши и в выпавшем меню выбрать пункт ‘Export‘. В открывшемся окне в разделе ‘Java‘ необходимо выбрать пункт ‘Runnable JAR file‘. В следующем окне в поле ‘Launch configuration‘ указывается Java-класс, с которого начинается выполнение программы, в поле ‘Export destination‘ указывается месторасположение экспортируемого файла, в ‘Library handling‘ выбирается пункт ‘Extract required libraries into generated JAR‘.

Созданный ‘.jar‘ файл помещается в отдельную папку, в которую также необходимо поместить ‘.dll‘ файлы JCUDA-библиотек. Можно поместить ‘.dll‘ файлы для различных версий ОС, чтобы повысить платформонезависимость программы.

В созданную папку помещаются ‘.cu‘ и ‘.ptx‘ файлы с учетом относительных путей размещения этих файлов, прописанных в программе (рисунок 2.4). Можно поместить ‘.cu‘ и ‘.ptx‘ файлы для различных версий ОС. В таком случае имена файлов должны отличаться, а написанная программа должна определять, какой ‘.cu‘ файл подключать для компьютера, на котором данная программа запускается (в зависимости от операционной системы и разрядности).

Рисунок 2.4 - Созданная программа, совместимая с 32-bit(х86) и 64-bit(х86_64) ОС Windows

3 Изучение особенностей jcuda на примере

3.1 Пример jcuda-программы

В программе рассматривается движение сгустка из N частиц. Сгусток частиц движется в течении некоторого периода времени, который разбит на временные отрезки. Для каждой частицы рассчитываются ее координаты для всех временных отрезков (рисунок 3.1) [10].

Рисунок 3.1 - Схема алгоритма расчета координат частиц для одного шага по времени

Входными данными являются: число частиц N, индексы частиц β и α, количество временных интервалов τ_number, интервал изменения положений частиц во времени Δτ, длина L, на которой частицы располагаются равномерно в начальный момент (0 < ξ <= L). Выходными данными являются два двухмерных массива vβ и ξβ - с координатами V и ξ для каждого момента времени (тип данных - float) и для каждой частицы.

Программа последовательно проводит расчеты сначала на языке Java, затем те же расчеты на JCUDA. Результаты выводятся в виде графика, также идет сравнение результатов и определение отклонений. Скорость выполнения программы зависит от числа частиц и количества временных интервалов.

Код вычислений на Java:

two_pi=2*Math.PI;

for(int β=0;β<N;β++){//в начальный момент времени

ξβ[β][0]=L*(β+1)/(N);

vβ[β][0]=0;

}

for(int τ=1;τ<τ_number;τ++){//для всех моментов времени кроме начального

for(int β=0;β<N;β++){

sum=0;

for(int α=0;α<N;α++)

if(ξβ[α][τ-1]>=ξβ[β][τ-1])

sum+=cos(two_pi*(ξβ[β][τ-1]-ξβ[α][τ-1])));

E_ξβ=(-2*sum)/N;

dvβ[β]=E_ξβ*Δτ;

dξβ[β]=vβ[β][τ-1]*Δτ;

vβ[β][τ]=vβ[β][τ-1]+dvβ[β];

ξβ[β][τ]=ξβ[β][τ-1]+dξβ[β];

}

}

При расчете на JCUDA не все вычисления выполняются на GPU. На CPU выполняется расчет координат V и ξ для начального момента времени и обработка полученных на GPU результатов вычислений. Тем не менее, основное время затрачивается именно на вычисления на GPU (рисунок 3.2). Например, при 100 тысячах частиц и 50 временных интервалах время вычисления на GPU составляет 99,79% от времени, затраченного на расчеты, и при увеличении числа частиц время вычисления на GPU будет стремится к 100%. Это показывает, что в созданном алгоритме расчета на JCUDA не имеется резервов для повышения скорости выполнения программы путем переноса вычислений на GPU.

Рисунок 3.2 - Доля времени расчета на GPU от общего времени вычислений в зависимости от числа частиц

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