SlideShare a Scribd company logo
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<<<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-
  проектов, коммерческая.
Демонстрация
Следующие шаги
• Оптимизации для графических процессоров (лесенка
  для оптимальной пропускной способности при
  транспозиции матриц).
• Полиэдральная модель оптимизации циклов
  (конфигурируется относительно иерархии и размеров
  кэшей, есть линейные эвристики, оптимизирующие
  локальность данных в вычислительной решетке).
• Исполнение на кластере (следующий шаг после
  полиэдральной модели: добавляется виртуальный
  уровень кэша – вычислительный узел).
Заключение


                 Ресурсы:
 http://bitbucket.org/conflux/conflux
 http://xeno-by.livejournal.com
 http://blogs.msdn.com/ru-hpc
 http://confluxhpc.net coming soon
СПАСИБО!
andrei.varanovich@confluxhpc.net
eugene.burmako@confluxhpc.net

More Related Content

What's hot

11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
Smolensk Computer Science Club
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Ontico
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Mikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Mikhail Kurnosov
 
Red Hat Storage 3.0
Red Hat Storage 3.0Red Hat Storage 3.0
Red Hat Storage 3.0
Andrey Markelov
 
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Ontico
 
Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?
Yandex
 
обеспечение безопасности программного продукта на различных стадиях жизненног...
обеспечение безопасности программного продукта на различных стадиях жизненног...обеспечение безопасности программного продукта на различных стадиях жизненног...
обеспечение безопасности программного продукта на различных стадиях жизненног...
hmyrhik nikita
 
система эль гамаля
система эль гамалясистема эль гамаля
система эль гамаля
hmyrhik nikita
 
Autoscaling for fun and profit
Autoscaling for fun and profitAutoscaling for fun and profit
Autoscaling for fun and profit
Alexander Demidko
 
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоевнастройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоевMedia Gorod
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
Roman Leventov
 
Apache Storm: от простого приложения до подробностей реализации
Apache Storm: от простого приложения до подробностей реализацииApache Storm: от простого приложения до подробностей реализации
Apache Storm: от простого приложения до подробностей реализации
CEE-SEC(R)
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPython
Anton Patrushev
 
Нереляционный SQL
Нереляционный SQLНереляционный SQL
Нереляционный SQL
Andrei Nikolaenko
 
Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013
Yandex
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
Vsevolod Shabad
 
Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы Ceph
OSLL
 

What's hot (20)

11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)
 
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
Технологии хранения для больших проектов / Сергей Платонов (RAIDIX)
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, paral...
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Red Hat Storage 3.0
Red Hat Storage 3.0Red Hat Storage 3.0
Red Hat Storage 3.0
 
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
 
Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?Михаил Белопухов: OpenBSD: Куда катится крипто?
Михаил Белопухов: OpenBSD: Куда катится крипто?
 
обеспечение безопасности программного продукта на различных стадиях жизненног...
обеспечение безопасности программного продукта на различных стадиях жизненног...обеспечение безопасности программного продукта на различных стадиях жизненног...
обеспечение безопасности программного продукта на различных стадиях жизненног...
 
система эль гамаля
система эль гамалясистема эль гамаля
система эль гамаля
 
Autoscaling for fun and profit
Autoscaling for fun and profitAutoscaling for fun and profit
Autoscaling for fun and profit
 
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоевнастройка Free Bsd для обслуживания 100 200 тысяч соединений   игорь сысоев
настройка Free Bsd для обслуживания 100 200 тысяч соединений игорь сысоев
 
Chronicle Map
Chronicle MapChronicle Map
Chronicle Map
 
Apache Storm: от простого приложения до подробностей реализации
Apache Storm: от простого приложения до подробностей реализацииApache Storm: от простого приложения до подробностей реализации
Apache Storm: от простого приложения до подробностей реализации
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPython
 
Нереляционный SQL
Нереляционный SQLНереляционный SQL
Нереляционный SQL
 
Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013Komarov borba za-miesto-urfu_2013
Komarov borba za-miesto-urfu_2013
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
7812 hid
7812 hid7812 hid
7812 hid
 
Программно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими даннымиПрограммно-технические комплексы для работы с геолого-геофизическими данными
Программно-технические комплексы для работы с геолого-геофизическими данными
 
Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы Ceph
 

Viewers also liked

Using Wikis to Facilitate Collaboration
Using Wikis to Facilitate CollaborationUsing Wikis to Facilitate Collaboration
Using Wikis to Facilitate Collaboration
mwilson518
 
Seller Presentation
Seller PresentationSeller Presentation
Seller Presentation
DavidOConnor
 
Unlock the future of mobile growth
Unlock the future of mobile growthUnlock the future of mobile growth
Unlock the future of mobile growth
Santosh Panda
 
Sattose2013 mega
Sattose2013 megaSattose2013 mega
Sattose2013 mega
Andrei Varanovich
 
Explara publisher partner program
Explara publisher partner programExplara publisher partner program
Explara publisher partner program
Santosh Panda
 
Sharing startup journey with Greenpeace by Santosh Panda - explara.com
Sharing startup journey with Greenpeace by Santosh Panda -  explara.comSharing startup journey with Greenpeace by Santosh Panda -  explara.com
Sharing startup journey with Greenpeace by Santosh Panda - explara.com
Santosh Panda
 
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google DocsMinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
Crystal Rose-Wainstock
 

Viewers also liked (7)

Using Wikis to Facilitate Collaboration
Using Wikis to Facilitate CollaborationUsing Wikis to Facilitate Collaboration
Using Wikis to Facilitate Collaboration
 
Seller Presentation
Seller PresentationSeller Presentation
Seller Presentation
 
Unlock the future of mobile growth
Unlock the future of mobile growthUnlock the future of mobile growth
Unlock the future of mobile growth
 
Sattose2013 mega
Sattose2013 megaSattose2013 mega
Sattose2013 mega
 
Explara publisher partner program
Explara publisher partner programExplara publisher partner program
Explara publisher partner program
 
Sharing startup journey with Greenpeace by Santosh Panda - explara.com
Sharing startup journey with Greenpeace by Santosh Panda -  explara.comSharing startup journey with Greenpeace by Santosh Panda -  explara.com
Sharing startup journey with Greenpeace by Santosh Panda - explara.com
 
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google DocsMinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
MinneTESOL 2013 Presentation: Facilitate Collaboration with Google Docs
 

Similar to Conflux: GPGPU .NET

CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
larhat
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
Maxim Krentovskiy
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Mikhail Kurnosov
 
Gpgpu
GpgpuGpgpu
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2Technopark
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Yandex
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
 
доклад про Llvm
доклад про Llvmдоклад про Llvm
доклад про LlvmVadim Evard
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...Ontico
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
OSLL
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
IT61
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Darya Zubova
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
Cisco Russia
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
a15464321646213
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
Alex Tutubalin
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
Stfalcon Meetups
 

Similar to Conflux: GPGPU .NET (20)

CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Gpgpu
GpgpuGpgpu
Gpgpu
 
C++ весна 2014 лекция 2
C++ весна 2014 лекция 2C++ весна 2014 лекция 2
C++ весна 2014 лекция 2
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
доклад про Llvm
доклад про Llvmдоклад про Llvm
доклад про Llvm
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
Гареев Роман, Создание генератора промежуточного представления Ssa из полиэдр...
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
Виртуализация сетевой инфраструктуры на примере использования IOS-XRv 9000 и ...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Параллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартахПараллельное программирование на современных видеокартах
Параллельное программирование на современных видеокартах
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 

Conflux: GPGPU .NET

  • 1. CONFLUX: GPGPU ДЛЯ .NET Евгений Бурмако Андрей Воронович
  • 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. Заключение Ресурсы: http://bitbucket.org/conflux/conflux http://xeno-by.livejournal.com http://blogs.msdn.com/ru-hpc http://confluxhpc.net coming soon