Слайд 2
![Немного истории С самого появления GPU у разработчиков появилась идея](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-1.jpg)
Немного истории
С самого появления GPU у разработчиков появилась идея перекладывать часть
расчетов с CPU на GPU, но архитектура не позволяла это делать. Почти. Разработчикам удавалось выкрутиться и заставить GPU выполнять нужные инструкции, но зачастую это того не стоило.
Слайд 3
![Краткое введение в технологию Технология CUDA — это программно-аппаратная вычислительная](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-2.jpg)
Краткое введение в технологию
Технология CUDA — это программно-аппаратная вычислительная архитектура Nvidia,
основанная на расширении языка Си, которая даёт возможность организации доступа к набору инструкций графического ускорителя и управления его памятью при организации параллельных вычислений.
Слайд 4
![Основные возможности технологии Унифицированное программно-аппаратное решение для параллельных вычислений на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-3.jpg)
Основные возможности технологии
Унифицированное программно-аппаратное решение для параллельных вычислений на видеочипах Nvidia;
Стандартный
язык программирования Си;
Стандартные библиотеки численного анализа FFT (быстрое преобразование Фурье) и BLAS (линейная алгебра);
Оптимизированный обмен данными между CPU и GPU;
Взаимодействие с графическими API OpenGL и DirectX;
Возможность разработки на низком уровне.
Слайд 5
![Основные сферы применения Симуляция поведения различных тел Обработка графики Расчет](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-4.jpg)
Основные сферы применения
Симуляция поведения различных тел
Обработка графики
Расчет геометрии
Вычисление различных хэшей
Компьютерное
зрение
Искусственный интеллект
Слайд 6
![Техническая реализация Для вызова функции на стороне GPU нужно: Выделить](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-5.jpg)
Техническая реализация
Для вызова функции на стороне GPU нужно:
Выделить память под аргументы
Скопировать
данные с хоста в блок памяти GPU.
Произвести вызов функции (будет рассмотрено далее)
Освободить память после выполнения
Слайд 7
![Работа с памятью Работа с памятью организована при помощи функций](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-6.jpg)
Работа с памятью
Работа с памятью организована при помощи функций
cudaMalloc – выделение
блока памяти
cudaMalloc3D – выделение блока под трехмерный массив (width*height*depth)
cudaMalloc3DArray – аналогично cudaMalloc3D, но для массива таких объектов
cudaMallocArray – выделение массива блоков
cudaMallocPitch – выделение памяти под массивы*
cudaFree – освободить блок памяти
Слайд 8
![Чуть подробнее про cudaMallocPitch Данная функция не только выделяет память](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-7.jpg)
Чуть подробнее про cudaMallocPitch
Данная функция не только выделяет память под данные,
но и гарантирует сохранение следующего соотношения
Что в итоге позволяет нам спокойно ориентироваться в памяти, зная базовый адрес, строку и значение pitch (которое получаем после cudaMallocPitch)
Слайд 9
![Исполнение инструкций Вызов функции, на стороне GPU идет немного необычно](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-8.jpg)
Исполнение инструкций
Вызов функции, на стороне GPU идет немного необычно
Так же функция
должна иметь модификатор __global__
Слайд 10
![Плюсы технологии Быстрые вычисления Хорошая архитектура для многопоточности Удобный инструментарий](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-9.jpg)
Плюсы технологии
Быстрые вычисления
Хорошая архитектура для многопоточности
Удобный инструментарий и отсутствие лишних телодвижений
при передаче инструкций (за исключением чутка странного вызова __global__ функций)
Удобная работа с памятью
Поддержка основных платформ
Слайд 11
![Минусы технологии Передача данных от CPU к GPU достаточно дорогая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-10.jpg)
Минусы технологии
Передача данных от CPU к GPU достаточно дорогая операция. Иногда
это заставляет передавать лишние данные.
Проприетарная архитектура CUDA.
Устаревшая поддержка Visual Studio 2012, но кому это нужно, когда есть он
Слайд 12
![Примеры Построение множества Мондельброта](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-11.jpg)
Примеры
Построение множества Мондельброта
Слайд 13
![Симуляция поверхности воды](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/403092/slide-12.jpg)
Симуляция поверхности воды