주:

Oracle Roving Edge Infrastructure에서 Open MPI 사용

소개

Oracle Roving Edge Infrastructure는 네트워크 에지 또는 외부 연결이 제한적이거나 없는 위치에 배포하기에 적합한 견고한 클라우드 컴퓨팅 및 스토리지 플랫폼입니다. 규모가 크고 복잡하고 까다로운 워크로드가 네트워크 에지로 이동함에 따라 에지 인프라에 문제가 발생할 수 있습니다.

Open MPI는 HPC(고성능 컴퓨팅)에서 병렬 응용 프로그램을 개발하는 데 사용되는 MPI(메시지 전달 인터페이스) 표준의 구현입니다. 개방형 MPI를 사용하면 비교적 작은 인프라에 고성능 컴퓨팅 및 고도의 병렬 워크로드를 배포한 다음 더 큰 집계 리소스 세트로 작동할 수 있습니다. 이 접근 방식은 CPU 및 GPU와 같은 기타 컴퓨트 리소스에 워크로드를 배포하는 데 사용할 수 있습니다. 이를 통해 예측 모델링 또는 기타 AI/ML(인공 지능/머신 러닝) 작업과 같은 네트워크 에지에서 더 크고 계산 집약적인 작업을 배포할 수 있습니다.

Open MPI를 사용하면 Oracle Roving Edge Infrastructure 노드 전반에 리소스를 활용하여 병렬 워크로드를 배포할 수 있습니다. Netfilter는 Oracle Roving Edge Infrastructure 노드에서 호스팅되는 클러스터링 소프트웨어를 사용하여 VM 인스턴스에 필요한 DNAT(대상 네트워크 주소 변환) 및 SNAT(소스 네트워크 주소 변환)를 제공합니다. 이 자습서에서는 주요 숫자 계산기를 실행하는 Oracle Roving Edge Infrastructure에서 Netfilter를 사용하여 Open MPI를 구현하여 병렬 리소스를 사용할 때 향상된 성능을 보여줍니다.

배경 정보

Open MPI는 단일 Oracle Roving Edge Infrastructure 노드 내 또는 여러 Oracle Roving Edge Infrastructure 노드 간에 여러 VM(가상 머신) 인스턴스에서 실행할 수 있습니다. 단일 Oracle Roving Edge Infrastructure 노드에서 실행되는 것은 원활하며 어떠한 문제도 발생하지 않습니다. 여러 Oracle Roving Edge Infrastructure 노드에서 실행할 때는 Oracle Roving Edge Infrastructure VM 인스턴스의 네트워킹과 Open MPI가 가능한 문제를 방지하기 위해 트래픽의 경로를 지정하는 방법을 이해하는 것이 중요합니다.

Oracle Roving Edge Infrastructure 가상 머신 인스턴스의 네트워킹

Oracle Roving Edge Infrastructure에서 실행되는 가상 머신 인스턴스는 전용 IP 주소를 사용하여 동일한 노드에 호스트된 동일한 서브넷에 있는 다른 VM 인스턴스와 통신합니다. Oracle Roving Edge Infrastructure에 호스트된 VM 인스턴스에 공용 IP 주소를 지정하면 인스턴스가 호스트된 Oracle Roving Edge Infrastructure 노드 외부에서 실행되는 다른 서브넷 및 리소스와 통신할 수 있습니다.

주: 공용 IP 주소는 공용 IP 주소 풀에서 VM 인스턴스 VNIC에 지정됩니다. 주소는 공용 IP라고 하지만 실제로는 Oracle Roving Edge Infrastructure 노드가 RJ-45 포트를 통해 연결된 동일한 로컬 네트워크의 IP 주소입니다. 이러한 주소는 인터넷에서 연결할 수 있는 IPv4 주소일 수도 있고, 로컬 네트워크의 개인 서브넷에 있는 주소일 수도 있습니다. 이러한 주소는 VM 인스턴스가 호스트되는 노드 외부의 리소스에 연결할 수 있으므로 외부 IP 주소라고도 합니다.

Oracle Roving Edge Infrastructure 노드 내에서 실행되는 VM 인스턴스가 노드 외부의 리소스에 액세스하려고 시도할 때 트래픽이 노드 내에서 라우팅되는 외부 IP 주소를 통과하여 외부 네트워크 연결로 이동하는 경우를 이해하는 것이 중요합니다.

Oracle Roving Edge Infrastructure 노드의 예제 VM 인스턴스가 다음 이미지에 표시됩니다. 지정된 공용 및 전용 IP 주소를 확인하십시오.

Oracle Roving Edge Infrastructure 노드의 예제 VM 인스턴스

여러 Oracle Roving Edge Infrastructure 노드에서 개방형 MPI 실행에 대한 당면 과제

VM 인스턴스 전용 IP 주소를 사용하면 여러 Oracle Roving Edge Infrastructure 노드에 구현될 때 Open MPI와 같은 클러스터링 소프트웨어에 문제가 있습니다. 각 노드는 개인-공용 IP 주소 매핑 및 다른 노드에서 호스트된 VM 인스턴스에 대한 매핑 변환을 인식하지 못합니다. 매핑은 공유되지 않으므로 개인 IP 주소를 사용하는 패킷의 경로가 잘못 지정되거나 손실됩니다.

Open MPI를 사용하여 이 문제가 어떻게 나타날 수 있는지에 대한 예:

VM 인스턴스에서 실행 중인 열린 MPI는 다른 VM 인스턴스 멤버에 연결하는 데 사용할 최상의 네트워크 경로를 결정하려고 시도합니다. 소프트웨어는 로컬 인터페이스 및 IP 주소를 검사하여 클러스터의 다른 노드에 등록할 수 있습니다.

Oracle Roving Edge Infrastructure 전반에서 개방형 MPI 구현

Oracle Roving Edge Infrastructure 내부 네트워크의 공유되지 않는 특성을 해결하기 위해 Linux VM 인스턴스의 Netfilter 소프트웨어는 다른 Oracle Roving Edge Infrastructure 노드에서 호스팅되는 VM의 소스 및 대상 네트워크 패킷을 재작성하는 데 사용됩니다.

디자인 고려사항

이 자습서에서는 세 개의 Oracle Roving Edge Infrastructure Roving Edge Devices(RED) 노드가 Open MPI 클러스터를 만드는 데 사용됩니다. 모든 RED는 공유 외부 네트워크에 연결됩니다. 각 노드는 VM 인스턴스에 할당하기 위해 고유의 외부 IP 풀로 구성되었습니다.

VCN 및 서브넷 CIDR 테이블

RED 이름 VCN CIDR 서브넷 CIDR
RED1 10.0.0.0/16 10.0.1.0/24
RED2 10.0.0.0/16 10.0.2.0/24
RED3 10.0.0.0/16 10.0.3.0/24

이 예는 다음 이미지, 서로 다른 두 RED의 두 네트워킹 구성에 나와 있습니다.

"RED1"의 VCN 및 서브넷 예

"RED2"의 VCN 및 서브넷 예

대상

Oracle Roving Edge Infrastructure 관리자, 개발자 및 사용자.

목표

필요 조건

작업 1: 가상 머신 인스턴스 만들기

각 RED의 각 서브넷에 VM 인스턴스를 생성합니다.

IP 주소 지정 예:

RED 이름 VM 이름 가상 머신 O/S VM 전용 IP VM 공용 IP
RED1 redvm1 Ubuntu 22.04 10.0.1.2/24 10.123.123.32
RED2 redvm2 Ubuntu 22.04 10.0.2.2/24 10.123.123.67
RED3 redvm3 Ubuntu 22.04 10.0.3.2/24 10.123.123.101

주: 이 작업의 VM 인스턴스는 OCI Ubuntu 22.04 LTS를 사용하여 OCI(Oracle Cloud Infrastructure)에서 익스포트된 이미지를 사용하여 생성됩니다. 적합한 Open MPI 패키지가 포함된 모든 Linux 배포판(예: Oracle Linux 8 또는 9, Fedora 등)을 사용할 수 있습니다.

"RED3"의 VM 목록 예

  1. 각 RED에서 컴퓨트, 인스턴스로 이동하고 인스턴스 생성을 누릅니다.

  2. 컴퓨트 인스턴스 생성에서 이름을 입력하고 임포트된 사용자정의 이미지, 구성, 네트워킹 구성, SSH 키를 선택한 다음 생성을 누릅니다.

    각 RED에 컴퓨팅 이미지 생성

작업 2: 각 VM 인스턴스에 열린 MPI 패키지 설치

모든 VM 인스턴스가 생성되면 프로비전 중 제공된 키를 사용하여 SSH를 통해 각 VM 인스턴스에 로그인합니다. 다음 명령은 Ubuntu 22.04에 적합합니다. 다른 Linux 배포판을 사용하는 경우 이러한 지침을 적용하거나 추가 패키지 저장소를 포함해야 할 수 있습니다.

  1. 다음 명령을 실행하여 시스템을 업데이트하고 재부트합니다.

    sudo apt update && sudo apt upgrade -y
    

    완료하는 데 약간의 시간이 걸릴 수 있습니다. 완료되면 인스턴스를 재부팅합니다.

    sudo shutdown -r now
    
  2. 인스턴스에 로그인하여 Open MPI 패키지를 설치합니다.

    참고:

    • 이것은 꽤 많은 의존성을 극복 할 것입니다.

    • libopenmpi-dev 패키지는 나중에 테스트할 샘플 프로그램을 컴파일하는 경우에만 필요합니다. Open MPI 기능을 프로그램으로 컴파일하지 않으려는 경우 이 패키지가 필요하지 않습니다.

    sudo apt install openmpi-bin libopenmpi-dev -y
    

작업 3: DNAT(대상 네트워크 주소 변환) 및 SNAT(소스 네트워크 주소 변환) 설정

  1. 실행된 각 VM 인스턴스의 세부정보를 보고 무작위로 지정된 전용 공용 IP 주소를 기록해 둡니다. 컴퓨트, 인스턴스로 이동하고 인스턴스 이름을 눌러 세부정보를 봅니다.

    "RED3"의 VM 예

  2. SNAT를 만듭니다.

    • 테이블의 각 VM에 대한 SNAT 규칙을 매핑하는 경우 다음과 같이 표시되어야 합니다.

      SNAT RED1에서 제공 RED2에서 제공 RED3에서 제공
      redvm1에서 N/A 입력 src 10.123.123.67 SNAT to src 10.0.2.2 입력 src 10.123.123.101 SNAT to src 10.0.3.2
      redvm2에서 입력 src 10.123.123.32 SNAT to src 10.0.1.2 N/A 입력 src 10.123.123.101 SNAT to src 10.0.3.2
      redvm3에서 입력 src 10.123.123.32 SNAT to src 10.0.1.2 입력 src 10.123.123.67 SNAT to src 10.0.2.2 N/A
    • 각 VM에 대해 iptables 명령을 사용합니다.

      • 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
        
      • 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
        
      • 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
        

      주: RED가 공용 IP에 사용하는 서브넷에서 액세스를 허용하는 첫번째 규칙(sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT)이 추가됩니다. 이 규칙 또는 이와 유사한 규칙이 없으면 RED에서 RED로의 인바운드 트래픽이 수신 RED에 의해 삭제될 수 있습니다. 이러한 VM에서 새 규칙은 sudo netfilter-persistent save로 유지되지만, 이 명령은 다른 Linux 배포판을 사용하는 경우 다른 명령일 수 있습니다.

  3. DNAT를 만듭니다.

    • 마찬가지로 테이블의 각 VM에 대해 DNAT 규칙을 매핑하는 경우 다음과 같이 표시되어야 합니다.

      DNAT RED1로 이동 RED2로 이동 RED3로 이동
      redvm1에서 N/A 출력 dst 10.0.2.2 DNAT to dst 10.123.123.67 출력 dst 10.0.3.2 DNAT to dst 10.123.123.101
      redvm2에서 출력 dst 10.0.1.2 DNAT to dst 10.123.123.32 N/A 출력 dst 10.0.3.2 DNAT to dst 10.123.123.101
      redvm3에서 출력 dst 10.0.1.2 DNAT to dst 10.123.123.32 출력 dst 10.0.2.2 DNAT to dst 10.123.123.67 N/A
    • 각 VM에 대해 iptables 명령을 사용합니다.

      • 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
        
      • 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
        
      • 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
        

      주: VM 인스턴스에서 새 규칙은 sudo netfilter-persistent save로 유지됩니다.

작업 4: 미결 MPI 설정

Open MPI는 SSH를 사용하여 클러스터 멤버 간에 통신하므로 작업을 실행하기 전에 처리해야 할 몇 가지 사항이 있습니다.

  1. Open MPI는 각 VM의 전용 IP 주소를 사용하고, 각 VM 인스턴스에 대해 /etc/hosts 항목을 만들고, 모든 Open MPI VM 인스턴스에 대해 해당 전용 IP 주소를 사용합니다.

    예를 들어, redvm1에서 /etc/hosts 항목 위의 구성을 사용하면 다음 항목이 포함됩니다.

    127.0.0.1 localhost
    127.0.1.1 redvm1  redvm1
    10.0.2.2  redvm2
    10.0.3.2  redvm3
    

    redvm2에서 /etc/hosts에는 다음 항목이 포함됩니다.

    127.0.0.1 localhost
    127.0.1.1 redvm2  redvm2
    10.0.1.2  redvm1
    10.0.3.2  redvm3
    

    redvm3에서 /etc/hosts에는 다음 항목이 포함됩니다.

    127.0.0.1 localhost
    127.0.1.1 redvm3  redvm3
    10.0.1.2  redvm1
    10.0.2.2  redvm2
    
  2. 또한 Open MPI용 각 VM 간에 SSH 등가가 존재하는지 확인해야 합니다.

    주: 여기서는 이러한 VM이 Ubuntu 사용자에 대한 기존 SSH 키를 포함하지 않는 새 VM이라고 가정합니다. SSH 키가 이미 생성된 이전 VM을 사용하는 경우 이 지침을 적용해야 합니다. 이 지침은 기존 키를 겹쳐쓰고 VM에서 사용자를 잠글 수 있습니다.

    1. redvm1에서 새 공용 또는 전용 키 쌍을 생성합니다(키가 아직 생성되지 않은 경우). ssh-keygen -b 4096 -t rsa와 유사한 ssh-keygen 명령을 사용합니다(기본값을 수락하고 새 키에 대한 비밀번호를 설정하지 않음). 그러면 ~/.ssh/id_rsa~/.ssh/id_rsa.pub가 생성됩니다.

    2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys를 실행하거나 텍스트 편집기를 통해 수동으로 복사하여 authorized_keys 파일에 새 공개 키를 추가합니다.

    3. id_rsaid_rsa.pub를 모두 redvm2redvm3에 있는 ubuntu 사용자의 ~/.ssh 디렉토리에 복사합니다. id_rsa.pubauthorized_keys에 추가하고 redvm2redvm3에서 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys를 실행합니다.

    4. 이 작업이 완료되면 각 VM에서 VM 자체를 비롯한 다른 모든 VM에 연결하여 연결이 작동하고 SSH가 다른 호스트를 신뢰하는지 확인합니다.

      • redvm1의 SSH 접속입니다.

        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. Repeat above steps for redvm2 connecting to redvm2, redvm1 and redvm3 and redvm3 connecting to redvm3, redvm1 and redvm2.

  3. 각 클러스터 멤버에 대한 공통 저장소 위치를 만듭니다.

    주: Open MPI를 사용하는 모든 VM 인스턴스에는 공유 스토리지 위치가 있습니다. NFS, GlusterFS, OCFS2 또는 기타 여러 공유 파일 시스템 솔루션의 형식을 사용할 수 있습니다. 이는 작업 로드에 공통 작업 디렉토리나 데이터 집합이 필요한 경우에 특히 중요합니다.

    이 예에서는 공유 파일 시스템이 필요하지 않으며 테스트 이진에 대한 공통 이름을 가진 위치만 필요합니다. 각 VM에서 공통 이름 위치 /mpitest를 만듭니다.

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

    공유 파일 시스템을 사용하는 경우 공유 파일 시스템은 모든 VM 인스턴스에서 이 위치에 마운트됩니다.

  4. mpirun와 함께 사용할 hostfile를 생성합니다. 자세한 내용은 hostfile 옵션을 사용하여 mpirun하는 방법을 참조하십시오.

    1. 테스트를 위해 두 개의 hostfiles를 생성합니다. redvm1에서 위에 생성된 공통 이름 위치 /mpitest을 사용하여 다음 콘텐츠가 포함된 /mpitest/mpihosts.txt 파일을 생성합니다.

      redvm1
      redvm2
      redvm3
      
    2. 다음 내용으로 /mpitest/mpihosts_slots.txt 파일을 생성합니다.

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

참고: 이 자습서에서는 테스트가 redvm1에서만 실행되므로 이 파일을 redvm2redvm3에 복사할 필요가 없습니다. 다른 VM의 작업도 실행하려면 이러한 파일을 다른 VM 인스턴스에 복사하거나 NFS와 같은 적절한 공유 파일 시스템을 사용해야 합니다.

작업 5: VM 인스턴스 테스트

  1. 분산 명령에 대한 간단한 테스트입니다.

    • 간단한 테스트는 모든 클러스터 멤버에서 hostname와 같은 명령을 호출하는 것입니다. 다음은 slots=1(mpihosts_slots.txt) 파일이 있는 3개 노드에서 실행 중인 예상 출력입니다. slots 지시어는 mpirun가 프로세스 수를 결정하는 대신 이 노드에 할당할 수 있는 프로세스 수를 mpirun에 알립니다.

      주: CPU 이외의 제한된 리소스(예: GPU)를 사용하는 경우 프로세스를 다른 리소스 수로 제한하려는 경우 slots를 지정해야 할 수 있습니다. 그렇지 않으면 다른 리소스를 할당할 수 없어 프로세스가 실패할 수 있습니다.

      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
      
    • slots(mpihosts.txt) 파일을 지정하지 않고 동일한 테스트를 실행하면 mpirun에서 사용 가능한 CPU를 확인하고 각 노드에서 CPU 수 hostname 명령을 실행합니다. 이 3개의 VM에는 16개의 CPU가 있으므로 3 x 16개의 응답(호스트 이름당 16개)을 얻어야 합니다.

      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. Open MPI 테스트 바이너리를 만듭니다.

    Open MPI를 사용하는 프로그램에 대한 적절한 테스트를 위해 John Burkardt의 주요 숫자 계산기 예제를 사용합니다. redvm1에서 다운로드하여 컴파일해야 합니다. 자세한 내용은 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
    

    공유 파일 시스템이 테스트용으로 설정되지 않았으므로 prime_mpi 이진을 redvm1에 있는 위치와 동일한 위치에 있는 redvm2redvm3로 복사해야 합니다. 다음 명령을 실행합니다.

    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. 비교할 기준 요소의 경우 Open MPI binary를 독립형으로 실행합니다. 기준 또는 비교를 위해 미결 MPI 없이 prime_mpi를 실행합니다.

    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
    

    주: 프로세스 수는 1이며 완료하는 데 약 10초가 걸립니다.

  4. Open MPI를 사용하는 분산 실행입니다. mpihosts.txt 파일을 사용하여 3개의 VM 인스턴스에서 사용 가능한 모든 CPU에서 Open MPI로 prime_mpi를 실행합니다.

    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
    

    48개의 프로세스가 사용되며 실행하는 데 약 1초가 걸립니다.

    mpihosts_slots.txt 파일을 사용하여 동일한 예제를 실행하여 Open MPI를 탐색합니다. prime_mpi 독립형 실행에 비해 성능이 향상되어야 하지만 모든 노드에서 전체 보완이 아닌 각 노드에서 프로세서 1개(총 3개)만 사용됩니다. 각 VM 인스턴스의 슬롯 수를 변경하여 작업 분배를 제어할 수 있습니다.

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.