VP Research and Development, Codeplay Software
Майкл Вонг — вице-президент исследований и разработки в Codeplay Software, директор и вице-президент ISOCPP.org, старший член Комитета по стандартизации С++ с 15-летним опытом, вице-президент по языкам программирования в Совете стандартов Канады. Майкл также возглавляет представительство Канады в комитете по стандартам C++. В прошлом — генеральный директор OpenMP, а также старший технический архитектор по стратегиям компиляторов IBM.
Майкл возглавляет WG21 SG5 транзакционной памяти и развитие SG14 Разработки Игр / Low Latency / Financials, и является соавтором ряда фич C++ / OpenMP / Transactional Memory, включая: generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. Майкл — автор ряда научных работ, книги по C++11, редактор технических спецификаций Concurrency и Transactional Memory.
Майкл — приглашенный и ключевой докладчик на многих конференциях, в университетах, компаниях, научно-исследовательских институтах, таких как: ACCU, C++Now, Meeting C++, ADC++, CASCON, Bloomberg, Activision/Blizzard, CERN.
Массовый параллелизм для гетерогенных вычислений на C++ для беспилотных автомобилей
В моей роли председателя группы SG14 комитета по стандартизации языка C++ я постоянно сталкиваюсь с требованием создания параллельной модели программирования для гетерогенных устройств – требования, исходящего от разработчиков компьютерных игр, систем финансового трейдинга и встраиваемых устройств. В поисках такой модели я изучил огромное количество стандартов – включая SYCL, HPX, Agency, HCC, OpenMP, OpenACC, OpenCL, C++ AMP, Halide, CUDA, Kokkos, Raja… и многие, многие другие. Задача усложняется тем, что вычислительные устройства отличаются огромным разнообразием – CPU, GPU, FPGA, нестандартные аппаратные системы для конкретных областей применения – и для всего этого разнообразия необходимо решение, позволяющее достичь как высокой производительности, так и низкого энергопотребления – то, чем славится современный C++. Развитие языка C++ стремится отвечать требованием пользователей, и в современных версиях стандарта C++ появляется всё больше и больше поддержки параллельного программирования и гетерогенности – причём как на уровне библиотеки, так и самого языка. В своём докладе я проведу сравнение некоторых из самых популярных моделей параллельного программирования, включая используемые ими модели памяти, передачи данных и абстракции вычислений.
Я расскажу о новых предложениях в области параллельных вычислений в языке C++ — некоторые из них включены в версию стандарта C++17, другие могут быть добавлены в C++20/23. Подробно остановлюсь на концепции “исполнителей” (executors), позволяющую унифицировать управление ресурсами и параллельным кодом. “Исполнители” демонстрируют, как гетерогенные вычисления могут быть поддержаны в будущих версиях C++. Один из стандартов, поддерживающих “исполнители” уже сегодня – Khronos SYCL и библиотека SYCL ParallelSTL. SYCL это система “строительных блоков” для C++ приложений; она служит “мостиком” между абстракциями С++ и аппаратными устройствами. Бесплатная версия SYCL выпущена под названием ComputeCPP Community Edition; с её помощью можно построить высокоуровневые абстракции для моделирования нейросетей, машинного зрения, а в итоге и полного управления беспилотными автомобилями.
В воскресенье состоится мастер класс, участники которого смогут сами написать код на SYCL и Parallel STL, а также больше узнать о параллельном программировании.
Мастер-класс: Гетерогенное программирование с использованием ComputeCPP, C++17 Parallel STL и C++ Concurrency
30 октября 2016
Мастер-класс читается на английском языке с переводом на русский
Требуется отдельная регистрация
Стандарты OpenCL™ и SYCL™, развиваемые консорциумом Khronos™ Group, позволяют выполнять программы, написанные на языках C и C++, на самых разнообразных гетерогенных системах, включая GPU, интегрированные CPU, DSP и даже FPGA. Подобные расширения языка обсуждаются для включения в стандарт C++; первый шаг, в виде технической спецификации C++17 Parallel and Concurrency, уже сделан. Пока что его применение ограничено лишь CPU. В будущем, основываясь на опыте использования SYCL и других высокоуровневых моделей, мы придём к созданию единого высокоуровневого стандарта параллельного программирования для таких прикладных областей как беспилотные автомобили, компьютерное зрение и нейросети.
SYCL уже сейчас позволяет запускать вычисления на гетерогенных устройствах и включает в себя реализацию C++17 ParallelSTL, дополняя её возможностями использования GPU и дополнительных CPU. На этом мастер-классе мы покажем, как писать параллельные программы на SYCL и использовать экспериментальную версию ParallelSTL.
Краткое содержание курса:
- Мы начнём с простой программы (“hello world!”), в которой запускаются очереди в одной задаче и потоковом объекте, и на её примере покажем разницу между “обычным” С++, SYCL и OpenCL.
- Далее расскажем об обмене данными между хостом и GPU с использованием буферов и аксессоров; о важности времени жизни и базовых параллельных конструкциях.
- После чего перейдём к более продвинутым вещам, таким как Гауссово размытие для обработки изображений, позволяющую решать задачу распознавания пешеходов.
- Затем продемонстрируем использование параллельных алгоритмов C++17 с помощью реализации ParallelSTL, входящей в SYCL, которая позволяет запускать код не только на CPU, но и на гетерогенных устройствах.
Кроме практической части, на мастер-классе будут прочитаны лекции о SYCL, OpenCL, а также новых возможностях, предлагаемых в спецификации C++ Parallelism and Concurrency, включая C++17 Parallel STL, C++11 async, фьючерсы (futures), атомики, программирование с передачей продолжений, барьеры, атомарно разделяемый _ptr, а также инструменты для параллельного программирования без использования семафоров.
От участников ожидается знание языка C++ и наличие ноутбука. Необходимое для работы программное обеспечение можно будет установить на месте с USB-накопителя. Мастер-класс может быть полезен и для начинающих разработчиков, но основной материал посвящён продвинутым методам параллельного программирования с использованием C++.