Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Komputasi Paralel Pada Papan Raspberry Pi 4B+ IoT Menjadi Mudah

Membangun dan menjalankan kode paralel di C++17, diimplementasikan menggunakan spesifikasi model Khronos CL/SYCL, pada papan IoT Raspberry Pi.

Tujuan Kami…

Proyek ini memberikan panduan, tip, dan tutorial yang berguna untuk membangun kode paralel modern di C++17/2×0, diimplementasikan menggunakan model pemrograman CL/SYCL, dan menjalankannya pada generasi berikutnya dari papan IoT Raspberry Pi 4B, berdasarkan CPU ARM Cortex-A72, Quad-core, 64-bit RISC-V yang inovatif.

Audiens pembaca akan mengetahui tentang menyiapkan board Raspberry 4B IoT, out-of-the-box, dan menggunakannya untuk komputasi paralel, mengirimkan kode paralel dalam C++17, dengan Khronos CL/triSYCL dan Aksel Alpay's distribusi open-source proyek hipSYCL, menginstal dan mengonfigurasi GNU's Compiler Collection (GCC) dan LLVM/Clang-9.xx Arm/Aarch64-toolchains, untuk membangun executable kode paralel dan menjalankannya di Raspbian Buster 10.6 OS.

Ikhtisar Board IoT Raspberry PI 4B+

Generasi berikutnya dari papan Raspberry Pi 4B+ IoT yang inovatif, berdasarkan CPU RISC-V 64-bit simetris multi-core ARM yang kuat, memberikan kinerja yang bebas, dan, dengan demikian, produktivitas tertinggi dari komputasi paralel itu sendiri. Menggunakan papan Raspberry Pi terbaru memungkinkan untuk secara drastis meningkatkan kinerja aktual mempercepat proses komputasi, di tepi, seperti pengumpulan dan pra-pemrosesan data secara real-time, sebelum mengirimkannya ke pusat data untuk diproses, misalnya -skala. Menjalankan proses ini secara paralel secara signifikan meningkatkan efisiensi solusi berbasis cloud tersebut, melayani miliaran permintaan klien atau menyediakan analisis data dan inferensi lainnya.

Sebelum kita memulai diskusi kita tentang membangun dan menjalankan kode paralel di C++17, dirancang dengan menggunakan spesifikasi model pemrograman heterogen CL/SYCL untuk papan Raspberry Pi dengan arsitektur Arm/Aarch64, mari luangkan waktu sejenak dan sekilas pada generasi berikutnya dari papan Raspberry Pi 4B+ dan spesifikasi teknisnya:

Papan Raspberry Pi 4B+ IoT diproduksi berdasarkan chip Broadcom BCM2711B0 (SoC) yang inovatif, dilengkapi dengan CPU ARM Quad-Core Cortex-A72 @ 1.5GHz 64-bit RISC-V terbaru, memberikan kinerja dan skalabilitas terbaik, sambil memanfaatkan untuk komputasi paralel, di tepi.

Raspberry Pi dikenal dengan komputer nano berukuran kecil yang "dapat diandalkan" dan "cepat", yang dirancang untuk penambangan data dan komputasi paralel. Pada dasarnya fitur arsitektur perangkat keras baru dari CPU RISC-V 64-bit simetris multi-core ARM, seperti DSP, SIMD, VFPv4 dan dukungan virtualisasi perangkat keras, mampu membawa peningkatan yang signifikan pada kinerja, percepatan percepatan dan skalabilitas kluster IoT, memproses data secara besar-besaran, di ujung tombak.

Secara khusus, salah satu keuntungan terpenting dari papan Raspberry Pi 4B+ terbaru adalah memori LPDDR4 low-profile dengan pilihan kapasitas RAM 2, 4 atau 8 GiB, beroperasi pada 3200Mhz dan menyediakan bandwidth transaksi memori yang biasanya besar, yang secara positif mempengaruhi kinerja. komputasi paralel, secara umum. Papan dengan RAM 4 GiB terpasang, dan lebih tinggi, sangat disarankan untuk penambangan data dan komputasi paralel. Selain itu, chip SoC BCM2711B0 dibundel dengan berbagai perangkat dan periferal terintegrasi, seperti GPU Broadcom VideoCore VI @ 500Mhz, PCI-Ex Gigabit Ethernet Adapters, dll.

Untuk membangun dan menjalankan kode modern paralel tertentu di C++17, diimplementasikan menggunakan model pemrograman heterogen CL/SYCL, yang pertama benar-benar kita butuhkan adalah papan Raspberry Pi 4B+ IoT dengan OS Raspbian Buster 10.6 terbaru yang diinstal dan dikonfigurasi untuk penggunaan pertama.

Berikut ini adalah daftar periksa singkat persyaratan perangkat keras dan perangkat lunak yang harus dipenuhi sebelumnya:

Perangkat Keras:

Perangkat Lunak:

Karena, kami memiliki board Raspberry Pi 4B+ IoT, sekarang, kami dapat melanjutkan dengan menyalakan dan menyiapkannya, secara langsung.

Menyiapkan Papan IoT Raspberry Pi 4B

Sebelum kita mulai, kita harus mendownload rilis terbaru dari image Raspbian Buster 10.6.0 Full OS dari repositori resmi Raspberry Pi. Untuk menginstal image Raspbian OS ke kartu SD, kita juga perlu mengunduh dan menggunakan aplikasi Raspbian Imager 1.4, yang tersedia untuk berbagai platform, seperti Windows, Linux, atau macOS:

Selain itu, kita juga harus mengunduh dan menginstal aplikasi MobaXterm untuk membuat koneksi ke papan Raspberry Pi, dari jarak jauh, melalui protokol SSH atau FTP:

Karena aplikasi Raspbian Buster OS dan Imager telah berhasil diunduh dan diinstal, kami akan menggunakan aplikasi Imager untuk melakukan hal berikut:

1. Hapus kartu SD, format ke sistem file FAT32, secara default;

2. Ekstrak image Raspbian Buster OS (*.img) yang sudah diinstal sebelumnya ke kartu SD;

Karena langkah-langkah di atas telah berhasil diselesaikan, cukup keluarkan kartu SD dari pembaca kartu dan colokkan ke slot kartu SD papan Raspberry Pi. Kemudian, pasang kabel micro-HDMI dan Ethernet. Terakhir, pasang konektor kabel catu daya DC, dan hidupkan papan. Terakhir, sistem akan boot dengan Raspbian Buster OS, yang diinstal ke kartu SD, meminta untuk melakukan beberapa langkah pasca-instalasi untuk mengonfigurasinya untuk penggunaan pertama.

Karena papan telah dihidupkan, pastikan bahwa semua langkah pasca pemasangan berikut telah diselesaikan:

1. Buka bash-console dan atur kata sandi 'root':

[email protected]:~ $ sudo passwd root 

2. Masuk ke konsol bash Raspbian dengan hak 'root':

[email protected]:~ $ sudo -s 

3. Tingkatkan sistem dasar dan firmware Linux Raspbian, menggunakan perintah berikut:

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

4. Reboot sistem, untuk pertama kalinya:

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

5. Instal bootloader Raspbian terbaru dan reboot sistem, sekali lagi:

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

6. Luncurkan alat penyiapan 'raspi-config':

[email protected]:~# sudo raspi-config 

7. Selesaikan langkah-langkah berikut, menggunakan alat 'raspi-config':

* Perbarui alat 'raspi-config':

* Nonaktifkan GUI Desktop Raspbian saat boot:

Opsi Sistem>> Boot / Masuk Otomatis>> Masuk Otomatis Konsol:

* Perluas ukuran partisi root '/' pada kartu SD:

Setelah melakukan konfigurasi pasca-instal Raspbian, akhirnya reboot sistem. Setelah reboot, Anda akan diminta untuk login. Gunakan nama pengguna dan kata sandi 'root', yang telah ditetapkan sebelumnya, untuk masuk ke konsol bash dengan hak akses root.

Karena Anda telah berhasil masuk, instal jumlah paket dari repositori APT dengan menggunakan perintah berikut, di bash-console:

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

Kedua paket ini diperlukan untuk mengonfigurasi antarmuka jaringan Raspberry Pi atau server OpenSSH untuk menghubungkan ke papan, dari jarak jauh, melalui protokol SSH, dengan menggunakan MobaXterm.

Konfigurasikan antarmuka jaringan papan 'eth0' dengan memodifikasi /etc/network/interfaces, misalnya:

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 

Di samping antarmuka jaringan, lakukan konfigurasi dasar server OpenSSH, dengan menghapus komentar pada baris ini di /etc/ssh/sshd_config :

PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords yes 

Ini akan mengaktifkan login 'root', ke dalam bash-console, melalui protokol SSH, tanpa memasukkan kata sandi.

Terakhir, cobalah untuk menghubungkan papan melalui jaringan, menggunakan aplikasi MobaXterm dan membuka sesi SSH jarak jauh ke host dengan alamat IP:192.168.87.100. Anda juga harus berhasil masuk ke konsol bash Raspbian, dengan kredensial yang telah ditetapkan sebelumnya:

Mengembangkan Kode Paralel Dalam C++17 Menggunakan CL/SYCL-Model

Pada tahun 2020, Khronos Group, Intel Corp., dan vendor lainnya, mengumumkan platform komputasi paralel heterogen (XPU) baru yang revolusioner, yang memberikan kemampuan untuk menurunkan beban kerja pemrosesan data “berat” ke percepatan perangkat keras yang meluas (misalnya GPGPU atau FPGA) hanya menargetkan, selain CPU host. Secara konseptual, pengembangan kode paralel, menggunakan platform XPU, sepenuhnya didasarkan pada spesifikasi model pemrograman Khronos CL/SYCL, – lapisan abstraksi dari pustaka OpenCL 2.0.

Berikut adalah contoh kecil, yang menggambarkan kode dalam C++17, diimplementasikan menggunakan lapisan abstraksi model CL/SYCL:

#include 
menggunakan 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) { // Lakukan beberapa pekerjaan secara paralel });});q.wait(); 

Fragmen kode dalam C++17, yang ditunjukkan di atas, dikirimkan, seluruhnya didasarkan pada penggunaan model pemrograman CL/SYCL. Ini membuat instance objek cl::sycl::queue{} dengan daftar inisialisasi parameter default, untuk mengirimkan kernel SYCL, untuk eksekusi, ke target akselerasi CPU host, yang digunakan secara default. Selanjutnya, ia memanggil metode cl::sycl::submit(…), memiliki argumen tunggal dari objek cl::sycl::handler{}, untuk mengakses metode, yang menyediakan fungsionalitas kernel dasar, berdasarkan berbagai algoritme paralel, termasuk metode cl::sycl::handler::parallel_for(…).

Metode berikut digunakan untuk mengimplementasikan loop paralel ketat, yang muncul dari dalam kernel yang sedang berjalan. Setiap iterasi dari loop ini dieksekusi secara paralel, oleh utasnya sendiri. cl::sycl::handler::parallel_for(…) menerima dua argumen utama dari objek cl::sycl::range<>{} dan fungsi lamda tertentu, yang dipanggil, selama setiap iterasi loop. Objek cl::sycl::range<>{} pada dasarnya mendefinisikan jumlah iterasi loop paralel, yang dieksekusi, untuk setiap dimensi tertentu, jika beberapa loop bersarang diciutkan, saat memproses data multi-dimensi.

Dalam kode, dari atas, objek cl::sycl::range<1>(N) digunakan untuk menjadwalkan N-iterasi dari loop paralel, dalam satu dimensi. Fungsi lambda dari metode parallel_for(…) menerima satu argumen dari objek cl::sycl::id<>{} lainnya. Selain cl::sycl::range<>{}, objek ini mengimplementasikan wadah vektor, masing-masing elemennya adalah nilai indeks untuk setiap dimensi dan setiap iterasi dari loop paralel. Diteruskan sebagai argumen ke kode dalam cakupan fungsi lamda, objek berikut digunakan untuk mengambil nilai indeks tertentu. Tubuh fungsi lamda berisi kode yang melakukan beberapa pemrosesan data, secara paralel.

Setelah kernel tertentu telah dikirimkan ke antrian dan muncul untuk dieksekusi, kode berikut memanggil metode cl::sycl::wait() tanpa argumen untuk mengatur sinkronisasi penghalang, memastikan bahwa tidak ada kode yang akan dieksekusi, sejauh ini , sampai kernel yang di-spawn menyelesaikan pekerjaan paralelnya.

Model pemrograman heterogen CL/SYCL sangat efisien dan dapat digunakan untuk aplikasi yang tersebar luas.

Namun, Intel Corp. dan CodePlay Software Inc, segera, telah menghentikan dukungan CL/SYCL untuk arsitektur perangkat keras, selain x86_64. Hal ini membuat pengiriman kode C++ paralel, menggunakan library CL/SYCL spesifik, menargetkan Arm/Aarch64, dan arsitektur lainnya menjadi tidak mungkin.

Saat ini, ada sejumlah proyek perpustakaan sumber terbuka CL/SYCL, yang dikembangkan oleh banyak pengembang dan penggemar, memberikan dukungan untuk lebih banyak arsitektur perangkat keras, daripada hanya x86_64.

Sejak 2016, Khronos Group, Inc. merilis revisi proyek sumber terbuka perpustakaan triSYCL mereka (https://github.com/triSYCL/triSYCL), disarankan untuk menggunakannya sebagai testbed saat mengevaluasi lapisan model pemrograman CL/SYCL terbaru spesifikasi dan mengirimkan umpan balik ke Khronos- dan ISO-komite. Namun, distribusi perpustakaan berikut tidak "stabil" dan dapat digunakan hanya untuk tujuan demonstrasi, dan, tidak, untuk membangun kode CL/SYCL, dalam produksi. Juga, distribusi pustaka Khronos triSYCL sepenuhnya mendukung kompilasi lintas platform, pada mesin pengembangan x86_64, menggunakan rantai alat lintas platform Arm/Aarch64 GNU, daripada membuat kode, "asli", dengan kompiler LLVM/Dentang, di Raspberry Pi.

Pada tahun 2019, Aksel Alpay, di Universitas Heidelberg (Jerman), mengimplementasikan pustaka spesifikasi lapisan model pemrograman CL/SYCL terbaru, menargetkan berbagai arsitektur perangkat keras, termasuk arsitektur Arm/Aarch64 Raspberry Pi, dan memberikan kontribusi rilis paling "stabil" distribusi pustaka sumber terbuka hipSYCL ke GitHub (https://github.com/illuhad/hipSYCL).

Selanjutnya, dalam cerita ini, kita akan membahas tentang menginstal dan mengonfigurasi cross-platform GCC/G++-10.xx GNU dan toolchain LLVM/Clang-9.xx Arm/Aarch64 “asli”, dan menggunakan distribusi library triSYCL dan hipSYCL, untuk memberikan kode paralel modern dalam C++17, berdasarkan penggunaan perpustakaan, sedang dibahas.

Sumber:Komputasi Paralel Pada Papan IoT Raspberry Pi 4B+ Menjadi Mudah


Proses manufaktur

  1. Suhu dan Kelembaban yang Mudah di Raspberry Pi
  2. Proyek IoT 101:Aliran Suhu dari Raspberry Pi
  3. Java ME 8 + Raspberry Pi + Sensor =IoT World (Bagian 1)
  4. Detektor tangisan bayi DIY yang mudah dengan Raspberry Pi
  5. Bangun IOT Pertama Anda dengan Raspberry Pi, sensor DHT11, dan Thingspeak.
  6. Mudah Memulai Dunia IoT dengan MQTT
  7. Proyek IoT Berbasis Raspberry PI Menghubungkan Sensor DHT11
  8. Windows 10 IoT Core pada Raspberry Pi 2 – Data Adafruit Sensor
  9. Windows 10 IoT Core untuk Raspberry Pi 3 Model B+
  10. BeagleBone dan Raspberry Pi mendapatkan pengaya FPGA