Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемИнна Стромилова
1 Трансляция операций с массивами в код для современных графических процессоров Сахарных Н.А., Адинец А.В. Научный руководитель Березин С.Б. Лаборатория Microsoft ВМК МГУ
2 Общие вычисления на графических процессорах (GPU) Применение – Линейная алгебра – Численные методы – Обработка изображений Интерфейсы доступа – Graphics API DirectX OpenGL – ATI DPVM DPVM Wrapper
3 Потоковое программирование Массив данных A Массив данных B Массив данных C Ядро – программа для обработки массивов данных Out = A + B * C Массив данных Out
4 DPVM Wrapper ATI DPVM – чтение/запись непосредственно в память GPU – дополнительные возможности по сравнению с графическими API – увеличение производительности DPVM Wrapper – высокоуровневый интерфейс потокового программирования для системы ATI DPVM работа с памятью типизированные буферы данных
5 Постановка задачи Трансляция операций над массивами данных в код для графического процессора – обработка выражений – представление данных – создание программы для выполнения на графическом процессоре (шейдер)
6 Представление выражений DAG (ациклический орграф) – во внутренних узлах – операции – в листьях – константы или массивы ( a – b) + b * c
7 Представление данных Данные в GPU представляются в виде двумерных массивов – отображение 1D, 2D, 3D, 4D массивов на двумерную область памяти GPU хорошо работает с float4 Упаковка данных
8 Трансляция простых операций Инициализация – определение данных и констант в шейдере Работа с регистрами – чтение из каждого массива данных в уникальный временный регистр – назначение регистров для внутренних узлов Определение порядка вычислений узлов DAGа – поиск в ширину Построение шейдера – генерация инструкций для каждого внутреннего узла DAGа – запись в выходной регистр результата
9 Пример ps_3_0 dcl vPos.xy dcl_2d s0 dcl_2d s1 dcl_2d s2 texld r0, vPos, s0 texld r1, vPos, s1 texld r2, vPos, s2 mul r2, r1, r2 sub r0, r0, r1 add oC0, r0, r2
10 Работа с под массивами float(int) a; float(int, int) b; float(int) c = a + b[2,] * b[,2]; Нетривиальное преобразование координат – обычное представление данных – упакованное представление данных строка столбец
11 Редукция Виды: sum(a), prod(a), min(a), max(a) Особенности – создание нового шейдера – несколько вариантов реализации с учетом распараллеливания
12 Различные оптимизации Упакованное представление данных в памяти GPU Обработка DAGа – Инструкция mad
13 Результаты Трансляция несложных выражений над массивами Независимость от API – работа с устройством в терминах потокового программирования Увеличение производительности в несколько раз по сравнению с вычислениями на CPU
14 Планы на будущее Расширение возможностей – поддержка дополнительных операций Разработка back-endа для языка программирования C$ Использование в других проектах для вычислений на GPU
15 Вопросы?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.