- •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 Отклонения в результатах вычислений и двойная точность
1.4 Модель программирования cuda
CUDA включает два интерфейса программирования приложений (application programming interface, API): высокого уровня (CUDA Runtime API) и низкого (CUDA Driver API) (рисунок 1.2) [7].
Рисунок 1.2 - Связь CUDA API с прикладными программами
GPU является вычислительным устройством - сопроцессором (device) для центрального процессора (host). Ядром (kernel) называется код программы, выполняемый параллельно на GPU.
Модель программирования в CUDA предполагает группирование потоков. Потоки объединяются в блоки потоков (thread block) - одномерные или двумерные сетки потоков, взаимодействующих между собой при помощи разделяемой памяти и точек синхронизации. Программа (ядро, kernel) исполняется над сеткой (grid) блоков потоков (thread blocks) (рисунок 1.3). Каждый блок может быть одно-, двух- или трехмерным по форме.
Рисунок 1.3 - Группировка потоков
Этапы выполнения CUDA-программы:
- 1 - подготовительный - задание параметров распараллеливания и других параметров;
- 2 - выделение памяти на GPU и помещение в нее данных для проведения вычисления;
- 3 - передача параметров распараллеливания и других параметров в функцию и выполнение этой функции на GPU;
- 4 - получение результатов вычисления из памяти GPU и освобождение памяти GPU.
1.5 Версии вычислительных возможностей cuda и программного обеспечения cuda Toolkit
Устройства CUDA имеют разные версии вычислительных возможностей, каждая версия имеет определенные характеристики (рисунки 1.4, 1.5).
Рисунок 1.4 - Версии вычислительных возможностей для GPU
Рисунок 1.5 - Некоторые характеристики версий вычислительных возможностей
CUDA Toolkit содержит драйверы, компиляторы, отладчики, графический интерфейс, библиотеки и другие инструменты для разработки программ (таблица 1.1).
Таблица 1.1. История версий вычислительных возможностей (compute capability) и CUDA Toolkit
год |
версии compute capability |
версии CUDA Toolkit |
2006 |
1.0 |
- |
2007 |
1.1 |
1.0, 1.1 |
2008 |
1.2, 1.3 |
2.0 |
2009 |
- |
2.1, 2.2, 2.3 |
2010 |
2.0, 2.1 |
3.0, 3.1, 3.2 |
2011 |
- |
4.0, 4.1 |
2012 |
3.0 |
4.2, 5.0 |
2013 |
3.5 |
- |
1.6 Cuda Toolkit версии 5 и версия вычислительных возможностей 3
CUDA Toolkit версии 5 вышла в октябре 2012. Основные нововведения:
- динамический параллелизм. Потоки на GPU могут динамически рождать новые потоки [8]. Сводя к минимуму пересылку данных в CPU и обратно, динамический параллелизм упрощает параллельное программирование. Это также позволяет применять CUDA к более широкому спектру алгоритмов;
- вызываемые библиотеки из кода, выполняемого на GPU. Такая поддержка связывания объектов обеспечивает более эффективный процесс создания больших приложений на CUDA путем компилирования многочисленных исходных файлов CUDA в отдельные объектные файлы и их объединения в большие приложения и библиотеки;
- поддержка GPUDirect для RDMA - обеспечивает прямую связь между GPU и другими устройствами PCI-E и поддерживает прямой доступ к памяти между сетевыми картами и GPU. Это уменьшает задержки между узлами GPU в кластерах;
- NVIDIA Nsight Eclipse Edition - быстрое написание кода CUDA в среде Eclipse с помощью встроенного редактора CUDA и автоматического рефакторинга.
