Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Упрощение параллельных вычислений на платах Raspberry Pi 4B + IoT

Создание и запуск параллельного кода на C ++ 17, реализованного с использованием спецификации CL / SYCL-модели Khronos, на платах Raspberry Pi IoT.

Наши цели…

В этом проекте представлены полезные рекомендации, советы и руководства по созданию современного параллельного кода на C ++ 17/2 × 0, реализованному с использованием модели программирования CL / SYCL, и запуску его на платах Raspberry Pi 4B IoT следующего поколения на основе инновационные четырехъядерные 64-разрядные процессоры RISC-V ARM Cortex-A72.

Аудитория читателей узнает о настройке платы Raspberry 4B IoT прямо из коробки и использовании ее для параллельных вычислений, доставки параллельного кода на C ++ 17, с помощью Khronos CL / triSYCL и Акселя Алпая. Дистрибутивы проекта hipSYCL с открытым исходным кодом, установка и настройка GNU Compiler Collection (GCC) и LLVM / Clang-9.xx Arm / Aarch64-toolchains для создания исполняемых файлов параллельного кода и его запуска в ОС Raspbian Buster 10.6.

Обзор плат Raspberry PI 4B + IoT

Новое поколение инновационных плат Raspberry Pi 4B + IoT, основанных на мощных многоядерных симметричных 64-битных RISC-V процессорах ARM, обеспечивает высочайшую производительность и, таким образом, максимальную производительность самих параллельных вычислений. Использование новейших плат Raspberry Pi позволяет значительно улучшить фактическое ускорение вычислительных процессов на периферии, например, сбор и предварительную обработку данных в режиме реального времени перед их доставкой в ​​центр обработки данных для обработки, например. -масштаб. Параллельное выполнение этих процессов значительно повышает эффективность этих облачных решений, обслуживая миллиарды клиентских запросов или обеспечивая аналитику данных и другие выводы.

Прежде чем мы обсудим создание и запуск параллельного кода на C ++ 17, разработанного с использованием спецификации модели гетерогенного программирования CL / SYCL для плат Raspberry Pi с архитектурой Arm / Aarch64, давайте потратим немного времени и сделаем короткое взгляните на следующее поколение плат Raspberry Pi 4B + и его технические характеристики:

Платы Raspberry Pi 4B + IoT производятся на основе инновационных чипов Broadcom BCM2711B0 (SoC), оснащенных новейшими четырехъядерными процессорами ARM Cortex-A72 @ 1,5 ГГц 64-битными RISC-V, обеспечивающими максимальную производительность и масштабируемость при одновременном использовании это для параллельных вычислений, на грани.

Raspberry Pi известен своими «надежными» и «быстрыми» крошечными нанокомпьютерами, предназначенными для интеллектуального анализа данных и параллельных вычислений. Принципиально новые аппаратные архитектурные особенности многоядерных симметричных 64-битных процессоров RISC-V ARM, такие как DSP, SIMD, VFPv4 и поддержка аппаратной виртуализации, способны значительно улучшить производительность, ускорить ускорение и масштабируемость. IoT-кластеры, массово обрабатывающие данные, на границе.

В частности, одним из наиболее важных преимуществ новейших плат Raspberry Pi 4B + является низкопрофильная память LPDDR4 с объемом оперативной памяти 2, 4 или 8 ГиБ на выбор, работающая на частоте 3200 МГц и обеспечивающая обычно большую пропускную способность для транзакций памяти, что положительно влияет на производительность. параллельных вычислений в целом. Платы с установленной оперативной памятью 4 ГиБ и выше настоятельно рекомендуются для интеллектуального анализа данных и параллельных вычислений. Кроме того, SoC-чипы BCM2711B0 поставляются в комплекте с различными интегрированными устройствами и периферийными устройствами, такими как графические процессоры Broadcom VideoCore VI @ 500 МГц, адаптеры PCI-Ex Gigabit Ethernet и т. Д.

Для создания и запуска конкретного параллельного современного кода на C ++ 17, реализованного с использованием модели гетерогенного программирования CL / SYCL, первое, что нам действительно нужно, это IoT-плата Raspberry Pi 4B + с последней установленной и настроенной ОС Raspbian Buster 10.6. первое использование.

Вот краткий контрольный список требований к аппаратному и программному обеспечению, которые должны быть выполнены заранее:

Оборудование:

Программное обеспечение:

Поскольку у нас есть плата Raspberry Pi 4B + IoT, теперь мы можем приступить к ее включению и настройке прямо из коробки.

Настройка платы Raspberry Pi 4B IoT

Прежде чем мы начнем, мы должны загрузить последний выпуск полного образа ОС Raspbian Buster 10.6.0 из официального репозитория Raspberry Pi. Чтобы установить образ ОС Raspbian на SD-карту, нам также необходимо загрузить и использовать приложение Raspbian Imager 1.4, доступное для различных платформ, таких как Windows, Linux или macOS:

Кроме того, мы также должны загрузить и установить приложение MobaXterm для удаленного подключения к плате Raspberry Pi по SSH- или FTP-протоколам:

Поскольку операционная система Raspbian Buster и приложение Imager были успешно загружены и установлены, мы будем использовать приложение Imager для следующих действий:

1. Сотрите SD-карту, отформатировав ее в файловую систему FAT32 по умолчанию;

2. Извлеките предустановленный образ ОС Raspbian Buster (* .img) на SD-карту;

Поскольку описанные выше шаги были успешно выполнены, просто извлеките SD-карту из кард-ридера и вставьте ее в слот для SD-карты платы Raspberry Pi. Затем подключите кабели micro-HDMI и Ethernet. Наконец, подключите разъем кабеля питания постоянного тока и включите плату. Наконец, система загрузится с ОС Raspbian Buster, установленной на SD-карту, с предложением выполнить несколько шагов после установки, чтобы настроить ее для первого использования.

Поскольку плата была включена, убедитесь, что все следующие шаги после установки были выполнены:

1. Откройте консоль bash и установите пароль «root»:

  [защита электронной почты]:~ $ sudo passwd root  

2. Войдите в bash-console Raspbian с правами «root»:

  [защита электронной почты]:~ $ sudo -s  

3. Обновите базовую систему и прошивку Linux Raspbian, используя следующие команды:

  [защита электронной почты]:~ # sudo apt [защита электронной почты]:~ # sudo apt [защита электронной почты]:~ # sudo rpi-update  

4. Перезагрузите систему в первый раз:

  [электронная почта защищена]:~ # sudo shutdown -r сейчас  

5. Установите последнюю версию загрузчика Raspbian и перезагрузите систему еще раз:

  [защита электронной почты]:~ # sudo rpi-eeprom-update -d [защита электронной почты]:~ # sudo shutdown -r now  

6. Запустите инструмент настройки «raspi-config»:

  [защита электронной почты]:~ # sudo raspi-config  

7. Выполните следующие шаги, используя инструмент «raspi-config»:

* Обновите инструмент raspi-config:

* Отключите графический интерфейс рабочего стола Raspbian при загрузке:

Параметры системы >> Загрузка / автоматический вход >> Автоматический вход в консоль:

* Увеличьте размер корневого раздела ‘/’ на SD-карте:

После выполнения настройки после установки Raspbian, наконец, перезагрузите систему. После перезагрузки вам будет предложено войти в систему. Используйте ранее установленное имя пользователя «root» и пароль для входа в консоль bash с привилегиями root.

Поскольку вы успешно вошли в систему, установите количество пакетов из репозиториев APT, используя следующую команду в bash-console:

  [защита электронной почты]:~ # sudo apt install -y net-tools openssh-server  

Эти два пакета необходимы для настройки сетевого интерфейса Raspberry Pi или OpenSSH-сервера для удаленного подключения к плате через SSH-протокол с помощью MobaXterm.

Настройте сетевой интерфейс платы «eth0», изменив / etc / network / interfaces, например:

  auto eth0iface eth0 inet staticaddress 192.168.87.100netmask 255.255.255.0broadcast 192.168.87.255gateway 192.168.87.254nameserver 192.168.87.254  

Рядом с сетевым интерфейсом выполните базовую настройку OpenSSH-сервера, раскомментировав эти строки в файле / etc / ssh / sshd_config :

  PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords да  

Это позволит войти в систему «root» в консоли bash по SSH-протоколу без ввода пароля.

Наконец, попробуйте подключить плату по сети, используя приложение MobaXterm и открыв удаленный SSH-сеанс с хостом с IP-адресом:192.168.87.100. Вы также должны иметь возможность успешно войти в bash-console Raspbian с ранее установленными учетными данными:

Разработка параллельного кода на C ++ 17 с использованием CL / SYCL-Model

В 2020 году Khronos Group, Intel Corp. и другие поставщики анонсировали революционную новую гетерогенную платформу параллельных вычислений (XPU), дающую возможность переложить выполнение «тяжелых» рабочих нагрузок обработки данных на широко распространенное аппаратное ускорение (например, GPGPU или FPGA), кроме ЦП хоста. Концептуально разработка параллельного кода с использованием платформы XPU полностью основана на спецификации модели программирования Khronos CL / SYCL - уровне абстракции библиотеки OpenCL 2.0.

Вот небольшой пример, иллюстрирующий код на C ++ 17, реализованный с использованием уровня абстракции модели CL / SYCL:

  #include 
 с использованием пространства имен cl ::sycl; constexpr std ::uint32_t N =1000; cl ::sycl ::queue q {}; q.submit ([&] (cl ::sycl ::handler &cgh) {cgh.parallel_for <ядро класса> (cl ::sycl ::range <1> {N}, \ [=] (cl ::sycl ::id <1> idx) {// Выполняем некоторую работу параллельно});}); q.wait ();  

Фрагмент кода на C ++ 17, показанный выше, доставляется полностью на основе использования модели программирования CL / SYCL. Он создает экземпляр объекта cl ::sycl ::queue {} со списком инициализаторов параметров по умолчанию для отправки SYCL-ядер для выполнения на цель ускорения центрального процессора, используемую по умолчанию. Затем он вызывает метод cl ::sycl ::submit (…), имеющий единственный аргумент объекта cl ::sycl ::handler {}, для доступа к методам, которые обеспечивают базовую функциональность ядра, основанную на различных из параллельные алгоритмы, включая метод cl ::sycl ::handler ::parallel_for (…).

Следующий метод используется для реализации жесткого параллельного цикла, порожденного из работающего ядра. Каждая итерация этого цикла выполняется параллельно собственным потоком. Cl ::sycl ::handler ::parallel_for (…) принимает два основных аргумента объекта cl ::sycl ::range <> {} и конкретную lamda-функцию, вызываемую во время каждой итерации цикла. Объект cl ::sycl ::range <> {} в основном определяет количество выполняемых итераций параллельного цикла для каждого конкретного измерения в случае, когда несколько вложенных циклов сворачиваются при обработке многомерных данных.

В приведенном выше коде объект cl ::sycl ::range <1> (N) используется для планирования N-итераций параллельного цикла в одном измерении. Лямбда-функция метода parallel_for (…) принимает единственный аргумент другого объекта cl ::sycl ::id <> {}. Как и cl ::sycl ::range <> {}, этот объект реализует контейнер векторов, каждый элемент которого является значением индекса для каждого измерения и каждой итерации параллельного цикла соответственно. Следующий объект, переданный в качестве аргумента коду в области действия лямда-функции, используется для получения определенных значений индекса. Тело лямда-функции содержит код, который параллельно выполняет некоторую обработку данных.

После того, как определенное ядро ​​было отправлено в очередь и порождено для выполнения, следующий код вызывает метод cl ::sycl ::wait () без аргументов, чтобы установить синхронизацию барьера, гарантируя, что на данный момент никакой код не будет выполняться , пока порождаемое ядро ​​не завершит свою параллельную работу.

Модель гетерогенного программирования CL / SYCL очень эффективна и может использоваться для самых разных приложений.

Однако вскоре Intel Corp. и CodePlay Software Inc отказались от поддержки CL / SYCL для аппаратных архитектур, кроме x86_64. Это сделало невозможным создание параллельного кода C ++ с использованием определенных библиотек CL / SYCL, ориентированных на Arm / Aarch64 и другие архитектуры.

В настоящее время существует ряд проектов библиотек CL / SYCL с открытым исходным кодом, разработанных огромным количеством разработчиков и энтузиастов, обеспечивающих поддержку большего количества аппаратных архитектур, а не только x86_64.

С 2016 года Khronos Group, Inc. выпускает версии своего проекта с открытым исходным кодом библиотеки triSYCL (https://github.com/triSYCL/triSYCL), рекомендованные для использования в качестве испытательного стенда при оценке последнего уровня модели программирования CL / SYCL. спецификация и отправка отзывов в Хронос- и ИСО-комитеты. Однако следующий дистрибутив библиотеки не является «стабильным» и может использоваться исключительно в демонстрационных целях, а не для создания кода CL / SYCL в производственной среде. Кроме того, дистрибутив библиотеки Khronos triSYCL полностью поддерживает кроссплатформенную компиляцию на машине разработки x86_64 с использованием кроссплатформенного инструментария GNU Arm / Aarch64, вместо того, чтобы создавать код «изначально» с помощью компиляторов LLVM / Clang на Raspberry. Пи.

В 2019 году Аксель Алпай из Гейдельбергского университета (Германия) внедрил новейшую библиотеку спецификации уровня модели программирования CL / SYCL, нацеленную на различные аппаратные архитектуры, включая архитектуры Arm / Aarch64 Raspberry Pi, и представил наиболее «стабильный» выпуск. дистрибутива библиотеки с открытым исходным кодом hipSYCL на GitHub (https://github.com/illuhad/hipSYCL).

Далее в этой истории мы обсудим установку и настройку кроссплатформенного GNU GCC / G ++ - 10.xx и «родных» наборов инструментов Arm / Aarch64 LLVM / Clang-9.xx, а также использование дистрибутивов библиотек triSYCL и hipSYCL, для доставки современного параллельного кода на C ++ 17, основанного на использовании обсуждаемых библиотек.

Источник:Упрощение параллельных вычислений на платах Raspberry Pi 4B + IoT


Производственный процесс

  1. Простая температура и влажность на Raspberry Pi
  2. Проект IoT 101:потоковая температура с вашего Raspberry Pi
  3. Java ME 8 + Raspberry Pi + Sensors =IoT World (Часть 1)
  4. Простой детектор детского плача своими руками с Raspberry Pi
  5. Создайте свой первый IOT с помощью Raspberry Pi, датчика DHT11 и Thingspeak.
  6. Легкий старт в мир IoT с MQTT
  7. Проект Интернета вещей на основе Raspberry PI Подключение датчика DHT11
  8. Windows 10 IoT Core на Raspberry Pi 2 - данные датчика Adafruit
  9. Windows 10 IoT Core для Raspberry Pi 3, модель B +
  10. BeagleBone и Raspberry Pi получают надстройки FPGA