산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

손쉬운 Raspberry Pi 4B+ IoT 보드에서 병렬 컴퓨팅

Raspberry Pi IoT 보드에서 Khronos CL/SYCL 모델 사양을 사용하여 구현된 C++17의 병렬 코드 빌드 및 실행

우리의 목표…

이 프로젝트는 C++17/2×0에서 최신 병렬 코드를 빌드하고 CL/SYCL 프로그래밍 모델을 사용하여 구현하고 다음을 기반으로 하는 차세대 Raspberry Pi 4B IoT 보드에서 실행하기 위한 유용한 지침, 팁 및 자습서를 제공합니다. 혁신적인 ARM Cortex-A72, 쿼드 코어, 64비트 RISC-V CPU.

독자 청중은 Khronos CL/triSYCL 및 Aksel Alpay를 사용하여 즉시 사용 가능한 Raspberry 4B IoT 보드를 설정하고 병렬 컴퓨팅에 사용하고 C++17에서 병렬 코드를 제공하는 방법을 알게 될 것입니다. hipSYCL 프로젝트의 오픈 소스 배포판, GNU의 컴파일러 컬렉션(GCC) 및 LLVM/Clang-9.xx Arm/Aarch64 도구 체인 설치 및 구성, 병렬 코드의 실행 파일을 빌드하고 Raspbian Buster 10.6 OS에서 실행

Raspberry PI 4B+ IoT 보드 개요

강력한 ARM의 다중 코어 대칭 64비트 RISC-V CPU를 기반으로 하는 혁신적인 차세대 Raspberry Pi 4B+ IoT 보드는 최고의 성능을 제공하여 병렬 컴퓨팅 자체의 궁극적인 생산성을 제공합니다. 최신 Raspberry Pi 보드를 사용하면 exa에서 처리를 위해 데이터 센터로 전달하기 전에 실시간으로 데이터를 수집 및 사전 처리하는 것과 같이 에지에서 계산 프로세스의 실제 성능 속도를 크게 향상시킬 수 있습니다. -규모. 이러한 프로세스를 병렬로 실행하면 클라우드 기반 솔루션의 효율성이 크게 향상되어 수십억 개의 클라이언트 요청을 처리하거나 데이터 분석 및 기타 추론을 제공합니다.

Arm/Aarch64 아키텍처가 있는 Raspberry Pi 보드에 대해 CL/SYCL 이기종 프로그래밍 모델 사양을 사용하여 설계된 C++17에서 병렬 코드를 빌드하고 실행하는 방법에 대한 논의를 시작하기 전에 잠시 시간을 내어 짧은 시간을 갖도록 하겠습니다. 차세대 Raspberry Pi 4B+ 보드 및 해당 기술 사양 살펴보기:

Raspberry Pi 4B+ IoT 보드는 최신 ARM Quad-Core Cortex-A72 @ 1.5GHz 64비트 RISC-V CPU가 장착된 혁신적인 Broadcom BCM2711B0(SoC) 칩을 기반으로 제조되어 궁극의 성능과 확장성을 제공합니다. 에지에서 병렬 컴퓨팅을 위한 것입니다.

Raspberry Pi는 데이터 마이닝 및 병렬 컴퓨팅을 위해 설계된 "신뢰할 수 있는" "빠른" 초소형 나노 컴퓨터로 유명합니다. DSP, SIMD, VFPv4 및 하드웨어 가상화 지원과 같은 ARM의 멀티코어 대칭 64비트 RISC-V CPU의 새로운 하드웨어 아키텍처 기능은 성능, 가속 속도 및 확장성을 크게 향상시킬 수 있습니다. 엣지에서 대량으로 데이터를 처리하는 IoT 클러스터

특히 최신 Raspberry Pi 4B+ 보드의 가장 중요한 장점 중 하나는 2, 4 또는 8GiB RAM 용량을 선택할 수 있는 로우 프로파일 LPDDR4 메모리로, 3200Mhz에서 작동하고 일반적으로 큰 메모리 트랜잭션 대역폭을 제공하여 성능에 긍정적인 영향을 미칩니다. 일반적으로 병렬 컴퓨팅. 4GiB 이상의 RAM이 설치된 보드는 데이터 마이닝 및 병렬 컴퓨팅에 강력히 권장됩니다. 또한 BCM2711B0 SoC 칩은 Broadcom VideoCore VI @ 500Mhz GPU, PCI-Ex 기가비트 이더넷 어댑터 등과 같은 다양한 통합 장치 및 주변 장치와 함께 번들로 제공됩니다.

CL/SYCL 이기종 프로그래밍 모델을 사용하여 구현된 C++17에서 특정 병렬 최신 코드를 빌드하고 실행하기 위해 가장 먼저 필요한 것은 최신 Raspbian Buster 10.6 OS가 설치 및 구성된 Raspberry Pi 4B+ IoT 보드입니다. 첫 사용.

다음은 사전에 충족되어야 하는 하드웨어 및 소프트웨어 요구 사항에 대한 간략한 체크리스트입니다.

하드웨어:

<울>
  • 라즈베리 파이 4 모델 B0, 4GB IoT 보드,
  • Raspbian OS 및 데이터 저장용 마이크로 SD 카드 16GB,
  • DC 전원 공급 장치:USB Type-C 커넥터를 통한 5.0V/2-3A(최소 3A – 데이터 마이닝 및 병렬 컴퓨팅용)
  • 소프트웨어:

    <울>
  • 라즈비안 버스터 10.6.0 전체 OS;
  • 라즈비안 이미저 1.4;
  • MobaXterm 20.3 빌드 4396 또는 기타 SSH 클라이언트
  • Raspberry Pi 4B+ IoT 보드가 있으므로 이제 바로 켜고 설정할 수 있습니다.

    Raspberry Pi 4B IoT 보드 설정

    시작하기 전에 공식 Raspberry Pi 리포지토리에서 최신 릴리스의 Raspbian Buster 10.6.0 전체 OS 이미지를 다운로드해야 합니다. Raspbian OS 이미지를 SD 카드에 설치하려면 Windows, Linux 또는 macOS와 같은 다양한 플랫폼에서 사용할 수 있는 Raspbian Imager 1.4 애플리케이션도 다운로드하여 사용해야 합니다.

    <울>
  • 라즈비안 버스터 10.6.0
  • 라즈비안 이미저 1.4
  • 또한 SSH 또는 FTP 프로토콜을 통해 원격으로 Raspberry Pi 보드에 연결하기 위한 MobaXterm 애플리케이션도 다운로드하여 설치해야 합니다.

    <울>
  • MobaXterm 20.3
  • Raspbian Buster OS 및 Imager 애플리케이션이 성공적으로 다운로드 및 설치되었으므로 Imager 애플리케이션을 사용하여 다음을 수행합니다.

    1. SD 카드를 지우고 기본적으로 FAT32 파일 시스템으로 포맷합니다.

    2. 사전 설치된 Raspbian Buster OS 이미지(*.img)를 SD 카드에 추출합니다.

    위의 단계가 성공적으로 완료되었으므로 카드 리더기에서 SD 카드를 제거하고 Raspberry Pi 보드의 SD 카드 슬롯에 연결하기만 하면 됩니다. 그런 다음 micro-HDMI 및 이더넷 케이블을 연결합니다. 마지막으로 DC 전원 공급 케이블의 커넥터를 꽂고 보드를 켭니다. 마지막으로, 시스템은 SD 카드에 설치된 Raspbian Buster OS로 부팅되며 처음 사용을 위해 구성하기 위해 몇 가지 설치 후 단계를 수행하라는 메시지가 표시됩니다.

    보드의 전원이 켜져 있으므로 다음 설치 후 단계가 모두 완료되었는지 확인하십시오.

    1. bash-console을 열고 '루트' 비밀번호를 설정합니다.

    [이메일 보호됨]:~ $ sudo passwd 루트 

    2. '루트' 권한으로 Raspbian bash-console에 로그인:

    [이메일 보호됨]:~ $ sudo -s 

    3. 다음 명령을 사용하여 Raspbian의 Linux 기본 시스템과 펌웨어를 업그레이드합니다.

    [이메일 보호]:~# sudo apt [이메일 보호]:~# sudo apt [이메일 보호]:~# sudo rpi-update 

    4. 처음으로 시스템을 재부팅합니다.

    [이메일 보호됨]:~# sudo shutdown -r now 

    5. 최신 Raspbian의 부트로더를 설치하고 시스템을 다시 한 번 재부팅합니다.

    [이메일 보호됨]:~# sudo rpi-eeprom-update -d [이메일 보호됨]:~# sudo 종료 -r 지금 

    6. 'raspi-config' 설정 도구 실행:

    [이메일 보호됨]:~# sudo raspi-config 

    7. 'raspi-config' 도구를 사용하여 다음 단계를 완료하십시오.

    * 'raspi-config' 도구 업데이트:

    * 부팅 시 Raspbian의 데스크탑 GUI 비활성화:

    시스템 옵션>> 부팅/자동 로그인>> 콘솔 자동 로그인:

    * SD 카드의 루트 '/' 파티션 크기 확장:

    Raspbian 설치 후 구성을 수행한 후 마지막으로 시스템을 재부팅합니다. 재부팅하면 로그인하라는 메시지가 표시됩니다. 루트 권한으로 bash-console에 로그인하려면 '루트' 사용자 이름과 이전에 설정한 비밀번호를 사용하십시오.

    성공적으로 로그인되었으므로 bash-console에서 다음 명령을 사용하여 APT-repositories에서 패키지 수를 설치합니다.

    [이메일 보호됨]:~# sudo apt install -y net-tools openssh-server 

    이 두 패키지는 MobaXterm을 사용하여 SSH 프로토콜을 통해 원격으로 보드에 연결하기 위해 Raspberry Pi의 네트워크 인터페이스 또는 OpenSSH 서버를 구성하는 데 필요합니다.

    /etc/network/interfaces를 수정하여 보드의 네트워크 인터페이스 'eth0'을 구성합니다. 예를 들면 다음과 같습니다.

    자동 eth0iface eth0 inet staticaddress 192.168.87.100netmask 255.255.255.0broadcast 192.168.87.255gateway 192.168.87.927.126851 

    네트워크 인터페이스 옆에서 /etc/ssh/sshd_config에서 다음 줄의 주석 처리를 제거하여 OpenSSH 서버의 기본 구성을 수행합니다. :

    PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords 예 

    이렇게 하면 비밀번호를 입력하지 않고도 SSH 프로토콜을 통해 bash-console에 '루트' 로그인이 가능합니다.

    마지막으로 MobaXterm 애플리케이션을 사용하고 IP 주소가 192.168.87.100인 호스트에 대한 원격 SSH 세션을 열어 네트워크를 통해 보드를 연결해 보십시오. 또한 이전에 설정한 자격 증명을 사용하여 Raspbian의 bash-console에 성공적으로 로그인할 수 있어야 합니다.

    CL/SYCL 모델을 사용하여 C++17에서 병렬 코드 개발

    2020년에 Khronos Group, Intel Corp. 및 기타 공급업체는 "무거운" 데이터 처리 워크로드의 실행을 광범위한 하드웨어 가속(예:GPGPU 또는 FPGA)는 호스트 CPU 이외의 대상만 대상으로 합니다. 개념적으로 XPU 플랫폼을 사용하는 병렬 코드 개발은 전적으로 OpenCL 2.0 라이브러리의 추상화 계층인 Khronos CL/SYCL 프로그래밍 모델 사양을 기반으로 합니다.

    다음은 CL/SYCL 모델 추상화 계층을 사용하여 구현된 C++17의 코드를 보여주는 작은 예입니다.

    #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 프로그래밍 모델 사용을 기반으로 전달됩니다. 실행을 위해 기본적으로 사용되는 호스트 CPU 가속 대상에 SYCL 커널을 제출하기 위해 기본 매개변수 이니셜라이저 목록이 있는 cl::sycl::queue{} 객체를 인스턴스화합니다. 다음으로, cl::sycl::handler{} 객체의 단일 인수가 있는 cl::sycl::submit(…) 메서드를 호출하여 다양한 기본 커널 기능을 제공하는 메서드에 액세스합니다. cl::sycl::handler::parallel_for(…) 메서드를 포함한 병렬 알고리즘.

    다음 방법은 실행 중인 커널 내에서 생성된 긴밀한 병렬 루프를 구현하는 데 사용됩니다. 이 루프의 각 반복은 자체 스레드에 의해 병렬로 실행됩니다. cl::sycl::handler::parallel_for(…)는 cl::sycl::range<>{} 객체의 두 가지 주요 인수와 각 루프 반복 중에 호출되는 특정 람다 함수를 허용합니다. cl::sycl::range<>{} 객체는 기본적으로 다차원 데이터를 처리하는 동안 여러 중첩 루프가 축소되는 경우 각 특정 차원에 대해 실행되는 병렬 루프 반복의 양을 정의합니다.

    위의 코드에서 cl::sycl::range<1>(N) 개체는 단일 차원에서 병렬 루프의 N-반복을 예약하는 데 사용됩니다. parallel_for(…) 메서드의 람다 함수는 다른 cl::sycl::id<>{} 객체의 단일 인수를 허용합니다. cl::sycl::range<>{}와 마찬가지로 이 객체는 벡터 컨테이너를 구현하며, 각 요소의 각 요소는 병렬 루프의 각 차원 및 각 반복에 대한 인덱스 값입니다. lamda-function의 범위에 있는 코드에 대한 인수로 전달된 다음 객체는 특정 인덱스 값을 검색하는 데 사용됩니다. lamda-function의 본문에는 일부 데이터 처리를 병렬로 수행하는 코드가 포함되어 있습니다.

    특정 커널이 대기열에 제출되고 실행을 위해 생성된 후 다음 코드는 장벽 동기화를 설정하기 위해 인수 없이 cl::sycl::wait() 메서드를 호출하여 지금까지 코드가 실행되지 않도록 합니다. , 생성되는 커널이 병렬 작업을 완료할 때까지.

    CL/SYCL 이기종 프로그래밍 모델은 매우 효율적이며 광범위한 애플리케이션에 사용할 수 있습니다.

    그러나 Intel Corp. 및 CodePlay Software Inc.는 곧 x86_64 이외의 하드웨어 아키텍처에 대한 CL/SYCL 지원을 더 이상 사용하지 않습니다. 이로 인해 Arm/Aarch64 및 기타 아키텍처를 대상으로 하는 특정 CL/SYCL 라이브러리를 사용하여 병렬 C++ 코드를 제공하는 것이 불가능했습니다.

    현재 x86_64가 아닌 더 많은 하드웨어 아키텍처에 대한 지원을 제공하는 수많은 개발자와 애호가가 개발한 CL/SYCL 오픈 소스 라이브러리 프로젝트가 많이 있습니다.

    2016년부터 Khronos Group, Inc.는 최신 CL/SYCL 프로그래밍 모델 계층을 평가하는 동안 테스트베드로 사용할 것을 권장하는 triSYCL 라이브러리 오픈 소스 프로젝트(https://github.com/triSYCL/triSYCL)의 개정판을 출시했습니다. 사양을 지정하고 Khronos 및 ISO 위원회에 피드백을 보냅니다. 그러나 다음 라이브러리 배포는 "안정적"이 아니며 프로덕션에서 CL/SYCL 코드를 빌드하는 것이 아니라 데모 목적으로만 사용할 수 있습니다. 또한 Khronos triSYCL 라이브러리 배포는 Raspberry에서 LLVM/Clang 컴파일러를 사용하여 "기본적으로" 코드를 빌드하는 대신 GNU의 Arm/Aarch64 플랫폼 간 도구 모음을 사용하여 x86_64 개발 시스템에서 플랫폼 간 컴파일을 완벽하게 지원합니다. 파이.

    2019년 독일 하이델베르그 대학의 Aksel Alpay는 최신 CL/SYCL 프로그래밍 모델 계층 사양 라이브러리를 구현하여 Raspberry Pi의 Arm/Aarch64 아키텍처를 비롯한 다양한 하드웨어 아키텍처를 대상으로 했으며 가장 "안정적인" 릴리스에 기여했습니다. GitHub(https://github.com/illuhad/hipSYCL)에 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 + 센서 =IoT World(1부)
    4. 라즈베리 파이를 사용한 손쉬운 DIY 아기 울음 감지기
    5. Raspberry Pi, DHT11 센서 및 Thingspeak로 최초의 IOT를 구축하십시오.
    6. MQTT를 사용하여 IoT의 세계로 쉽게 시작
    7. DHT11 센서를 연결하는 라즈베리 PI 기반 IoT 프로젝트
    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 추가 기능 추가