Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

SYCL - это модель программирования более высокого уровня для повышения производительности программирования на различных аппаратных ускорителях . Это встраиваемый язык с одним исходным доменом ( DSEL ), основанный на чистом C ++ 17 . Это стандарт, разработанный Khronos Group , анонсированный в марте 2014 года.

Происхождение имени [ править ]

SYCL (произносится как «серп») - это имя, а не аббревиатура . В частности, разработчики SYCL дали понять, что в названии нет ссылки на OpenCL . [1]

Цель [ править ]

SYCL - это бесплатный кроссплатформенный уровень абстракции, основанный на базовых концепциях, переносимости и эффективности, вдохновленных OpenCL, который позволяет писать код для гетерогенных процессоров в стиле «одного источника» с использованием полностью стандартного C ++ . SYCL обеспечивает разработку из одного источника, где функции шаблона C ++ могут содержать код как хоста, так и устройства для создания сложных алгоритмов, использующих аппаратные ускорители , а затем повторно использовать их во всем исходном коде для различных типов данных.

Хотя стандарт SYCL начался как подгруппа модели программирования более высокого уровня рабочей группы OpenCL и изначально был разработан для использования с OpenCL и SPIR , SYCL является рабочей группой Khronos Group, независимой от рабочей группы OpenCL с 20 сентября 2019 г. с SYCL 2020 SYCL был обобщен как более общая гетерогенная структура, способная работать с другими системами. Теперь это возможно с концепцией универсального бэкэнда, предназначенного для любого API ускорения , обеспечивая при этом полную совместимость с целевым API., например, использование существующих нативных библиотек для достижения максимальной производительности при упрощении программирования. Например, реализация hipSYCL нацелена на ROCm и CUDA через межпроизводственный HIP AMD .

Версии [ править ]

Последней версией является версия 2 SYCL 2020, которая была опубликована 9 февраля 2021 г. [2] с учетом отзывов пользователей и разработчиков о версии 1 предварительной спецификации SYCL 2020, опубликованной 30 июня 2020 г. [3]

Последней версией предыдущей серии SYCL 1.2.1 является SYCL 1.2.1 версии 7, которая была опубликована 27 апреля 2020 г. (первая версия была опубликована 6 декабря 2017 г. [4] ).

SYCL был представлен на GDC в марте 2014 года с предварительной версией 1.2, [5] затем окончательная версия SYCL 1.2 была представлена ​​на IWOCL 2015 в мае 2015 года [6].

Предварительная версия SYCL 2.2 была представлена ​​на IWOCL 2016 в мае 2016 года [7], нацеленная на C ++ 14 и OpenCL 2.2. Но комитет SYCL предпочел не доработать эту версию и перейти к более гибкой спецификации SYCL, чтобы удовлетворить растущее разнообразие текущих аппаратных ускорителей , включая механизмы искусственного интеллекта , что привело к SYCL 2020.

Учебники [ править ]

В руководствах ComputeCpp SYCL есть несколько руководств. [8]

Лицензия [ править ]

Исходные файлы для создания спецификации, такие как Makefiles и некоторые сценарии, заголовки SYCL и образцы кода SYCL, находятся под лицензией Apache 2.0. [9] Подробная информация о лицензии: https://www.apache.org/licenses/LICENSE-2.0.html.

Сравнение с другими API [ править ]

Открытые стандарты SYCL и OpenCL аналогичны CUDA от Nvidia для конкретных поставщиков .

В Хронос Group области, OpenCL и Vulkan являются низкого уровня , не единственный источник API , и SYCL является высокого уровня одного источника C ++ , предметно-ориентированный встроенный язык .

Для сравнения, версия CUDA с одним исходным кодом для предметно-ориентированного встроенного языка C ++ , которая на самом деле называется CUDA Runtime API , чем-то похожа на SYCL. Но на самом деле существует менее известная версия CUDA без единого источника, которая называется « CUDA Driver API », похожая на OpenCL , и используется, например, самой реализацией CUDA Runtime API .

SYCL расширяет возможности C ++ AMP, освобождая программиста от явной передачи данных между хостом и устройствами с использованием буферов и средств доступа , в отличие от CUDA (до введения унифицированной памяти в CUDA 6). Но, начиная с SYCL 2020, также можно использовать USM вместо буферов и средств доступа, чтобы использовать модель программирования нижнего уровня, аналогичную унифицированной памяти в CUDA .

SYCL является более высокоуровневым, чем C ++ AMP и CUDA, поскольку вам не нужно строить явный граф зависимостей между всеми ядрами и обеспечивает автоматическое асинхронное планирование ядер с перекрытием связи и вычислений. Все это делается с помощью концепции аксессоров, не требуя поддержки компилятора.

В отличие от C ++ AMP и CUDA , SYCL - это чистый C ++ DSEL без какого-либо расширения C ++ , что позволяет использовать некоторую базовую реализацию ЦП, полагающуюся на чистую среду выполнения без какого-либо конкретного компилятора. Это очень полезно для отладки приложения или для создания прототипа новой архитектуры, когда архитектура и компилятор еще не доступны.

Реализация hipSYCL добавляет программирование более высокого уровня SYCL к CUDA и HIP .

SYCL имеет много общего с Kokkos модели программирования, [10] , включая использование непрозрачных многомерных объектов массива (SYCL буферов и Kokkos массивов), многомерные диапазоны для параллельного выполнения, а также снижения (добавлено в SYCL 2020). Многочисленные функции в SYCL 2020 были добавлены в ответ на отзывы сообщества Kokkos.

См. Также [ править ]

  • C ++
  • C ++ AMP
  • CUDA
  • Металл
  • OpenACC
  • OpenCL
  • OpenMP
  • SPIR
  • Вулкан

Ссылки [ править ]

  1. ^ Кериелл, Ронан. «Значение SYCL» . GitHub . Проверено 5 февраля 2021 года .
  2. Khronos Group (9 февраля 2021 г.). «Khronos выпускает спецификацию SYCL 2020» . Хронос . Проверено 22 февраля 2021 года .
  3. Khronos Group (30 июня 2020 г.). «Шаги Khronos к повсеместному развертыванию SYCL с выпуском предварительной спецификации SYCL 2020» . Хронос . Дата обращения 4 декабря 2020 .
  4. Khronos Group (6 декабря 2017 г.). «Группа Khronos выпускает окончательный вариант SYCL 1.2.1» . Хронос . Проверено 12 декабря 2017 года .
  5. Khronos Group (19 марта 2014 г.). «Khronos выпускает предварительную спецификацию SYCL 1.2» . Хронос . Проверено 20 августа 2017 года .
  6. Khronos Group (11 мая 2015 г.). «Khronos выпускает окончательную спецификацию SYCL 1.2» . Хронос . Проверено 20 августа 2017 года .
  7. Khronos Group (18 апреля 2016 г.). «Khronos выпускает предварительную спецификацию OpenCL 2.2 с языком ядра OpenCL C ++» . Хронос . Проверено 18 сентября 2017 года .
  8. ^ «Введение в программирование GPGPU с помощью SYCL» . Codeplay . Проверено 3 октября 2017 года .
  9. ^ https://github.com/KhronosGroup/SYCL-Docs/blob/SYCL-1.2.1/master/LICENSE.txt . Отсутствует или пусто |title=( справка )
  10. ^ Хаммонд, Джефф Р .; Кинснер, Майкл; Бродман, Джеймс (2019). «Сравнительный анализ Kokkos и SYCL как гетерогенных моделей параллельного программирования для приложений C ++» . Материалы международного семинара по OpenCL : 1–2. DOI : 10.1145 / 3318170.3318193 .

Внешние ссылки [ править ]

  • Веб-страница Khronos SYCL
  • Спецификации SYCL в реестре Khronos
  • C ++ 17 ParallelSTL в SYCL
  • Технические ресурсы SYCL
  • Реализация Codeplay ComputeCpp SYCL
  • Внедрение SYCL, начатое Intel, с целью апстриминга Clang / LLVM
  • hipSYCL: реализация SYCL 1.2.1 поверх AMD HIP / NVIDIA CUDA
  • Реализация SYCL с открытым исходным кодом triSYCL
  • Конференция SYCL @ IWOCL
  • «SYCL 2020 запускается с новым названием, новыми функциями и высокими амбициями», статья HPCWire (9 февраля 2021 г.)