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
 
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDAЛекция 11: Программирование графических процессоров на NVIDIA CUDA
Лекция 11: Программирование графических процессоров на NVIDIA CUDA
Mikhail Kurnosov
 
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
 
Smirnov twisted-python
Smirnov twisted-pythonSmirnov twisted-python
Smirnov twisted-python
Andrey Smirnov
 
Распределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использованияРаспределенное хранилище Ceph. Обзор и практические способы использования
Распределенное хранилище Ceph. Обзор и практические способы использования
DevDay
 

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

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
FUNDAGUA
 
Set your objectives
Set your objectivesSet your objectives
Set your objectives
Arif Mahmood
 
Voces Del Microclima
Voces Del MicroclimaVoces Del Microclima
Voces Del Microclima
sabalero666
 
Ensiklopedi Mukjizat Alquran dan Hadis
Ensiklopedi Mukjizat Alquran dan HadisEnsiklopedi Mukjizat Alquran dan Hadis
Ensiklopedi Mukjizat Alquran dan Hadis
Bin Sopian
 
Shot count/ description.
Shot count/ description.Shot count/ description.
Shot count/ description.
afrostwick
 
Wiki eindwerk cursist
Wiki eindwerk cursistWiki eindwerk cursist
Wiki eindwerk cursist
CVO-SSH
 
Educatieve spelen voor upload naar moodle
Educatieve spelen voor upload naar moodleEducatieve spelen voor upload naar moodle
Educatieve spelen voor upload naar moodle
CVO-SSH
 
Holidays and traditions
Holidays and traditionsHolidays and traditions
Holidays and traditions
iesmaruxamallo
 
HP Programvare SPOR 3
HP Programvare SPOR 3HP Programvare SPOR 3
HP Programvare SPOR 3
HP Norge
 
Knjiga evidencije se kci ja
Knjiga evidencije se kci jaKnjiga evidencije se kci ja
Knjiga evidencije se kci ja
zaDruga
 

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)

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 Chapel
Mikhail 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_samsonov
Computer Science Club
 
Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора Вячеслав Бирюков - Linux инструменты системного администратора
Вячеслав Бирюков - Linux инструменты системного администратора
Yandex
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
Alex Tutubalin
 
Эффективное использование 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 (Алексей Тутубалин)
 

Recently uploaded

СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 

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