CONFLUX: GPGPU ДЛЯ.NET Евгений Бурмако Андрей Воронович.

Презентация:



Advertisements
Похожие презентации
Анатолий Свириденков (сodedgers.com) Блог:
Advertisements

Часть I: Введение в CUDA Александр Межов Ассистент кафедры Информатики 30 сентября 2011 Кафедра Информатики.
Сравнение возможностей инструментария разработки программного обеспечения графических процессоров.
Технологии высокопроизводительных вычислений на GPU и гибридных вычислительных системах Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский.
Половинкин А.Н.. Постановка задачи Алгоритм умножения матриц на GPU Программная реализация.
Половинкин А.Н.. Постановка задачи Алгоритм вычисления функции axpy на GPU Программная реализация.
Лихогруд Николай Задание. Постановка.
Анализ вычислительной сложности алгоритмов Теория сложности вычислений.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Структура ПО CUDA Приложения, использующие возможности CUDA для параллельной обработки данных, взаимодействуют с GPU через несколько разных программных.
Лекция 2Лекция 2Структура программы Директивы препроцессора main () { Описания переменных Операторы }
Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН
Архитектура и программирование массивно-параллельных вычислительных систем zЛекторы: yБоресков А.В. (ВМиК МГУ)Боресков А.В. (ВМиК МГУ) yХарламов А. (NVidia)Харламов.
Сравнительный анализ различных реализаций фильтра Гаусса.
V Всероссийская конференция молодых ученых А. А. Давыдов ИССЛЕДОВАНИЕ ВОЗМОЖНОСТЕЙ УСКОРЕНИЯ РАСЧЕТА ЗАДАЧ АЭРО-ГАЗОДИНАМИКИ С ПОМОЩЬЮ ВЕКТОРНЫХ СОПРОЦЕССОРОВ.
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
П РЕОБРАЗОВАНИЕ ПРОГРАММ НА ЯЗЫКЕ C-DVM В ПРОГРАММЫ ДЛЯ КЛАСТЕРОВ выполнила: студентка 527 группы Коваленко Алина Игоревна научный руководитель: профессор,
Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Введение в параллельную обработку. Уровни параллелизма в процессорах Параллелизм данных (DLP – Data Level Parallelism) Параллелизм команд (ILP – Instruction.
Система автоматизации распараллеливания: DVM-эксперт Студент 528 группы Нгуен Минь Дык Научный руководитель: Профессор, д. ф.-м. н. Крюков Виктор Алексеевич.
Транксрипт:

CONFLUX: GPGPU ДЛЯ.NET Евгений Бурмако Андрей Воронович

Видеокарты сегодня На борту – десятки/сотни ALU на частоте более 1 GHz. В пике – 1 TFLOPS (и >100 GFLOPS двойной точности) API – произвольный доступ к памяти, структуры данных, указатели, подпрограммы. Возраст API – почти четыре года, несколько поколений графических процессоров.

С точки зрения программиста Современные модели программирования GPU (CUDA, AMD Stream, OpenCL, DirectCompute): Параллельный алгоритм задается парой: 1) ядро (итерация цикла), 2) границы итерации. Ядро компилируется драйвером. На основе границ итерации создается решетка вычислительных потоков. Входные данные копируются в видеопамять. Запускается выполнение задачи. Результат копируется в оперативную память.

Пример: SAXPY на CUDA __global__ void Saxpy(float a, float* X, float* Y) { int i = blockDim.x * blockIdx.x + threadIdx.x; Y[i] = a * X[i] + Y[i]; } cudaMemcpy(X, hX, cudaMemcpyHostToDevice); cudaMemcpy(Y, hY, cudaMemcpyHostToDevice); Saxpy >>(a, hX, hY); cudaMemcpy(hY, Y, cudaMemcpyDeviceToHost);

Вопрос к знатокам

Отвечает Александр Друзь

По факту Brahma: Структуры данных: data parallel array. Вычисления: выражения C#, LINQ-комбинаторы. Accelerator v2: Структуры данных: data parallel array. Вычисления: арифметические операторы, набор предопределенных функций. Это работает для многих алгоритмов. Но что, если есть ветвления или нерегулярный доступ к памяти?

А вот что saxpy void Saxpy(float a, float* X, float* Y) { int i = blockDim.x * blockIdx.x + threadIdx.x; Y[i] = a * X[i] + Y[i]; }; nvcuda.cuModuleLoadDataEx(saxpy); nvcuda.cuMemcpyHtoD(X, Y); nvcuda.cuParamSeti(a, X, Y); nvcuda.cuLaunchGrid(256, (N + 255) / 256); nvcuda.cuMemcpyDtoH(Y);

Конфлакс Ядра пишутся на С#: поддерживаются структуры данных, локальные переменные, ветвления, циклы. float a; float[] x; [Result] float[] y; var i = GlobalIdx.X; y[i] = a * x[i] + y[i];

Конфлакс Не требует явного общения с неуправляемым кодом, позволяет работать с родными типами данных.NET. float[] x, y; var cfg = new CudaConfig(); var kernel = cfg.Configure (); y = kernel.Execute(a, x, y);

Как это работает? Front end: декомпилятор C#. Преобразование AST: инлайн вызываемых методов, деструктуризация классов и массивов, отображение вычислительных операций. Back end: генераторы PTX и многоядерного IL. Привязка к драйверу nvcuda, который умеет исполнять программы на ассемблере.

Успехи Альфа-версия. Умеет вычислять hello-world параллельных вычислений: умножение матриц. За вычетом [на текущий момент] высоких издержек на JIT-компиляцию идея оправдывает себя даже для наивного кодогенератора: 1x CPU < 2x CPU

Демонстрация

Следующие шаги Оптимизации для графических процессоров (лесенка для оптимальной пропускной способности при транспозиции матриц). Полиэдральная модель оптимизации циклов (конфигурируется относительно иерархии и размеров кэшей, есть линейные эвристики, оптимизирующие локальность данных в вычислительной решетке). Исполнение на кластере (следующий шаг после полиэдральной модели: добавляется виртуальный уровень кэша – вычислительный узел).

Заключение Ресурсы: coming soon

СПАСИБО!