SlideShare a Scribd company logo
1 of 15
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

What's hot

Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Ontico
 
Обзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephОбзор архитектуры [файловой] системы Ceph
Обзор архитектуры [файловой] системы CephOSLL
 
Лекция 9. Программирование GPU
Лекция 9. Программирование GPUЛекция 9. Программирование GPU
Лекция 9. Программирование GPUMikhail Kurnosov
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAMikhail Kurnosov
 
11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)11 встреча — Введение в GPGPU (А. Свириденков)
11 встреча — Введение в GPGPU (А. Свириденков)Smolensk Computer Science Club
 
Обзор Btrfs
Обзор BtrfsОбзор Btrfs
Обзор BtrfsOSLL
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Hpc 2.26.03.2013.
Hpc 2.26.03.2013.Boris Kizko
 
7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)7 встреча — Программирование компьютерных сетей (А. Свириденков)
7 встреча — Программирование компьютерных сетей (А. Свириденков)Smolensk Computer Science Club
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-pythonAndrey Smirnov
 
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...
Разбор алгоритмов генерации псевдослучайных чисел / Андрей Боронников (IT Ter...DevGAMM Conference
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияDevDay
 
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследованияSECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследованияSECON
 
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...
Чем заняться вечером, если я знаю сколько будет ++i + ++i / Андрей Бородин (Y...Ontico
 
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Опыт разработки, отладки и внедрения системы горячего резервирования торговой...
Опыт разработки, отладки и внедрения системы горячего резервирования торговой...Ontico
 
NodeMCU AWS IoT Workshop
NodeMCU AWS IoT WorkshopNodeMCU AWS IoT Workshop
NodeMCU AWS IoT WorkshopAlexej Sommer
 

What's hot (19)

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

Viewers also liked

C:\Users\Eric Sr\Desktop\Harpers Value Added Presentation
C:\Users\Eric Sr\Desktop\Harpers Value Added PresentationC:\Users\Eric Sr\Desktop\Harpers Value Added Presentation
C:\Users\Eric Sr\Desktop\Harpers Value Added PresentationSmith Elementary
 
Resistiendo Los Nocheros Nos Han Robado La Primavera
Resistiendo Los Nocheros Nos Han Robado La PrimaveraResistiendo Los Nocheros Nos Han Robado La Primavera
Resistiendo Los Nocheros Nos Han Robado La PrimaveraFUNDAGUA
 
Planet of slums
Planet of slumsPlanet of slums
Planet of slumsccroce
 
Set your objectives
Set your objectivesSet your objectives
Set your objectivesArif Mahmood
 
Welcome to Churp Churp!
Welcome to Churp Churp!Welcome to Churp Churp!
Welcome to Churp Churp!Chalcedony
 
Voces Del Microclima
Voces Del MicroclimaVoces Del Microclima
Voces Del Microclimasabalero666
 
Omgaan met informatie
Omgaan met informatieOmgaan met informatie
Omgaan met informatieCVO-SSH
 
Oh no! My website has been hacked and why that was a good thing
Oh no! My website has been hacked and why that was a good thingOh no! My website has been hacked and why that was a good thing
Oh no! My website has been hacked and why that was a good thingValentin Vesa
 
introduction of application certification
introduction of application certificationintroduction of application certification
introduction of application certificationSamsung
 
Ensiklopedi Mukjizat Alquran dan Hadis
Ensiklopedi Mukjizat Alquran dan HadisEnsiklopedi Mukjizat Alquran dan Hadis
Ensiklopedi Mukjizat Alquran dan HadisBin Sopian
 
Shot count/ description.
Shot count/ description.Shot count/ description.
Shot count/ description.afrostwick
 
Lost in elysium
Lost in elysiumLost in elysium
Lost in elysiumJay Lee
 
Wiki eindwerk cursist
Wiki eindwerk cursistWiki eindwerk cursist
Wiki eindwerk cursistCVO-SSH
 
Philippine Trivia App v3
Philippine Trivia App v3Philippine Trivia App v3
Philippine Trivia App v3Pointcomm.net
 
Educatieve spelen voor upload naar moodle
Educatieve spelen voor upload naar moodleEducatieve spelen voor upload naar moodle
Educatieve spelen voor upload naar moodleCVO-SSH
 
Holidays and traditions
Holidays and traditionsHolidays and traditions
Holidays and traditionsiesmaruxamallo
 
HP Programvare SPOR 3
HP Programvare SPOR 3HP Programvare SPOR 3
HP Programvare SPOR 3HP Norge
 
Knjiga evidencije se kci ja
Knjiga evidencije se kci jaKnjiga evidencije se kci ja
Knjiga evidencije se kci jazaDruga
 

Viewers also liked (20)

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

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

CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSUlarhat
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)Dmitry Evteev
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...Ontico
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангMaxim Krentovskiy
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Yandex
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...Yandex
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3. Mikhail Shcherbakov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Ontico
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...a15464321646213
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаPositive Hack Days
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 

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

CUDA Course 2010 at MSU
CUDA Course 2010 at MSUCUDA Course 2010 at MSU
CUDA Course 2010 at MSU
 
РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)РусКрипто CTF 2010 Full Disclosure (мастер класс)
РусКрипто CTF 2010 Full Disclosure (мастер класс)
 
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...Netmap (by luigi rizzo)   простой и удобный opensource фреймворк для обработк...
Netmap (by luigi rizzo) простой и удобный opensource фреймворк для обработк...
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
GetDev.NET: Снова Эрланг
GetDev.NET: Снова ЭрлангGetDev.NET: Снова Эрланг
GetDev.NET: Снова Эрланг
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
New Android NDK & JNI
New Android NDK & JNINew Android NDK & JNI
New Android NDK & JNI
 
Когда в C# не хватает C++ . Часть 3.
Когда в C# не хватает C++. Часть 3. Когда в C# не хватает C++. Часть 3.
Когда в C# не хватает C++ . Часть 3.
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
Оптимизация программ для современных процессоров и Linux, Александр Крижановс...
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 

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