English프랑스어스페인어

온웍스 파비콘

mpy - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 mpy 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 명령 mpy입니다.

프로그램:

이름


mpy - 메시지 전달 요릭

개요


mpirun -np mp_size 엠피 [ -제이 pfile1.i [ -제이 pfile2.i [ ... ]]] [ -NS 파일1.i [ -NS 파일2.i [
... ]]]
mpirun -np mp_size 엠피 -일괄 파일.i

기술


요릭 Basic 또는 Lisp와 같은 인터프리터 언어이지만 훨씬 빠릅니다. 보다 요릭 (1) ~
그것에 대해 자세히 알아보세요.
엠피 의 병렬 버전입니다. 요릭 메시지 전달 인터페이스(MPI)를 기반으로 합니다. NS
병렬 작업을 시작하기 위한 정확한 구문은 MPI 환경에 따라 다릅니다. 그것은 수 있습니다
호출하기 전에 특수 데몬을 시작하는 데 필요 Mirun 또는 이에 상응하는 명령.

설명
mpy 패키지는 yorick을 MPI 병렬 프로그래밍 라이브러리에 인터페이스합니다. MPI는
메시지 전달 인터페이스; 아이디어는 yorick의 여러 인스턴스를 연결하는 것입니다.
메시지를 통해 서로 의사 소통합니다. Mpy는 단순하고 고도로 병렬을 수행할 수 있습니다.
순수 해석된 프로그램으로 작업을 시작하거나 임의로 복잡한 컴파일을 시작하고 조정할 수 있습니다.
컴파일된 MPI API를 자유롭게 사용할 수 있는 패키지. 해석된 API는 의도되지 않았습니다.
MPI 래퍼가 되기 위해; 대신 최소한으로 제거됩니다.

이것은 2년에 출시된 mpy 버전 2010입니다. mpy 버전 1과 호환되지 않습니다.
(1990년대 중반에 출시됨) 버전 1에는 수많은 설계 결함이 있었기 때문에
경쟁 조건이 없는 프로그램을 작성하기 어렵고 수백만으로 확장할 수 없음
프로세서의. 그러나 다음을 수행하여 버전 1에서 대부분의 버전 2 mpy 프로그램을 실행할 수 있습니다.
mp_include,"mpy1.i"는 mpy1 병렬 작업을 정의하는 파일을 mp_include하기 전에(즉,
mp_task에 대한 호출을 포함하는 모든 파일 앞에

용법 노트
MPI 환경은 실제로 표준에 의해 지정되지 않습니다. 기존 환경은
매우 조잡하고 비대화형 배치 작업을 강력히 선호합니다. 프로세스의 수는
MPI가 시작되기 전에 수정됨; 각 프로세스에는 0에서 XNUMX보다 작은 숫자의 순위가 있습니다.
프로세스의 수. 순위를 주소로 사용하여 메시지를 보내고 프로세스
메시지를 수신하면 어떤 순위가 메시지를 보냈는지 조사할 수 있으며 물론
그 메시지를 수신합니다.

메시지 전달 프로그램을 작성할 때의 주요 문제는 이벤트 또는 메시지를 처리하는 것입니다.
예정에 없던 순서로 도착. MPI는 다음에 의해 전송되는 일련의 메시지만 보장합니다.
순위 A에서 순위 B는 보낸 순서대로 도착합니다. 순서에 대한 보장은 없습니다
세 번째 순위 C에서 B에게 보낸 메시지와 관련된 해당 메시지의 도착
특히, A가 B에게 메시지를 보낸 다음 A가 C에게 메시지를 보낸다고 가정합니다.
C)가 있는 여러 메시지로 인해 C는 B에게 메시지를 보냅니다. C의 메시지
A가 보낸 메시지보다 먼저 B에 도착할 수 있습니다. 이를 허용하지 않는 MPI 프로그램
가능성에는 "경합 조건"이라는 버그가 있습니다. 레이스 조건은 매우 미묘할 수 있습니다.
특히 프로세스 수가 많을 때.

기본 mpy 해석 인터페이스는 두 개의 변수로 구성됩니다.
mp_size = 프로세스 수
mp_rank = 이 프로세스의 순위와 네 가지 기능:
mp_send, to, msg; // "to" 순위에 메시지를 보냅니다.
메시지 = mp_recv(에서); // "from" 순위에서 메시지 수신
순위 = mp_probe(블록); // 보류 중인 메시지의 발신자 쿼리
mp_exec, 문자열; // 모든 순위에서 문자열을 구문 분석하고 실행합니다.

병렬 작업을 시작하려면 순위 0에서 mp_exec를 호출합니다. 이렇게 메인 프로그램이 생성되면
완료되면 순위 0 이외의 모든 순위는 유휴 루프로 돌아가 다음 대기를 기다립니다.
mp_exec. 순위 0은 stdin에서 다음 입력 라인을 선택합니다(즉, 해당 위치에서 입력을 기다립니다.
대화식 세션에서 프롬프트) 또는 더 이상 입력이 없으면 모든 프로세스를 종료합니다.
일괄 세션에서 사용할 수 있습니다.

mpy 패키지는 yorick이 #include 파서 지시문을 처리하는 방법을 수정하고 include
기능이 필요합니다. 즉, 병렬 작업이 실행 중인 경우(즉, 함수가 시작된
mp_exec에 의해), 이들은 모두 집합적 작업이 됩니다. 즉, 순위 0은 전체를 읽습니다.
파일 내용을 만들고 내용을 MPI 메시지로 다른 프로세스에 보냅니다(예:
파일 내용의 mp_exec). 순위 0 이외의 모든 프로세스는 다음 동안에만 실행됩니다.
병렬 작업; 순위 0만 실행 중일 때 병렬 작업 외부(및 다른 모든 순위
다음 mp_exec를 기다리고 있음), #include 지시문 및 include 및 require
함수는 순위 0에만 영향을 미치는 일반적인 직렬 작업으로 돌아갑니다.

mpy가 시작되면 병렬 모드이므로 yorick이 시작할 때 포함하는 모든 파일이
시작(Y_SITE/i0의 파일)은 집합 작업으로 포함됩니다. 이것 없이
기능에서 모든 yorick 프로세스는 시작 포함 파일을 열고 읽으려고 시도합니다.
mpy가 시작되기 전에 파일 시스템에 과부하가 걸립니다. 이러한 내용을 전달
파일을 MPI 메시지로 보내는 것은 모든 파일에 대해 충분한 대역폭이 있는지 확인하는 유일한 방법입니다.
단일 파일의 내용을 읽는 프로세스.

시작 시 포함된 마지막 파일은 -batch 옵션에 지정된 파일이거나
custom.i 파일. 안전하지 않을 수 있는 custom.i의 코드 문제를 방지하려면
병렬 실행에서 mpy는 custom.i를 찾지 않고 대신 custommp.i를 찾습니다. NS
-batch 파일 또는 custommp.i의 명령은 순위 0에서 직렬 모드로 실행됩니다.
오직. 마찬가지로 mpy는 일반적인 process_argv 함수를 재정의하므로 -i 및 기타
명령줄 옵션은 직렬 모드에서 순위 0에서만 처리됩니다. 이 모든 것의 의도
경우는 -batch 또는 custommp.i 또는 -i 포함 파일이 다음과 같이 순위 0에서만 실행되도록 하는 것입니다.
대화식으로 입력했다면. 다음 중 하나에서 mp_exec를 자유롭게 호출할 수 있습니다.
병렬 작업을 시작하는 파일이지만 파일 자체는 직렬입니다.

추가 명령줄 옵션이 일반 세트에 추가됩니다.
mpy -j somefile.i
모든 순위에서 병렬 모드로 somefile.i를 포함합니다(다시 말하지만 -i other.i는 other.i만 포함합니다.
직렬 모드에서 순위 0). -j 옵션이 여러 개 있으면 병렬 포함이 발생합니다.
명령줄 순서대로. 그러나 -j 및 -i 옵션이 혼합되어 있으면 -j 포함 모든 것이 발생합니다.
-i가 포함되기 전에.

mpy에 포함된 함수의 복잡성으로 인한 부작용으로 자동 로드 기능은 다음과 같습니다.
장애가있는; 코드가 실제로 자동 로드된 함수를 호출하여 포함을 트리거하는 경우 mpy
오류와 함께 중지됩니다. 병렬에 필요한 모든 기능을 명시적으로 로드해야 합니다.
require 함수를 사용하는 작업은 병렬 작업 내에서 자체적으로 호출됩니다.

mp_send 함수는 모든 숫자 요릭 배열(char, short, int, long,
float, double 또는 complex) 또는 스칼라 문자열 값입니다. 메시지를 보내는 과정
MPI를 통해 요소 수만 유지하므로 mp_recv는 스칼라 값만 생성하거나
mp_send에 전달된 차원에 관계없이 값의 1D 배열.

mp_recv 기능을 사용하면 메시지의 발신자를 지정해야 합니다.
받다. 메시지가 실제로 해당 발신자로부터 도착할 때까지 차단되어
미리 도착할 수 있는 다른 발신자로부터의 메시지. 대기 중인 메시지는
일치하는 발신자에 대해 mp_recv를 호출할 때 받은 순서대로 검색했습니다. NS
대기열 기능을 사용하면 가장 단순한 유형의 경쟁 조건을 훨씬 쉽게 피할 수 있습니다.
해석된 병렬 프로그램을 작성할 때.

mp_probe 함수는 대기 중인 메시지의 모든 발신자 목록을 반환합니다(또는
대기열이 비어 있음). 부르다 mp_프로브(0) 대기열이 비어 있어도 즉시 반환합니다.
더 자세한 문의 사항이 있으시거나, 견적을 원하시면 오늘 바로 연락주세요 mp_프로브(1) 대기열이 비어 있는 경우 차단하고 적어도 하나의 메시지가 있는 경우에만 반환
mp_recv에 사용할 수 있습니다. 부르다 mp_프로브(2) 새 메시지가 도착할 때까지 차단합니다.
일부 메시지는 현재 사용할 수 있습니다.

mp_exec 함수는 대수 팬아웃을 사용합니다. 순위 0은 F 프로세스로 전송되며, 각
모든 프로세스가 메시지를 가질 때까지 계속 F로 보냅니다. 일단 프로세스
모든 보내기 작업을 완료하고 메시지 내용을 구문 분석하고 실행합니다.
팬아웃 알고리즘은 N 단계의 기본 F에 로그에서 N 프로세스에 도달합니다. F 프로세스
순위 0은 순위 1, 2, 3, ..., F로 보냅니다. 일반적으로 순위 r이 있는 프로세스는
r*F+1, r*F+2, ..., r*F+F의 순위를 지정합니다(N 프로세스에 대해 N-1 미만인 경우). 이 세트
r 등급의 "직원"이라고 합니다. r>0인 랭크는 랭크(r-1)/F로부터 메시지를 수신하고,
이것은 r의 "보스"라고 불립니다. mp_exec 호출은 mp_recv 대기열과 상호 운용됩니다.
즉, mp_exec 팬아웃 동안 보스가 아닌 다른 계급의 메시지는
mp_recv의 나중 검색을 위해 대기 중입니다. (이 기능이 없으면 병렬 작업이
로그 팬아웃 이외의 메시지 패턴을 사용하면 경쟁에 취약할 수 있습니다.
정황.)

대수 팬아웃과 내부 등가물은 매우 유용하여 mpy가 몇 가지를 제공합니다.
mp_exec와 동일한 팬아웃 패턴을 사용하는 상위 수준 함수:
MP_유인물, 메시지;
총 = mp_handin(값);
mp_handout을 사용하려면 순위 0이 msg를 계산한 다음 모든 순위가 mp_handout을 호출하여 msg를 보냅니다.
(0 이외의 모든 순위에 대한 출력) mp_exec와 동일한 팬아웃으로 모든 곳에서. 사용
mp_handin, 모든 프로세스는 값을 계산한 다음 mp_handin을 호출하여 다음 합계를 반환합니다.
자신의 가치와 모든 직원을 포함하여 순위 0에서 mp_handin이
모든 프로세스의 가치.

동기화 역할을 하는 인수 없이 mp_handin을 함수로 호출할 수 있습니다. 언제
이러한 호출 후에 순위 0이 계속되면 다른 모든 순위가 해당 지점에 도달했음을 알 수 있습니다.
모든 병렬 작업(mp_exec로 시작된 모든 작업)은 mp_handin에 대한 호출로 끝나야 합니다.
또는 작업이 수행될 때 모든 프로세스가 유휴 상태로 돌아갔다는 동등한 보장
0순위로 끝납니다.

mp_nfan 함수를 사용하여 팬아웃 매개변수 F를 검색하거나 변경할 수 있습니다. 기본값
값은 16이며, 이는 매우 많은 수의 프로세스에서도 합리적이어야 합니다.

하나의 특별한 병렬 작업은 mp_connect라고 하며, 해석된 피드를 제공하는 데 사용할 수 있습니다.
다른 모든 순위는 유휴 상태로 유지되는 동안 명령줄을 0이 아닌 단일 순위로 지정합니다. 순위 0은
키보드를 읽고 라인을 "연결된" 랭크로 보내는 루프는 다음을 실행합니다.
그리고 0순위로 다시 승인을 보냅니다. mp_disconnect 함수를 실행하여
병렬 작업을 완료하고 순위 0으로 다시 떨어집니다.

마지막으로 오류 복구에 대한 참고 사항입니다. 병렬 작업 중 오류가 발생한 경우,
mpy는 mp_exec를 정상적으로 종료하려고 시도하므로 순위 0이 반환될 때 다른 모든 순위가
다음 mp_exec를 위해 준비된 유휴 상태인 것으로 알려져 있습니다. 이 절차는 다음과 같은 경우 영원히 중단됩니다.
프로세스 중 하나가 무한 루프에 있거나 그렇지 않으면 절대 실행되지 않는 상태에 있습니다.
mp_send, mp_recv 또는 mp_probe를 호출하십시오. MPI는 다음과 같은 신호를 보낼 수단을 제공하지 않기 때문입니다.
모든 프로세스를 중단합니다. (이것은 MPI 환경이
"crude".) 순위 0 프로세스는 a를 보고한 첫 번째 프로세스의 순위와 함께 남습니다.
오류 및 다음 이외의 이유로 오류가 발생한 프로세스 수
다른 순위가 오류가 발생했다는 메시지를 보냈습니다. 첫 번째 오류 프로세스는 dbug에 들어갈 수 있습니다.
mp_connect를 통한 모드; mp_disconnect 또는 dbexit를 사용하여 순위 0에서 직렬 모드로 다시 드롭합니다.

옵션
-j 파일.i Yorick 소스 파일 포함 파일.i mpy가 병렬 모드에서 시작될 때
모든 순위에서. 이것은 mpy 뒤의 mp_include 함수와 동일합니다.
시작했다.

-i 파일.i Yorick 소스 파일 포함 파일.i 직렬 모드에서 mpy가 시작될 때.
이것은 mpy가 시작된 후 #include 지시문과 동일합니다.

-일괄 파일.i Yorick 소스 파일 포함 파일.i 직렬 모드에서 mpy가 시작될 때.
사용자 정의 파일 custommp.i(있는 경우)는 다음과 같습니다. 지원 읽고 mpy는
배치 모드에 배치됩니다. 일괄 처리 기능에서 help 명령 사용
(도움말, 배치) 배치 모드에 대해 자세히 알아보세요. 일괄 모드에서는 모든
오류는 치명적입니다. 일반적으로 mpy는 실행을 중지하고 더 많은 시간을 기다립니다.
오류 후 입력.

onworks.net 서비스를 사용하여 mpy 온라인 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad