- •1 Обзор cuda
- •1.2 Введение в cuda
- •1.3 Терминология cuda
- •1.4 Модель программирования cuda
- •1.5 Версии вычислительных возможностей cuda и программного обеспечения cuda Toolkit
- •1.6 Cuda Toolkit версии 5 и версия вычислительных возможностей 3
- •1.7 Полезные ссылки
- •2 Технология jcuda
- •2.1 Введение в jcuda
- •2.2 Требования к техническому и программному обеспечению для jcuda-программ
- •2.3 Настройка jcuda для среды разработки Eclipse
- •2.4 Решение возможных проблем при работе с cuda и jcuda
- •2.5 Определение параметров cuda-устройства и системных параметров в Java-программе
- •2.6 Подключение cuda модулей и выполнение их на cuda-устройстве из Java-программы
- •2.7 Создание ‘.Cu‘ файла
- •2.8 Сборка программы
- •3 Изучение особенностей jcuda на примере
- •3.1 Пример jcuda-программы
- •3.2 Скорость выполнения программы
- •3.3 Размер блока
- •3.4 Отклонения в результатах вычислений и двойная точность
3.2 Скорость выполнения программы
Вычисления производятся на видеокарте GeForce 8600 GT с 32 ядрами CUDA (с частотой ядра 0,54ГГц) и на одном ядре двуядерного процессора AMD Athlon64 Х2 (с частотой ядра 2,2ГГц).
В таблице 3.1 представлены результаты вычислений. Здесь стоит сделать поправку на то, что на CPU вычисления идут на языке Java, который медленнее языка С до нескольких раз.
Таблица 3.1 - Время расчета на CPU и GPU при числе временных интервалов равном 50
число частиц N |
время расчета на CPU, с |
время расчета на GPU, с |
ускорение на GPU по сравнению с CPU, раз |
ошибок при отклонении ξ , рассчитанной на GPU, от ξ, рассчитанной на CPU, >=0,99, % |
1000 |
4,3 |
0,2 |
20,6 |
1,6 |
2000 |
18 |
0,6 |
32,8 |
0,5 |
3000 |
40,6 |
1 |
40,2 |
0,97 |
4000 |
86,3 |
1,7 |
49,8 |
0,53 |
5000 |
146,7 |
2,5 |
58,7 |
0,16 |
6000 |
218 |
3,3 |
64,8 |
0,6 |
7000 |
297 |
4,5 |
65,3 |
0,9 |
8000 |
390 |
5,8 |
66,2 |
0,1 |
9000 |
495 |
7,2 |
69,2 |
0,1 |
10000 |
613 |
8,8 |
70 |
0,36 |
На основе полученных результатов строятся график времени выполнения программы на GPU и CPU (рисунок 3.3) и график ускорения вычислений на GPU по сравнению с CPU (рисунок 3.4) в зависимости от числа частиц.
Рисунок 3.3 - Время выполнения программы на GPU и CPU
Рисунок 3.4 - Ускорение вычислений на GPU по сравнению с CPU
Ускорение вычислений на GPU по сравнению с CPU постепенно увеличивается, однако при дальнейшем увеличении числа частиц меняется слабо.
3.3 Размер блока
Как уже говорилось, параметр ‘BLOCKSIZE’ (размер блока - показывает число потоков, обрабатывающих блок данных, а также размер этого блока данных) должен быть кратным числу частиц, иначе вычисления будут происходить неправильно. В то же время изменение ‘BLOCKSIZE’ не приводит к существенному изменению скорости выполнения программы (таблица 3.2), за исключением случаев, когда ‘BLOCKSIZE’ существенно меньше числа ядер в GPU и больше 250 (в данных случаях программа выполняется медленнее). В данной программе размер блока равен 100.
Таблица 3.2 - Время расчета на GPU в зависимости от размера блока при числе интервалов изменения положения частиц равном 50
число частиц N |
размера блока |
время расчета на GPU, с |
20000 |
8 |
59,48 |
16 |
35,30 |
|
20 |
32,63 |
|
25 |
31,37 |
|
32 |
31,09 |
|
50 |
31,38 |
|
80 |
31 |
|
100 |
31,7 |
|
200 |
31,79 |
|
250 |
32,32 |
|
500 |
32,5 |
