電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Raspberry Pi 4B+ IoT板上的并行計(jì)算變得簡(jiǎn)單

Raspberry Pi 4B+ IoT板上的并行計(jì)算變得簡(jiǎn)單

2023-06-16 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

我們的目標(biāo)...

該項(xiàng)目提供了有用的指南、技巧和教程,用于在 C++17/2x0 中構(gòu)建現(xiàn)代并行代碼,使用 CL/SYCL 編程模型實(shí)現(xiàn),并在下一代 Raspberry Pi 4B IoT 板上運(yùn)行它,基于創(chuàng)新ARM Cortex-A72,四核,64 位 RISC-V CPU。

讀者將了解如何設(shè)置開箱即用的 Raspberry 4B IoT 板,并將其用于并行計(jì)算,使用 Khronos CL/triSYCL 和 Aksel Alpay 提供 C++17 并行代碼hipSYCL 項(xiàng)目的開源發(fā)行版,安裝和配置 GNU 的編譯器集合 (GCC) 和 LLVM/Clang-9.xx Arm/Aarch64-工具鏈,用于構(gòu)建并行代碼的可執(zhí)行文件并在 Raspbian Buster 10.6 OS 中運(yùn)行。

Raspberry PI 4B+ 物聯(lián)網(wǎng)板概述

下一代創(chuàng)新的 Raspberry Pi 4B+ IoT 板基于強(qiáng)大的 ARM 多核對(duì)稱 64 位 RISC-V CPU,提供了釋放的性能,從而實(shí)現(xiàn)并行計(jì)算的終極生產(chǎn)力。使用最新的 Raspberry Pi 板可以顯著提高邊緣計(jì)算過(guò)程的實(shí)際性能加速,例如在將數(shù)據(jù)交付到數(shù)據(jù)中心進(jìn)行處理之前實(shí)時(shí)收集和預(yù)處理數(shù)據(jù),例如-規(guī)模。這些流程的并行運(yùn)行顯著提高了這些基于云的解決方案的效率,為數(shù)十億的客戶請(qǐng)求提供服務(wù)或提供數(shù)據(jù)分析和其他推理。

在我們開始討論在 C++17 中構(gòu)建和運(yùn)行并行代碼之前,使用 CL/SYCL 異構(gòu)編程模型規(guī)范為具有 Arm/Aarch64 架構(gòu)的 Raspberry Pi 板設(shè)計(jì),讓我們花點(diǎn)時(shí)間花點(diǎn)時(shí)間瀏覽下一代 Raspberry Pi 4B+ 板及其技術(shù)規(guī)格:

poYBAGN2_huAUkvbAAGsdWJMr8I844.png
?

Raspberry Pi 4B+ IoT 板基于創(chuàng)新的 Broadcom BCM2711B0 (SoC) 芯片制造,配備最新的 ARM 四核 Cortex-A72 @ 1.5GHz 64 位 RISC-V CPU,提供終極性能和可擴(kuò)展性,同時(shí)利用它用于邊緣的并行計(jì)算。

Raspberry Pi 以“可靠”和“快速”的微型納米計(jì)算機(jī)而聞名,專為數(shù)據(jù)挖掘和并行計(jì)算而設(shè)計(jì)。ARM 的多核對(duì)稱 64 位 RISC-V CPU 的主要新硬件架構(gòu)特性,如 DSP、SIMD、VFPv4 和硬件虛擬化支持,能夠顯著提高性能、加速速度和可擴(kuò)展性。物聯(lián)網(wǎng)集群,在邊緣大規(guī)模處理數(shù)據(jù)。

具體來(lái)說(shuō),最新的 Raspberry Pi 4B+ 板最重要的優(yōu)勢(shì)之一是具有 2、4 或 8 GiB RAM 容量選擇的薄型 LPDDR4 內(nèi)存,以 3200Mhz 運(yùn)行并提供典型的大內(nèi)存事務(wù)帶寬,對(duì)性能產(chǎn)生積極影響一般來(lái)說(shuō),并行計(jì)算。強(qiáng)烈推薦安裝 4 GiB 或更高 RAM 的板卡用于數(shù)據(jù)挖掘和并行計(jì)算。此外,BCM2711B0 SoC 芯片與各種集成設(shè)備和外圍設(shè)備捆綁在一起,例如 Broadcom VideoCore VI @ 500Mhz GPU、PCI-Ex 千兆以太網(wǎng)適配器等。

為了在 C++17 中構(gòu)建和運(yùn)行特定的并行現(xiàn)代代碼,使用 CL/SYCL 異構(gòu)編程模型實(shí)現(xiàn),我們真正需要的第一個(gè)是安裝和配置最新 Raspbian Buster 10.6 OS 的 Raspberry Pi 4B+ IoT 板第一次使用。

以下是必須事先滿足的硬件和軟件要求的簡(jiǎn)要清單:

硬件:

  • 樹莓派 4 型號(hào) B0,4GB 物聯(lián)網(wǎng)板;
  • 用于 Raspbian 操作系統(tǒng)和數(shù)據(jù)存儲(chǔ)的 16GB 微型 SD 卡;
  • 直流電源:5.0V/2-3A,通過(guò) USB Type-C 連接器(最低 3A - 用于數(shù)據(jù)挖掘和并行計(jì)算);

軟件:

  • Raspbian Buster 10.6.0 完整操作系統(tǒng);
  • Raspbian Imager 1.4;
  • MobaXterm 20.3 build 4396 或任何其他 SSH 客戶端;

因?yàn)椋覀冇幸粋€(gè) Raspberry Pi 4B+ IoT 板,現(xiàn)在,我們可以繼續(xù)打開它并進(jìn)行設(shè)置,開箱即用。

設(shè)置 Raspberry Pi 4B 物聯(lián)網(wǎng)板

在開始之前,我們必須從官方 Raspberry Pi 存儲(chǔ)庫(kù)下載最新版本的 Raspbian Buster 10.6.0 Full OS 映像。要將 Raspbian OS 映像安裝到 SD 卡,我們還需要下載并使用 Raspbian Imager 1.4 應(yīng)用程序,該應(yīng)用程序可用于各種平臺(tái),例如 Windows、Linux 或 macOS:

此外,我們還必須下載并安裝 MobaXterm 應(yīng)用程序,以通過(guò) SSH 或 FTP 協(xié)議遠(yuǎn)程建立與 Raspberry Pi 板的連接:

由于 Raspbian Buster OS 和 Imager 應(yīng)用程序已成功下載并安裝,我們將使用 Imager 應(yīng)用程序執(zhí)行以下操作:

1. 擦除SD卡,默認(rèn)格式化為FAT32文件系統(tǒng);

2. 將預(yù)裝的 Raspbian Buster OS 鏡像 (*.img) 解壓到 SD 卡中;

由于上述步驟已成功完成,只需從讀卡器中取出 SD 卡并將其插入樹莓派板的 SD 卡插槽即可。然后,連接 micro-HDMI 和以太網(wǎng)電纜。最后,插入直流電源線的連接器,然后打開電路板。最后,系統(tǒng)將使用安裝到 SD 卡的 Raspbian Buster OS 啟動(dòng),提示執(zhí)行幾個(gè)安裝后步驟來(lái)配置它以供首次使用。

由于開發(fā)板已上電,請(qǐng)確保已完成以下所有安裝后步驟:

1. 打開 bash 控制臺(tái)并設(shè)置“root”密碼:

pi@raspberrypi4:~ $ sudo passwd root

2. 使用“root”權(quán)限登錄 Raspbian bash 控制臺(tái):

pi@raspberrypi4:~ $ sudo -s

3. 使用以下命令升級(jí) Raspbian 的 Linux 基礎(chǔ)系統(tǒng)和固件:

root@raspberrypi4:~# sudo apt update
root@raspberrypi4:~# sudo apt full-upgrade
root@raspberrypi4:~# sudo rpi-update

4. 重新啟動(dòng)系統(tǒng),第一次:

root@raspberrypi4:~# sudo shutdown -r now

5. 安裝最新的 Raspbian 的引導(dǎo)程序并重新啟動(dòng)系統(tǒng),再次:

root@raspberrypi4:~# sudo rpi-eeprom-update -d -a
root@raspberrypi4:~# sudo shutdown -r now

6. 啟動(dòng)“raspi-config”設(shè)置工具:

root@raspberrypi4:~# sudo raspi-config

7. 使用“raspi-config”工具完成以下步驟:

* 更新 'raspi-config' 工具:

pYYBAGN2_h6AOLklAAFN3SSqdI4550.png
?

* 在啟動(dòng)時(shí)禁用 Raspbian 的桌面 GUI:

系統(tǒng)選項(xiàng)>>引導(dǎo)/自動(dòng)登錄>>控制臺(tái)自動(dòng)登錄:

poYBAGN2_iGAHg8dAADz_Y0sVb4854.png
?

* 擴(kuò)展 SD 卡上的根 '/' 分區(qū)大?。?/font>

poYBAGN2_iSAEJA5AAFckNXU5hc508.png
?

執(zhí)行 Raspbian 安裝后配置后,最后重新啟動(dòng)系統(tǒng)。重新啟動(dòng)后,系統(tǒng)會(huì)提示您登錄。使用之前設(shè)置的“root”用戶名和密碼,以 root 權(quán)限登錄 bash 控制臺(tái)。

由于您已成功登錄,請(qǐng)?jiān)?bash-console 中使用以下命令從 APT-repositories 安裝包的數(shù)量:

root@raspberrypi4:~# sudo apt install -y net-tools openssh-server

這兩個(gè)軟件包是配置 Raspberry Pi 的網(wǎng)絡(luò)接口或 OpenSSH 服務(wù)器以使用 MobaXterm 通過(guò) SSH 協(xié)議遠(yuǎn)程連接到開發(fā)板所必需的。

通過(guò)修改 /etc/network/interfaces 來(lái)配置板子的網(wǎng)絡(luò)接口 'eth0',例如:

auto eth0
iface eth0 inet static
address 192.168.87.100
netmask 255.255.255.0
broadcast 192.168.87.255
gateway 192.168.87.254
nameserver 192.168.87.254

在網(wǎng)絡(luò)接口旁邊,通過(guò)取消注釋/etc/ssh/sshd_config中的這些行來(lái)執(zhí)行 OpenSSH 服務(wù)器的基本配置

PermitRootLogin yes
StrictModes no

PasswordAuthentication yes
PermitEmptyPasswords yes

這將啟用“root”登錄,通過(guò) SSH 協(xié)議進(jìn)入 bash 控制臺(tái),而無(wú)需輸入密碼。

最后,嘗試通過(guò)網(wǎng)絡(luò)連接開發(fā)板,使用 MobaXterm 應(yīng)用程序并打開與 IP 地址為:192.168.87.100 的主機(jī)的遠(yuǎn)程 SSH 會(huì)話。您還必須能夠使用先前設(shè)置的憑據(jù)成功登錄到 Raspbian 的 bash 控制臺(tái):

poYBAGN2_iiAJPJ3AAQ43jgzX6c923.png
?

使用 CL/SYCL-Model 在 C++17 中開發(fā)并行代碼

2020 年,Khronos Group、英特爾公司和其他供應(yīng)商宣布推出革命性的新型異構(gòu)并行計(jì)算平臺(tái) (XPU),能夠?qū)ⅰ胺敝亍睌?shù)據(jù)處理工作負(fù)載的執(zhí)行卸載到廣泛的硬件加速(例如 GPGPU 或FPGAs) 目標(biāo),而不是主機(jī) CPU。從概念上講,使用 XPU 平臺(tái)的并行代碼開發(fā)完全基于 Khronos CL/SYCL 編程模型規(guī)范——OpenCL 2.0 庫(kù)的抽象層。

這是一個(gè)小例子,展示了 C++17 中的代碼,使用 CL/SYCL 模型抽象層實(shí)現(xiàn):

#include <CL/sycl.hpp>

using namespace cl::sycl;

constexpr std::uint32_t N = 1000;

cl::sycl::queue q{};

q.submit([&](cl::sycl::handler &cgh) {
    cgh.parallel_for<class Kernel>(cl::sycl::range<1>{N}, \
       [=](cl::sycl::id<1> idx) {
           // Do some work in parallel
       });
});

q.wait();

上面顯示的 C++17 中的代碼片段完全基于使用 CL/SYCL 編程模型交付。它使用默認(rèn)參數(shù)初始化器列表實(shí)例化一個(gè) cl::sycl::queue{} 對(duì)象,用于提交 SYCL 內(nèi)核、執(zhí)行、主機(jī) CPU 加速目標(biāo),默認(rèn)使用。接下來(lái),它調(diào)用 cl::sycl::submit(...) 方法,具有 cl::sycl::handler{} 對(duì)象的單個(gè)參數(shù),用于訪問(wèn)提供基本內(nèi)核功能的方法,基于各種并行算法,包括 cl::sycl::handler::parallel_for(...) 方法。

以下方法用于實(shí)現(xiàn)緊密的并行循環(huán),從正在運(yùn)行的內(nèi)核中產(chǎn)生。此循環(huán)的每次迭代都由其自己的線程并行執(zhí)行。cl::sycl::handler::parallel_for(...) 接受 cl::sycl::range<>{} 對(duì)象的兩個(gè)主要參數(shù)和在每次循環(huán)迭代期間調(diào)用的特定 lamda 函數(shù)。cl::sycl::range<>{} 對(duì)象基本上為每個(gè)特定維度定義了并行循環(huán)迭代的數(shù)量,以防多個(gè)嵌套循環(huán)被折疊,同時(shí)處理多維數(shù)據(jù)。

在上面的代碼中,cl::sycl::range<1>(N) 對(duì)象用于在一維中調(diào)度并行循環(huán)的 N 次迭代。parallel_for(...) 方法的 lambda 函數(shù)接受另一個(gè) cl::sycl::id<>{} 對(duì)象的單個(gè)參數(shù)。與 cl::sycl::range<>{} 一樣,該對(duì)象實(shí)現(xiàn)了一個(gè)向量容器,其中每個(gè)元素分別是并行循環(huán)的每個(gè)維度和每次迭代的索引值。作為參數(shù)傳遞給 lamda 函數(shù)范圍內(nèi)的代碼,以下對(duì)象用于檢索特定索引值。lamda 函數(shù)的主體包含一個(gè)代碼,它可以并行執(zhí)行一些數(shù)據(jù)處理。

在將特定內(nèi)核提交到隊(duì)列并生成執(zhí)行后,以下代碼會(huì)調(diào)用不帶參數(shù)的 cl::sycl::wait() 方法來(lái)設(shè)置屏障同步,以確保到目前為止不會(huì)執(zhí)行任何代碼,直到生成的內(nèi)核完成其并行工作。

CL/SYCL異構(gòu)編程模型效率高,可用于廣泛的應(yīng)用。
但是,英特爾公司和 CodePlay 軟件公司很快就棄用了對(duì) x86_64 以外的硬件架構(gòu)的 CL/SYCL 支持。這使得使用特定 CL/SYCL 庫(kù)、針對(duì) Arm/Aarch64 和其他架構(gòu)的并行 C++ 代碼變得不可能。

目前有大量的CL/SYCL開源庫(kù)項(xiàng)目,由廣大開發(fā)者和愛(ài)好者開發(fā),提供對(duì)更多硬件架構(gòu)的支持,而不僅僅是x86_64。

自 2016 年以來(lái),Khronos Group, Inc. 發(fā)布了其 triSYCL 庫(kù)開源項(xiàng)目 ( https://github.com/triSYCL/triSYCL) 的修訂版,建議在評(píng)估最新的 CL/SYCL 編程模型層時(shí)將其用作測(cè)試平臺(tái)規(guī)范并向 Khronos 和 ISO 委員會(huì)發(fā)送反饋。但是,以下庫(kù)分發(fā)不是“穩(wěn)定的”,只能用于演示目的,而不是用于在生產(chǎn)中構(gòu)建 CL/SYCL 代碼。此外,Khronos triSYCL 庫(kù)發(fā)行版完全支持跨平臺(tái)編譯,在 x86_64 開發(fā)機(jī)器上,使用 GNU 的 Arm/Aarch64 跨平臺(tái)工具鏈,而不是在 Raspberry 上使用 LLVM/Clang 編譯器“本地”構(gòu)建代碼皮。
2019 年,海德堡大學(xué)(德國(guó))的 Aksel Alpay 實(shí)現(xiàn)了最新的 CL/SYCL 編程模型層規(guī)范庫(kù),針對(duì)各種硬件架構(gòu),包括 Raspberry Pi 的 Arm/Aarch64 架構(gòu),并貢獻(xiàn)了最“穩(wěn)定”的版本將 hipSYCL 開源庫(kù)分發(fā)到 GitHub ( https://github.com/illuhad/hipSYCL )。

此外,在這個(gè)故事中,我們將討論安裝和配置 GNU 的跨平臺(tái) GCC/G++-10.xx 和“本機(jī)”Arm/Aarch64 的 LLVM/Clang-9.xx 工具鏈,以及使用 triSYCL 和 hipSYCL 庫(kù)發(fā)行版,用于在 C++17 中交付現(xiàn)代并行代碼,基于使用庫(kù),正在討論中。

在 Debian/Ubuntu 開發(fā)機(jī) (x86_64) 和 Raspberry Pi IoT-Boards 上構(gòu)建 CL/SYCL 代碼

基本上有兩種構(gòu)建 CL/SYCL 代碼的方法,在上面介紹的 C++17 中,使用 GNU 的 GCC/G++-10.xx 跨平臺(tái)工具鏈和基于 x86_64 Debian/Ubuntu 的開發(fā)機(jī)器,或者, “本地”,在 Raspberry Pi IoT 板上,安裝了用于 Arm/Aarch64 硬件架構(gòu)的 LLVM/Clang-9.xx。

第一種方法的使用允許在基于 Debian/Ubuntu 的 x86_64 開發(fā)機(jī)器上使用 Khronos triSYCL 庫(kù)和 GNU 的跨平臺(tái) Arm/Aarch64-toolchain 構(gòu)建 C++17/2x0 代碼源,之前在 Raspberry Pi 上運(yùn)行它。

要部署 x86_64 開發(fā)機(jī)器,需要安裝最新的 Debian Buster 10.6.0 或 Ubuntu 20.04 LTS:

為了能夠在運(yùn)行 Microsoft Windows 10 的主機(jī)上使用開發(fā)機(jī)器,可以使用任何現(xiàn)有的(例如 Oracle VirtualBox 或 VMware Workstation)虛擬化環(huán)境,用于此目的:

要開始部署開發(fā)機(jī)器,首先要做的是設(shè)置特定的虛擬化環(huán)境,創(chuàng)建虛擬機(jī)并啟動(dòng) Debian 或 Ubuntu 安裝。

既然已經(jīng)創(chuàng)建了虛擬機(jī),并且成功安裝了 Debian/Ubuntu,我們可以繼續(xù)進(jìn)行幾個(gè)步驟,安裝和配置 GNU 的 GCC/G++-10.xx 跨平臺(tái)編譯器、開發(fā)工具和 Khronos triSYCL 庫(kù),構(gòu)建代碼所必需的,針對(duì) Raspberry Pi 的 Arm/Aarch64 架構(gòu)。

在安裝和配置 GCC/G++ 編譯器工具鏈和運(yùn)行時(shí)庫(kù)之前,請(qǐng)確保已完成以下先決步驟:

  • 升級(jí) Debian/Ubuntu 的 Linux 基礎(chǔ)系統(tǒng):
root@uarmhf64-dev:~# sudo apt update
root@uarmhf64-dev:~# sudo apt upgrade -y
root@uarmhf64-dev:~# sudo apt full-upgrade -y

需要完成此步驟,以確保在 x86_64 主機(jī)開發(fā)機(jī)器上運(yùn)行的 Debian/Ubuntu 安裝是最新的,并且安裝了最新的內(nèi)核和軟件包。

  • 從 APT-repository 安裝 'net-tools' 和 OpenSSH-server 軟件包:
root@uarmhf64-dev:~# sudo apt install -y net-tools openssh-server

安裝“net-tools”和“openssh-server”是為了提供配置開發(fā)機(jī)器的網(wǎng)絡(luò)接口并通過(guò) SSH 和 FTP 協(xié)議遠(yuǎn)程連接到正在運(yùn)行的開發(fā)機(jī)器的能力。

由于系統(tǒng)已經(jīng)升級(jí)并安裝了所有必需的軟件包,我們可以繼續(xù)安裝和配置特定的編譯器和工具鏈,然后。

安裝和配置 GNU 的 GCC/G++-10.xx

1. 安裝 GNU Compilers Collection (GCC) 的工具鏈,用于 x86_64 平臺(tái):

root@uarmhf64-dev:~# sudo apt install -y build-essential

2. 安裝 GNU 的跨平臺(tái) Arm64/Armhf 工具鏈:

root@uarmhf64-dev:~# sudo apt install -y crossbuild-essential-arm64
root@uarmhf64-dev:~# sudo apt install -y crossbuild-essential-armhf

在 x86_64 開發(fā)機(jī)器上構(gòu)建使用 triSYCL 庫(kù)的 C++17 并行代碼基本上需要安裝用于 Arm64/Armhf 硬件架構(gòu)的跨平臺(tái)工具鏈。

3. 安裝 GNU 的 GCC/G++、OpenMP 5.0、Boost、Range-v3、POSIX Threads、C/C++ 標(biāo)準(zhǔn)運(yùn)行時(shí)庫(kù),需要:

root@uarmhf64-dev:~# sudo apt install -y g++-10 libomp-dev libomp5 libboost-all-dev librange-v3-dev libc++-dev libc++1 libc++abi-dev libc++abi1 libpthread-stubs0-dev libpthread-workqueue-dev

4. 安裝 GNU 的 GCC/G++-10.xx 跨平臺(tái)編譯器,用于構(gòu)建代碼,針對(duì) Arm64/Armhf 架構(gòu):

root@uarmhf64-dev:~# sudo apt install -y gcc-10-arm-linux-gnueabi g++-10-arm-linux-gnueabi gcc-10-arm-linux-gnueabihf g++-10-arm-linux-gnueabihf

5. 選擇默認(rèn)使用的 GCC/G++-10.xx “native” x86_64 編譯器,更新備選方案:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 2
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 2
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 3
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 3
sudo update-alternatives --set c++ /usr/bin/g++

6. 選擇默認(rèn)使用的 GCC/G++-10.xx 跨平臺(tái) Arm/Aarch64 編譯器,更新備選方案:

sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc-9 1
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-gcc arm-linux-gnueabihf-gcc /usr/bin/arm-linux-gnueabihf-gcc-10 2
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-9 1
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-g++ arm-linux-gnueabihf-g++ /usr/bin/arm-linux-gnueabihf-g++-10 2
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-cc arm-linux-gnueabihf-cc /usr/bin/arm-linux-gnueabihf-gcc 3
sudo update-alternatives --set arm-linux-gnueabihf-cc /usr/bin/arm-linux-gnueabihf-gcc
sudo update-alternatives --install /usr/bin/arm-linux-gnueabihf-c++ arm-linux-gnueabihf-c++ /usr/bin/arm-linux-gnueabihf-g++ 3
sudo update-alternatives --set arm-linux-gnueabihf-c++ /usr/bin/arm-linux-gnueabihf-g++

7. 最后,檢查是否安裝了正確版本的 GNU 的“本機(jī)”和跨平臺(tái)工具鏈:

root@uarmhf64-dev:~# gcc --version && g++ --version
root@uarmhf64-dev:~# arm-linux-gnueabihf-gcc --version
root@uarmhf64-dev:~# arm-linux-gnueabihf-g++ --version

8. 導(dǎo)航到 /opt 目錄并從 GitHub 存儲(chǔ)庫(kù)克隆 Khronos triSYCL 庫(kù)分發(fā):

root@uarmhf64-dev:~# cd /opt
root@uarmhf64-dev:~# git clone --recurse-submodules https://github.com/triSYCL/triSYCL

以下命令將創(chuàng)建 /opt/triSYCL 子目錄,其中包含 triSYCL 庫(kù)分發(fā)的源代碼。

9. 使用 'rsync' 命令將 triSYCL 庫(kù)的 C++ 頭文件從 /opt/triSYCL/include 目錄復(fù)制到開發(fā)機(jī)器上的默認(rèn)位置 /usr/include/c++/10/:

root@uarmhf64-dev:~# cd /opt/triSYCL
root@uarmhf64-dev:~# sudo rsync -r ./ include/ /usr/include/c++/10/

10. 設(shè)置環(huán)境變量,將 triSYCL 庫(kù)與 GNU 的跨平臺(tái)工具鏈一起使用所需的環(huán)境變量,之前已安裝:

export CPLUS_INCLUDE_PATH=/usr/include/c++/10
env CPLUS_INCLUDE_PATH=/usr/include/c++/10
sudo echo "export CPLUS_INCLUDE_PATH=/usr/include/c++/10" >> /root/.bashrc

11. 通過(guò)刪除 /opt/triSYCL 子目錄執(zhí)行簡(jiǎn)單的清理:

root@uarmhf64-dev:~# rm -rf /opt/triSYCL

12. 使用“本機(jī)”x86_64 GNU 的 GCC/G++ 編譯器構(gòu)建“hello.cpp”代碼示例:

root@uarmhf64-dev:~# g++ -std=c++17 -o hello hello.cpp -lpthread -lstdc++

使用 Khronos triSYCL 庫(kù)的 C++17/2x0 中的構(gòu)建特定代碼需要 POSIX 線程和 C++ 標(biāo)準(zhǔn)庫(kù)運(yùn)行時(shí)鏈接。

13. 使用 GNU 的跨平臺(tái) GCC/G++ 編譯器構(gòu)建“hello.cpp”代碼示例:

root@uarmhf64-dev:~# arm-linux-gnueabihf-g++ -std=c++17 -o hello_rpi4b hello.cpp -lpthread -lstdc++

由于 Arm/Aarch64 架構(gòu)的可執(zhí)行代碼已成功生成,請(qǐng)使用 MobaXterm 應(yīng)用程序通過(guò) FTP 或 SSH 協(xié)議從開發(fā)機(jī)器下載可執(zhí)行文件。之后,使用另一個(gè) SSH 會(huì)話將“hello_rpi4b”可執(zhí)行文件上傳到 Raspberry Pi 板。

要運(yùn)行“hello_rpi4b”可執(zhí)行文件,請(qǐng)?jiān)?Raspbian 的 bash 控制臺(tái)中使用以下命令,例如:

root@uarmhf64-dev:~# chmod +rwx hello_rpi4b
root@uarmhf64-dev:~# ./hello_rpi4b > output.txt && cat output.txt

這將創(chuàng)建輸出并將其附加到“output.txt”文件,將其內(nèi)容打印到 bash 控制臺(tái):

Hello from triSYCL on Rasberry Pi 4B+!!!
Hello from triSYCL on Rasberry Pi 4B+!!!
Hello from triSYCL on Rasberry Pi 4B+!!!
Hello from triSYCL on Rasberry Pi 4B+!!!
Hello from triSYCL on Rasberry Pi 4B+!!!

注意:通常,第一種方法不需要從其源構(gòu)建 Khronos triSYCL 庫(kù)分發(fā),除非您計(jì)劃針對(duì)其他 HPC 庫(kù)使用 triSYCL,例如 OpenCL、OpenMP 或 TBB。有關(guān)使用 triSYCL 以及其他庫(kù)的更多信息,請(qǐng)參閱以下指南和文檔https://github.com/triSYCL/triSYCL/blob/master/doc/cmake.rst

使用 Aksel Alpay 的 hipSYCL 開源庫(kù)分發(fā)和 LLVM/Clang-9.xx “本機(jī)”編譯器工具鏈,針對(duì) Arm/Aarch64 架構(gòu),是第二種方法,允許在 C 中構(gòu)建 CL/SYCL 代碼++17/2x0,用于在 Raspberry Pi 板上運(yùn)行它。只有在 LLVM/Clang-9.xx 工具鏈和 hipSYCL 庫(kù)發(fā)行版都安裝在 Raspberry Pi 板上而不是 x86_64 開發(fā)機(jī)器本身上的情況下,才能在本地構(gòu)建特定代碼。

此外,我們將討論在 Raspberry Pi 板上安裝和配置 LLVM/Clang-9.xx 編譯器工具鏈以及從源代碼構(gòu)建 Aksel Alpay 的 hipSYCL 庫(kù)所需了解的一切。

安裝和配置 LLVM/Clang-9.xx

在使用 Aksel Alpay 的 hipSYCL 庫(kù)項(xiàng)目的分發(fā)之前,必須正確安裝和配置特定的 LLVM/Clang-9.xx 編譯器和 Arm/Aarch64 工具鏈。為此,請(qǐng)確保您已完成下列步驟:

1. 更新 Raspbian 的 APT-repositories 并安裝以下必備軟件包:

root@raspberrypi4:~# sudo apt update
root@raspberrypi4:~# sudo apt install -y bison flex python python3 snap snapd git wget

上面的命令將安裝一個(gè)替代的 'snap' 包管理器,安裝正確版本的 cmake >= 3.18.0 實(shí)用程序,以及 'python'、'python3' 發(fā)行版和 'bison'、'flex ' 實(shí)用程序,需要使用“cmake”實(shí)用程序從“頭開始”構(gòu)建 hipSYCL 開源項(xiàng)目。

2. 使用 'snap' 包管理器安裝 'cmake' >= 3.18.0 實(shí)用程序和 LLVM/Clang 守護(hù)程序:

root@raspberrypi4:~# sudo snap install cmake --classic
root@raspberrypi4:~# sudo snap install clangd --classic

安裝 'cmake' 實(shí)用程序后,讓我們使用以下命令檢查它是否工作以及是否已從 'snap'-repository 安裝了正確的版本:

root@raspberrypi4:~# sudo cmake --version

運(yùn)行此命令后,您必須看到以下輸出:

cmake version 3.18.4

CMake suite maintained and supported by Kitware (kitware.com/cmake).

3. 為 LLVM/Clang 工具鏈安裝最新的 Boost、POSIX-Threads 和 C/C++ 標(biāo)準(zhǔn)運(yùn)行時(shí)庫(kù):

root@raspberrypi4:~# sudo apt install -y libc++-dev libc++1 libc++abi-dev libc++abi1 libpthread-stubs0-dev libpthread-workqueue-dev

root@raspberrypi4:~# sudo apt install -y clang-format clang-tidy clang-tools clang libc++-dev libc++1 libc++abi-dev libc++abi1 libclang-dev libclang1 liblldb-dev libllvm-ocaml-dev libomp-dev libomp5 lld lldb llvm-dev llvm-runtime llvm python-clang libboost-all-dev

4. 下載并添加 LLVM/Clang 的 APT-repositories 安全密鑰:

root@raspberrypi4:~# wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -

5. 將 LLVM/Clang 的存儲(chǔ)庫(kù) URL 附加到 APT 的 sources.list:

root@raspberrypi4:~# echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster main" >> /etc/apt/sources.list.d/raspi.list

root@raspberrypi4:~# echo "deb-src http://apt.llvm.org/buster/ llvm-toolchain-buster main" >> /etc/apt/sources.list.d/raspi.list

必須完成前面的這兩個(gè)步驟 4 和 5,才能從特定的 APT 存儲(chǔ)庫(kù)安裝 LLVM/Clang-9.xx 編譯器和特定工具鏈。

6. 刪除先前安裝的 LLVM/Clang 版本的現(xiàn)有符號(hào)鏈接:

root@raspberrypi4:~# cd /usr/bin && rm -f clang clang++

7. 再次更新 APT 存儲(chǔ)庫(kù),并安裝 LLVM/Clang 的編譯器、調(diào)試器和鏈接器:

root@raspberrypi4:~# sudo apt update
root@raspberrypi4:~# sudo apt install -y clang-9 lldb-9 lld-9

8. 創(chuàng)建到 'clang-9' 和 'clang++-9' 編譯器的相應(yīng)符號(hào)鏈接,安裝:

root@raspberrypi4:~# cd /usr/bin && ln -s clang-9 clang
root@raspberrypi4:~# cd /usr/bin && ln -s clang++-9 clang++

9. 最后,您必須能夠在 bash-console 中使用“clang”和“clang++”命令:

root@raspberrypi4:~# clang --version && clang++ --version

在這里,讓我們使用上面的命令檢查已安裝的 LLVM/Clang 的版本。

使用命令后,您必須看到以下輸出:

clang version 9.0.1-6+rpi1~bpo10+1
Target: armv6k-unknown-linux-gnueabihf
Thread model: posix
InstalledDir: /usr/bin
clang version 9.0.1-6+rpi1~bpo10+1
Target: armv6k-unknown-linux-gnueabihf
Thread model: posix
InstalledDir: /usr/bin

下載和構(gòu)建 hipSYCL 庫(kù)分發(fā)

另一個(gè)重要步驟是從其源代碼下載并構(gòu)建開源 hipSYCL 庫(kù)暫存發(fā)行版,并貢獻(xiàn)給 GitHub。

這通常通過(guò)完成以下步驟來(lái)完成,如下所示:

1. 下載 hipSYCL 項(xiàng)目的發(fā)行版,從 GitHub 克隆它:

root@raspberrypi4:~# git clone https://github.com/llvm/llvm-project llvm-project
root@raspberrypi4:~# git clone --recurse-submodules https://github.com/illuhad/hipSYCL

Aksel Alpay 的 hipSYCL 項(xiàng)目的發(fā)行版有幾個(gè)依賴于另一個(gè) LLVM/Clang 的開源項(xiàng)目。這就是為什么,我們通常需要克隆這兩個(gè)發(fā)行版,以便從“零開始”構(gòu)建 hipSYCL 庫(kù)運(yùn)行時(shí)。

2. 使用“export”和“env”命令設(shè)置從源代碼構(gòu)建 hipSYCL 項(xiàng)目所需的環(huán)境變量數(shù)量,并將以下特定行附加到 .bashrc 配置文件腳本:

export LLVM_INSTALL_PREFIX=/usr
export LLVM_DIR=~/llvm-project/llvm
export CLANG_EXECUTABLE_PATH=/usr/bin/clang++
export CLANG_INCLUDE_PATH=$LLVM_INSTALL_PREFIX/include/clang/9.0.1/include

echo "export LLVM_INSTALL_PREFIX=/usr" >> /root/.bashrc
echo "export LLVM_DIR=~/llvm-project/llvm" >> /root/.bashrc
echo "export CLANG_EXECUTABLE_PATH=/usr/bin/clang++" >> /root/.bashrc
echo "export CLANG_INCLUDE_PATH=$LLVM_INSTALL_PREFIX/include/clang/9.0.1/include" >> /root/.bashrc

env LLVM_INSTALL_PREFIX=/usr
env LLVM_DIR=~/llvm-project/llvm
env CLANG_EXECUTABLE_PATH=/usr/bin/clang++
env CLANG_INCLUDE_PATH=$LLVM_INSTALL_PREFIX/include/clang/9.0.1/include

3. 創(chuàng)建并切換到 hipSYCL 項(xiàng)目主目錄下的 ~/hipSYCL/build 子目錄:

root@raspberrypi4:~# mkdir ~/hipSYCL/build && cd ~/hipSYCL/build

4. 使用“cmake”實(shí)用程序配置 hipSYCL 項(xiàng)目的源代碼:

root@raspberrypi4:~# cmake -DCMAKE_INSTALL_PREFIX=/opt/hipSYCL ..

5. 使用 GNU 的“make”命令構(gòu)建和安裝 hipSYCL 運(yùn)行時(shí)庫(kù):

root@raspberrypi4:~# make -j $(nproc) && make install -j $(nproc)

6. 將 libhipSYCL-rt.iso 運(yùn)行時(shí)庫(kù)復(fù)制到 Raspbian 的默認(rèn)庫(kù)位置:

root@raspberrypi4:~# cp /opt/hipSYCL/lib/libhipSYCL-rt.so /usr/lib/libhipSYCL-rt.so

7. 設(shè)置使用 hipSYCL 運(yùn)行時(shí)庫(kù)和 LLVM/Clang 編譯器構(gòu)建源代碼所需的環(huán)境變量:

export PATH=$PATH:/opt/hipSYCL/bin
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/hipSYCL/include
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/hipSYCL/include
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/hipSYCL/lib

echo "export PATH=$PATH:/opt/hipSYCL/bin" >> /root/.bashrc
echo "export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/hipSYCL/include" >> /root/.bashrc
echo "export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/hipSYCL/include" >> /root/.bashrc
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/hipSYCL/lib" >> /root/.bashrc

env PATH=$PATH:/opt/hipSYCL/bin
env C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/hipSYCL/include
env CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/hipSYCL/include
env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/hipSYCL/lib

在 Raspberry Pi 4B+ 上以 C++17 運(yùn)行并行 CL/SYCL 代碼

因?yàn)?,我們終于完成了安裝和配置 LLVM/Clang 和 hipSYCL 庫(kù)的準(zhǔn)備工作,強(qiáng)烈建議構(gòu)建和運(yùn)行“matmul_hipsycl”示例的可執(zhí)行文件,確保一切正常:

以下是從源代碼構(gòu)建以下示例的最常見(jiàn)步驟:

rm -rf ~/sources
mkdir ~/sources && cd ~/sources
cp ~/matmul_hipsycl.tar.gz ~/sources/matmul_hipsycl.tar.gz
tar -xvf matmul_hipsycl.tar.gz
rm -f matmul_hipsycl.tar.gz

上面的一組命令將創(chuàng)建 ~/source 子目錄并從 matmul_hipsycl.tar.gz 檔案中提取樣本的源代碼。

要構(gòu)建示例的可執(zhí)行文件,只需使用 GNU 的“make”命令:

root@raspberrypi4:~# make all

這將調(diào)用“clang++”命令來(lái)構(gòu)建可執(zhí)行文件:

syclcc-clang -O3 -std=c++17 -o matrix_mul_rpi4 src/matrix_mul_rpi4b.cpp -lstdc++

此命令將編譯具有最高代碼優(yōu)化級(jí)別(例如 -O3)的特定 C++17 代碼,啟用并將其與 C++ 標(biāo)準(zhǔn)庫(kù)運(yùn)行時(shí)鏈接。

注意:除了庫(kù)運(yùn)行時(shí),構(gòu)建的 hipSYCL 項(xiàng)目還提供了“syclcc”和“syclcc-clang”工具,用于在 C++17 中構(gòu)建并行代碼,使用 hipSYCL 庫(kù)實(shí)現(xiàn)。這些工具的使用與“clang”和“clang++”命令的常規(guī)使用略有不同。但是,仍然可以使用“syclcc”和“syclcc-clang”,指定與原始“clang”和“clang++”命令相同的編譯器和鏈接器選項(xiàng)。

使用這些工具執(zhí)行編譯后,只需將執(zhí)行權(quán)限授予編譯器生成的“matrix_mul_rpi4”文件,使用以下命令:

root@raspberrypi4:~# chmod +rwx matrix_mul_rpi4

,并且,只需在 bash 控制臺(tái)中運(yùn)行可執(zhí)行文件:

root@raspberrypi4:~# ./matrix_mul_rpi4

運(yùn)行后,執(zhí)行將得到以下輸出:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Multiplication C = A x B:

Matrix C:

323 445 243 343 363 316 495 382 463 374
322 329 328 388 378 395 392 432 470 326
398 357 337 366 386 407 478 457 520 374
543 531 382 470 555 520 602 534 639 505
294 388 277 314 278 330 430 319 396 372
447 445 433 485 524 505 604 535 628 509
445 468 349 432 511 391 552 449 534 470
434 454 339 417 502 455 533 498 588 444
470 340 416 364 401 396 485 417 496 464
431 421 325 325 272 331 420 385 419 468


Execution time: 5 ms

或者,我們可以評(píng)估并行代碼的性能,通過(guò)安裝和使用以下實(shí)用程序來(lái)執(zhí)行:

root@raspberrypi4:~# sudo apt install -y top htop

在運(yùn)行并行代碼可執(zhí)行文件時(shí),使用已安裝的“htop”實(shí)用程序可視化 CPU 和系統(tǒng)內(nèi)存利用率:

pYYBAGN2_i2AUd9nAAbteQfukOc700.png
?

綜上所述...

微型 FPGA 以及具有計(jì)算能力的袖珍型 GPGPU,通過(guò) GPIO 或 USB 接口從外部連接到物聯(lián)網(wǎng)板,是物聯(lián)網(wǎng)并行計(jì)算的下一個(gè)巨大步驟。使用微型 FPGA 和 GPGPU 提供了一個(gè)機(jī)會(huì),可以并行執(zhí)行更復(fù)雜和“繁重”的計(jì)算,從而大大提高實(shí)際性能加速,同時(shí)實(shí)時(shí)處理大量大數(shù)據(jù)。

顯然,物聯(lián)網(wǎng)并行計(jì)算的另一個(gè)重要方面是繼續(xù)開發(fā)特定的庫(kù)和框架,提供 CL/SYCL 模型層規(guī)范,從而支持異構(gòu)計(jì)算平臺(tái) (XPU)。目前,這些庫(kù)的最新版本支持將并行代碼執(zhí)行卸載到主機(jī) CPU 加速目標(biāo),只是因?yàn)樯形丛O(shè)計(jì)其他加速硬件,例如用于納米計(jì)算機(jī)的小型 GPGPU 和 FPGA并由其供應(yīng)商在此時(shí)制造。

事實(shí)上,使用 Raspberry Pi 和其他特定 IoT 板進(jìn)行并行計(jì)算是軟件開發(fā)人員和硬件技術(shù)人員的一個(gè)特殊興趣點(diǎn),對(duì)現(xiàn)有計(jì)算過(guò)程進(jìn)行性能評(píng)估,同時(shí)與 IoT 并行運(yùn)行。

總之,利用基于物聯(lián)網(wǎng)的并行計(jì)算通常有利于基于云的解決方案的整體性能,旨在實(shí)時(shí)收集和大規(guī)模處理大數(shù)據(jù),從而對(duì)機(jī)器學(xué)習(xí)的質(zhì)量產(chǎn)生積極影響(ML) 和數(shù)據(jù)分析本身。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)