Кіріспе
Параллель компьютерлер үшін хабар алмасу жүйесі
Хабар алмасу интерфейсі (MPI) – параллель есептеу архитектураларында жұмыс істеуге арналған, стандартталған және портативті хабар алмасу стандарты. MPI стандарты C, C++ және Fortran тілдерінде портативті хабар алмасу бағдарламаларын жазатын кең ауқымдағы пайдаланушыларға пайдалы кітапхана функцияларының синтаксисі мен семантикасын анықтайды. MPI-дің бірнеше ашық кодты іске асырылымдары бар, олар параллель бағдарламалық жасақтама индустриясының дамуына көмектесті және портативті, кеңейтілген ірі масштабты параллель қосымшаларды әзірлеуді ынталандырды.
Тарих
Хабарлама алмасу интерфейсі жөніндегі жұмыс 1991 жылдың жазында зерттеушілердің шағын тобы Австриядағы тау-жайында талқылаулар бастаған кезде қолға алынды. Осы талқылаудың нәтижесінде 1992 жылдың 29-30 сәуірінде Вильямсбургте (Виргиния штаты) «Бөлінген жад ортасында хабар алмасу стандарттары» тақырыбында семинар өтті. Вильямсбургтегі қатысушылар стандартты хабар алмасу интерфейсі үшін қажетті негізгі мүмкіндіктерді талқылады және стандарттау процесін жалғастыру үшін жұмыс тобын құрды. 1992 жылдың қарашасында Джек Донгарра, Тони Хей және Дэвид У. Уокер «MPI1» деген алдын ала жоба ұсынысын жасады. 1992 жылдың қарашасында Миннеаполисте MPI жұмыс тобының отырысы өтті, онда стандарттау процесін ресми негізге салу туралы шешім қабылданды. MPI жұмыс тобы 1993 жылдың алғашқы тоғыз айында әр алты апта сайын кездесті. MPI стандартының жобасы 1993 жылдың қарашасында «Суперкомпьютерлер» конференциясында ұсынылды. Халықтан пікірлер алынғаннан кейін, MPI-де бірқатар өзгерістер енгізілді және MPI-нің 1.0 нұсқасы 1994 жылдың маусым айында жарияланды. Осы кездесулер мен электрондық пошта арқылы жүргізілген талқылаулар MPI форумын құрады, оның мүшелігі жоғары өнімді есептеу қауымдастығының барлық мүшелеріне ашық болды. MPI жұмысына 40 ұйымнан 80-ге жуық адам қатысты, олардың көп бөлігі АҚШ және Еуропадан келген. Параллель компьютерлердің көптеген ірі өндірушілері MPI жұмысына қатысып, университеттер, мемлекеттік зертханалар мен өнеркәсіп зерттеушілерімен бірлесіп жұмыс істеді. MPI параллель аппараттық құралдарды жасаушыларға тиімді жүзеге асырылатын, нақты анықталған негізгі процедуралар жиынтығын ұсынады. Нәтижесінде аппараттық құралдарды жасаушылар осы стандартты төмен деңгейлі процедуралар жинағына сүйене отырып, параллель машиналарын қамтамасыз ететін бөлінген жад байланысы үшін жоғары деңгейлі процедураларды құра алады. MPI қарапайым пайдаланушы үшін оңай қолданылатын портативті интерфейсті ұсынады, сонымен қатар бағдарламашыларға озық машиналарда қол жетімді жоғары өнімді хабар алмасу операцияларын пайдалануға мүмкіндік береді. Хабар алмасудың әмбебап стандартын жасау мақсатында зерттеушілер оны бір жүйеге негіздемеді, бірақ IBM, Intel, nCUBE, PVM, Express, P4 және PARMACS сияқты жүйелердің ең пайдалы мүмкіндіктерін біріктірді. Хабар алмасу парадигмасы кең тасымалданатындығының арқасында тартымды, оны бөлінген жад және ортақ жад мультипроцессорларында, жұмыс станцияларының желілерінде және осы элементтердің комбинациясында байланыс үшін қолдануға болады. Бұл парадигма желі жылдамдығына немесе жад архитектурасына тәуелсіз түрде көптеген жағдайларда қолданылуы мүмкін. MPI кездесулеріне DARPA және АҚШ Ұлттық ғылым қоры (NSF) ASC 9310330 гранты, NSF ғылым және технология орталығы ынтымақтастық келісімі CCR 8809615 нөмірі және Еуропалық комиссия Esprit жобасы P6643 арқылы қолдау көрсетті. Теннесси университеті де MPI форумына қаржылай үлес қосты.
Шолу
MPI – параллель компьютерлерді бағдарламалау үшін байланыс протоколы. Ол бір-бірімен және ұжымдық қарым-қатынасты қолдайды. MPI – «кәез келген іске асырылуында оның ерекшеліктері қалай әрекет етуі керектігі туралы хаттама мен семантикалық ерекшеліктері бар бағдарламалаушы интерфейсі». MPI-дің мақсаттары – жоғары өнімділік, масштабталу және тасымалдану. MPI қазіргі уақытта жоғары өнімділіктегі есептеулерде қолданылатын басым модель болып табылады. MPI-ді ірі стандарттау органы бекітпеген, алайда ол бөлінген жад жүйесінде жұмыс істейтін параллель бағдарламаны модельдеу процестерінің арасындағы байланыс үшін де-факто стандартына айналды. Компьютер кластерлері сияқты нақты бөлінген жад суперкомпьютерлері жиі осындай бағдарламаларды орындайды. Негізгі MPI 1 моделі ортақ жад тұжырымдамасына ие емес, ал MPI 2 тек шектеулі бөлінген ортақ жад тұжырымдамасын қамтиды. Дегенмен, MPI бағдарламалары ортақ жад компьютерлерінде тұрақты түрде орындалады, және MPICH және Open MPI екеуі де, егер ол қолжетімді болса, хабарламаны беру үшін ортақ жадыны пайдалана алады. MPI моделі бойынша бағдарламаларды жобалау (explicit shared memory модельдеріне қарама-қарсы) NUMA архитектураларында жұмыс істегенде артықшылықтарға ие, өйткені MPI жад локалдылығын ынталандырады. Explicit shared memory бағдарламалау MPI 3-те енгізілді. MPI OSI анықтамалық моделінің 5-ші және одан жоғары қабаттарына жатса да, іске асырулар көпшілігін қамтуы мүмкін, сокеттер мен Транспорттық қабатта қолданылатын Трансмиссиялық бақылау протоколы (TCP) қолданылады. MPI-нің көпшілігі C, C++, Fortran (яғни API) және C#, Java немесе Python сияқты осындай кітапханалармен интерфейс жасай алатын кез келген тілден тікелей шақырылатын режімдердің белгілі бір жиынтығынан тұрады. MPI-нің ескі хабарларды өткізу кітапханаларына қарағанда артықшылықтары – тасымалдағыштық (MPI-нің әр бөлінген жад архитектурасына енгізілгендіктен) және жылдамдық (әрбір іске асыру, негізінен, ол жұмыс істейтін аппараттық жабдыққа оңтайландырылғандықтан). MPI шақырулар мен тілдік байланыстар үшін Тілге тәуелсіз ерекшеліктерді (LIS) қолданады. MPI-дің алғашқы стандартында LIS-пен бірге ANSI C және Fortran 77 байланыстары көрсетілген. Жоба Supercomputing 1994 (қараша 1994) конференциясында ұсынылды және көп ұзамай аяқталды. MPI 1.3 стандартын құрайтын шамамен 128 функция 2008 жылы MPI 1 сериясының соңғы бөлігі ретінде шығарылды. Қазіргі уақытта стандарттың бірнеше нұсқасы бар: 1.3 нұсқасы (көбінесе қысқартылған MPI 1), ол хабарламаларды өткізуге баса назар аударады және статикалық орындалу ортасына ие, MPI 2.2 (MPI 2), оған параллель I/O, динамикалық процестерді басқару және қашықтан жад операциялары сияқты жаңа мүмкіндіктер кіреді, және MPI 3.1 (MPI 3), оған блоктаушы емес нұсқалармен және бір жақты операцияларға кеңейтулер кіреді. MPI 2 LIS 500-ден астам функцияларды анықтайды және ISO C, ISO C++ және Fortran 90 үшін тілдік байланыстарды қамтамасыз етеді. Объектінің өзара әрекеттесуі де қосылды, бұл араластырылған тілдің хабарламаларын оңай бағдарламалауға мүмкіндік береді. 1996 жылы аяқталған MPI 2 стандарттаудың жанама әсері MPI 1 стандартын нақтылау болды, MPI 1.2 құрылды. MPI 2 көбінесе MPI 1-дің суперсеті, бірақ кейбір функциялары ескірген. MPI 1.3 бағдарламалары әлі де MPI 2 стандартына сәйкес келетін MPI іске асырулары бойынша жұмыс істейді. MPI 3 жаңа Fortran 2008 байланыстарын қамтиды, ал ол ескірген C++ байланыстарын, сондай-ақ көптеген ескірген реттіліктерді және MPI объектілерін алып тастайды. MPI-ді Parallel Virtual Machine (PVM) –мен жиі салыстырады, ол 1989 жылы дамыған танымал бөлінген орта және хабарлама өткізу жүйесі болып табылады, және ол стандартты параллель хабарлама өткізу қажеттілігін қоздырған жүйелердің бірі болды. Тақырыпты ортақ жад бағдарламалау модельдері (Pthreads және OpenMP сияқты) және хабарды өткізу бағдарламалауы (MPI/PVM) толықтыратын деп санауға болады және олар, мысалы, бірнеше үлкен ортақ жад түйіндері бар серверлерде бірге қолданылады.
Функционалдылығы
MPI интерфейсі тілге тәуелсіз түрде, тілге тән синтаксиспен (байланыстар) және бірнеше тілге тән ерекшеліктері бар процестер жиынтығы (нодтар / серверлер / компьютерлік инстанцияларға бейімделген) арасындағы маңызды виртуалды топологияны, синхрондауды және байланыс функционалдығын қамтамасыз етуді көздейді. MPI бағдарламалары үнемі процестермен жұмыс істейді, бірақ бағдарламашылар процестерді процессор деп атай беруі мүмкін. Әдетте, максималды өнімділік үшін әрбір CPU (немесе көп ядролы машинадағы ядро) тек бір процеске тағайындалады. Бұл тағайындама MPI бағдарламасын іске қосатын агент арқылы орындалу уақытында жүзеге асырылады, бұл агент әдетте mpirun немесе mpiexec деп аталады. MPI кітапханасының функцияларына нүктеден нүктеге кездесу түріндегі жіберу/қабылдау операциялары, логикалық процесс топологиясы ретінде Картезиандық немесе графты таңдау, процесс жұптары арасындағы деректерді алмасу (жіберу/қабылдау операциялары), есептеулердің ішінара нәтижелерін біріктіру (жинау және қысқарту операциялары), түйіндерді синхрондау (кедергі операциясы), сондай-ақ есептеу сессиясындағы процестер саны, процеске бейімделген ағымдағы процессордың идентификаторы, логикалық топологияда қолжетімді көршілес процестер және т.б. сияқты желіге қатысты ақпаратты алу кіреді. Нүктеден нүктеге операциялар синхронды, асинхронды, буферленген және дайын түрлерде болуы мүмкін, бұл кездесу жіберудің синхрондау аспектілері үшін салыстырмалы түрде күшті және әлсіз семантиканы қамтамасыз етеді. Көптеген операцияларды асинхронды режимде орындауға болады, көптеген іске асыруларда. MPI 1 және MPI 2 екеуі де байланыс пен есептеуді біріктіруге мүмкіндік береді, бірақ тәжірибе мен теория арасында айырмашылықтар бар. MPI сонымен қатар интерфейсте жасырын күйді болдырмауға көмектесетін байланыс және біріктіру стратегиялары бар, қауіпсіз жіп интерфейстерін де анықтайды. Көп жіпті нүктеден нүктеге MPI кодын жазу салыстырмалы түрде оңай, және кейбір іске асырулар мұндай кодты қолдайды. Көп жіпті ұжымдық байланыс, төменде сипатталғандай, Коммуникаторлардың бірнеше көшірмелерімен ең жақсы жүзеге асырылады.
Тұжырымдамалар
MPI бірнеше мүмкіндіктер ұсынады. Төмендегі түсініктер осы мүмкіндіктердің барлығына түсінік береді және бағдарламашыға қолданбалы бағдарламаларында қандай функционалдықты пайдалану керектігін шешуға көмектеседі. MPI-дың сегіз негізгі түсінігінің төртеуі MPI 2-ге ғана тән.
Байланыс құралы
Коммуникатор объектілері MPI сессиясындағы процестер топтарын байланыстырады. Әрбір коммуникатор өзіне кірген әрбір процесске жеке идентификатор тағайындайды және оның кірген процестерін реттелген топологияда орналастырады. MPI-де нақты топтар да бар, бірақ олар негізінен басқа коммуникатор құрылмас бұрын процестер топтарын ұйымдастыру және қайта ұйымдастыру үшін қолданылады. MPI бір топтық коммуникаторлар арасындағы операцияларды, сондай-ақ екі жақты коммуникаторлар арқылы байланысты түсінеді. MPI 1-де бір топтық операциялар жиі кездеседі. Екі жақты операциялар көбінесе MPI 2-де пайда болады, олар ұжымдық коммуникацияны және процестерді динамикалық басқаруды қамтиды. Коммуникаторларды бірнеше MPI командаларын пайдаланып бөлуге болады. Осы командалардың ішінде MPI_COMM_SPLIT бар, онда әрбір процесс өзін белгілі бір түске жатқызып, сол түстің субкоммуникаторының біріне қосылады.
Нысаннан нұсқа дейінгі негізгі мәліметтер
MPI-ның бірқатар маңызды функциялары екі белгілі бір процесс арасында байланысты қамтиды. MPI Send – кең таралған мысал, ол бір белгілі процесске екінші белгілі процесске хабарлама жіберуге мүмкіндік береді. Мұндай нүктеден нүктеге операциялар, әсіресе, үлгілі немесе ретсіз байланыста тиімді, мысалы, деректерді параллельді архитектурада, онда әрбір процессор есептеу қадамдары арасында белгілі бір басқа процессорлармен дерек аймақтарын жүйелі түрде алмасады, немесе шебер-құл архитектурасында, онда шебер бұрынғы тапсырма аяқталған сайын құлға жаңа тапсырма деректерін жібереді. MPI 1 нүктеден нүктеге байланыс үшін блоктау және блоктамайтын механизмдерді, сондай-ақ «дайын жіберу» механизмын анықтайды, онда сәйкес келетін қабылдау сұранысы жасалған кезде ғана жіберу сұранысын жасауға болады.
Ұжымдық негіздер
Ұжымдық функциялар процестер тобындағы барлық процестер арасында байланыс құруды қамтиды (бұл бүкіл процестер тобын немесе бағдарламамен анықталған кіші жиынтықты білдіре алады). Типтік функция — MPI Bcast шақыруы ("жайылым" дегеннің қысқаша атауы). Бұл функция бір түйінден деректерді алып, оны процестер тобындағы барлық процестерге жібереді. Кері операция — MPI Reduce шақыруы, ол топтағы барлық процестерден деректерді жинап, операцияны (мысалы, қосу) орындайды және нәтижелерді бір түйінде сақтайды. MPI Reduce көбінесе үлкен таратылған есептеулердің басында немесе соңында пайдалы болады, онда әрбір процессор деректердің бір бөлігімен жұмыс істейді, содан кейін оларды бір нәтижеге біріктіреді. Басқа операциялар, мысалы MPI Alltoall, күрделі тапсырмаларды орындайды, ол n дерек элементін қайта реттейді, сонда n-ші түйін әрбір түйінен n-ші дерек элементін алады.
Бір жақты байланыс
MPI 2 үш бір жақты байланыс операциясын анықтайды: MPI Put, MPI Get және MPI Accumulate, сәйкесінше, қашық жадқа жазу, қашық жадтан оқу және бірнеше тапсырма бойынша бір жадта жиынтықтау операциясы. Бұл байланысты синхрондаудың үш әртүрлі тәсілі де анықталған (жаһандық, жұптық және қашықтан құлыптау), себебі спецификация осы операциялар синхрондау нүктесіне жеткенше орындалғанын кепілдемейді. Мұндай шақырулар синхрондау қиынға түсетін алгоритмдер үшін (мысалы, үлестірілген матрица көбейтуі) немесе тапсырмалардың жүктемесін басқа процессорлар деректермен жұмыс істеп жатқанда теңестіру қажет болған жағдайларда жиі пайдалы болуы мүмкін.
Динамикалық процестерді басқару
Негізгі аспект – "MPI процесінің жаңа MPI процестерін құруға қатысу мүмкіндігі немесе жеке басталып кеткен MPI процестерімен байланыс орнату қабілеті". MPI 2 спецификациясы MPI процестерінің динамикалық түрде байланыс орнатуына мүмкіндік беретін үш негізгі интерфейсті сипаттайды: MPI Comm spawn, MPI Comm accept/MPI Comm connect және MPI Comm join. MPI Comm spawn интерфейсі MPI процесіне аталған MPI процесінің бірнеше данасын іске қосуға рұқсат береді. Жаңа іске қосылған MPI процестерінің жиынтығы жаңа MPI COMM WORLD ішкі коммуникаторын құрайды, бірақ олар функция қайтаратын аталық процесімен және интеркоммуникатормен байланыса алады. MPI Comm spawn multiple – бұл интерфейс іске қосылған әртүрлі даналардың әртүрлі аргументтерімен әртүрлі орындалатын файлдар болуына мүмкіндік береді.
Ж/С
Параллельді I/O мүмкіндігі кейде MPI IO деп аталады және таратылған жүйелердегі I/O басқаруын MPI-ге абстракттауға арналған функциялар жиынтығын білдіреді, сондай-ақ қолданыстағы туынды дерек типі функционалдығын пайдалана отырып, файлдарға үлгілі түрде оңай қол жеткізуге мүмкіндік береді. Бұл мүмкіндік бойынша жасалған аз ғылыми зерттеулер MPI IO пайдалану арқылы жоғары өнімділікке қол жеткізудің оңай еместігін көрсетеді. Мысалы, MPI I/O кітапханасын қолдана отырып, сирегірек матрица-вектор көбейтуді іске асыру, жалпы алғанда, аз ғана өнімділік артығын көрсетеді, бірақ бұл нәтижелер шешімсіз. MPI IO-да іске асырылған ұжымдық I/O идеясы пайда болғанға дейін MPI IO кеңінен қолданысқа енбеді. Ұжымдық I/O процестердің шағын және үздіріспейтін I/O операцияларын үлкен және үздіріспейтін операцияларға біріктіру арқылы қосымшалардың I/O өткізгіштік қуатын айтарлықтай арттырады, соның салдарынан құлыптау және дискіні іздеуге кететін уақытты азайтады. Оның үлкен өнімділік артықшылықтарына байланысты MPI IO, HDF5 және Parallel NetCDF сияқты көптеген заманауи I/O кітапханаларының негізгі I/O қабатына айналды. Оның танымалдылығы сонымен қатар макетқа бейімделген I/O және файлдар арасындағы жинақтау сияқты ұжымдық I/O оңтайландыруларына қатысты зерттеулерді күшейтті.
until the idea of collective I/O implemented into MPI IO that MPI IO started to reach widespread adoption. Collective I/O substantially boosts applications' I/O bandwidth by having processes collectively transform the small and noncontiguous I/O operations into large and contiguous ones, thereby reducing the locking and disk seek overhead. Due to its vast performance benefits, MPI IO also became the underlying I/O layer for many state of the art I/O libraries, such as HDF5 and Parallel NetCDF. Its popularity also triggered research on collective I/O optimizations, such as layout aware I/O and cross file aggregation.
Ресми іске асыру
MPI 1.x стандартының алғашқы іске асырылуы – Аргон Ұлттық зертханасының (ANL) және Миссисипи мемлекеттік университетінің MPICH-ы болды. IBM да ерте іске асырушылардың бірі болды, ал 90-шы жылдардың басындағы көптеген суперкомпьютерлік компаниялар MPICH-ті коммерцияландырды немесе өздерінің іске асыруларын жасады. Огайо суперкомпьютер орталығының LAM/MPI тағы бір ертедегі ашық іске асыруы болды. ANL он жылдан астам бойы MPICH-ті дамытуды жалғастырды және қазір MPI 3.1 стандартын іске асыратын MPICH 3.2 нұсқасын ұсынады. Ашық MPI (OpenMP-мен шатастырмау керек) FT MPI, LA MPI, LAM/MPI және PACX MPI бірігуі арқылы құрылды және көптеген TOP 500 суперкомпьютерлерінде қолданылады. Көптеген басқа да әрекеттер MPICH, LAM және басқа жұмыстардың туындылары болып табылады, оның ішінде HPE, Intel, Microsoft және NEC компанияларының коммерциялық іске асырулары да бар. Техникалық талаптар C және Fortran интерфейсін міндеттейді, бірақ MPI-ді іске асыру үшін қолданылатын тіл, оның жұмыс кезінде қолдайтын тілге немесе тілдерге сәйкес болуымен шектелмейді. Көптеген іске асырулар C, C++ және ассемблер тілін біріктіреді және C, C++ және Fortran бағдарламашыларына бағытталған. Perl, Python, R, Ruby, Java және CL сияқты көптеген басқа тілдер үшін де байланыстар бар (#Тілдік байланыстар қараңыз). MPI іске асыруларының ABI MPICH және Open MPI туындылары арасында бөлінеді, сондықтан бір отбасыға жататын кітапхана, сол отбасыға жататын екінші кітапхананың орнын толықтай алмастыра алады, бірақ отбасылар арасында тікелей алмастыру мүмкін емес. Францияның CEA осындай ауысуларды жеңілдету үшін орауыш интерфейсін қолданады.
Жабдық
MPI аппараттық зерттеулері MPI-ді тікелей аппараттық құрылымдарда іске асыруға бағытталған, мысалы, процессорлардың жады ішіндегі интеграциясы арқылы, MPI операцияларын әрбір түйіндегі RAM чиптерінің микросхемаларына енгізу. Бұл тәсіл тілге, операциялық жүйеге және процессорға тәуелді емес, бірақ оны жаңарту немесе алып тастау қиын. Тағы бір тәсіл – операцияның бір немесе бірнеше бөлігіне аппараттық үдеткіштерді қосу, оның ішінде MPI кезектерін аппараттық түрде өңдеу және RDMA технологиясын қолдану арқылы жад пен желілік интерфейс контроллері арасында деректерді CPU немесе операциялық жүйе ядросының қатысуынсыз тікелей беру.
Компиляторды қаптау
mpicc (және осыған ұқсас mpic++, mpif90, т.б.) – MPI-ді пайдаланатын кодты компиляциялау кезінде қажетті командалық жол опцияларын қосатын, қолданыстағы компилятордың үстінен жұмыс істейтін бағдарлама. Әдетте, ол кодты компиляциялау және MPI кітапханасына байланыстыру үшін бірнеше опцияларды қосады.
Тілдік байланыстар
Байланыстар – MPICH немесе Open MPI сияқты қолданыстағы MPI іске асырылуын орап, басқа тілдерге MPI қолдауын кеңейтетін кітапханалар.
Ортақ тілдік инфрақұрылым
Екі басқарылатын Ортақ Тілдік Инфрақұрылым NET іске асырылымы – Pure Mpi.NET және Индиана университетінің BSD стиліндегі лицензиямен берілген зерттеу жобасы MPI.NET. Ол Mono-мен үйлесімді және төмен задержігі бар MPI желілік құрылымдарын толыққанды пайдалана алады.
Жава
Java-да ресми MPI байланысы болмаса да, бірнеше топ оларды байланыстыруға әртүрлі деңгейде сәттілік пен үйлесімділікпен тырысады. Алғашқы әрекеттердің бірі Брайан Карпентердің mpiJava болды, ол негізінен жергілікті C MPI кітапханасына Java Native Interface (JNI) орамаларының жиынтығы еді. Нәтижесінде, шектеулі тасымалданатын гибридтік іске асыру пайда болды, оны қолданылатын нақты MPI кітапханасына сәйкес құрастыру қажет. Алайда, бұл бастапқы жоба mpiJava API-ді де (Java үшін де-факто MPI API, C++ байланыстарымен тығыз үйлесетін) анықтады, оны кейінгі Java MPI жобалары қабылдады. MPJ API – бұл сирек қолданылатын API, ол көбірек объектіге бағытталған және Sun Microsystems кодтау ережелеріне жақын құрылды. API-дан басқа, Java MPI кітапханалары жергілікті MPI кітапханасына тәуелді болуы немесе Java-да хабар алмасу функцияларын іске асыруы мүмкін. P2P MPI сияқты кейбіреулері пір-пір функционалдығын ұсынады және аралас платформалық жұмыс істеуге мүмкіндік береді. Java/MPI-дегі ең қиын мәселелердің бірі – Java-ның ерекшеліктері, мысалы, тікелей көрсеткіштердің болмауы және оның объектілері үшін сызықтық жад адрестік кеңістігі. Бұл көп өлшемді массивтер мен күрделі объектілерді тиімсіз етеді. Айналып өту әдістері әдетте бір қатарды бірден көшіруді және/немесе жіберу және қабылдау соңында деректерді тізбектеп шығару және түрлендіруді қамтиды. C немесе Fortran сияқты массивтерді бір өлшемді массивтерді пайдалану арқылы, ал қарапайым типтерге көрсеткіштерді бір элементтік массивтерді пайдалану арқылы симуляциялайды. Бұл Java ережелерінен алыс бағдарламалау стиліне әкеледі. MPJ Express – тағы бір Java хабар алмасу жүйесі. Жаңа нұсқаларын кластерлік және көп ядролық конфигурацияларда орындауға болады. Кластерлік конфигурацияда ол кластерлер мен бұлттарда параллель Java қолданбаларын орындай алады. Мұнда Java сокеттері немесе Myrinet сияқты арнайы I/O байланыстары MPJ Express процестері арасындағы хабар алмасуды қолдай алады. Ол сонымен қатар өзінің құрылғысын пайдаланып MPI-дің C-дегі түпкілікті іске асырылуын пайдалана алады. Көп ядролық конфигурацияда Java-ның параллельді қолданбасы көп ядролық процессорларда орындалады. Бұл режимде MPJ Express процестері Java жіптерімен бейнеленеді.
Джулия
MPI үшін Джулия тіліндегі қаптама бар.
MATLAB
MATLAB қолданып MPI-ді жүзеге асырудың бірнеше академиялық нұсқалары бар. MATLAB-тың MPI және PVM негізінде құрылған өзіндік параллель кеңейту кітапханасы бар.
ОКамл
OCamlMPI модулі MPI функцияларының үлкен бөлігін іске асырады және ғылыми есептеулерде кеңінен қолданылады. 11 000 жолды OCaml бағдарламасы бұл модульді пайдаланып, қосымша 500 жол кодпен және шамалы өзгерістермен "MPI-ға айналдырылды" және суперкомпьютердегі 170 түйінде өте жақсы нәтижелер көрсетті.
PARI/GP
PARI/GP, көп өрісті жұмыс процесі ретінде MPI-ді пайдалану арқылы құрастырылуы мүмкін, бұл MPI кластерлерінде PARI және GP бағдарламаларын өзгеріссіз параллель түрде іске қосуға мүмкіндік береді.
Python-тың атауы
Python-дағы MPI-ді іске асырулар: pyMPI, mpi4py, pypar, MYMPI және ScientificPython-дағы MPI кіші модулі. pyMPI ерекше, өйткені ол Python интерпретаторының бір түрі, ал pypar, MYMPI және ScientificPython модулі импортталатын модульдер болып табылады. Олар MPI Init шақыруы қай жерге орналасуы керек екенін бағдарламашының өз шешіміне қалдырады. 2006 жылы Boost C++ кітапханалары MPI Python байланыстарын қамтитын Boost:MPI-ді сатып алды. Бұл C++ және Python-ды біріктіруге ерекше көмектеседі. 2016 жылғы мәліметтер бойынша Boost:MPI-дің Python байланыстарында CentOS жүйесінде түзетілмеген бумалау қателері әлі де бар.
R
MPI-дің R-мен байланыстырылулары Rmpi және pbdMPI болып табылады, мұнда Rmpi менеджер-жұмысшы параллелизміне, ал pbdMPI SPMD параллелизміне бағытталған. Екі жүзеге асыру да Open MPI немесе MPICH2-ні толық қолдайды.
MPI-2 қабылдау
MPI 1.2 қабылдануы кеңінен тараған, әсіресе кластерлік есептеулерде, бірақ MPI 2.1 қабылдануы шектеулі болды. Мәселелер мыналар:
MPI 2 іске асырулары I/O және динамикалық процестерді басқаруды қамтиды, соның салдарынан орталық құралдың көлемі айтарлықтай ұлғайды. Көптеген тапсырмаларды үлестіретін жүйелер динамикалық процестерді басқаруды қолдамайды. MPI 2-нің параллельді I/O жақсы қабылданады. Көптеген MPI 1.2 бағдарламалары MPI 2-ден бұрын жасалған. Бастапқыда, үйлесімділік туралы алаңдаушылықтар қабылдануды баяулатты, бірақ кең қолдау осы мәселені азайтты. Көптеген MPI 1.2 қолданбалары осы стандарттың тек бір бөлігін (16-25 функция) пайдаланады, ал MPI 2 функционалдылығына нақты қажеттілік жоқ.
Болашақ
MPI-нің болашағының кейбір аспектілері тұрақты көрінеді, ал кейбіреулері одан да бекем емес. MPI Форумы 2007 жылы MPI 2-нің кейбір мәселелерін нақтылау және мүмкін MPI 3 үшін дамуды зерттеу үшін қайтадан шақырылды, нәтижесінде MPI 3.0 (2012 жылдың қыркүйегі) және MPI 3.1 (2015 жылдың маусымы) нұсқалары пайда болды. Архитектуралар өзгеруде, ішкі параллелизм (көп ядролылық), жақсырақ ұсақ түйірлі параллелизмді басқару (жіптеу, байланыс) және жад иерархиясының көбірек деңгейлері пайда болуда. Көп жіпті бағдарламалар осы жетістіктерді бір жіпті қолданбаларға қарағанда оңайырақ пайдалана алады. Бұл симметриялық мультипроцессорлық үшін жеке, толықтыратын стандарттарды, атап айтқанда OpenMP-ті әкелді. MPI 2 стандартқа сәйкес келетін жүзеге асырулар көп жіпті мәселелерді қалай шешу керектігін анықтайды, бірақ жүзеге асырулардың көп жіпті болуын немесе тіпті жіпке қауіпсіз болуын талап етпейді. MPI 3 торап ішінде ортақ жадты параллелизмді пайдалану мүмкіндігін қосады. MPI-ді жүзеге асыру, мысалы, Adaptive MPI, Hybrid MPI, Fine Grained MPI, MPC және басқалары MPI стандартының кеңейтімдерін ұсынады, олар MPI-дегі әртүрлі қиындықтарды шешеді. Астрофизик Джонатан Дурси MPI-ді ескірген деп атап, Chapel тілі, Unified Parallel C, Hadoop, Spark және Flink сияқты жаңа технологияларға сілтеме жасады. Сонымен қатар, Экзамасштабты есептеу жобасындағы дерлік барлық жобалар MPI-ге тікелей негізделген; MPI 2020 жылдардың басындағы ең үлкен машиналарға дейін кеңейтілгенін көрсетті және ұзақ уақыт бойы маңызды болып қала береді деп есептеледі.