Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Computação paralela em placas Raspberry Pi 4B + IoT simplificadas


Construir e executar um código paralelo em C ++ 17, implementado usando a especificação do modelo Khronos CL / SYCL, em placas Raspberry Pi IoT.

Nossos objetivos…


Este projeto fornece orientações, dicas e tutoriais úteis para a construção de um código paralelo moderno em C ++ 17/2 × 0, implementado usando o modelo de programação CL / SYCL e executando-o na próxima geração de placas Raspberry Pi 4B IoT, com base em as inovadoras CPUs RISC-V de 64 bits ARM Cortex-A72, Quad-core.

Um público de leitores descobrirá como configurar uma placa Raspberry 4B IoT, out-of-the-box, e como usá-la para computação paralela, entregando um código paralelo em C ++ 17, com Khronos CL / triSYCL e Aksel Alpay's Distribuições de código aberto do projeto hipSYCL, instalando e configurando o GNU's Compiler Collection (GCC) e LLVM / Clang-9.xx Arm / Aarch64-toolchains, para construir os executáveis ​​do código paralelo e rodá-lo no Raspbian Buster 10.6 OS.

Visão geral das placas Raspberry PI 4B + IoT


A próxima geração de placas Raspberry Pi 4B + IoT inovadoras, com base nas potentes CPUs RISC-V de 64 bits simétricas de múltiplos núcleos da ARM, oferece um desempenho sem limites e, portanto, a produtividade máxima da própria computação paralela. O uso das mais recentes placas Raspberry Pi permite melhorar drasticamente a velocidade de desempenho real dos processos computacionais, no limite, como coleta e pré-processamento de dados em tempo real, antes de entregá-los a um data center para processamento, por exemplo -régua. A execução desses processos em paralelo aumenta significativamente a eficiência dessas soluções baseadas em nuvem, atendendo a bilhões de solicitações de clientes ou fornecendo análises de dados e outras inferências.

Antes de fundamentar nossa discussão sobre a construção e execução de um código paralelo em C ++ 17, projetado usando a especificação do modelo de programação heterogêneo CL / SYCL para as placas Raspberry Pi com arquitetura Arm / Aarch64, vamos passar um momento e fazer uma breve análise Dê uma olhada na próxima geração de placas Raspberry Pi 4B + e suas especificações técnicas:

As placas Raspberry Pi 4B + IoT são fabricadas com base nos inovadores chips Broadcom BCM2711B0 (SoC), equipados com as mais recentes CPUs ARM Quad-Core Cortex-A72 @ 1,5 GHz 64 bits RISC-V, proporcionando desempenho e escalabilidade de última geração, ao mesmo tempo em que aproveita para a computação paralela, no limite.

O Raspberry Pi é conhecido pelos minúsculos nanocomputadores “confiáveis” e “rápidos”, projetados para mineração de dados e computação paralela. Principalmente os novos recursos de arquitetura de hardware das CPUs RISC-V de 64 bits simétricas de vários núcleos do ARM, como DSP, SIMD, VFPv4 e suporte de virtualização de hardware, são capazes de trazer melhorias significativas para o desempenho, aceleração de aceleração e escalabilidade de os clusters de IoT, processando dados em massa, na borda.

Especificamente, uma das vantagens mais importantes das placas Raspberry Pi 4B + mais recentes é a memória LPDDR4 de baixo perfil com 2, 4 ou 8 GiB de capacidade de RAM de escolha, operando a 3200 MHz e fornecendo uma largura de banda de transações de memória normalmente grande, afetando positivamente o desempenho da computação paralela, em geral. As placas com 4 GiB de RAM instalado e superior são fortemente recomendadas para mineração de dados e computação paralela. Além disso, os chips SoC BCM2711B0 são agrupados com vários dispositivos integrados e periféricos, como GPUs Broadcom VideoCore VI @ 500Mhz, adaptadores PCI-Ex Gigabit Ethernet, etc.

Para construir e executar um código moderno paralelo específico em C ++ 17, implementado usando o modelo de programação heterogêneo CL / SYCL, o primeiro de que realmente precisamos é uma placa Raspberry Pi 4B + IoT com o mais recente sistema operacional Raspbian Buster 10.6 instalado e configurado para o primeiro uso.

Aqui está uma breve lista de verificação dos requisitos de hardware e software, que devem ser atendidos, de antemão:

Hardware:

Software:

Uma vez que temos uma placa Raspberry Pi 4B + IoT, agora podemos continuar ligando-a e configurando-a imediatamente.

Configuração de uma placa de IoT do Raspberry Pi 4B


Antes de começar, devemos baixar a versão mais recente da imagem completa do sistema operacional Raspbian Buster 10.6.0 no repositório oficial do Raspberry Pi. Para instalar a imagem do Raspbian OS no cartão SD, também precisaremos baixar e usar o aplicativo Raspbian Imager 1.4, disponível para várias plataformas, como Windows, Linux ou macOS:

Além disso, também devemos baixar e instalar o aplicativo MobaXterm para estabelecer uma conexão com a placa Raspberry Pi, remotamente, por meio dos protocolos SSH ou FTP:

Como o Raspbian Buster OS e o aplicativo Imager foram baixados e instalados com êxito, usaremos o aplicativo Imager para fazer o seguinte:

1. Apague o cartão SD, formatando-o para o sistema de arquivos FAT32, por padrão;

2. Extraia a imagem do Raspbian Buster OS pré-instalada (* .img) para o cartão SD;

Uma vez que as etapas acima foram concluídas com sucesso, apenas remova o cartão SD do leitor de cartão e conecte-o ao slot de cartão SD da placa Raspberry Pi. Em seguida, conecte os cabos micro HDMI e Ethernet. Por fim, conecte o conector do cabo de alimentação DC e ligue a placa. Finalmente, o sistema irá inicializar com o Raspbian Buster OS, instalado no cartão SD, solicitando a execução de várias etapas de pós-instalação para configurá-lo para o primeiro uso.

Uma vez que a placa foi ligada, certifique-se de que todas as seguintes etapas de pós-instalação foram concluídas:

1. Abra o console bash e defina a senha ‘root’:
  [email protected]:~ $ sudo passwd root  

2. Faça login no console bash Raspbian com privilégios de 'root':
  [e-mail protegido]:~ $ sudo -s  

3. Atualize o sistema básico do Raspbian Linux e o firmware, usando os seguintes comandos:
  [email protegido]:~ # sudo apt [email protected]:~ # sudo apt [email protected]:~ # sudo rpi-update  

4. Reinicialize o sistema, pela primeira vez:
  [email protected]:~ # sudo shutdown -r now  

5. Instale o carregador de inicialização Raspbian mais recente e reinicie o sistema, mais uma vez:
  [email protegido]:~ # sudo rpi-eeprom-update -d [email protegido]:~ # sudo shutdown -r now  

6. Inicie a ferramenta de configuração ‘raspi-config’:
  [e-mail protegido]:~ # sudo raspi-config  

7. Conclua as seguintes etapas, usando a ferramenta ‘raspi-config’:

* Atualize a ferramenta ‘raspi-config’:

* Desative a GUI da área de trabalho do Raspbian na inicialização:

Opções do sistema >> Inicializar / Autologin >> Autologin do console:

* Expanda o tamanho da partição raiz ‘/’ no cartão SD:

Depois de realizar a configuração pós-instalação do Raspbian, finalmente reinicie o sistema. Após a reinicialização, você será solicitado a fazer o login. Use o nome de usuário 'root' e a senha, previamente configurados, para fazer login no console bash com privilégios de root.

Uma vez que você fez o login com sucesso, instale o número de pacotes dos repositórios APT usando o seguinte comando, no console bash:
  [email protected]:~ # sudo apt install -y net-tools openssh-server  

Esses dois pacotes são necessários para configurar a interface de rede do Raspberry Pi ou o servidor OpenSSH para se conectar à placa, remotamente, via protocolo SSH, usando MobaXterm.

Configure a interface de rede da placa ‘eth0’ modificando / etc / network / interfaces, por exemplo:
  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  

Ao lado da interface de rede, execute uma configuração básica do servidor OpenSSH, removendo o comentário dessas linhas em / etc / ssh / sshd_config :
  PermitRootLogin yesStrictModes noPasswordAuthentication yesPermitEmptyPasswords yes  

Isso habilitará o login 'root', no console bash, via protocolo SSH, sem inserir uma senha.

Finalmente, tente conectar a placa pela rede, usando o aplicativo MobaXterm e abrindo a sessão SSH remota para o host com o endereço IP:192.168.87.100. Você também deve ser capaz de fazer login com sucesso no console bash do Raspbian, com as credenciais, previamente definidas:

Desenvolvendo um código paralelo em C ++ 17 usando CL / SYCL-Model


Em 2020, Khronos Group, Intel Corp. e outros fornecedores anunciaram a nova e revolucionária plataforma de computação paralela heterogênea (XPU), proporcionando a capacidade de descarregar uma execução de cargas de trabalho "pesadas" de processamento de dados para uma ampla aceleração de hardware (por exemplo, GPGPU ou FPGAs), que não sejam as CPUs host. Conceitualmente, o desenvolvimento de código paralelo, utilizando a plataforma XPU, é inteiramente baseado na especificação do modelo de programação Khronos CL / SYCL, - uma camada de abstração da biblioteca OpenCL 2.0.

Aqui está um pequeno exemplo, ilustrando o código em C ++ 17, implementado usando a camada de abstração do modelo CL / SYCL:
  #include 
 usando 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) {// Faça algum trabalho em paralelo});}); q.wait ();  

O fragmento de código em C ++ 17, mostrado acima, é entregue, inteiramente baseado no uso do modelo de programação CL / SYCL. Ele instancia um objeto cl ::sycl ::queue {} com a lista de inicializadores de parâmetro padrão, para enviar SYCL-kernels, para uma execução, ao destino de aceleração de CPUs host, usado por padrão. Em seguida, ele invoca o método cl ::sycl ::submit (…), tendo um único argumento do objeto cl ::sycl ::handler {}, para métodos de acesso, que fornecem uma funcionalidade básica de kernels, com base em vários algoritmos paralelos, incluindo o método cl ::sycl ::handler ::parallel_for (…).

O método a seguir é usado para implementar um loop paralelo estreito, gerado a partir de um kernel em execução. Cada iteração deste loop é executada em paralelo, por seu próprio thread. O cl ::sycl ::handler ::parallel_for (…) aceita dois argumentos principais do objeto cl ::sycl ::range <> {} e uma função lamda específica, invocada, durante cada iteração do loop. O objeto cl ::sycl ::range <> {} basicamente define uma quantidade de iterações de loops paralelos, sendo executados, para cada dimensão específica, no caso de múltiplos loops aninhados serem recolhidos, durante o processamento de um dado multidimensional.

No código, visto acima, o objeto cl ::sycl ::range <1> (N) é usado para agendar N-iterações do loop paralelo, em uma única dimensão. A função lambda do método parallel_for (…) aceita um único argumento de outro objeto cl ::sycl ::id <> {}. Assim como o cl ::sycl ::range <> {}, este objeto implementa um contêiner de vetor, cada elemento, do qual, é um valor de índice para cada dimensão e cada iteração do loop paralelo, respectivamente. Passado como um argumento para um código no escopo da função lamda, o seguinte objeto é usado para recuperar os valores de índice específicos. O corpo da função lamda contém um código que faz parte do processamento de dados, em paralelo.

Depois que um kernel específico foi submetido à fila e gerado para uma execução, o código a seguir invoca o método cl ::sycl ::wait () sem argumentos para definir uma sincronização de barreira, garantindo que nenhum código será executado, até agora , até que o kernel que está sendo gerado tenha concluído seu trabalho paralelo.

O modelo de programação heterogêneo CL / SYCL é altamente eficiente e pode ser usado para uma ampla variedade de aplicações.

No entanto, Intel Corp. e CodePlay Software Inc, em breve, descontinuaram o suporte de CL / SYCL para arquiteturas de hardware, exceto x86_64. Isso tornou impossível entregar um código C ++ paralelo, usando as bibliotecas CL / SYCL específicas, visando Arm / Aarch64 e outras arquiteturas.

Atualmente, há uma série de projetos de biblioteca de código aberto CL / SYCL, desenvolvidos por uma vasta gama de desenvolvedores e entusiastas, fornecendo suporte para mais arquiteturas de hardware, ao invés do x86_64, apenas.

Desde 2016, Khronos Group, Inc. lança as revisões de seu projeto de código aberto da biblioteca triSYCL (https://github.com/triSYCL/triSYCL), recomendado para usá-lo como um testbed enquanto avalia a camada de modelo de programação CL / SYCL mais recente especificação e envio de feedback aos comitês Khronos e ISO. No entanto, a seguinte distribuição de biblioteca não é “estável” e pode ser usada somente para fins de demonstração e, não, para construir um código CL / SYCL em produção. Além disso, a distribuição da biblioteca Khronos triSYCL suporta totalmente a compilação de plataforma cruzada, em uma máquina de desenvolvimento x86_64, usando a cadeia de ferramentas de plataforma cruzada GNU Arm / Aarch64, em vez de construir um código, "nativamente", com compiladores LLVM / Clang, no Raspberry Pi.

Em 2019, Aksel Alpay, na Heidelberg University (Alemanha), implementou a mais recente biblioteca de especificação de camada de modelo de programação CL / SYCL, visando uma variedade de arquiteturas de hardware, incluindo as arquiteturas Raspberry Pi's Arm / Aarch64, e contribuiu com a versão mais "estável" da distribuição da biblioteca de código aberto hipSYCL para o GitHub (https://github.com/illuhad/hipSYCL).

Além disso, nesta história, discutiremos sobre a instalação e configuração da plataforma cruzada do GNU GCC / G ++ - 10.xx e conjuntos de ferramentas “nativos” Arm / Aarch64 LLVM / Clang-9.xx, e usando as distribuições de biblioteca triSYCL e hipSYCL, para entregar um código paralelo moderno em C ++ 17, baseado no uso de bibliotecas, em discussão.

Fonte:Parallel Computing On Raspberry Pi 4B + IoT Boards Made Easy

Processo de manufatura

  1. Temperatura e umidade fáceis no Raspberry Pi
  2. Projeto IoT 101:Temperatura do Fluxo do Raspberry Pi
  3. Java ME 8 + Raspberry Pi + Sensores =IoT World (Parte 1)
  4. Fácil detector de choro de bebê faça você mesmo com Raspberry Pi
  5. Crie sua primeira IOT com um Raspberry Pi, sensor DHT11 e Thingspeak.
  6. Fácil início no mundo da IoT com MQTT
  7. Projeto Raspberry PI IoT Conectando o Sensor DHT11
  8. Windows 10 IoT Core no Raspberry Pi 2 - Dados do sensor Adafruit
  9. Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
  10. BeagleBone e Raspberry Pi ganham complementos FPGA