- •1 Обзор cuda
- •1.2 Введение в cuda
- •1.3 Терминология cuda
- •1.4 Модель программирования cuda
- •1.5 Версии вычислительных возможностей cuda и программного обеспечения cuda Toolkit
- •1.6 Cuda Toolkit версии 5 и версия вычислительных возможностей 3
- •2.2 Требования к техническому и программному обеспечению для jcuda-программ
- •1.7 Полезные ссылки
- •2 Технология jcuda
- •2.1 Введение в 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.4 Отклонения в результатах вычислений и двойная точность
Вычисления на GPU выполняются в одинарной точности. В связи с этим возникают отклонения в результатах, от результатов, полученных при вычислениях в двойной точности, выполненных на CPU. При одних параметрах счета отклонения невелики, при других - отклонения возрастают. При необходимости повышение точности вычислений на GPU должно быть обеспечено использованием GPU с поддержкой двойной точности вычислений.
Для того чтобы программа производила вычисления в двойной точности необходимо изменить тип данных float на double [11]. Изменения делаются в основной части программы (java-класс) и в CUDA модуле (.cu файл). Также функция cosf заменяется на функцию cos.
После вычислений в двойной точности определяются отклонения для 50 значений (рисунок 3.5).
Рисунок 3.5 - Отклонения JCUDA float и JCUDA double от значений Java double
Размеры отклонений для 50 значений:
- среднее отклонение JCUDA float от Java double = 4,2*10-9;
- максимальное отклонение JCUDA float от Java double = 1,7*10-8;
- среднее отклонение JCUDA double от Java double = 1,4*10-10;
- максимальное отклонение JCUDA double от Java double = 2,8*10-10.
Таким образом, двойная точность JCUDA дает значительно более точные результаты вычислений по сравнению с одинарной точностью:
- среднее отклонение JCUDA double меньше среднего отклонения JCUDA float в 30 раз;
- максимальное отклонение JCUDA double меньше максимальное отклонения JCUDA float в 60 раз.
Перечень ссылок
1. NVIDIA Corporation. CUDA C Programming Guide http://docs.nvidia.com/cuda/cuda-c-programming-guide/
2. CUDA. http://en.wikipedia.org/wiki/CUDA
3. Д. Сандерс, Э. Кэндрот, Технология CUDA в примерах. Введение в програмирование графических процессов: Пер. с англ. Слинкина А.А., научный редактор Боресков А.В. М.: ДМК Пресс, 2011. - 232 с.
4. CUDA. http://ru.wikipedia.org/wiki/CUDA
5. Что такое CUDA? http://www.nvidia.ru/object/what_is_cuda_new_ru.html
6. CUDA мы катимся: технология NVIDIA CUDA http://www.xakep.ru/post/47507/default.asp
7. Алексей Берилло. NVIDIA CUDA - неграфические вычисления на графических процессорах http://www.ixbt.com/video3/cuda-1.shtml
8. NVIDIA CUDA 5 еще больше упрощает программирование на GPU http://www.nvidia.ru/object/nvidia-cuda-5-parallel-computing-20121015-ru.html
9. JCUDA. http://www.jcuda.org/jcuda/JCuda.html
10. Приймак А.В., Мишин А.В. Использование технологии CUDA для решения задачи моделирования сгустка электронов, движущегося в плазме. Современные проблемы математики и ее приложения в естественных науках и информационных технологиях, Сб.тезисов междунар. конф., 2011. - 258c.
11. Надь О. А. Сравнение результатов вычислений с одинарной и двойной точностью, произведенных на основе технологии CUDA.
