Raspberry Pi 4B + IoTボードでの並列コンピューティングが容易に
Raspberry PiIoTボード上でKhronosCL / SYCLモデル仕様を使用して実装されたC ++ 17での並列コードの構築と実行。
このプロジェクトは、CL / SYCLプログラミングモデルを使用して実装され、C ++ 17/2×0で最新の並列コードを構築し、それに基づいて次世代のRaspberry Pi 4B IoTボードで実行するための有用なガイドライン、ヒント、およびチュートリアルを提供します。革新的なARMCortex-A72、クアッドコア、64ビットRISC-VCPU。
読者の聴衆は、Raspberry 4B IoTボードをすぐにセットアップし、それを並列コンピューティングに使用し、Khronos CL / triSYCLとAkselAlpayを使用してC ++ 17で並列コードを提供する方法について知ることができます。 hipSYCLプロジェクトのオープンソースディストリビューション。GNUのコンパイラコレクション(GCC)とLLVM / Clang-9.xx Arm / Aarch64-toolchainsをインストールおよび構成し、並列コードの実行可能ファイルを構築してRaspbian Buster 10.6OSで実行します。
Raspberry PI 4B + IoTボードの概要
強力なARMのマルチコア対称64ビットRISC-VCPUをベースにした次世代の革新的なRaspberryPi 4B + IoTボードは、解き放たれたパフォーマンスを提供し、したがって、並列コンピューティング自体の究極の生産性を提供します。最新のRaspberryPiボードを使用すると、データをデータセンターに配信して処理する前に、リアルタイムでデータを収集して前処理するなど、エッジでの計算プロセスの実際のパフォーマンスの高速化を大幅に向上させることができます。 -規模。これらのプロセスを並行して実行すると、クラウドベースのソリューションの効率が大幅に向上し、何十億ものクライアントリクエストに対応したり、データ分析やその他の推論を提供したりできます。
Arm / Aarch64アーキテクチャを備えたRaspberryPiボードのCL / SYCLヘテロジニアスプログラミングモデル仕様を使用して設計されたC ++ 17での並列コードの構築と実行について説明する前に、少し時間を取ってみましょう。次世代のRaspberryPi 4B +ボードとその技術仕様を一瞥します:
Raspberry Pi 4B + IoTボードは、革新的なBroadcom BCM2711B0(SoC)チップに基づいて製造され、最新のARMクアッドコアCortex-A72 @ 1.5GHz64ビットRISC-VCPUを搭載し、究極のパフォーマンスとスケーラビリティを提供します。エッジでの並列コンピューティング用です。
Raspberry Piは、データマイニングと並列コンピューティング用に設計された「信頼性の高い」「高速な」小型ナノコンピューターで知られています。 DSP、SIMD、VFPv4、ハードウェア仮想化サポートなど、ARMのマルチコア対称64ビットRISC-V CPUの主に新しいハードウェアアーキテクチャ機能は、パフォーマンス、高速化、スケーラビリティを大幅に向上させることができます。エッジでデータを大量に処理するIoTクラスター。
具体的には、最新のRaspberry Pi 4B +ボードの最も重要な利点の1つは、2、4、または8 GiBのRAM容量を選択できる薄型LPDDR4メモリであり、3200Mhzで動作し、通常は大きなメモリトランザクション帯域幅を提供し、パフォーマンスにプラスの影響を与えます。一般的に、並列コンピューティングのデータマイニングと並列コンピューティングには、4GiB以上のRAMがインストールされたボードを強くお勧めします。また、BCM2711B0 SoCチップには、Broadcom VideoCore VI @ 500Mhz GPU、PCI-Exギガビットイーサネットアダプターなど、さまざまな統合デバイスおよび周辺機器がバンドルされています。
CL / SYCL異種プログラミングモデルを使用して実装されたC ++ 17で特定の並列最新コードを構築および実行するために、最初に本当に必要なのは、最新のRaspbian Buster 10.6OSがインストールおよび構成されたRaspberryPi 4B + IoTボードです。最初の使用。
事前に満たされている必要があるハードウェアとソフトウェアの要件の簡単なチェックリストは次のとおりです。
ハードウェア:
- Raspberry Pi 4モデルB0、4GBIoTボード;
- RaspbianOSおよびデータストレージ用のMicro-SDカード16GB;
- DC電源:USBType-Cコネクタ経由の5.0V / 2-3A(最小3A –データマイニングおよび並列コンピューティング用)
ソフトウェア:
- Raspbian Buster10.6.0フルOS;
- Raspbian Imager 1.4;
- MobaXterm 20.3ビルド4396、またはその他のSSHクライアント;
Raspberry Pi 4B + IoTボードを入手したので、すぐにオンにしてセットアップを進めることができます。
Raspberry Pi 4BIoTボードのセットアップ
始める前に、Raspbian Buster10.6.0フルOSイメージの最新リリースを公式のRaspberryPiリポジトリからダウンロードする必要があります。 Raspbian OSイメージをSDカードにインストールするには、Windows、Linux、macOSなどのさまざまなプラットフォームで利用可能なRaspbian Imager1.4アプリケーションもダウンロードして使用する必要があります。
- ラズビアンバスター10.6.0
- Raspbian Imager 1.4
さらに、SSHまたはFTPプロトコルを介してリモートでRaspberry Piボードへの接続を確立するために、MobaXtermアプリケーションをダウンロードしてインストールする必要があります。
- MobaXterm 20.3
Raspbian Buster OSとImagerアプリケーションが正常にダウンロードおよびインストールされたため、Imagerアプリケーションを使用して次のことを行います。
1. SDカードを消去し、デフォルトでFAT32ファイルシステムにフォーマットします。
2.プリインストールされているRaspbianBuster OSイメージ(* .img)をSDカードに抽出します;
上記の手順は正常に完了したので、SDカードをカードリーダーから取り外し、RaspberryPiボードのSDカードスロットに差し込むだけです。次に、マイクロHDMIケーブルとイーサネットケーブルを接続します。最後に、DC電源ケーブルのコネクタを接続し、ボードの電源を入れます。最後に、SDカードにインストールされたRaspbian Buster OSでシステムが起動し、インストール後のいくつかの手順を実行して、最初に使用できるように構成するように求められます。
ボードの電源がオンになっているので、次のインストール後の手順がすべて完了していることを確認してください。
1. bash-consoleを開き、「root」パスワードを設定します:
[email protected]:〜$ sudo passwd root
2.「root」権限でRaspbianbash-consoleにログインします:
[email protected]:〜$ 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」セットアップツールを起動します:
[email protected]:〜#sudo raspi-config
7.「raspi-config」ツールを使用して次の手順を実行します。
*「raspi-config」ツールを更新します:
*起動時にRaspbianのデスクトップGUIを無効にします:
システムオプション>> 起動/自動ログイン>> コンソールの自動ログイン:
* SDカードのルート「/」パーティションサイズを拡張します:
Raspbianのインストール後の構成を実行した後、最後にシステムを再起動します。再起動後、ログインするように求められます。 root権限でbash-consoleにログインするには、「root」ユーザー名と以前に設定したパスワードを使用します。
正常にログインしたので、bash-consoleで次のコマンドを使用して、APTリポジトリから多数のパッケージをインストールします。
[email protected]:〜#sudo apt install -y net-tools openssh-server
これらの2つのパッケージは、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 192.168.87.254
ネットワークインターフェースの横で、 / etc / ssh / sshd_config でこれらの行のコメントを解除して、OpenSSHサーバーの基本構成を実行します。 :
PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords yes
これにより、パスワードを入力せずに、SSHプロトコルを介してbash-consoleに「root」ログインできるようになります。
最後に、MobaXtermアプリケーションを使用して、IPアドレスが192.168.87.100のホストへのリモートSSHセッションを開いて、ネットワーク経由でボードを接続してみてください。また、事前に設定されたクレデンシャルを使用して、Raspbianのbash-consoleに正常にログインできる必要があります。
CL / SYCL-Modelを使用したC ++ 17での並列コードの開発
2020年に、Khronos Group、Intel Corp.、およびその他のベンダーは、革新的な新しい異種並列コンピューティングプラットフォーム(XPU)を発表しました。これにより、「重い」データ処理ワークロードの実行を広範囲のハードウェアアクセラレーション(GPGPUやFPGA)ホストCPU以外のターゲットのみ。概念的には、XPUプラットフォームを使用した並列コード開発は、OpenCL2.0ライブラリの抽象化レイヤーであるKhronosCL / SYCLプログラミングモデル仕様に完全に基づいています。
これは、CL / SYCLモデル抽象化レイヤーを使用して実装されたC ++ 17のコードを示す小さな例です。
#include
using namespace 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 <> {}オブジェクトの2つの主要な引数と、各ループの反復中に呼び出される特定のlamda関数を受け入れます。 cl ::sycl ::range <> {}オブジェクトは、基本的に、多次元データの処理中に複数のネストされたループが折りたたまれた場合に、特定の次元ごとに実行される並列ループ反復の量を定義します。
>コードでは、上から、cl ::sycl ::range <1>(N)オブジェクトを使用して、並列ループのN回の反復を1次元でスケジュールします。 parallel_for(…)メソッドのラムダ関数は、別のcl ::sycl ::id <> {}オブジェクトの単一の引数を受け入れます。 cl ::sycl ::range <> {}と同様に、このオブジェクトはベクトルコンテナを実装します。各要素は、それぞれ、並列ループの各次元と各反復のインデックス値です。 lamda-functionのスコープ内のコードに引数として渡される次のオブジェクトは、特定のインデックス値を取得するために使用されます。 lamda関数の本体には、データ処理の一部を並行して実行するコードが含まれています。
特定のカーネルがキューに送信され、実行のために生成された後、次のコードは、バリア同期を設定するための引数なしでcl ::sycl ::wait()メソッドを呼び出し、これまでのところコードが実行されないようにします、生成されるカーネルが並列作業を完了するまで。
CL / SYCLヘテロジニアスプログラミングモデルは非常に効率的であり、幅広いアプリケーションに使用できます。
ただし、IntelCorp。とCodePlaySoftware 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プログラミングモデルレイヤーを評価する際のテストベッドとして使用することをお勧めします。仕様を作成し、クロノス委員会とISO委員会にフィードバックを送信します。ただし、次のライブラリ配布は「安定」しておらず、デモンストレーション目的でのみ使用でき、本番環境でのCL / SYCLコードの構築には使用できません。また、Khronos triSYCLライブラリディストリビューションは、Raspberry上でLLVM / Clangコンパイラを使用して「ネイティブに」コードを構築するのではなく、GNUのArm / Aarch64クロスプラットフォームツールチェーンを使用して、x86_64開発マシンでのクロスプラットフォームコンパイルを完全にサポートします。 Pi。
2019年、ハイデルベルク大学(ドイツ)のAksel Alpayは、RaspberryPiのArm / Aarch64アーキテクチャを含むさまざまなハードウェアアーキテクチャを対象に、最新のCL / SYCLプログラミングモデルレイヤー仕様ライブラリを実装し、最も「安定した」リリースに貢献しました。 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ボードでの並列コンピューティングが簡単に
製造プロセス
- ラズベリーパイの簡単な温度と湿度
- IoT 101プロジェクト:RaspberryPiからのストリーム温度
- Java ME 8 + Raspberry Pi +センサー=IoT World(パート1)
- RaspberryPiを使用した簡単なDIY赤ちゃん泣き検出器
- Raspberry Pi、DHT11センサー、Thingspeakを使用して最初のIOTを構築します。
- MQTTでIoTの世界に簡単に参入
- DHT11センサーを接続するRaspberryPIベースのIoTプロジェクト
- Raspberry Pi2上のWindows10 IoT Core –Adafruitセンサーデータ
- Windows 10 IoT Core for Raspberry Pi3モデルB +
- BeagleBoneとRaspberryPiがFPGAアドオンを獲得
- DER:制御が簡単になりました