亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

轻松在 Raspberry Pi 4B+ 物联网板上进行并行计算

在 C++17 中构建和运行并行代码,使用 Khronos CL/SYCL 模型规范在 Raspberry Pi 物联网板上实现。

我们的目标……

该项目提供了有用的指南、技巧和教程,用于在 C++17/2×0 中构建现代并行代码,使用 CL/SYCL 编程模型实现,并在下一代 Raspberry Pi 4B IoT 板上运行,基于创新的 ARM Cortex-A72、四核、64 位 RISC-V CPU。

读者将了解如何设置开箱即用的 Raspberry 4B IoT 板,并将其用于并行计算,使用 Khronos CL/triSYCL 和 Aksel Alpay 提供 C++17 中的并行代码hipSYCL 项目的开源发行版,安装和配置 GNU 的编译器集合 (GCC) 和 LLVM/Clang-9.xx Arm/Aarch64-toolchains,用于构建并行代码的可执行文件并在 Raspbian Buster 10.6 OS 中运行。

Raspberry PI 4B+ 物联网板概述

下一代创新的 Raspberry Pi 4B+ 物联网板卡基于强大的 ARM 多核对称 64 位 RISC-V CPU,可提供无与伦比的性能,从而实现并行计算的终极生产力。使用最新的 Raspberry Pi 板可以显着提高边缘计算过程的实际性能加速,例如实时收集和预处理数据,然后将其交付到数据中心进行处理,例如-规模。这些流程的并行运行显着提高了这些基于云的解决方案的效率,为数十亿客户请求提供服务或提供数据分析和其他推理。

在我们开始讨论在 C++17 中构建和运行并行代码之前,该代码是通过使用 CL/SYCL 异构编程模型规范为具有 Arm/Aarch64 架构的 Raspberry Pi 板设计的,让我们花点时间花点时间浏览下一代 Raspberry Pi 4B+ 板及其技术规格:

Raspberry Pi 4B+ 物联网板基于创新的 Broadcom BCM2711B0 (SoC) 芯片制造,配备最新的 ARM 四核 Cortex-A72 @ 1.5GHz 64 位 RISC-V CPU,提供终极性能和可扩展性,同时利用用于边缘的并行计算。

Raspberry Pi 以“可靠”和“快速”的微型纳米计算机而闻名,专为数据挖掘和并行计算而设计。 ARM 的多核对称 64 位 RISC-V CPU 的主要新硬件架构特性,如 DSP、SIMD、VFPv4 和硬件虚拟化支持,能够显着提高性能、加速速度和可扩展性。物联网集群,在边缘处理大量数据。

具体来说,最新的 Raspberry Pi 4B+ 主板最重要的优势之一是低配置 LPDDR4 内存,可选择 2、4 或 8 GiB RAM 容量,以 3200Mhz 运行并提供典型的大内存事务带宽,对性能产生积极影响并行计算,一般来说。强烈推荐安装 4 GiB 或更高 RAM 的板用于数据挖掘和并行计算。此外,BCM2711B0 SoC 芯片与各种集成设备和外围设备捆绑在一起,例如 Broadcom VideoCore VI @ 500Mhz GPU、PCI-Ex 千兆以太网适配器等。

为了在 C++17 中构建和运行特定的并行现代代码,使用 CL/SYCL 异构编程模型实现,我们真正需要的第一个是 Raspberry Pi 4B+ 物联网板,其中安装和配置了最新的 Raspbian Buster 10.6 操作系统第一次使用。

以下是必须事先满足的硬件和软件要求的简要清单:

硬件:

软件:

因为,我们有一个 Raspberry Pi 4B+ 物联网板,现在,我们可以继续打开和设置它,开箱即用。

设置树莓派 4B 物联网板

在开始之前,我们必须从官方 Raspberry Pi 存储库下载最新版本的 Raspbian Buster 10.6.0 Full OS 映像。要将 Raspbian OS 映像安装到 SD 卡,我们还需要下载并使用 Raspbian Imager 1.4 应用程序,该应用程序可用于各种平台,例如 Windows、Linux 或 macOS:

此外,我们还必须下载并安装 MobaXterm 应用程序,以便通过 SSH 或 FTP 协议远程建立与 Raspberry Pi 板的连接:

既然已经成功下载并安装了 Raspbian Buster OS 和 Imager 应用程序,我们将使用 Imager 应用程序执行以下操作:

1.擦除SD卡,默认格式化为FAT32文件系统;

2. 将预装的 Raspbian Buster OS 镜像 (*.img) 解压到 SD 卡;

由于上述步骤已成功完成,只需从读卡器中取出 SD 卡并将其插入 Raspberry Pi 板的 SD 卡插槽即可。然后,连接微型 HDMI 和以太网电缆。最后,插入 DC 电源线的连接器,并打开电路板。最后,系统将使用 Raspbian Buster OS 启动,安装到 SD 卡,提示执行几个安装后步骤以配置它以供首次使用。

由于电路板已通电,请确保已完成以下所有安装后步骤:

1. 打开 bash-console 并设置‘root’密码:

[电子邮件保护]:~ $ sudo passwd root 

2. 以“root”权限登录 Raspbian bash-console:

[电子邮件保护]:~ $ sudo -s 

3.升级Raspbian的Linux基础系统和固件,使用以下命令:

[email protected]:~# sudo apt [email protected]:~# sudo apt [email protected]:~# sudo rpi-update 

4. 重启系统,第一次:

[email protected]:~# sudo shutdown -r now 

5. 安装最新的 Raspbian 引导程序并重新启动系统,再次:

[email protected]:~# sudo rpi-eeprom-update -d [email protected]:~# sudo shutdown -r now 

6. 启动‘raspi-config’设置工具:

[电子邮件保护]:~# sudo raspi-config 

7. 使用‘raspi-config’工具完成以下步骤:

* 更新‘raspi-config’工具:

* 在启动时禁用 Raspbian 的桌面 GUI:

系统选项>> 启动/自动登录>> 控制台自动登录:

* 扩展 SD 卡上的根 ‘/’ 分区大小:

执行完 Raspbian 安装后配置后,最后重启系统。重新启动后,系统将提示您登录。使用先前设置的“root”用户名和密码以 root 权限登录 bash 控制台。

由于您已成功登录,请在 bash-console 中使用以下命令安装 APT-repositories 中的软件包数量:

[email protected]:~# sudo apt install -y net-tools openssh-server 

这两个包是配置 Raspberry Pi 的网络接口或 OpenSSH 服务器以使用 MobaXterm 通过 SSH 协议远程连接到开发板所必需的。

通过修改/etc/network/interfaces来配置板子的网络接口‘eth0’,例如:

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

在网络接口旁边,通过在 /etc/ssh/sshd_config 中取消注释这些行,执行 OpenSSH 服务器的基本配置 :

PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords yes 

这将启用“root”登录,通过 SSH 协议进入 bash 控制台,而无需输入密码。

最后,尝试通过网络连接开发板,使用 MobaXterm 应用程序并打开到 IP 地址为 192.168.87.100 的主机的远程 SSH 会话。您还必须能够使用先前设置的凭据成功登录 Raspbian 的 bash 控制台:

使用 CL/SYCL 模型在 C++17 中开发并行代码

2020 年,Khronos Group、英特尔公司和其他供应商宣布了革命性的新型异构并行计算平台 (XPU),能够将“繁重”数据处理工作负载的执行卸载到广泛的硬件加速(例如 GPGPU 或FPGA) 目标,而不是主机 CPU。从概念上讲,使用 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 内核提交给主机 CPU 加速目标,用于执行,默认情况下使用。接下来,它调用 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(…) 方法的 lambda 函数接受另一个 cl::sycl::id<>{} 对象的单个参数。除了 cl::sycl::range<>{} 之外,该对象还实现了一个向量容器,其中的每个元素分别是并行循环的每个维度和每次迭代的索引值。作为参数传递给 lamda 函数范围内的代码,以下对象用于检索特定索引值。 lamda 函数的主体包含并行执行一些数据处理的代码。

在将特定内核提交到队列并生成执行后,以下代码调用不带参数的 cl::sycl::wait() 方法来设置屏障同步,确保不会执行任何代码,到目前为止, 直到正在生成的内核完成其并行工作。

CL/SYCL异构编程模型效率高,应用广泛。

但是,英特尔公司和 CodePlay Software Inc 很快就弃用了对 x86_64 以外的硬件架构的 CL/SYCL 支持。这使得无法使用特定的 CL/SYCL 库、针对 Arm/Aarch64 和其他架构来交付并行 C++ 代码。

目前,有很多CL/SYCL开源库项目,由广大开发者和爱好者开发,支持更多的硬件架构,而不仅仅是x86_64。

自 2016 年以来,Khronos Group, Inc. 发布了他们的 triSYCL 库开源项目 (https://github.com/triSYCL/triSYCL) 的修订版,建议在评估最新的 CL/SYCL 编程模型层时将其用作测试平台规范并向 Khronos 和 ISO 委员会发送反馈。但是,以下库分发不是“稳定的”,只能用于演示目的,不能用于在生产中构建 CL/SYCL 代码。此外,Khronos triSYCL 库发行版完全支持跨平台编译,在 x86_64 开发机器上,使用 GNU 的 Arm/Aarch64 跨平台工具链,而不是在 Raspberry 上“本地”使用 LLVM/Clang 编译器构建代码圆周率。

2019年,海德堡大学(德国)的Aksel Alpay实现了最新的CL/SYCL编程模型层规范库,针对各种硬件架构,包括树莓派的Arm/Aarch64架构,贡献了最“稳定”的版本将 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+ 物联网板上的并行计算变得容易


制造工艺

  1. Raspberry Pi 上的简易温度和湿度
  2. IoT 101 项目:来自 Raspberry Pi 的流温度
  3. Java ME 8 + Raspberry Pi + 传感器 =物联网世界(第 1 部分)
  4. 使用 Raspberry Pi 的简单 DIY 婴儿哭闹检测器
  5. 使用 Raspberry Pi、DHT11 传感器和 Thingspeak 构建您的第一个物联网。
  6. 使用 MQTT 轻松进入物联网世界
  7. 基于 Raspberry PI 的 IoT 项目连接 DHT11 传感器
  8. Raspberry Pi 2 上的 Windows 10 IoT Core – Adafruit 传感器数据
  9. Windows 10 IoT Core for Raspberry Pi 3 Model B+
  10. BeagleBone 和 Raspberry Pi 获得 FPGA 附加组件
  11. DER:控制变得简单
  12. 让工业电子维修变得简单