SlideShare a Scribd company logo
CONFLUX: GPGPU ДЛЯ .NET
Евгений Бурмако, 2010
Видеокарты сегодня
• На борту – десятки/сотни 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<<<256, (N + 255) / 256>>>(a, hX, hY);
cudaMemcpy(hY, Y, cudaMemcpyDeviceToHost);
Вопрос к знатокам
Отвечает Александр Друзь
По факту
Brahma:
• Структуры данных: data parallel array.
• Вычисления: выражения C#, LINQ-комбинаторы.
Accelerator v2:
• Структуры данных: data parallel array.
• Вычисления: арифметические операторы, набор
предопределенных функций.
Это работает для многих алгоритмов. Но что, если есть
ветвления или нерегулярный доступ к памяти?
А вот что
saxpy = @”__global__ 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<Saxpy>();
y = kernel.Execute(a, x, y);
Как это работает?
• Front end: декомпилятор C#.
• Преобразование AST: инлайн вызываемых методов,
деструктуризация классов и массивов, отображение
вычислительных операций.
• Back end: генераторы PTX и многоядерного IL.
• Привязка к драйверу nvcuda, который умеет исполнять
программы на ассемблере.
Успехи
http://bitbucket.org/conflux/conflux
• Альфа-версия.
• Умеет вычислять hello-world параллельных
вычислений: умножение матриц.
• За вычетом [на текущий момент] высоких издержек на
JIT-компиляцию идея оправдывает себя даже для
наивного кодогенератора: 1x CPU < 2x CPU << GPU.
• Тройная лицензия: AGPL, исключение для OSS-
проектов, коммерческая.
Демонстрация
Следующие шаги
• Оптимизации для графических процессоров (лесенка
для оптимальной пропускной способности при
транспозиции матриц).
• Полиэдральная модель оптимизации циклов
(конфигурируется относительно иерархии и размеров
кэшей, есть линейные эвристики, оптимизирующие
локальность данных в вычислительной решетке).
• Исполнение на кластере (следующий шаг после
полиэдральной модели: добавляется виртуальный
уровень кэша – вычислительный узел).
Заключение
Conflux: GPGPU для .NET
http://bitbucket.org/conflux/conflux
eugene.burmako@confluxhpc.net

More Related Content

PPT
Conflux: GPGPU .NET
PDF
Михаил Белопухов: OpenBSD: Куда катится крипто?
PDF
Основы криптографии
PDF
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
PPT
лекция 17
PDF
kranonit S07E01 Евгений Василенко: Методы криптографической защиты информации
PDF
Павел Курочкин - STeameR
PPTX
OpenACC short review
Conflux: GPGPU .NET
Михаил Белопухов: OpenBSD: Куда катится крипто?
Основы криптографии
2013-01-05 01 Леонид Евдокимов. Web scale. Взорвется все
лекция 17
kranonit S07E01 Евгений Василенко: Методы криптографической защиты информации
Павел Курочкин - STeameR
OpenACC short review

What's hot (19)

PPT
введение в Gpu
ODP
Red Hat Storage 3.0
ODP
Константин Осипов (Mail.Ru)
PDF
Обзор архитектуры [файловой] системы Ceph
PDF
Лекция 9. Программирование GPU
PDF
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
PDF
11 встреча — Введение в GPGPU (А. Свириденков)
PDF
Обзор Btrfs
PPTX
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
PPTX
Hpc 2.26.03.2013.
PDF
7 встреча — Программирование компьютерных сетей (А. Свириденков)
ODP
Smirnov twisted-python
PPTX
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
PPT
Распределенное хранилище Ceph. Обзор и практические способы использования
ODP
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
PPTX
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
PDF
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
PPTX
NodeMCU AWS IoT Workshop
введение в Gpu
Red Hat Storage 3.0
Константин Осипов (Mail.Ru)
Обзор архитектуры [файловой] системы Ceph
Лекция 9. Программирование GPU
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
11 встреча — Введение в GPGPU (А. Свириденков)
Обзор Btrfs
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Hpc 2.26.03.2013.
7 встреча — Программирование компьютерных сетей (А. Свириденков)
Smirnov twisted-python
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Распределенное хранилище Ceph. Обзор и практические способы использования
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
NodeMCU AWS IoT Workshop
Ad

Viewers also liked (20)

PDF
Bm1 pmr 2009
PPT
C:\Users\Eric Sr\Desktop\Harpers Value Added Presentation
PPT
Resistiendo Los Nocheros Nos Han Robado La Primavera
PPTX
Planet of slums
PDF
Set your objectives
PDF
Welcome to Churp Churp!
PPS
Voces Del Microclima
PPT
Omgaan met informatie
PPTX
Oh no! My website has been hacked and why that was a good thing
PPT
Testing 1
PDF
introduction of application certification
PPTX
Ensiklopedi Mukjizat Alquran dan Hadis
DOCX
Shot count/ description.
PPT
Lost in elysium
PDF
Wiki eindwerk cursist
PPTX
Philippine Trivia App v3
PDF
Educatieve spelen voor upload naar moodle
PPS
Holidays and traditions
PDF
HP Programvare SPOR 3
DOCX
Knjiga evidencije se kci ja
Bm1 pmr 2009
C:\Users\Eric Sr\Desktop\Harpers Value Added Presentation
Resistiendo Los Nocheros Nos Han Robado La Primavera
Planet of slums
Set your objectives
Welcome to Churp Churp!
Voces Del Microclima
Omgaan met informatie
Oh no! My website has been hacked and why that was a good thing
Testing 1
introduction of application certification
Ensiklopedi Mukjizat Alquran dan Hadis
Shot count/ description.
Lost in elysium
Wiki eindwerk cursist
Philippine Trivia App v3
Educatieve spelen voor upload naar moodle
Holidays and traditions
HP Programvare SPOR 3
Knjiga evidencije se kci ja
Ad

Similar to Conflux: GPGPU для .NET (ADD`2010) (20)

PPTX
Introduction to CUDA calculations with GPU
PDF
Python + GPGPU
PPTX
CUDA Best Practices (2-3)
PPTX
Параллельное программирование на современных видеокартах
PPT
CUDA Course 2010 at MSU
PDF
библиотеки с поддержкой Gpu
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
PDF
Презентация бакалаврской работы Артема Лебедева
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
PPTX
Доклад в Mail.ru 01.11.12
PDF
обзор средств разработки для вычислений Gpgpu
PDF
overview of development tools for computing Gpgpu
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
PPTX
CUDAfy.NET параллельное программирование на видеокартах NVidia и не только
PPTX
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
PDF
CUDA-Aware MPI notes
PPTX
Доклад на Highload-2012
PDF
Архитектура и программирование потоковых многоядерных процессоров для научных...
Introduction to CUDA calculations with GPU
Python + GPGPU
CUDA Best Practices (2-3)
Параллельное программирование на современных видеокартах
CUDA Course 2010 at MSU
библиотеки с поддержкой Gpu
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
Презентация бакалаврской работы Артема Лебедева
Архитектура и программирование потоковых многоядерных процессоров для научных...
Доклад в Mail.ru 01.11.12
обзор средств разработки для вычислений Gpgpu
overview of development tools for computing Gpgpu
Архитектура и программирование потоковых многоядерных процессоров для научных...
CUDAfy.NET параллельное программирование на видеокартах NVidia и не только
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
CUDA-Aware MPI notes
Доклад на Highload-2012
Архитектура и программирование потоковых многоядерных процессоров для научных...

Conflux: GPGPU для .NET (ADD`2010)

  • 1. CONFLUX: GPGPU ДЛЯ .NET Евгений Бурмако, 2010
  • 2. Видеокарты сегодня • На борту – десятки/сотни ALU на частоте более 1 GHz. • В пике – 1 TFLOPS (и >100 GFLOPS двойной точности) • API – произвольный доступ к памяти, структуры данных, указатели, подпрограммы. • Возраст API – почти четыре года, несколько поколений графических процессоров.
  • 3. С точки зрения программиста Современные модели программирования GPU (CUDA, AMD Stream, OpenCL, DirectCompute): • Параллельный алгоритм задается парой: 1) ядро (итерация цикла), 2) границы итерации. • Ядро компилируется драйвером. • На основе границ итерации создается решетка вычислительных потоков. • Входные данные копируются в видеопамять. • Запускается выполнение задачи. • Результат копируется в оперативную память.
  • 4. Пример: 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<<<256, (N + 255) / 256>>>(a, hX, hY); cudaMemcpy(hY, Y, cudaMemcpyDeviceToHost);
  • 7. По факту Brahma: • Структуры данных: data parallel array. • Вычисления: выражения C#, LINQ-комбинаторы. Accelerator v2: • Структуры данных: data parallel array. • Вычисления: арифметические операторы, набор предопределенных функций. Это работает для многих алгоритмов. Но что, если есть ветвления или нерегулярный доступ к памяти?
  • 8. А вот что saxpy = @”__global__ 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);
  • 9. Конфлакс Ядра пишутся на С#: поддерживаются структуры данных, локальные переменные, ветвления, циклы. float a; float[] x; [Result] float[] y; var i = GlobalIdx.X; y[i] = a * x[i] + y[i];
  • 10. Конфлакс Не требует явного общения с неуправляемым кодом, позволяет работать с родными типами данных .NET. float[] x, y; var cfg = new CudaConfig(); var kernel = cfg.Configure<Saxpy>(); y = kernel.Execute(a, x, y);
  • 11. Как это работает? • Front end: декомпилятор C#. • Преобразование AST: инлайн вызываемых методов, деструктуризация классов и массивов, отображение вычислительных операций. • Back end: генераторы PTX и многоядерного IL. • Привязка к драйверу nvcuda, который умеет исполнять программы на ассемблере.
  • 12. Успехи http://bitbucket.org/conflux/conflux • Альфа-версия. • Умеет вычислять hello-world параллельных вычислений: умножение матриц. • За вычетом [на текущий момент] высоких издержек на JIT-компиляцию идея оправдывает себя даже для наивного кодогенератора: 1x CPU < 2x CPU << GPU. • Тройная лицензия: AGPL, исключение для OSS- проектов, коммерческая.
  • 14. Следующие шаги • Оптимизации для графических процессоров (лесенка для оптимальной пропускной способности при транспозиции матриц). • Полиэдральная модель оптимизации циклов (конфигурируется относительно иерархии и размеров кэшей, есть линейные эвристики, оптимизирующие локальность данных в вычислительной решетке). • Исполнение на кластере (следующий шаг после полиэдральной модели: добавляется виртуальный уровень кэша – вычислительный узел).
  • 15. Заключение Conflux: GPGPU для .NET http://bitbucket.org/conflux/conflux eugene.burmako@confluxhpc.net