Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 mpirun.openmpi 명령입니다.
프로그램:
이름
orterun, mpirun, mpiexec - Open MPI에서 직렬 및 병렬 작업을 실행합니다. 오슈런, 쉬멤런
- Open SHMEM에서 직렬 및 병렬 작업을 실행합니다.
참고 : 음피룬, mpiexec및 오르테룬 모두 서로의 동의어일 뿐만 아니라 오쉬룬,
쉬멤런 Open SHMEM이 설치된 경우. 이름 중 하나를 사용하면 동일한 결과가 생성됩니다.
행동.
개요
단일 프로세스 다중 데이터(SPMD) 모델:
음피룬 [옵션] [ ]
다중 명령어 다중 데이터(MIMD) 모델:
음피룬 [ 글로벌 옵션 ]
[ local_options1 ] [ ] :
[ local_options2 ] [ ] :
... :
[ local_optionsN ] [ ]
두 모델 모두에서 음피룬 절대 경로 이름을 통한 것은 다음과 같습니다.
지정 --접두사 옵션 디렉토리에 해당하는 값 음피룬
상주하며 마지막 하위 디렉토리를 뺀 값입니다. 예를 들어:
% /usr/local/bin/mpirun ...
에 해당하는
% mpirun --접두사 / usr / local
빨리 개요
단순히 MPI 응용 프로그램을 실행하는 방법을 찾고 있다면 아마도
다음 형식의 명령줄:
% mpirun [ -np X ] [ --호스트파일 ]
이것은 다음의 X 복사본을 실행합니다. 현재 런타임 환경에서(아래에서 실행 중인 경우)
지원되는 리소스 관리자, Open MPI's 음피룬 일반적으로 자동으로
예를 들어, 해당 자원 관리자 프로세스 시작자 rsh or SSH,
호스트 파일을 사용해야 하거나 기본적으로 모든 X 복사본을
localhost), CPU 슬롯별로 라운드 로빈 방식으로 스케줄링(기본값). 나머지 보기
자세한 내용은 이 페이지를 참조하세요.
mpirun은 v1.8 시리즈 시작부터 프로세스를 자동으로 바인딩합니다.
추가 지시문이 없을 경우 두 가지 바인딩 패턴이 사용됩니다.
바인더 에 핵심: 프로세스 수가 <= 2인 경우
바인더 에 소켓: 프로세스 수가 > 2인 경우
애플리케이션이 스레드를 사용하는 경우 스레드를 사용하지 않는지 확인하고 싶을 것입니다.
전혀 바인딩되지 않거나(--bind-to none을 지정하여)
적절한 바인딩 수준 또는 응용 프로그램당 처리 요소의 특정 수
프로세스.
옵션
음피룬 로컬 노드에서 호출된 디렉토리의 이름을 각 노드로 보냅니다.
원격 노드의 해당 디렉터리로 변경을 시도합니다. "현재 작업 중
자세한 내용은 아래의 디렉터리' 섹션을 참조하십시오.
프로그램 실행 가능. 인식되지 않는 첫 번째 인수로 식별됩니다.
mpirun에.
이러한 런타임 인수를 모든 새 프로세스에 전달합니다. 이들은 항상
에 대한 마지막 인수 음피룬. 앱 컨텍스트 파일을 사용하는 경우 될거야
무시되었습니다.
-h, --도움
이 명령에 대한 도움말 표시
-q, --조용한
응용 프로그램 실행 중에 orterun의 정보 메시지를 억제합니다.
-v, --말 수가 많은
장황하다
-V, --번역
버전 번호를 인쇄하십시오. 다른 인수가 제공되지 않으면 이로 인해
orterun 종료합니다.
-디스플레이 지도, --디스플레이 맵
시작하기 전에 각 프로세스의 매핑된 위치를 보여주는 테이블을 표시합니다.
-디스플레이-개발-맵, --디스플레이-개발-맵
이전 각 프로세스의 매핑된 위치를 보여주는 보다 자세한 표를 표시합니다.
시작합니다(일반적으로 개발자의 관심 대상).
-디스플레이 할당, --디스플레이 할당
감지된 리소스 할당을 표시합니다.
다음 옵션 중 하나를 사용하여 실행할 클러스터의 호스트(노드)를 지정합니다.
v1.8 릴리스 시작부터 mpirun은 각 호스트에서 데몬을 시작합니다.
맨 처음에 있는 할당(다음 옵션에 의해 수정됨)
애플리케이션 프로세스가 결국 매핑되는지 여부에 관계없이 실행
거기에서 실행하십시오. 이는 하드웨어 토폴로지 정보 수집을 허용하기 위해 수행됩니다.
따라서 알려진 토폴로지에 대해 프로세스를 매핑할 수 있습니다. 그러나 그것은
데몬이 매핑 후에만 시작된 이전 릴리스의 동작에서 변경
완료되었으므로 애플리케이션 프로세스가 실제로 수행되는 노드에서만 발생했습니다.
실행합니다.
-H, -주최자, --주인
프로세스를 호출할 호스트 목록입니다.
-호스트 파일, --호스트파일
사용할 호스트 파일을 제공하십시오.
-머신 파일, --머신 파일
동의어 -호스트 파일.
-cpu 세트, --cpu 세트
실행된 프로세스를 각 노드의 지정된 논리적 CPU로 제한합니다. 참고
바인딩 옵션은 지정된 엔벨로프 내에서 계속 적용됩니다. 예를 들어 다음을 수행할 수 있습니다.
지정된 cpu 세트 내에서 각 프로세스를 하나의 cpu에만 바인딩하도록 선택합니다.
다음 옵션은 시작할 프로세스 수를 지정합니다. 다음 중 어느 것도
옵션은 특정 바인딩 정책을 의미합니다. 예를 들어 각 소켓에 대해 N개의 프로세스를 요청합니다.
프로세스가 소켓에 바인딩된다는 의미는 아닙니다.
-c, -n, --엔, -np <#>
주어진 노드에서 이만큼의 프로그램 복사본을 실행합니다. 이 옵션은
지정된 파일은 응용 프로그램 컨텍스트가 아니라 실행 가능한 프로그램입니다. 아니오인 경우
실행할 사본 수에 대한 값이 제공됩니다(즉, "-np" 또는
해당 동의어는 명령줄에 제공됨) Open MPI는 자동으로 실행됩니다.
각 프로세스 슬롯에 있는 프로그램의 복사본("프로세스에 대한 설명은 아래 참조)
슬롯"). 그러나 이 기능은 SPMD 모델에서만 사용할 수 있으며 반환됩니다.
그렇지 않으면 오류(응용 프로그램 실행을 시작하지 않음)입니다.
—맵 바이 ppr:N:
각 노드에서 지정된 유형의 개체 수의 N배를 시작합니다.
-n퍼소켓, --npersocket <#퍼스켓>
각 노드에서 프로세서 소켓 수에 이 수의 프로세스를 실행합니다.
노드. 그만큼 -n퍼소켓 옵션도 켜집니다. -바인드-소켓 옵션을 선택합니다.
(--map-by ppr:n:socket에 찬성하여 더 이상 사용되지 않음)
-n퍼노드, --n퍼노드 <#pernode>
각 노드에서 이만큼의 프로세스를 시작합니다. (--map-by에 찬성하여 더 이상 사용되지 않음
ppr:n:노드)
-퍼노드, --퍼노드
각 노드에서 하나의 프로세스를 시작합니다. -n퍼노드 1. (더 이상 사용되지 않음
--map-by ppr:1:node 선호)
프로세스를 매핑하려면:
--맵 바이
지정된 개체에 매핑, 기본값은 소켓. 지원되는 옵션에는 슬롯,
hwthread, 코어, L1cache, L2cache, L3cache, 소켓, 누마, 보드, 노드, 순차,
거리, ppr. 모든 객체는 다음을 추가하여 수정자를 포함할 수 있습니다.
PE=n 조합(n 처리 요소를 각 프로세스에 바인드), SPAN(부하 균형)
전체 할당 프로세스), OVERSUBSCRIBE(노드에서 더 많은 프로세스 허용)
처리 요소보다) 및 NOOVERSUBSCRIBE. 여기에는 PPR이 포함됩니다.
패턴은 수식어와 구분하기 위해 다른 콜론으로 종료됩니다.
-바이코어, --바이코어
코어별 프로세스 매핑(--map-by core를 위해 더 이상 사용되지 않음)
-소켓별, --소켓별로
소켓별 프로세스 매핑(--map-by socket을 위해 더 이상 사용되지 않음)
-로컬 없음, --nolocal
orterun과 동일한 노드에서 시작된 응용 프로그램의 복사본을 실행하지 마십시오.
달리기. 이 옵션은 다음을 사용하여 localhost 나열을 재정의합니다. --주인 또는 기타
호스트 지정 메커니즘.
-nooversubscribe, --nooversubscribe
노드를 초과 구독하지 마십시오. 오류(프로세스를 시작하지 않고)
요청된 프로세스 수로 인해 초과 가입이 발생합니다. 이 옵션은 암시적으로
각 노드의 "slots" 값과 동일한 "max_slots"를 설정합니다.
-바이노드, --바이노드
시작 프로세스는 노드당 하나씩 라운드 로빈 방식으로 노드별로 순환됩니다. 이것
노드 간에 프로세스를 균등하게 분산하고 라운드에서 MPI_COMM_WORLD 순위를 할당합니다.
로빈, "노드별" 방식.
MPI_COMM_WORLD에서 프로세스의 순위를 정렬하려면:
--순위 기준
지정된 개체에 따라 라운드 로빈 방식으로 순위 지정, 기본값은 슬롯.
지원되는 옵션에는 슬롯, hwthread, 코어, L1cache, L2cache, L3cache, 소켓,
누마, 보드 및 노드.
프로세스 바인딩의 경우:
--바인딩
프로세스를 지정된 개체에 바인딩합니다. 기본값은 다음과 같습니다. core. 지원되는 옵션은 다음과 같습니다.
슬롯, hwthread, 코어, l1cache, l2cache, l3cache, 소켓, numa, 보드 및 없음.
-프로시저당 CPU, --프로시저당 CPU <#perproc>
각 프로세스를 지정된 CPU 수에 바인딩합니다. (--map-에 찬성하여 더 이상 사용되지 않음
~에 의해 :PE=n)
-cpus-per-랭크, --cpus-per-랭크 <#perrank>
별칭 -프로시저당 CPU. (--map-by에 찬성하여 더 이상 사용되지 않음 :PE=엔)
-코어에 바인드, --바인드 투 코어
프로세스를 코어에 바인드(--bind-to core를 위해 더 이상 사용되지 않음)
-바인드-소켓, --바인드-소켓
프로세스를 프로세서 소켓에 바인드(--bind-to socket을 위해 더 이상 사용되지 않음)
-바인딩 없음, --바인딩 없음
프로세스를 바인드하지 마십시오(--bind-to none을 위해 더 이상 사용되지 않음)
-보고서 바인딩, --보고서 바인딩
시작된 프로세스에 대한 모든 바인딩을 보고합니다.
-슬롯 목록, --슬롯 목록
MPI 프로세스 바인딩에 사용할 프로세서 ID 목록입니다. 지정된 바인딩
모든 MPI 프로세스에 적용됩니다. 구문에 대해서는 아래 설명을 참조하십시오.
순위 파일의 경우:
-rf, --순위 파일
rankfile 파일을 제공하십시오.
표준 I/O를 관리하려면:
-출력 파일 이름, --출력 파일 이름
모든 프로세스의 stdout, stderr 및 stddiag를 고유한 프로세스로 리디렉션
지정된 파일 이름의 버전. 파일 이름의 모든 디렉토리는
자동으로 생성됩니다. 각 출력 파일은 filename.id로 구성됩니다.
id는 MPI_COMM_WORLD에서 프로세스의 순위이며 왼쪽은 XNUMX으로 채워집니다.
목록의 올바른 순서.
-표준 입력, --stdin
stdin을 수신할 프로세스의 MPI_COMM_WORLD 순위입니다. 기본값은
stdin을 MPI_COMM_WORLD 랭크 0으로 전달하지만 이 옵션을 사용하여 전달
모든 프로세스에 대한 stdin. 지정하는 것도 허용됩니다. 없음, 없음을 나타냅니다.
프로세스는 stdin을 수신해야 합니다.
-태그 출력, --태그 출력
stdout, stderr 및 stddiag에 출력의 각 행에 태그를 지정합니다. [작업비드,
MCW_랭크] 프로세스 jobid 및 MPI_COMM_WORLD 순위를 나타내는
출력을 생성한 프로세스와 출력을 생성한 채널.
-타임스탬프 출력, --타임스탬프-출력
각 출력 라인을 stdout, stderr 및 stddiag로 타임스탬프합니다.
-xml, --xml
모든 출력을 stdout, stderr 및 stddiag에 xml 형식으로 제공합니다.
-xterm, --엑스텀
MPI_COMM_WORLD 순위로 식별된 프로세스의 출력을
별도의 xterm 창. 순위는 쉼표로 구분된 목록으로 지정됩니다.
-1은 모두를 나타내는 범위입니다. 각각에 대해 별도의 창이 생성됩니다.
지정된 프로세스. 참고 : xterm은 일반적으로 종료 시 창을 종료합니다.
그 안에서 실행되는 프로세스의 그러나 "!"를 추가하면 목록의 끝까지
지정된 순위의 경우 xterm이 계속 유지되도록 적절한 옵션이 제공됩니다.
창문이 열려 시간 내에 프로세스가 종료되므로 프로세스를 볼 수 있습니다.'
산출. 이후에 각 xterm 창을 수동으로 닫아야 합니다. 참고 : In
일부 환경에서 xterm은 실행 파일이 사용자의 경로에 있어야 합니다. 또는
절대 또는 상대 용어로 지정해야 합니다. 따라서 다음을 지정해야 할 수도 있습니다.
"foo" 대신 "./foo"로 로컬 실행 파일. xterm이
실행 가능하면 mpirun이 중단되지만 여전히 ctrl-c에 올바르게 응답합니다. 이 경우
실행 파일이 올바르게 지정되었는지 확인하고 시도하십시오.
또.
파일 및 런타임 환경 관리하기:
-통로, --길
요청된 실행 파일을 찾으려고 시도할 때 사용됩니다. 이것
로컬 PATH 설정을 사용하기 전에 사용됩니다.
--접두사
설정하는 데 사용할 접두사 디렉토리 PATH 그리고 LD_LIBRARY_PATH 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다.
Open MPI 또는 대상 프로세스를 호출하기 전에 원격 노드. "원격
실행' 섹션을 참조하십시오.
--프리로드-바이너리
원격을 시작하기 전에 지정된 실행 파일을 원격 시스템에 복사합니다.
프로세스. 실행 파일이 Open MPI 세션 디렉토리에 복사되고
작업 완료 시 삭제됩니다.
--preload-파일
쉼표로 구분된 파일 목록을 현재 작업 디렉토리에 미리 로드합니다.
해당 프로세스를 시작하기 전에 프로세스가 시작되는 원격 시스템.
--preload-파일-대상-디렉터리
현재 디렉토리가 아닌 경우 사전 로드 파일에 사용할 대상 디렉토리
작업 디렉토리. 기본적으로 다음에서 제공하는 절대 및 상대 경로는
--preload-files가 사용됩니다.
--tmpdir
mpirun 전용 세션 디렉토리 트리의 루트를 설정하십시오.
-wd
동의어 -wdir.
-wdir
디렉토리로 변경 사용자 프로그램이 실행되기 전에. "현재
상대 경로에 대한 참고 사항은 작업 디렉토리" 섹션을 참조하십시오. 참고 : 경우 -wdir option
명령줄과 응용 프로그램 컨텍스트 모두에 나타나는 경우 컨텍스트는
명령줄보다 우선합니다. 따라서 원하는 wdir의 경로가
백엔드 노드에서 다른 경우 절대 경로로 지정해야 합니다.
백엔드 노드에 적합합니다.
-x
실행하기 전에 지정된 환경 변수를 원격 노드로 내보냅니다.
프로그램. 당 하나의 환경 변수만 지정할 수 있습니다. -x 옵션. 기존의
환경 변수를 지정하거나 새 변수 이름을 다음과 같이 지정할 수 있습니다.
해당 값. 예를 들어:
% mpirun -x DISPLAY -x OFILE=/tmp/out ...
에 대한 파서 -x 옵션은 그다지 정교하지 않습니다. 그것은 심지어 이해하지 못한다
인용 값. 사용자는 환경에서 변수를 설정한 다음 사용하는 것이 좋습니다.
-x 내보내기(정의하지 않음)합니다.
MCA 매개변수 설정:
-gmca, --gmca
모든 컨텍스트에 적용 가능한 전역 MCA 매개변수를 전달합니다. 이다
매개변수 이름; 매개변수 값입니다.
-mca, --mca
다양한 MCA 모듈에 인수를 보냅니다. 아래의 "MCA" 섹션을 참조하십시오.
디버깅:
-디버그, -디버그
로 표시된 사용자 수준 디버거를 호출합니다. orte_base_user_debugger MCA
매개 변수입니다.
-디버거, --디버거
언제 검색할 디버거 시퀀스 -디버그 사용됩니다(즉, 의 동의어
orte_base_user_debugger MCA 매개변수).
-TV, --TV
TotalView 디버거에서 프로세스를 시작합니다. 더 이상 사용되지 않는 이전 버전과의 호환성
깃발. 동의어 -디버그.
다른 옵션도 있습니다.
--허용-루트로 실행
허용 음피룬 루트 사용자가 실행할 때 실행(음피룬 기본값은 중단
루트 사용자로 시작할 때).
-중단됨, --중단됨 <#>
표시할 중단된 프로세스의 최대 수를 설정합니다.
--앱
다른 모든 명령줄 옵션을 무시하고 appfile을 제공합니다.
-cf, --cartofile
지도 제작 파일을 제공하십시오.
--헤테로
32/64비트가 혼합된 여러 app_context가 제공되고 있음을 나타냅니다.
바이너리.
-세션 연결 끊기, --세션 연결 끊기
이 응용 프로그램에서 사용하는 OmpiRTE 데몬을 분리하지 마십시오. 이렇게 하면 오류 메시지가 허용됩니다.
데몬 및 기본 환경(예:
데몬 실행)을 출력합니다.
-ompi-서버, --ompi-서버 <우리 or 파일>
Open MPI 서버(또는 서버로 사용할 mpirun)의 URI를 지정하고,
해당 정보를 포함하는 파일의 이름(file:filename으로 지정) 또는
로 사용할 mpirun의 PID(pid:#로 지정)
서버. Open MPI 서버는 다중 애플리케이션 데이터를 지원하는 데 사용됩니다.
MPI-2 MPI_Publish_name 및 MPI_Lookup_name 기능을 통해 교환합니다.
-보고-pid, --보고-pid
시작하는 동안 mpirun의 PID를 인쇄합니다. 채널은 indi에 대해 '-'여야 합니다.
pid가 stdout으로 출력되도록 지정하고 '+'는 pid가 출력될 것임을 나타냅니다.
stderr로 출력되거나 pid가 기록될 파일 이름입니다.
-보고서-uri, --보고서-uri
시작하는 동안 mpirun의 URI를 인쇄합니다. 채널은 indi에 대해 '-'여야 합니다.
URI가 stdout으로 출력되도록 지정하고 '+'는 URI가 출력됨을 나타냅니다.
stderr 또는 URI가 기록될 파일 이름으로 출력됩니다.
-서버 대기, --서버 대기
ompi-server가 감지될 때까지 작업을 시작하기 전에 mpirun을 일시 중지합니다. 이것은 유용하다
ompi-server가 백그라운드에서 시작될 수 있는 스크립트에서 즉시 실행
에 의해 음피룬 연결하려는 명령입니다. Mpirun은 다음 중 하나가 발생할 때까지 일시 중지됩니다.
지정된 ompi-server에 접속했거나 server-wait-time이 초과되었습니다.
-서버 대기 시간, --서버 대기 시간
mpirun이 ompi-server에서 대기해야 하는 최대 시간(초)입니다.
시작. 기본값은 10초입니다.
다음 옵션은 개발자에게 유용합니다. 그들은 일반적으로 대부분의 사람들에게 유용하지 않습니다
ORTE 및/또는 MPI 사용자:
-d, --디버그-개발
OmpiRTE(Open MPI의 런타임 계층)의 디버깅을 활성화합니다. 이것은 아니다
일반적으로 대부분의 사용자에게 유용합니다.
--디버그 데몬
이 응용 프로그램에서 사용하는 모든 OmpiRTE 데몬의 디버깅을 활성화합니다.
--디버그-데몬-파일
이 응용 프로그램에서 사용하는 모든 OmpiRTE 데몬의 디버깅을 활성화하고 출력을 다음 위치에 저장합니다.
파일.
-실행 에이전트, --실행 에이전트
원격 노드에서 프로세스를 시작하는 데 사용할 실행 파일의 이름입니다.
기본값은 "정렬"입니다. 이 옵션은 새로운 데몬 개념을 테스트하거나
mpirun 자체에서 옵션을 보지 않고 데몬으로 옵션을 다시 전달합니다. 을 위한
예를 들어 orted -mca odls_base_verbose 5의 시작 에이전트를 지정하면
개발자는 mpirun 자체의 어수선함 없이 디버깅 출력을 orted에 요청할 수 있습니다.
--noprefix
자동 --prefix 동작 비활성화
다음과 같이 나열된 다른 옵션이 있을 수 있습니다. 음피룬 --도움.
환경 변수
MPIEXEC_TIMEOUT
최대 시간(초) 음피룬 (mpiexec) 실행됩니다. 이 후 많은
초 음피룬 시작된 작업을 중단하고 종료합니다.
기술
하나의 호출 음피룬 Open MPI에서 실행되는 MPI 응용 프로그램을 시작합니다. 만약
애플리케이션이 SPMD(Single Process Multiple Data)인 경우 애플리케이션을 다음에서 지정할 수 있습니다.
전에, 음피룬 명령 행.
응용 프로그램이 다중 명령어 다중 데이터(MIMD)인 경우
프로그램, 프로그램 집합 및 인수는 다음 두 가지 방법 중 하나로 지정할 수 있습니다. 확장
명령줄 인수 및 애플리케이션 컨텍스트.
애플리케이션 컨텍스트는 모든 인수를 포함하는 MIMD 프로그램 세트를 설명합니다.
별도의 파일. 이 파일은 본질적으로 여러 음피룬 명령줄, 덜
명령 이름 자체. 서로 다른 옵션을 지정하는 기능
프로그램의 인스턴스화는 응용 프로그램 컨텍스트를 사용하는 또 다른 이유입니다.
확장된 명령줄 인수는 애플리케이션 레이아웃에 대한 설명을 허용합니다.
콜론을 사용하는 명령줄(:) 프로그램 및 인수의 사양을 구분합니다.
일부 옵션은 지정된 모든 프로그램(예: --hostfile)에 전역적으로 설정되지만
다른 것들은 단일 프로그램에 고유합니다(예: -np).
지정 주인 노드
호스트 노드는 음피룬 가 포함된 명령줄 -주최자 옵션 또는
hostfile.hostfile.hostfile.hostfile.hostfile.hostfile.hostfile입니다.
예를 들어,
mpirun -H aa,aa,bb ./a.out
노드 aa에서 두 개의 프로세스를 시작하고 bb에서 하나를 시작합니다.
또는 hostfile을 고려하십시오.
% 고양이 myhostfile
aa 슬롯=2
bb 슬롯=2
CC 슬롯=2
여기에서 호스트 이름(aa, bb 및 cc)과 "슬롯" 수를 모두 나열합니다.
각. 슬롯은 노드에서 잠재적으로 실행할 수 있는 프로세스 수를 나타냅니다. 최선을 위해
성능, 슬롯 수는 노드의 코어 수 또는
프로세서 소켓의 수. 호스트 파일이 슬롯 정보를 제공하지 않는 경우
기본값 1이 가정됩니다. 리소스 관리자(예: SLURM, Torque,
등), Open MPI는 호스트 이름과 슬롯 수를 모두 가져옵니다.
자원 관리자.
mpirun -hostfile myhostfile ./a.out
세 노드 각각에서 두 프로세스를 시작합니다.
mpirun -호스트파일 myhostfile -호스트 aa ./a.out
노드 aa에서 두 프로세스를 시작합니다.
mpirun -호스트파일 myhostfile -호스트 dd ./a.out
실행할 호스트를 찾지 못하고 오류와 함께 중단됩니다. 즉, 지정된 호스트 dd
지정된 호스트 파일에 없습니다.
지정 번호 of 프로세스
방금 본 것처럼 실행할 프로세스 수는 hostfile을 사용하여 설정할 수 있습니다. 다른
메커니즘이 존재합니다.
시작된 프로세스의 수는 노드 수의 배수 또는
프로세서 소켓을 사용할 수 있습니다. 예를 들어,
mpirun -H aa,bb -npersocket 2 ./a.out
노드 aa에서 프로세스 0-3을 시작하고 노드 bb에서 프로세스 4-7을 시작합니다. 여기서 aa와 bb는 둘 다입니다.
듀얼 소켓 노드. 그만큼 -n퍼소켓 옵션도 켜집니다. -바인드-소켓 선택권,
이는 이후 섹션에서 논의됩니다.
mpirun -H aa,bb -npernode 2 ./a.out
노드 aa에서 프로세스 0-1을 시작하고 노드 bb에서 프로세스 2-3을 시작합니다.
mpirun -H aa,bb -npernode 1 ./a.out
호스트 노드당 하나의 프로세스를 시작합니다.
mpirun -H aa,bb -pernode ./a.out
와 동일합니다 -n퍼노드 1.
또 다른 대안은 다음을 사용하여 프로세스 수를 지정하는 것입니다. -np 옵션. 고려하다
이제 호스트 파일
% 고양이 myhostfile
aa 슬롯=4
bb 슬롯=4
CC 슬롯=4
지금,
mpirun -hostfile myhostfile -np 6 ./a.out
노드 aa에서 프로세스 0-3을 시작하고 노드 bb에서 프로세스 4-5를 시작합니다. 나머지
호스트 파일의 슬롯은 -np 옵션은 6개만
프로세스를 시작해야 합니다.
매핑 프로세스 에 노드 : 사용 정책
위의 예는 노드에 대한 프로세스 프로세스의 기본 매핑을 보여줍니다. 이것
매핑은 또한 다양한 방법으로 제어할 수 있습니다. 음피룬 매핑 정책을 설명하는 옵션입니다.
위와 동일한 호스트 파일을 고려하십시오. -np 6:
노드 AA 노드 BB 노드 CC
mpirun 0 1 2 3 4 5
mpirun --map-by 노드 0 3 1 4 2 5
mpirun -nolocal 0 1 2 3 4 5
The --맵 바이 노드 옵션은 사용 가능한 노드에서 프로세스의 부하를 분산합니다.
라운드 로빈 방식으로 각 프로세스에 번호를 매깁니다.
The -로컬 없음 옵션은 모든 프로세스가 로컬 호스트에 매핑되는 것을 방지합니다(이 경우
케이스 노드 aa). 하는 동안 음피룬 일반적으로 시스템 리소스를 거의 사용하지 않으며, -로컬 없음 될 수 있습니다
매우 큰 작업을 시작하는 데 유용합니다. 음피룬 실제로 눈에 띄게 사용해야 할 수도 있습니다.
메모리 양 및/또는 처리 시간.
마찬가지로 -np 슬롯보다 더 적은 수의 프로세스를 지정할 수 있으며 초과 구독할 수도 있습니다.
슬롯. 예를 들어 동일한 호스트 파일을 사용하는 경우:
mpirun -hostfile myhostfile -np 14 ./a.out
노드 aa에서 프로세스 0-3, bb에서 4-7, cc에서 8-11 프로세스를 시작합니다. 그런 다음
선택한 노드에 나머지 두 프로세스.
초과 구독에 대한 제한을 지정할 수도 있습니다. 예를 들어 동일한 호스트 파일을 사용하는 경우:
mpirun -hostfile myhostfile -np 14 -nooversubscribe ./a.out
이후 오류가 발생합니다. -nooversubscribe 초과 가입을 방지합니다.
초과 구독에 대한 제한은 호스트 파일 자체에서도 지정할 수 있습니다.
% 고양이 myhostfile
aa 슬롯=4 max_slots=4
bb 최대_슬롯=4
CC 슬롯=4
The 최대 슬롯 필드는 이러한 제한을 지정합니다. 그럴 때, 슬롯 값은 기본값으로
한계. 지금:
mpirun -hostfile myhostfile -np 14 ./a.out
이전과 같이 처음 12개의 프로세스가 시작되지만 나머지 XNUMX개는
프로세스는 노드 cc로 강제 실행됩니다. 다른 두 노드는
이 작업에 의한 초과 구독에 대한 hostfile.
사용법 - --nooversubscribe Open MPI는 현재 얻을 수 없기 때문에 옵션이 도움이 될 수 있습니다.
자원 관리자의 "max_slots" 값.
물론, -np 와 함께 사용할 수도 있습니다. -H or -주최자 선택권. 예를 들면
mpirun -H aa,bb -np 8 ./a.out
8개의 프로세스를 시작합니다. 두 개의 호스트만 지정되므로 처음 두 개 이후에
프로세스가 하나는 aa에, 다른 하나는 bb에 매핑되고 나머지 프로세스는 초과 구독합니다.
지정된 호스트.
다음은 MIMD 예입니다.
mpirun -H aa -np 1 호스트 이름: -H bb,cc -np 2 가동 시간
실행중인 프로세스 0을 시작합니다 호스트 이름 노드 aa 및 각각 실행 중인 프로세스 1 및 2에서
가동 시간 노드 bb 및 cc에서 각각.
매핑, 순위, 그리고 제본: Oh 나의!
Open MPI는 프로세스 위치 및 순위 지정을 위해 XNUMX단계 절차를 사용합니다.
매핑 각 프로세스에 기본 위치 지정
순위 각 프로세스에 MPI_COMM_WORLD 순위 값을 할당합니다.
제본 각 프로세스가 특정 프로세서에서 실행되도록 제한
The 매핑 단계는 매퍼를 기반으로 각 프로세스에 기본 위치를 할당하는 데 사용됩니다.
취업 중. 슬롯, 노드 및 순차적으로 매핑하면
노드 수준으로 처리합니다. 반대로 개체별 매핑은 매퍼가 할당할 수 있도록 합니다.
각 노드의 실제 개체에 대한 프로세스입니다.
참고 : 프로세스에 할당된 위치는 바인딩될 위치와 무관합니다.
할당은 바인딩 알고리즘에 대한 입력으로만 사용됩니다.
프로세스 프로세스를 노드에 매핑하는 것은 일반 정책뿐만 아니라 정의할 수 있습니다.
뿐만 아니라 필요에 따라 간단한 코드로 설명할 수 없는 임의의 매핑을 사용하기도 합니다.
정책. 호스트 파일을 한 줄씩 읽는 "순차 매퍼"를 사용할 수 있습니다.
hostfile이 지정하는 순서에 관계없이 프로세스를 노드에 할당합니다. 사용 -mca 지도
서열 옵션. 예를 들어 이전과 동일한 호스트 파일을 사용하는 경우:
mpirun -hostfile myhostfile -mca rmap seq ./a.out
각각의 노드 aa, bb 및 cc에서 하나씩 세 개의 프로세스를 시작합니다. 슬롯
개수는 중요하지 않습니다. 노드에 나열된 모든 노드에서 한 줄에 하나의 프로세스가 시작됩니다.
줄입니다.
임의 매핑을 지정하는 또 다른 방법은 순위 파일을 사용하는 것입니다.
프로세스 바인딩도 제어합니다. 순위 파일은 아래에서 설명합니다.
두 번째 단계는 순위 작업의 MPI_COMM_WORLD 내의 프로세스.
Open MPI는 이것을 매핑 절차에서 분리하여 더 많은 유연성을 허용합니다.
MPI 프로세스의 상대적 배치. 이는 다음을 고려하여 가장 잘 설명됩니다.
—map-by ppr:2:socket 옵션을 사용한 두 가지 경우:
노드 AA 노드 BB
랭크별 코어 0 1 ! 2 3 4 5 ! 6 7
랭크별 소켓 0 2 ! 1 3 4 6 ! 5 7
랭크별 소켓: 스팬 0 4 ! 1 5 2 6 ! 3 7
코어별 및 슬롯별 순위는 동일한 결과를 제공합니다.
MPI_COMM_WORLD는 각 노드에서 순위를 매깁니다. 소켓별 순위는 내에서 라운드 로빈 순위를 수행합니다.
모든 프로세스가 MCW 순위에 할당될 때까지 각 노드는 다음 단계로 진행합니다.
다음 노드. 추가 기간 순위 지시문에 대한 수정자는 순위 알고리즘을 유발합니다.
전체 할당을 단일 엔터티로 취급하기 위해 - 따라서 MCW 순위가 할당됩니다.
처음으로 돌아 가기 전에 모든 소켓에 걸쳐.
The 제본 단계는 실제로 각 프로세스를 지정된 프로세서 집합에 바인딩합니다. 이것은 할 수 있습니다
운영 체제가 최적이 아닌 프로세스를 배치하는 경우 성능을 향상시킵니다. 을 위한
예를 들어, 일부 멀티 코어 프로세서 소켓을 초과 구독하여 다른 소켓을 남길 수 있습니다.
게으른; 이로 인해 프로세스가 공통 리소스에 대해 불필요하게 경합하게 될 수 있습니다. 아니면, 그것
프로세스를 너무 광범위하게 분산시킬 수 있습니다. 애플리케이션 성능이 좋지 않은 경우 차선책일 수 있습니다.
프로세스 간 통신 비용에 민감합니다. 바인딩은 또한 운영을 유지할 수 있습니다
해당 프로세스가 얼마나 최적인지에 관계없이 시스템이 프로세스를 과도하게 마이그레이션하는 것을 방지합니다.
시작하도록 배치되었습니다.
바인딩에 사용되는 프로세서는 토폴로지 그룹화 측면에서 식별할 수 있습니다.
- 예를 들어, l3cache에 대한 바인딩은 각 프로세스를 다음 범위 내의 모든 프로세서에 바인딩합니다.
할당된 위치 내의 단일 L3 캐시. 따라서 프로세스에 의해 할당된 경우
매퍼를 특정 소켓에 연결한 다음 —바인드 l3캐시 지시문은 프로세스를
해당 소켓 내에서 단일 L3 캐시를 공유하는 프로세서에 바인딩됩니다.
로드 균형을 맞추기 위해 바인딩 지시문은 바인딩할 때 라운드 로빈 방법을 사용합니다.
매퍼에서 사용되는 것보다 낮은 수준. 예를 들어 작업이 매핑되는 경우를 고려하십시오.
소켓 수준으로 연결한 다음 코어에 바인딩합니다. 각 소켓에는 여러 개의 코어가 있으므로
여러 프로세스가 지정된 소켓에 매핑되면 바인딩 알고리즘이 각 프로세스를 할당합니다.
소켓에 있는 프로세스를 라운드 로빈 방식으로 고유한 코어에 연결합니다.
또는 l2cache에 의해 매핑된 다음 소켓에 바인딩된 프로세스는 단순히 바인딩됩니다.
그들이 위치한 소켓의 모든 프로세서에. 이러한 방식으로 사용자는 다음을 수행할 수 있습니다.
상대 MCW 순위 위치 및 바인딩을 세부적으로 제어합니다.
마지막으로, --보고서 바인딩 바인딩을 보고하는 데 사용할 수 있습니다.
예를 들어 각각 XNUMX개의 코어로 구성된 XNUMX개의 프로세서 소켓이 있는 노드를 고려하십시오. 우리
운영 음피룬 과 -np 4 --보고서 바인딩 다음 추가 옵션:
% mpirun ... --map-by 코어 --bind-to 코어
[...] ... 자식 [...,0]을 cpus 0001에 바인딩
[...] ... 자식 [...,1]을 cpus 0002에 바인딩
[...] ... 자식 [...,2]을 cpus 0004에 바인딩
[...] ... 자식 [...,3]을 cpus 0008에 바인딩
% mpirun ... --map-by 소켓 --bind-to 소켓
[...] ... 자식 [...,0]을 소켓 0 cpus 000f에 바인딩
[...] ... 자식 [...,1]을 소켓 1 cpus 00f0에 바인딩
[...] ... 자식 [...,2]을 소켓 0 cpus 000f에 바인딩
[...] ... 자식 [...,3]을 소켓 1 cpus 00f0에 바인딩
% mpirun ... --map-by 코어:PE=2 --bind-to 코어
[...] ... 자식 [...,0]을 cpus 0003에 바인딩
[...] ... 자식 [...,1]을 cpus 000c에 바인딩
[...] ... 자식 [...,2]을 cpus 0030에 바인딩
[...] ... 자식 [...,3]을 cpus 00c0에 바인딩
% mpirun ... --bind-to 없음
여기 --보고서 바인딩 각 프로세스의 바인딩을 마스크로 보여줍니다. 첫 번째 경우,
프로세스는 마스크 0001, 0002, 0004 및
0008. 두 번째 경우 프로세스는 표시된 대로 연속 소켓의 모든 코어에 바인딩됩니다.
마스크 000f 및 00f0에 의해. 프로세스는 라운드에서 프로세서 소켓을 순환합니다.
필요한 만큼 여러 번 로빈 패션. 세 번째 경우 마스크는 2
코어는 프로세스별로 바인딩되었습니다. 네 번째 경우에는 바인딩이 해제되고
바인딩이 보고됩니다.
프로세스 바인딩에 대한 Open MPI의 지원은 기본 운영 체제에 따라 다릅니다.
따라서 일부 시스템에서는 특정 프로세스 바인딩 옵션을 사용하지 못할 수 있습니다.
프로세스 바인딩은 MCA 매개변수로 설정할 수도 있습니다. 그들의 사용은 덜 편리합니다
의 음피룬 옵션. 반면에 MCA 매개변수는
음피룬 명령줄, 하지만 대안으로 시스템 또는 사용자 mca-params.conf 파일 또는
아래 MCA 섹션에 설명된 대로 환경 변수. 몇 가지 예는 다음과 같습니다.
mpirun 옵션 MCA 매개변수 키 값
--map-by core rmaps_base_mapping_policy 코어
--map-by 소켓 rmaps_base_mapping_policy 소켓
--랭크별 코어 rmaps_base_ranking_policy 코어
--bind-to core hwloc_base_binding_policy 코어
--바인드-소켓 hwloc_base_binding_policy 소켓
--bind-to none hwloc_base_binding_policy 없음
순위 파일
순위 파일은 개별 프로세스 방법에 대한 자세한 정보를 지정하는 텍스트 파일입니다.
노드에 매핑되어야 하고 바인딩되어야 하는 프로세서가 있어야 합니다. 각 줄은
rankfile은 한 프로세스의 위치를 지정합니다(MPI 작업의 경우 프로세스의 "rank"는
MPI_COMM_WORLD의 순위로). rankfile에 있는 각 줄의 일반적인 형식은 다음과 같습니다.
계급 = 슬롯=
예 :
$ 고양이 myrankfile
랭크 0=aa 슬롯=1:0-2
순위 1=bb 슬롯=0:0,1
랭크 2=cc 슬롯=1-2
$ mpirun -H aa,bb,cc,dd -rf myrankfile ./a.out
의미
순위 0은 논리적 소켓 1, 코어 0-2에 바인딩된 노드 aa에서 실행됩니다.
순위 1은 논리적 소켓 0, 코어 0 및 1에 바인딩된 노드 bb에서 실행됩니다.
순위 2는 논리 코어 1과 2에 바인딩된 노드 cc에서 실행됩니다.
Rankfile은 대안으로 다음을 지정하는 데 사용할 수 있습니다. 물리적 프로세서 위치. 이 경우,
구문이 다소 다릅니다. 소켓이 더 이상 인식되지 않고 슬롯 번호가
대부분의 OS는 고유한 물리적 PU를 할당하지 않으므로 주어진 물리적 PU의 번호여야 합니다.
노드의 각 코어에 대한 식별자입니다. 따라서 적절한 물리적 순위 파일은 다음과 같습니다.
다음 :
$ 고양이 myphysicalrankfile
순위 0=aa 슬롯=1
순위 1=bb 슬롯=8
랭크 2=cc 슬롯=6
즉
순위 0은 물리적 PU 1을 포함하는 코어에 바인딩된 노드 aa에서 실행됩니다.
랭크 1은 노드 bb에서 실행되며 물리적 PU 8을 포함하는 코어에 바인딩됩니다.
랭크 2는 물리적 PU 6을 포함하는 코어에 바인딩된 노드 cc에서 실행됩니다.
순위 파일은 다음과 같이 처리됩니다. 논리 기본적으로 MCA 매개변수
rmaps_rank_file_physical은 순위 파일이
라고 고려된다 물리적.
위에 나열된 호스트 이름은 "절대"입니다. 즉, 실제 확인 가능한 호스트 이름은
지정된. 그러나 호스트 이름은 "상대적"으로 지정할 수도 있습니다.
외부적으로 지정된 호스트 이름 목록과 관련하여 지정됨(예: mpirun의
--host 인수, 호스트 파일 또는 작업 스케줄러).
"상대적" 사양은 "+n" 형식입니다. ", 여기서 X는 다음을 지정하는 정수입니다.
사용 가능한 모든 호스트 이름 집합의 X번째 호스트 이름이며 0부터 색인이 생성됩니다. 예를 들면 다음과 같습니다.
$ 고양이 myrankfile
rank 0=+n0 slot=1:0-2
순위 1=+n1 슬롯=0:0,1
순위 2=+n2 슬롯=1-2
$ mpirun -H aa,bb,cc,dd -rf myrankfile ./a.out
Open MPI v1.7부터 모든 소켓/코어 슬롯 위치는 다음과 같이 지정됩니다. 논리
색인(사용된 Open MPI v1.6 시리즈 물리적 색인). 다음과 같은 도구를 사용할 수 있습니다.
HWLOC의 "lstopo"는 소켓 및 코어의 논리적 인덱스를 찾습니다.
어플리케이션 문맥 or 실행 파일 프로그램?
두 가지 형태를 구별하기 위해, 음피룬 명령 줄에서 찾습니다 --앱 옵션을 선택합니다.
지정하면 명령줄에 이름이 지정된 파일이
애플리케이션 컨텍스트. 지정하지 않으면 파일이 실행 파일로 간주됩니다.
프로그램)
위치 파일
파일에 대한 상대 또는 절대 경로가 지정되지 않은 경우 Open MPI는 먼저
에서 지정한 디렉토리를 검색하여 파일 --길 옵션. 없는 경우 --길
옵션이 설정되었거나 파일을 찾을 수 없는 경우 --길 Open MPI가 검색합니다.
소스 노드에 정의된 사용자의 PATH 환경 변수.
상대 디렉토리가 지정된 경우 초기 작업 디렉토리에 상대적이어야 합니다.
사용된 특정 스타터에 의해 결정됩니다. 예를 들어 rsh 또는 ssh 스타터를 사용할 때,
초기 디렉토리는 기본적으로 $HOME입니다. 다른 스타터는 초기 디렉토리를 다음으로 설정할 수 있습니다.
의 호출에서 현재 작업 디렉토리 음피룬.
Current 일 명부 담당
The -wdir mpirun 옵션(및 해당 동의어, -wd) 사용자가 임의로 변경할 수 있습니다.
프로그램이 호출되기 전 디렉토리. 응용 프로그램 컨텍스트 파일에서도 사용할 수 있습니다.
특정 노드 및/또는 특정 응용 프로그램에 대한 작업 디렉토리를 지정합니다.
경우 -wdir 옵션은 컨텍스트 파일과 명령줄 모두에 나타납니다.
파일 디렉토리는 명령줄 값을 재정의합니다.
경우 -wdir 옵션이 지정되면 Open MPI는 지정된 값으로 변경을 시도합니다.
모든 원격 노드의 디렉토리. 이것이 실패하면, 음피룬 중단됩니다.
경우 -wdir 옵션은 지원 지정된 경우 Open MPI는 디렉터리 이름을 보냅니다. 음피룬
각 원격 노드에 호출되었습니다. 원격 노드는 해당 노드로 변경하려고 시도합니다.
예배 규칙서. 사용할 수 없는 경우(예: 해당 노드에 디렉터리가 없는 경우)
Open MPI는 스타터가 결정한 기본 디렉토리를 사용합니다.
모든 디렉토리 변경은 사용자 프로그램이 호출되기 전에 발생합니다. 때까지 기다리지 않는다
MPI_INIT 호출됩니다.
Standard I / O
Open MPI는 다음을 제외한 모든 프로세스에서 UNIX 표준 입력을 /dev/null로 지정합니다.
MPI_COMM_WORLD 순위 0 프로세스. MPI_COMM_WORLD 순위 0 프로세스는 표준 입력을 상속합니다.
에 음피룬. 참고 : 호출한 노드 음피룬 노드와 같을 필요는 없습니다.
MPI_COMM_WORLD 순위 0 프로세스가 상주합니다. Open MPI는 다음의 리디렉션을 처리합니다. 음피룬's
순위 0 프로세스에 대한 표준 입력.
Open MPI는 원격 노드의 UNIX 표준 출력 및 오류를 호출한 노드로 보냅니다.
음피룬 의 표준 출력/오류에 인쇄합니다. 음피룬. 로컬 프로세스는
표준 출력/오류 음피룬 직접 전송하십시오.
따라서 다음을 사용하여 Open MPI 애플리케이션에 대한 표준 I/O를 리디렉션할 수 있습니다.
일반적인 쉘 리디렉션 절차 음피룬.
% mpirun -np 2 my_app < my_input > my_output
이 예에서 만 MPI_COMM_WORLD 순위 0 프로세스는 스트림을 수신합니다.
에 내_입력 표준 입력에. 다른 모든 노드의 stdin은 /dev/null에 연결됩니다.
그러나 모든 노드의 stdout은 내_출력 파일.
신호 번식
orterun이 SIGTERM 및 SIGINT를 수신하면 다음과 같이 전체 작업을 종료하려고 시도합니다.
작업의 모든 프로세스를 SIGTERM으로 보내고 몇 초 동안 기다린 다음
작업의 모든 프로세스를 SIGKILL로 보냅니다.
orterun에서 수신한 SIGUSR1 및 SIGUSR2 신호는 다음 프로세스의 모든 프로세스로 전파됩니다.
일.
mpirun에 의해 실행되는 프로그램으로 SIGSTOP 및 SIGCONT 전달을 켤 수 있습니다.
MCA 매개변수 orte_forward_job_control을 1로 설정합니다. mpirun에 대한 SIGTSTOP 신호는
그런 다음 mpirun에 의해 시작된 모든 프로그램에 SIGSTOP 신호가 전송되도록 하고
마찬가지로 mpirun에 대한 SIGCONT 신호로 인해 SIGCONT가 전송됩니다.
다른 신호는 현재 orterun에 의해 전파되지 않습니다.
방법 종료 / 신호 처리
MPI 응용 프로그램 실행 중에 프로세스가 비정상적으로 종료되는 경우(종료
호출하기 전에 MPI_FINALIZE, 또는 신호의 결과로 사망), 음피룬 인쇄됩니다
오류 메시지를 표시하고 나머지 MPI 응용 프로그램을 종료합니다.
사용자 신호 처리기는 아마도 MPI 상태를 정리하려고 시도하는 것을 피해야 합니다(Open MPI는
현재 async-signal-safe가 아닙니다. 보다 MPI_Init_thread(3) 자세한 내용은
MPI_THREAD_MULTIPLE 및 스레드 안전성). 예를 들어 세그먼테이션 폴트가 발생하면
MPI_SEND (아마도 잘못된 버퍼가 전달되었기 때문에) 사용자 신호 처리기가
호출됨(이 사용자 핸들러가 호출을 시도하는 경우) MPI_FINALIZE, 나쁜 일이 일어날 수 있습니다
오류가 발생했을 때 Open MPI가 이미 "in" MPI였기 때문입니다. 부터 음피룬 알아차릴 것이다
신호로 인해 프로세스가 종료된 경우에는 프로세스에 필요하지 않을 수도 있고 가장 안전할 수도 있습니다.
MPI가 아닌 상태만 정리할 수 있습니다.
방법 환경
MPI 애플리케이션의 프로세스는 Open RTE 데몬에서 환경을 상속합니다.
실행 중인 노드입니다. 환경은 일반적으로
사용자의 쉘. 원격 노드에서 정확한 환경은 부팅 MCA 모듈에 의해 결정됩니다.
사용 된. NS rsh 예를 들어 시작 모듈은 다음 중 하나를 사용합니다. rsh/SSH Open RTE를 시작하려면
원격 노드의 데몬이며 일반적으로 사용자의 셸 설정 파일 중 하나 이상을 실행합니다.
Open RTE 데몬을 시작하기 전에. 동적으로 연결된 응용 프로그램을 실행할 때
필요하다 LD_LIBRARY_PATH 환경 변수를 설정할 수 있도록 주의를 기울여야 합니다.
Open MPI를 부팅할 때 올바르게 설정되었는지 확인합니다.
자세한 내용은 "원격 실행" 섹션을 참조하십시오.
원격수행 실행
Open MPI는 PATH 원격에서 실행 파일을 찾도록 환경 변수 설정
노드(이는 일반적으로 rsh-또는 SSH기반 환경 --
배치/예약 환경은 일반적으로 현재 환경을
원격 작업이므로 현재 환경에 PATH 및 / 또는 LD_LIBRARY_PATH 제대로 설정,
원격 노드도 올바르게 설정됩니다). Open MPI가 공유로 컴파일된 경우
라이브러리 지원이 필요할 수도 있습니다. LD_LIBRARY_PATH 환경 변수
원격 노드에도 설정(특히 사용자를 실행하는 데 필요한 공유 라이브러리 찾기)
MPI 애플리케이션).
그러나 설정을 위해 셸 시작 파일을 편집하는 것이 항상 바람직하거나 가능한 것은 아닙니다. PATH
및 / 또는 LD_LIBRARY_PATH. 그만큼 --접두사 일부 간단한 구성을 위한 옵션이 제공됩니다.
이것이 불가능한 곳.
The --접두사 옵션은 단일 인수를 취합니다: 원격 노드의 기본 디렉토리
오픈 MPI가 설치되어 있습니다. Open MPI는 이 디렉토리를 사용하여 원격 PATH 그리고
LD_LIBRARY_PATH Open MPI 또는 사용자 응용 프로그램을 실행하기 전에. 이것은 실행을 허용합니다
미리 구성하지 않고 MPI 작업 열기 PATH 그리고 LD_LIBRARY_PATH 리모컨에서
노드.
Open MPI는 현재 노드의 "bindir"(Open MPI가 있는 디렉토리)의 기본 이름을 추가합니다.
실행 파일이 설치됨)을 접두사에 추가하고 이를 사용하여 PATH 원격 노드에서.
유사하게 Open MPI는 현재 노드의 "libdir"의 기본 이름을 추가합니다.
Open MPI의 라이브러리가 설치됨)을 접두사에 추가하고 이를 사용하여 LD_LIBRARY_PATH
원격 노드에서. 예를 들어:
로컬 bindir: /local/node/directory/bin
로컬 libdir: /local/node/directory/lib64
다음 명령줄을 사용하는 경우:
% mpirun --prefix /원격/노드/디렉토리
Open MPI는 "/remote/node/directory/bin"을 PATH 그리고
시도하기 전에 원격 노드의 D_LIBRARY_PATH에 "/remote/node/directory/lib64"
무엇이든 실행합니다.
The --접두사 원격 노드의 설치 경로가 다음과 같은 경우 옵션이 충분하지 않습니다.
로컬 노드와 다른 경우(예: "/ lib"이(가) 로컬 노드에서 사용되지만 "/lib64"입니다.
원격 노드에서 사용됨) 또는 설치 경로가
공통 접두사 아래의 하위 디렉토리.
실행 음피룬 절대 경로 이름을 통해 지정하는 것과 같습니다. --접두사
에 대한 절대 경로 이름의 마지막 하위 디렉토리 없이 음피룬. 예를 들면 :
% /usr/local/bin/mpirun ...
에 해당하는
% mpirun --접두사 / usr / local
수출 환경 변수
OMPI_* 형식으로 명명된 모든 환경 변수는 자동으로 내보내집니다.
로컬 및 원격 노드의 새 프로세스에. 환경 매개변수는 다음과 같을 수도 있습니다.
MCA 매개변수를 사용하여 새 프로세스로 설정/전달 mca_base_env_list. 그만큼 -x
~에 대한 옵션 음피룬 더 이상 사용되지 않지만 MCA 매개변수의 구문은 이전 구문을 따릅니다.
예. 구문은 -x 옵션 및 MCA 매개변수는 새로운 정의를 허용합니다.
변수, 이러한 옵션에 대한 구문 분석기는 현재 그다지 정교하지 않습니다.
인용된 값도 이해하지 못합니다. 사용자는
환경을 내보내고 옵션을 사용하여 내보냅니다. 그들을 정의하지 않습니다.
환경 MCA 파라미터
The -mca 스위치를 사용하면 다양한 MCA(Modular Component)에 매개변수를 전달할 수 있습니다.
아키텍처) 모듈. MCA 모듈은 MPI 프로그램에 직접적인 영향을 미칩니다.
런타임에 설정할 조정 가능한 매개변수(예: 사용할 BTL 통신 장치 드라이버
사용, 해당 BTL에 전달할 매개변수 등).
The -mca switch는 두 개의 인수를 취합니다. 그리고 . 그만큼 일반적으로 논쟁
값을 수신할 MCA 모듈을 지정합니다. 예를 들어, "btl"이 사용됩니다.
MPI 메시지 전송에 사용할 BTL을 선택합니다. 그만큼 주장은
전달되는 값입니다. 예를 들어:
mpirun -mca btl tcp,self -np 1 foo
"tcp" 및 "self" BTL을 사용하고 "foo"의 단일 복사본을 실행하도록 Open MPI에 지시합니다.
할당된 노드
mpirun -mca btl self -np 1 foo
"self" BTL을 사용하고 할당된 "foo"의 단일 복사본을 실행하도록 Open MPI에 지시합니다.
마디.
The -mca 스위치를 여러 번 사용하여 다른 및 / 또는
인수. 같은 경우 두 번 이상 지정되면 s가 연결되어 있습니다.
쉼표(",")로 구분합니다.
참고로 -mca switch는 단순히 환경 변수를 설정하기 위한 바로 가기입니다. NS
이전에 해당 환경 변수를 설정하여 동일한 효과를 얻을 수 있습니다.
달리는 음피룬. Open MPI가 설정하는 환경 변수의 형식은 다음과 같습니다.
OMPI_MCA_ =
그래서 -mca switch는 이전에 설정된 환경 변수를 재정의합니다. 그만큼 -mca
설정은 유사하게 $OPAL_PREFIX/etc/openmpi-mca-에 설정된 MCA 매개변수를 재정의합니다.
params.conf 또는 $HOME/.openmpi/mca-params.conf 파일.
알 수 없는 인수는 여전히 환경 변수로 설정되어 있습니다.
음피룬) 정확성을 위해. 불법 또는 부정확 인수는 그럴 수도 있고 아닐 수도 있습니다.
보고됨 - 특정 MCA 모듈에 따라 다릅니다.
MCA 아키텍처에서 사용 가능한 구성 요소 유형을 찾거나 사용 가능한
특정 구성요소에 대한 매개변수는 ompi_info 명령. 참조 ompi_info(1) 사람
명령에 대한 자세한 정보는 페이지를 참조하십시오.
달리는 as 뿌리
Open MPI 팀은 실행하지 말 것을 강력히 권고합니다. 음피룬 루트 사용자로. MPI
응용 프로그램은 일반(루트가 아닌) 사용자로 실행해야 합니다.
이 조언을 반영하여 mpirun은 기본적으로 루트로 실행되는 것을 거부합니다. 이것을 재정의하려면
기본적으로 다음을 추가할 수 있습니다. --허용-루트로 실행 옵션을 음피룬 명령 행.
출구 지위
무엇에 대한 표준 정의가 없습니다. 음피룬 종료 상태로 반환되어야 합니다. 후에
상당한 논의 끝에 다음과 같은 할당 방법을 결정했습니다. 음피룬 출구
상태(참고: 다음 설명에서 "기본" 작업은 초기 애플리케이션입니다.
mpirun에 의해 시작됨 - 해당 작업에 의해 생성된 모든 작업은 "보조"로 지정됩니다.
작업):
· 기본 작업의 모든 프로세스가 종료 상태 0으로 정상적으로 종료되면 0을 반환합니다.
· 기본 작업에 있는 하나 이상의 프로세스가 XNUMX이 아닌 종료로 정상적으로 종료되는 경우
상태, MPI_COMM_WORLD 순위가 가장 낮은 프로세스의 종료 상태를
XNUMX이 아닌 상태
· 기본 작업의 모든 프로세스가 종료 상태 0으로 정상적으로 종료되고 하나 또는
보조 작업의 더 많은 프로세스는 일반적으로 XNUMX이 아닌 종료 상태로 종료됩니다. 우리는 (a)
가장 낮은 순위에서 가장 낮은 MPI_COMM_WORLD 순위를 가진 프로세스의 종료 상태를 반환합니다.
jobid는 XNUMX이 아닌 상태를 가지며 (b) 종료 상태를 요약하는 메시지를 출력합니다.
기본 및 모든 보조 작업.
· cmd 라인 옵션 --report-child-jobs-separately가 설정되어 있으면
기본 작업의 종료 상태입니다. 보조 작업에서 XNUMX이 아닌 종료 상태는
요약 인쇄문으로만 보고됩니다.
기본적으로 OMPI는 MPI 프로세스가 XNUMX이 아닌 종료로 종료되었음을 기록하고 기록합니다.
상태. 이것은 일반적으로 "비정상적인 종료"로 간주되지 않습니다. 즉, OMPI는
하나 이상의 프로세스가 XNUMX이 아닌 상태를 반환하면 MPI 작업을 중단합니다. 대신 기본
동작은 단순히 XNUMX이 아닌 상태로 종료되는 프로세스의 수를 보고합니다.
작업 완료.
그러나 경우에 따라 작업을 중단하는 것이 바람직할 수 있습니다.
XNUMX이 아닌 상태로 종료됩니다. 예를 들어 비 MPI 작업은 다음에서 잘못된 결과를 감지할 수 있습니다.
계산을 중단하고 싶지만 코어 파일을 생성하고 싶지는 않습니다. 또는 MPI 작업
MPI_Finalize에 대한 호출을 지나 계속될 수 있지만 모든 프로세스가 중단되어야 함을 나타냅니다.
MPI 후 결과로 인해.
이러한 상황이 자주 발생할 것으로 예상되지 않습니다. 다만, 관심에
더 넓은 커뮤니티에 서비스를 제공하기 위해 OMPI는 이제 사용자가
XNUMX이 아닌 상태로 프로세스가 종료되면 작업이 중단됩니다. MCA 매개변수 설정
"orte_abort_on_non_zero_status"를 1로 설정하면 OMPI가 모든 프로세스를 중단합니다.
방법
XNUMX이 아닌 상태로 종료합니다.
이러한 방식으로 발생한 종료는 콘솔에 "비정상"으로 보고됩니다.
종료", 종료 상태와 함께 종료할 첫 번째 프로세스가 식별됩니다.
사용 예
또한 위 섹션 전체에서 예제를 참조하십시오.
mpirun -np 4 -mca btl ib,tcp,self prog1
MPI 전송을 위해 "ib", "tcp" 및 "self" BTL을 사용하여 prog4의 복사본 1개를 실행합니다.
메시지.
mpirun -np 4 -mca btl tcp,sm,self
--mca btl_tcp_if_include eth0 prog1
MPI 전송을 위해 "tcp", "sm" 및 "self" BTL을 사용하여 prog4의 복사본 1개를 실행합니다.
TCP는 eth0 인터페이스만 사용하여 통신합니다. 다른 BTL은
유사한 if_include MCA 매개변수가 있습니다.
RETURN VALUE
음피룬 모든 프로세스가 다음에 의해 시작된 경우 0을 반환합니다. 음피룬 MPI_FINALIZE를 호출한 후 종료합니다. ㅏ
mpirun에서 내부 오류가 발생한 경우 XNUMX이 아닌 값이 반환되거나 하나 이상이 반환됩니다.
MPI_FINALIZE를 호출하기 전에 프로세스가 종료되었습니다. mpirun에서 내부 오류가 발생한 경우,
해당 오류 코드가 반환됩니다. 하나 이상의 프로세스가 종료되는 경우
MPI_FINALIZE를 호출하기 전에 프로세스의 MPI_COMM_WORLD 순위의 반환 값
그 음피룬 MPI_FINALIZE를 호출하기 전에 사망한 첫 번째 알림이 반환됩니다. 참고
일반적으로 이것은 죽은 첫 번째 프로세스이지만 그렇게 보장되지는 않습니다.
onworks.net 서비스를 사용하여 온라인에서 mpirun.openmpi 사용