Nota

Usa MPI aperto su Oracle Roving Edge Infrastructure

Introduzione

Oracle Roving Edge Infrastructure è una piattaforma di cloud computing e storage rinforzata adatta per l'implementazione ai margini della rete o in posizioni con connettività esterna limitata o nulla. Man mano che carichi di lavoro più grandi, più complessi e impegnativi si spostano verso il margine della rete, ciò può rappresentare una sfida per un'infrastruttura edge.

Open MPI è un'implementazione dello standard MPI (Message Passing Interface) utilizzato per lo sviluppo di applicazioni parallele in HPC (High Performance Computing). Open MPI può essere utilizzato per distribuire High Performance Computing e carichi di lavoro altamente paralleli in parti relativamente più piccole dell'infrastruttura che poi funzionano come un set di risorse aggregato più grande. Questo approccio può essere utilizzato per distribuire un carico di lavoro alla CPU e ad altre risorse di calcolo, come la GPU, che consente la distribuzione di attività più grandi e a uso intensivo di calcolo all'estremità della rete, come la modellazione predittiva o altri task di intelligenza artificiale/apprendimento automatico (AI/ML).

Open MPI può essere utilizzato per distribuire carichi di lavoro paralleli utilizzando le risorse nei nodi Oracle Roving Edge Infrastructure. Netfilter fornisce il DNAT (Destination Network Address Translation) e la NAT (Source Network Address Translation) necessari per le istanze VM utilizzando il software di clustering ospitato nei nodi Oracle Roving Edge Infrastructure. Questa esercitazione implementa Open MPI utilizzando Netfilter su Oracle Roving Edge Infrastructure eseguendo un calcolatore di numeri primi per dimostrare prestazioni migliorate quando si utilizzano risorse parallele.

Informazioni generali

Open MPI può essere eseguito su diverse istanze di Virtual Machine (VM) all'interno di un singolo nodo Oracle Roving Edge Infrastructure o su più nodi Oracle Roving Edge Infrastructure. L'esecuzione su un singolo nodo Oracle Roving Edge Infrastructure è semplice e non comporta problemi. Quando viene eseguito su più nodi Oracle Roving Edge Infrastructure, è importante comprendere la rete sulle istanze VM di Oracle Roving Edge Infrastructure e come Open MPI instrada il traffico per evitare possibili problemi.

Networking sulle istanze di Virtual Machine Oracle Roving Edge Infrastructure

Le istanze di Virtual Machine in esecuzione su Oracle Roving Edge Infrastructure utilizzano indirizzi IP privati per comunicare con altre istanze VM nella stessa subnet gestita in hosting sullo stesso nodo. Gli indirizzi IP pubblici possono essere assegnati alle istanze VM ospitate su Oracle Roving Edge Infrastructure per consentire alle istanze di comunicare con altre subnet e risorse in esecuzione al di fuori del nodo Oracle Roving Edge Infrastructure in cui è ospitato.

Nota: gli indirizzi IP pubblici vengono assegnati alle VNIC dell'istanza VM da un pool di indirizzi IP pubblici. Sebbene gli indirizzi siano denominati IP pubblici, in realtà si tratta di indirizzi IP sulla stessa rete locale in cui il nodo Oracle Roving Edge Infrastructure è connesso tramite la porta RJ-45. Questi indirizzi possono essere un indirizzo IPv4 raggiungibile tramite Internet oppure si tratta di indirizzi situati in una sottorete privata della rete locale. Questi indirizzi vengono anche definiti indirizzi IP esterni, poiché possono essere connessi a risorse esterne al nodo in cui è ospitata l'istanza VM.

È importante capire quando un'istanza VM in esecuzione all'interno di un nodo Oracle Roving Edge Infrastructure tenta di accedere alle risorse al di fuori del nodo, il traffico passa attraverso l'indirizzo IP esterno che viene instradato all'interno del nodo e alla connessione di rete esterna.

Nell'immagine riportata di seguito viene mostrata un'istanza VM di esempio sul nodo Oracle Roving Edge Infrastructure. Notare gli indirizzi IP pubblici e privati assegnati.

Istanza VM di esempio su un nodo Oracle Roving Edge Infrastructure

Sfide per l'esecuzione di MPI aperti su più nodi Oracle Roving Edge Infrastructure

L'uso degli indirizzi IP privati dell'istanza VM crea problemi per il software di clustering, ad esempio Open MPI, quando viene implementato su più nodi Oracle Roving Edge Infrastructure. Ogni nodo non è a conoscenza dei mapping degli indirizzi IP da privato a pubblico e della traduzione dei mapping per le istanze VM ospitate su altri nodi. Poiché i mapping non sono condivisi, i pacchetti che utilizzano indirizzi IP privati vengono instradati in modo errato o persi.

Un esempio di come questo problema potrebbe apparire utilizzando Open MPI:

L'apertura di MPI in esecuzione sulle istanze VM tenterà di determinare il percorso di rete migliore da utilizzare per raggiungere altri membri dell'istanza VM, il software potrebbe esaminare le interfacce locali e gli indirizzi IP e registrarli con altri nodi nel cluster.

Implementa MPI aperti su Oracle Roving Edge Infrastructure

Per affrontare la natura non condivisa della rete interna di Oracle Roving Edge Infrastructure, il software Netfilter sulle istanze VM Linux viene utilizzato per riscrivere i pacchetti di rete provenienti da VM ospitate su altri nodi Oracle Roving Edge Infrastructure e destinati a tali VM.

considerazioni sulla progettazione

In questa esercitazione vengono utilizzati tre nodi RED (Roving Edge Devices) di Oracle Roving Edge Infrastructure per creare un cluster MPI aperto. Tutti i RED sono connessi a una rete esterna condivisa. Ogni nodo è stato configurato con il proprio pool di IP esterni per l'allocazione a istanze VM.

Tabella CIDR VCN e subnet

Nome RED CIDR VCN CIDR subnet
RED1 10/16 10/24
RED2 10/16 10/24
RED3 10/16 10/24

Questo esempio viene mostrato nell'immagine seguente, due configurazioni di rete da due RED diversi.

Esempio di VCN e subnet su "RED1"

Esempio di VCN e subnet su "RED2"

Destinatari

Amministratori, sviluppatori e utenti di Oracle Roving Edge Infrastructure.

Obiettivi

Prerequisiti

Task 1: Crea istanze Virtual Machine

Crea un'istanza VM in ogni subnet su ogni RED.

Assegnazioni di indirizzi IP di esempio:

Nome RED Nome VM VM O/S IP privato VM IP pubblico VM
RED1 redvm1 Ubuntu 22.04 10/24 10,123
RED2 redvm2 Ubuntu 22.04 10/24 10,123
RED3 redvm3 Ubuntu 22.04 10/24 10,123

Nota: le istanze VM in questo task vengono create utilizzando un'immagine esportata da Oracle Cloud Infrastructure (OCI) utilizzando OCI Ubuntu 22.04 LTS. È possibile utilizzare qualsiasi distribuzione Linux con pacchetti Open MPI adatti, ad esempio Oracle Linux 8 o 9, Fedora e così via.

Elenco VM di esempio su "RED3"

  1. In ogni RED, passare a Computazione, Istanza e fare clic su Crea istanza.

  2. In Crea istanza di computazione, immettere Nome, selezionare l'immagine personalizzata, la forma, la configurazione della rete, le chiavi SSH e fare clic su Crea.

    Creazione di un'immagine di computazione su ogni RED

Task 2: installare il package MPI aperto su ogni istanza VM

Una volta create tutte le istanze VM, eseguire il login a ciascuna istanza VM tramite SSH con la chiave fornita durante il provisioning. I seguenti comandi sono adatti per Ubuntu 22.04, potrebbe essere necessario adattare queste istruzioni o includere repository di pacchetti aggiuntivi se si utilizza una distribuzione Linux diversa.

  1. Eseguire il comando seguente per aggiornare il sistema ed effettuare il reboot.

    sudo apt update && sudo apt upgrade -y
    

    Il completamento dell'operazione potrebbe richiedere alcuni minuti. Al termine, riavviare l'istanza.

    sudo shutdown -r now
    
  2. Eseguire il login all'istanza e installare i package Open MPI.

    Nota:

    • Questo porterà attraverso un bel po 'di dipendenze.

    • Il pacchetto libopenmpi-dev è richiesto solo per la compilazione successiva di un programma di esempio con cui eseguire il test. Se non si desidera compilare le funzioni Open MPI nei programmi, questo pacchetto non è necessario.

    sudo apt install openmpi-bin libopenmpi-dev -y
    

Task 3: Impostazione della conversione degli indirizzi di rete di destinazione (DNAT) e della conversione degli indirizzi di rete di origine (SNAT)

  1. Visualizzare i dettagli di ogni istanza di VM avviata e annotare gli indirizzi IP pubblici privati e assegnati in modo casuale. Passare a Compute, Istanza e fare clic sul nome dell'istanza per visualizzare i dettagli.

    VM di esempio su "RED3"

  2. Creare gli SNAT.

    • Se mappiamo le regole SNAT per ogni VM in una tabella, dovrebbe avere l'aspetto seguente:

      SNAT Da RED1 Da RED2 Da RED3
      Su redvm1 ND Input src 10.123.123.67 SNAT to src 10.0.2.2 Input src 10.123.123.101 SNAT to src 10.0.3.2
      Su redvm2 Input src 10.123.123.32 SNAT to src 10.0.1.2 ND Input src 10.123.123.101 SNAT to src 10.0.3.2
      Su redvm3 Input src 10.123.123.32 SNAT to src 10.0.1.2 Input src 10.123.123.67 SNAT to src 10.0.2.2 ND
    • Utilizzare i comandi iptables per ogni VM.

      • Su redvm1.

        sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2
        sudo netfilter-persistent save
        
      • Su redvm2.

        sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2
        sudo netfilter-persistent save
        
      • Su redvm3.

        sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2
        sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2
        sudo netfilter-persistent save
        

      Nota: l'aggiunta della prima regola (sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT) per consentire l'accesso dalla subnet utilizzata dagli RED per gli IP pubblici. Senza questa (o una regola simile), è probabile che il traffico in entrata da RED a RED venga eliminato dal RED ricevente. Su queste VM, le nuove regole sono rese persistenti con sudo netfilter-persistent save, tuttavia, questo comando sarà probabilmente qualcos'altro se si utilizza una distribuzione Linux diversa.

  3. Creare i DNAT.

    • Allo stesso modo, se mappiamo le regole DNAT per ogni VM in una tabella, dovrebbe avere l'aspetto seguente:

      DNAT Va a RED1 Va a RED2 Va a RED3
      Su redvm1 ND Output dst 10.0.2.2 DNAT to dst 10.123.123.67 Output dst 10.0.3.2 DNAT to dst 10.123.123.101
      Su redvm2 Output dst 10.0.1.2 DNAT to dst 10.123.123.32 ND Output dst 10.0.3.2 DNAT to dst 10.123.123.101
      Su redvm3 Output dst 10.0.1.2 DNAT to dst 10.123.123.32 Output dst 10.0.2.2 DNAT to dst 10.123.123.67 ND
    • Utilizzare i comandi iptables per ogni VM.

      • Su redvm1.

        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67
        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101
        sudo netfilter-persistent save
        
      • Su redvm2.

        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32
        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101
        sudo netfilter-persistent save
        
      • Su redvm3.

        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32
        sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67
        sudo netfilter-persistent save
        

      Nota: nelle istanze VM le nuove regole vengono rese persistenti con sudo netfilter-persistent save.

Task 4: Imposta MPI aperto

Open MPI utilizza SSH per comunicare tra i membri del cluster, quindi ci sono alcune cose che devono essere prese in considerazione prima di poter eseguire i job.

  1. Open MPI utilizzerà gli indirizzi IP privati di ciascuna VM, effettuerà le voci /etc/hosts per ogni istanza VM e il relativo indirizzo IP privato su ogni istanza VM MPI aperta.

    Ad esempio, l'uso della configurazione sopra la voce /etc/hosts in redvm1 conterrà le seguenti voci:

    127.0.0.1 localhost
    127.0.1.1 redvm1  redvm1
    10.0.2.2  redvm2
    10.0.3.2  redvm3
    

    In redvm2, il file /etc/hosts conterrà le seguenti voci:

    127.0.0.1 localhost
    127.0.1.1 redvm2  redvm2
    10.0.1.2  redvm1
    10.0.3.2  redvm3
    

    In redvm3, il file /etc/hosts conterrà le seguenti voci:

    127.0.0.1 localhost
    127.0.1.1 redvm3  redvm3
    10.0.1.2  redvm1
    10.0.2.2  redvm2
    
  2. Dobbiamo anche assicurarci che l'equivalenza SSH esista tra ogni VM per Open MPI da utilizzare.

    Nota: si presume che si tratti di nuove VM che non contengono chiavi SSH esistenti per l'utente Ubuntu. Se si utilizzano VM precedenti per le quali sono già state create chiavi SSH, sarà necessario adattare queste istruzioni, tali istruzioni potrebbero sovrascrivere le chiavi esistenti e bloccare le VM.

    1. In redvm1, creare una nuova coppia di chiavi pubblica o privata (se non sono già state create chiavi). Utilizzare il comando ssh-keygen simile a ssh-keygen -b 4096 -t rsa (accettare le impostazioni predefinite, non impostare una password per le nuove chiavi). Verranno generati ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub.

    2. Aggiungere la nuova chiave pubblica al file authorized_keys eseguendo cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys o copiandole manualmente tramite un editor di testo.

    3. Copiare sia id_rsa che id_rsa.pub nella directory ~/.ssh dell'utente ubuntu in redvm2 e redvm3. Assicurarsi di aggiungere id_rsa.pub a authorized_keys, eseguire cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys su redvm2 e redvm3.

    4. Una volta eseguita questa operazione, da ogni VM connettersi a tutte le altre VM, inclusa la VM stessa, per assicurarsi che la connettività funzioni e che SSH consideri attendibili gli altri host.

      • Connessione SSH su redvm1.

        ubuntu@redvm1:~$ ssh redvm1 date
        The authenticity of host 'redvm1 (127.0.1.1)' can't be established.
        ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
        This key is not known by any other names
        Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
        Warning: Permanently added 'redvm1' (ED25519) to the list of known hosts.
        Fri Apr  5 04:28:57 UTC 2024
        ubuntu@redvm1:~$
        ubuntu@redvm1:~$ ssh redvm2 date
        The authenticity of host 'redvm2 (10.0.2.2)' can't be established.
        ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
        This key is not known by any other names
        Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
        Warning: Permanently added 'redvm2' (ED25519) to the list of known hosts.
        Wed Jan 31 04:29:11 UTC 2024
        ubuntu@redvm1:~$
        ubuntu@redvm1:~$ ssh redvm3 date
        The authenticity of host 'redvm3 (10.0.3.2)' can't be established.
        ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
        This key is not known by any other names
        Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
        Warning: Permanently added 'redvm3' (ED25519) to the list of known hosts.
        Wed Jan 31 04:29:19 UTC 2024
        
    5. Ripetere i passi precedenti per la connessione di redvm2 a redvm2, redvm1 e redvm3 e redvm3 a redvm3, redvm1 e redvm2.

  3. Creare una posizione di memorizzazione comune per ogni membro del cluster.

    Nota: in teoria tutte le istanze VM che utilizzano Open MPI avranno una posizione di storage condivisa. Ciò potrebbe assumere la forma di NFS, GlusterFS, OCFS2 o di qualsiasi altra soluzione di file system condiviso. Ciò è particolarmente importante se è necessaria una directory di lavoro o un data set comune per il carico di lavoro.

    Per questo esempio non è necessario un file system condiviso, ma solo una posizione con un nome comune per i nostri file binari di test. Su ogni VM, creare la posizione del nome comune /mpitest.

    sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
    

    Se si utilizza un file system condiviso, il file system condiviso verrà eseguito il MOUNT in questa posizione su tutte le istanze VM.

  4. Creare un hostfile da utilizzare con mpirun. Per ulteriori informazioni, vedere Come utilizzare l'opzione -hostfile per mpirun.

    1. Creeremo due hostfiles per i test. In redvm1, utilizzando la posizione nome comune /mpitest creata in precedenza, creare un file /mpitest/mpihosts.txt con il seguente contenuto:

      redvm1
      redvm2
      redvm3
      
    2. Creare un file /mpitest/mpihosts_slots.txt con il seguente contenuto:

      redvm1 slots=1
      redvm2 slots=1
      redvm3 slots=1
      

Nota: in questa esercitazione i test verranno eseguiti solo da redvm1, pertanto non è necessario copiare questi file in redvm2 e redvm3. Se desideri eseguire job anche da altre VM, dovrai copiare questi file nelle altre istanze VM o utilizzare un file system condiviso appropriato come NFS.

Task 5: eseguire il test dell'istanza VM

  1. Un semplice test dei comandi distribuiti.

    • Un semplice test consiste nel richiamare un comando come hostname su tutti i membri del cluster. Ecco l'output previsto in esecuzione su tre nodi con file slots=1 (mpihosts_slots.txt). La direttiva slots indica a mpirun quanti processi possono essere allocati a questo nodo anziché a mpirun per determinare il numero di processi.

      Nota: se si utilizzano risorse limitate diverse dalla CPU (ad esempio, le GPU), potrebbe essere necessario specificare slots, in cui si desidera limitare i processi al numero dell'altra risorsa. In caso contrario, i processi potrebbero non riuscire a causa dell'impossibilità di allocare le altre risorse.

      ubuntu@redvm1:~$ cd /mpitest
      
      ubuntu@redvm1:/mpitest$ cat mpihosts_slots.txt
      redvm1 slots=1
      redvm2 slots=1
      redvm3 slots=1
      
      ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts_slots.txt hostname
      redvm1
      redvm2
      redvm3
      
    • Eseguire lo stesso test, ma senza specificare il file slots (mpihosts.txt), mpirun determinerà le CPU disponibili ed eseguirà il numero di comandi hostname delle CPU su ciascun nodo. Queste tre VM hanno 16 CPU, quindi dovremmo ottenere 3 risposte x 16 (16 di ogni nome host).

      ubuntu@redvm1:/mpitest$ cat mpihosts.txt
      redvm1
      redvm2
      redvm3
      
      ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt hostname | sort | uniq -c
          16 redvm1
          16 redvm2
          16 redvm3
      
  2. Creare un file binario di test MPI aperto.

    Per un test corretto con un programma che utilizza Open MPI, utilizziamo un esempio di calcolatore di numeri primi di John Burkardt. Questo dovrà essere scaricato e compilato su redvm1. Per ulteriori informazioni, vedere Prime Number Calculator di John Burkardt.

    ubuntu@redvm1:~$ cd /mpitest
    
    ubuntu@redvm1:/mpitest$ curl https://people.sc.fsu.edu/~jburkardt/c_src/prime_mpi/prime_mpi.c -o prime_mpi.c
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
    100  4699  100  4699    0     0   2990      0  0:00:01  0:00:01 --:--:--  2991
    
    ubuntu@redvm1:/mpitest$ mpicc prime_mpi.c -o prime_mpi
    
    ubuntu@redvm1:/mpitest$ ls -l prime_mpi
    -rwxrwxr-x 1 ubuntu ubuntu 16736 Apr  5 05:38 prime_mpi
    

    Poiché un file system condiviso non è impostato per il test, il file binario prime_mpi deve essere copiato in redvm2 e redvm3 nella stessa posizione in cui si trova in redvm1. eseguire il comando seguente.

    ubuntu@redvm1:/mpitest$ scp prime_mpi redvm2:/mpitest
    prime_mpi                                                                                                                     100%   16KB  27.4MB/s   00:00
    ubuntu@redvm1:/mpitest$ scp prime_mpi redvm3:/mpitest
    prime_mpi                                                                                                                     100%   16KB  28.3MB/s   00:00
    
  3. Per confrontare una baseline, eseguire un file binario Open MPI standalone. Eseguire prime_mpi senza MPI aperto per una baseline o un confronto.

    ubuntu@redvm1:/mpitest$ ./prime_mpi
    31 January 2024 06:08:17 AM
    
    PRIME_MPI
      C/MPI version
    
      An MPI example program to count the number of primes.
      The number of processes is 1
    
            N        Pi          Time
    
            1         0        0.000003
            2         1        0.000000
            4         2        0.000000
            8         4        0.000000
            16         6        0.000000
            32        11        0.000001
            64        18        0.000002
          128        31        0.000022
          256        54        0.000019
          512        97        0.000066
          1024       172        0.000231
          2048       309        0.000810
          4096       564        0.002846
          8192      1028        0.010093
        16384      1900        0.037234
        32768      3512        0.137078
        65536      6542        0.515210
        131072     12251        1.932970
        262144     23000        7.243419
    
    PRIME_MPI - Master process:
      Normal end of execution.
    
    31 January 2024 06:08:27 AM
    

    Nota: il numero di processi è 1 e il completamento richiede circa 10 secondi.

  4. Esecuzione distribuita mediante MPI aperto. Eseguire prime_mpi con MPI aperto su tutte le CPU disponibili nelle tre istanze VM utilizzando il file mpihosts.txt.

    ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt ./prime_mpi
    31 January 2024 06:09:02 AM
    
    PRIME_MPI
      C/MPI version
    
      An MPI example program to count the number of primes.
      The number of processes is 48
    
            N        Pi          Time
    
            1         0        0.020740
            2         1        0.000428
            4         2        0.000331
            8         4        0.000392
            16         6        0.000269
            32        11        0.000295
            64        18        0.000374
          128        31        0.000390
          256        54        0.000380
          512        97        0.000331
          1024       172        0.000351
          2048       309        0.000385
          4096       564        0.000740
          8192      1028        0.001931
        16384      1900        0.006316
        32768      3512        0.021577
        65536      6542        0.078834
        131072     12251        0.273368
        262144     23000        0.808825
    
    PRIME_MPI - Master process:
      Normal end of execution.
    
    31 January 2024 06:09:03 AM
    

    Vengono utilizzati 48 processi e l'esecuzione richiede circa 1 secondo.

    Esplorare Open MPI eseguendo lo stesso esempio, ma con il file mpihosts_slots.txt. Si dovrebbe vedere un miglioramento rispetto all'esecuzione di prime_mpi standalone, ma utilizzerà solo 1 processore su ogni nodo (totale di 3) piuttosto che il complemento completo su tutti i nodi. Modificando il numero di slot in ogni istanza di VM, puoi controllare la distribuzione del job.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.