Anda di halaman 1dari 14

TUGAS MATA KULIAH PEMROSESAN PARALEL ARTIKEL MESSAGE PASSING INTERFACE (MPI)

Oleh : ADITYO SUKMAWAN 2107200660 SISTEM KOMPUTER

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER ADI UNGGUL BHIRAWA SURAKARTA 2011
i

MESSAGE PASSING INTERFACE (MPI)

A. PENGERTIAN MPI MPI adalah bahasa-independen protokol komunikasi yang digunakan untuk program komputer paralel . Kedua point-to-point dan komunikasi kolektif yang didukung. MPI adalah pesan-passing interface programmer aplikasi, bersama-sama dengan semantik dan spesifikasi protokol untuk bagaimana fitur-fiturnya harus bersikap dalam pelaksanaannya pun. Keunggulan MPI adalah kinerja tinggi, skalabilitas, dan portabilitas. MPI tetap model dominan yang digunakan dalam komputasi performa tinggi saat ini. MPI tidak disetujui oleh badan standar utama, walaupun ini telah menjadi de facto standar untuk komunikasi antara proses yang model program paralel yang berjalan pada sebuah sistem memori terdistribusi. Superkomputer memori Aktual didistribusikan seperti cluster komputer sering menjalankan program tersebut. MPI pokok-1 model tidak memiliki konsep berbagi memori, dan MPI-2 hanya memiliki terbatas bersama memori terdistribusi konsep. Meskipun demikian, program MPI secara teratur berjalan pada komputer memori bersama. Mendesain program-program di sekitar model MPI (bertentangan dengan eksplisit memori yang digunakan bersama model) memiliki keunggulan dibandingkan NUMA arsitektur sejak MPI mendorong lokalitas memori . Walaupun MPI termasuk dalam lapisan 5 dan lebih tinggi dari OSI Reference Model , implementasi dapat mencakup lapisan yang paling, dengan soket dan TCP digunakan pada lapisan transport. Kebanyakan implementasi MPI terdiri dari satu set tertentu rutinitas (yaitu, sebuah API) langsung callable dari Fortran , C dan C + + dan dari bahasa apapun mampu berinteraksi dengan library seperti (seperti C # , Java atau Python ). Kelebihan dari MPI atas pesan lewat library yang lebih tua portabilitas (karena MPI telah diterapkan untuk hampir semua arsitektur memori terdistribusi) dan kecepatan (karena setiap pelaksanaan pada prinsipnya dioptimalkan untuk perangkat keras atas mana hal berjalan).

ii

MPI menggunakan Bahasa Spesifikasi Independen (LIS) untuk panggilan dan bahasa bindings. Standar pertama MPI yang ditetapkan ANSI C dan 77 Fortran-bindings bersama dengan LIS. Draft disajikan di Supercomputing 1994 (November 1994) dari seri-1 MPI tahun 2008. [4] Saat ini, standar memiliki beberapa versi populer: versi 1.3 (lama disebut MPI-1), yang menekankan message passing dan memiliki lingkungan runtime statis, dan MPI-2.2 (MPI-2), yang mencakup fitur baru seperti paralel I / O, proses manajemen yang dinamis dan operasi memori remote. MPI-2's LIS menetapkan lebih dari 500 fungsi dan menyediakan binding bahasa untuk ANSI C , ANSI Fortran (Fortran90), dan ANSI C + + . Obyek interoperabilitas juga ditambahkan untuk memungkinkan untuk pesan campuran-bahasa pemrograman lebih mudah lewat. Sebuah efek samping dari MPI-2 standarisasi (selesai pada 1996) adalah klarifikasi dari standar-1 MPI, menciptakan-MPI 1.2. Perhatikan bahwa MPI-2 sebagian besar merupakan superset dari MPI-1, meskipun beberapa fungsi telah usang. MPI-1.3 program masih bekerja di bawah implementasi MPI sesuai dengan standar-2 MPI. MPI sering dibandingkan dengan PVM , yang merupakan lingkungan terdistribusi populer dan melewati sistem pesan dikembangkan pada tahun 1989, dan yang merupakan salah satu sistem yang memotivasi kebutuhan untuk pesan paralel standar kelulusan. Pemrograman threaded model memori bersama (seperti pthreads dan OpenMP ) dan melewati pemrograman pesan (MPI / PVM) dapat dianggap sebagai pendekatan pemrograman pelengkap, dan kadang-kadang dapat dilihat bersama-sama dalam aplikasi, misalnya di server dengan beberapa node shared-memory yang besar. B. FUNGSI MPI Antarmuka MPI ini dimaksudkan untuk memberikan topologi virtual penting, sinkronisasi , dan fungsionalitas komunikasi antara serangkaian proses (yang telah dipetakan ke node / server / contoh komputer) di-independen, bahasa, dengan sintaks khusus bahasa (binding), ditambah fitur bahasa tertentu saja. program MPI selalu bekerja dengan proses, tapi programmer umumnya merujuk pada proses sebagai prosesor. Biasanya, untuk kinerja maksimum, masing-masing CPU (atau inti dalam mesin multi-core) akan diberi hanya proses
[3]

dan diselesaikan

segera sesudahnya. Tentang 128 fungsi merupakan 1.3 MPI-standar yang dirilis sebagai akhir

iii

tunggal. Tugas ini terjadi pada saat runtime melalui agen yang menjalankan program MPI, biasanya disebut mpirun atau mpiexec. fungsi pustaka MPI termasuk, tetapi tidak terbatas pada, point-to-titik pertemuan-tipe mengirim / menerima operasi, memilih antara Cartesian atau grafik proses topologi logis seperti-, pertukaran data antara pasangan proses (mengirim / menerima operasi), menggabungkan parsial hasil perhitungan (mengumpulkan dan mengurangi operasi), node sinkronisasi (operasi penghalang) serta mendapatkan informasi jaringan-terkait seperti jumlah proses dalam sesi komputasi, identitas prosesor saat ini bahwa sebuah proses adalah dipetakan ke, tetangga proses diakses dalam topologi logis, dan seterusnya. -To-point operasi Point datang dalam sinkron , asinkron buffer, dan siap bentuk,, untuk memungkinkan kedua relatif lebih kuat dan lebih lemah semantik untuk aspek sinkronisasi dari pertemuan-kirim. operasi yang beredar Banyak yang mungkin dalam modus asynchronous, di sebagian besar implementasi. MPI-1 dan MPI-2 kedua memungkinkan implementasi yang tumpang tindih komunikasi dan komputasi, namun praktek dan teori berbeda. MPI juga menentukan thread aman antarmuka, yang memiliki kohesi dan kopling strategi yang membantu menghindari negara tersembunyi di dalam antarmuka. Hal ini relatif mudah untuk menulis point-to-point MPI kode multithreaded, dan beberapa implementasi mendukung kode tersebut. multithreaded komunikasi kolektif yang terbaik dicapai dengan beberapa salinan dari Communicator, seperti dijelaskan di bawah. C. KONSEP MPI MPI menyediakan berbagai kaya kemampuan. Konsep berikut ini dapat membantu dalam memahami dan memberikan konteks bagi semua orang kemampuan dan membantu para programmer untuk memutuskan apa fungsi untuk digunakan dalam program aplikasi mereka. Empat dari delapan MPI's konsep dasar yang unik untuk MPI-2. D. COMMUNICATOR Objek Communicator terhubung kelompok proses dalam sesi MPI. Setiap komunikator memberikan setiap proses mengandung independen pengenal dan mengatur proses yang terkandung dalam sebuah memerintahkan topologi . MPI juga memiliki kelompok eksplisit, tetapi ini terutama baik untuk mengorganisir dan reorganisasi kelompok proses sebelum komunikator lain dibuat. MPI memahami operasi intracommunicator kelompok tunggal, dan
iv

komunikasi intercommunicator bilateral. Dalam MPI-1, operasi kelompok tunggal yang paling lazim. Bilateral operasi kebanyakan muncul di MPI-2 dimana mereka meliputi komunikasi kolektif dan dinamis manajemen dalam proses. Komunikator dapat dipartisi menggunakan beberapa perintah MPI. Perintah-perintah ini termasuk grafik pewarnaan -jenis algoritma yang disebut MPI_COMM_SPLIT, yang efisien dapat memperoleh lainnya subgroupings dan topologi logis. E. DASAR POINT TO POINT Sejumlah fungsi MPI yang penting melibatkan komunikasi antara dua proses yang spesifik. Contoh yang populer adalah MPI_Send, yang memungkinkan satu proses yang ditentukan untuk mengirim pesan ke proses tertentu kedua. -To-point operasi Point, karena ini disebut, sangat berguna dalam atau tidak teratur komunikasi bermotif, misalnya, data-paralel arsitektur di mana setiap prosesor secara rutin daerah swap data dengan prosesor lainnya khusus antara langkah-langkah perhitungan, atau master- budak arsitektur di mana master mengirimkan data tugas baru untuk budak setiap kali tugas sebelumnya selesai. MPI-1 menetapkan mekanisme untuk kedua memblokir dan non-blocking to-point komunikasi mekanisme-titik, serta siap mengirim-'yang disebut' mekanisme dimana permintaan mengirim bisa dilakukan hanya bila cocok dengan menerima permintaan telah dibuat . F. DASAR-DASAR KOLEKTIF fungsi Kolektif melibatkan komunikasi di antara semua proses dalam kelompok proses (yang bisa berarti seluruh proses kolam renang atau subset yang ditetapkan program). Fungsi khas adalah panggilan MPI_Bcast (singkatan dari " siaran "). Fungsi ini mengambil data dari satu simpul dan mengirimkannya ke semua proses dalam kelompok proses. Operasi sebaliknya adalah panggilan MPI_Reduce, yang mengambil data dari semua proses dalam kelompok, melakukan operasi (seperti penjumlahan), dan menyimpan hasilnya pada satu simpul. Mengurangi sering berguna di awal atau akhir perhitungan terdistribusi besar, di mana setiap prosesor beroperasi pada bagian dari data dan kemudian menggabungkan ke hasil. Operasi lainnya melakukan tugas-tugas yang lebih canggih, seperti MPI_Alltoall yang mengatur ulang n item dari pengolah data sedemikian rupa sehingga ke node n mendapatkan ke n item data dari masing-masing.
v

G. TIPE DATA Banyak fungsi-fungsi MPI mengharuskan Anda tentukan jenis data yang dikirim antara prosesor. Hal ini karena fungsi-fungsi ini lewat variabel, bukan tipe yang didefinisikan. Jika jenis data adalah satu standar, seperti int, char, MPI ganda, dll, Anda dapat menggunakan tipe data standar seperti MPI_INT, MPI_CHAR, MPI_DOUBLE. Berikut ini adalah contoh dalam C yang melewati sebuah array int dan semua prosesor ingin mengirim array mereka ke root dengan MPI_Gather: array int [100]; int root, total_p, receive_array *;

MPI_Comm_size (comm, & total_p); receive_array = (int *) malloc (total_p * 100 * sizeof (int)); MPI_Gather (array, 100, MPI_INT, receive_array, 100, MPI_INT, akar, comm); Namun, Anda malah mungkin ingin mengirim data sebagai satu blok sebagai lawan 100 ints. Untuk melakukan hal ini menentukan "berdekatan" berasal tipe data. MPI_Datatype newtype; MPI_Type_contiguous (100, MPI_INT, & newtype); MPI_Type_commit (& newtype); MPI_Gather (array, 1, newtype, receive_array, 1, newtype, akar, comm); Melewati kelas atau struktur data tidak bisa menggunakan tipe data standar.

MPI_Type_create_struct menciptakan tipe MPI berasal data dari tipe data MPI_predefined, sebagai berikut: MPI_Type_create_struct int (int jumlah, blocklen int [], MPI_Aint DISP [], MPI_Datatype jenis [], MPI_Datatype * newtype) mana hitung adalah nomor blok, juga jumlah entri dalam] [blocklen, DISP [], dan] ketik [:
y y y

blocklen [] - jumlah elemen dalam setiap blok (array dari integer) DISP] [- byte perpindahan dari setiap blok (array dari integer) jenis] [- jenis unsur di setiap blok (array menangani untuk datatype objek).
vi

The DISP [array] diperlukan karena prosesor membutuhkan variabel harus diarahkan dengan cara tertentu pada memori. Sebagai contoh, Char adalah satu byte dan dapat pergi ke mana saja di memori. Pendek adalah 2 byte, sehingga pergi ke bahkan alamat memori. Panjang 4 byte, ia pergi pada lokasi dibagi 4 dan seterusnya. Compiler mencoba untuk mengakomodasi arsitektur ini dalam struktur kelas atau data dengan padding variabel. Cara paling aman untuk mencari jarak antara variabel yang berbeda dalam sebuah struktur data adalah dengan mendapatkan alamat mereka dengan MPI_Get_address. Fungsi ini menghitung perpindahan dari semua elemen struktur dari awal struktur data. Mengingat struktur data sebagai berikut: typedef struct { int f; pendek p; } A;

typedef struct { A; int pp, vp; } B; Berikut kode C untuk membangun tipe data diturunkan dari MPI: void define_MPI_datatype () {

int blocklen [6] = {1, 1, 1, 1, 1, 1}; / / The dan terakhir elemen pertama menandai mohon dan akhir struktur data DISP MPI_Aint [6]; MPI_Datatype newtype; MPI_Datatype tipe [6] = {MPI_LB, MPI_INT, MPI_SHORT, MPI_INT, MPI_INT, MPI_UB}; B findsize [2]; / / Anda perlu array untuk menetapkan batas atas struktur data MPI_Aint findsize_addr, a_addr, f_addr, p_addr, pp_addr, vp_addr, UB_addr; int error;

MPI_Get_address (& findsize [0], & findsize_addr);


vii

MPI_Get_address (& (findsize [0]) a_addr. A, &); MPI_Get_address (& ((findsize [0]) f_addr. A &). F,); MPI_Get_address (& ((findsize [0]) p_addr. A &). P,); MPI_Get_address (& (findsize [0]) pp_addr. Pp, &); MPI_Get_address (& (findsize [0]) vp_addr. Vp, &); MPI_Get_address (& findsize [1], & UB_addr);

DISP [0] = a_addr - findsize_addr; DISP [1] = f_addr - findsize_addr; DISP [2] = p_addr - findsize_addr; DISP [3] = pp_addr - findsize_addr; DISP [4] = vp_addr - findsize_addr; DISP [5] = UB_addr - findsize_addr;

kesalahan = MPI_Type_create_struct (6, blocklen, DISP, tipe, & newtype); MPI_Type_commit (& newtype); }

H. KONSEP MPI-2 MPI-2 mendefinisikan tiga satu sisi operasi komunikasi, Put, Get dan Acc, menjadi menulis ke memori terpencil, membaca dari memori jauh, dan operasi reduksi pada memori yang sama di sejumlah tugas. Juga pasti, tiga metode yang berbeda untuk sinkronisasi ini komunikasiglobal, berpasangan, dan kunci remote-sebagai spesifikasi tidak menjamin bahwa operasi ini telah terjadi sampai titik sinkronisasi. Jenis panggilan sering bisa berguna untuk algoritma di mana sinkronisasi akan merepotkan (misalnya didistribusikan perkalian matriks ), atau jika diinginkan untuk tugas-tugas untuk dapat menyeimbangkan beban mereka sementara prosesor beroperasi pada data. I. MANAJEMEN PROSES DINAMIS

Aspek kuncinya adalah "kemampuan proses MPI untuk berpartisipasi dalam penciptaan proses MPI baru atau untuk menjalin komunikasi dengan proses MPI yang telah dimulai secara terpisah." MPI-2 spesifikasi menjelaskan tiga interface utama dengan MPI proses
viii

dinamis yang dapat membangun komunikasi, MPI_Comm_spawn, MPI_Comm_accept / MPI_Comm_connect dan MPI_Comm_join. Antarmuka MPI_Comm_spawn memungkinkan proses MPI untuk menelurkan sejumlah contoh dari proses MPI bernama. Yang baru melahirkan serangkaian proses MPI membentuk intracommunicator MPI_COMM_WORLD baru tapi bisa berkomunikasi dengan orang tua dan intercommunicator kembali fungsi. MPI_Comm_spawn_multiple adalah antarmuka alternatif yang memungkinkan contoh yang berbeda akan melahirkan binari berbeda dengan argumen yang berbeda J. INPUT / OUTPUT
[7]

Paralel I / O fitur kadang disebut MPI-IO,

dan merujuk kepada kumpulan fungsi yang

dirancang untuk saya abstrak / O pada sistem manajemen dibagikan kepada MPI, serta memungkinkan file yang akan dengan mudah diakses dalam mode patterned menggunakan fungsionalitas datatype yang ada berasal. Sedikit penelitian yang telah dilakukan pada fitur ini menunjukkan kesulitan untuk kinerja yang baik. Sebagai contoh, beberapa implementasi dari perkalian matriks-vektor jarang menggunakan MPI I / O library malapetaka tidak efisien.

K. Implementasi 1. 'Klasik' cluster dan implementasi superkomputer Bahasa Implementasi MPI tidak dibatasi agar sesuai dengan bahasa atau bahasa itu berusaha untuk mendukung pada saat runtime. Kebanyakan implementasi menggabungkan C, C + + dan bahasa assembly, dan target C, C + +, dan pemrogram Fortran. Binding tersedia untuk bahasa lain, termasuk Perl, Python, Ruby, Java, CL. Pelaksanaan awal dari 1.x standar MPI adalah MPICH , dari Argonne National Laboratory (ANL) dan Mississippi State University . IBM juga adalah pelaksana awal, dan paling awal 90-an superkomputer perusahaan baik MPICH dikomersialisasikan, atau membangun implementasi mereka sendiri. LAM / MPI dari Ohio Supercomputer Center adalah implementasi lain terbuka awal. ANL terus berkembang MPICH untuk lebih dari satu dekade,
ix

dan sekarang menawarkan MPICH 2, menerapkan MPI-2.1 standar. LAM / MPI dan sejumlah upaya MPI lainnya baru-baru ini bergabung untuk membentuk Open MPI . Banyak upaya lain adalah turunan dari MPICH, LAM, dan karya lainnya, termasuk, namun tidak terbatas pada, implementasi komersial dari HP , Intel , dan Microsoft . 2. Python MPI Python implementasi meliputi: pyMPI , mpi4py, pypar, MYMPI, dan submodule MPI di ScientificPython . PyMPI ini penting karena merupakan interpreter python varian, sementara pypar, MYMPI, dan modul ScientificPython adalah modul impor. Mereka membuat pekerjaan koder untuk memutuskan mana panggilan ke MPI_Init milik. Baru-baru ini terkenal Boost C + + Libraries diperoleh Boost: yang termasuk MPI Python Bindings. MPI ini adalah bantuan khusus untuk pencampuran C + + dan Python. 3. OCaml The OCamlMPI Modul mengimplementasikan subset besar fungsi MPI dan sedang digunakan aktif dalam komputasi ilmiah. Sebuah ribu sebelas program baris OCaml adalah "MPI-ified" menggunakan modul, dengan garis tambahan 500 kode dan restrukturisasi sedikit dan berlari dengan hasil yang sangat baik pada hingga 170 node dalam sebuah superkomputer. 4. Java Meskipun Java tidak memiliki MPI resmi mengikat, beberapa kelompok berusaha untuk menjembatani dua, dengan derajat yang berbeda keberhasilan dan kompatibilitas. Salah satu upaya pertama adalah Carpenter mpiJava Bryan, dasarnya kumpulan JNI pembungkus ke library MPI C lokal, sehingga dalam pelaksanaan hibrida dengan portabilitas terbatas, yang juga harus dikompilasi terhadap library MPI spesifik yang digunakan. Namun, proyek ini asli juga didefinisikan mpiJava API (a de-facto MPI API untuk Java yang diikuti setara C + + binding) yang lain berikutnya Jawa MPI proyek diadopsi. Alternatif, digunakan API kurang MPJ API, dirancang untuk menjadi lebih berorientasi objek dan dekat dengan Sun Microsystems coding konvensi '. Selain API, Java MPI library dapat berupa tergantung pada sebuah library MPI setempat, atau message passing melaksanakan fungsi di Jawa, sementara beberapa seperti P2P-MPI juga menyediakan peer-to-peer fungsi dan mengijinkan operasi platform campuran.

Beberapa bagian yang paling menantang Jawa / MPI timbul dari karakteristik Jawa seperti kurangnya eksplisit pointer dan ruang alamat linier memori untuk objek tersebut, yang membuat mentransfer array multidimensi dan benda-benda kompleks tidak efisien. Workarounds biasanya melibatkan pengiriman satu baris pada satu waktu dan / atau melakukan eksplisit de- serialisasi dan casting di kedua pengiriman dan penerimaan berakhir, mensimulasikan seperti C atau FORTRAN array dengan menggunakan sebuah array satu dimensi, dan pointer ke tipe primitif oleh penggunaan elemen array tunggal, sehingga mengakibatkan gaya pemrograman cukup jauh dari konvensi Jawa. Java pesan dapat digunakan paling lewat sistem MPJ Express. Versi terbaru dapat dijalankan dalam konfigurasi cluster dan multicore. Dalam konfigurasi cluster, dapat menjalankan aplikasi Java pada paralel cluster dan awan. Berikut Java socket atau khusus I / O interkoneksi seperti Myrinet dapat mendukung pesan antara MPJ Express proses. Dalam konfigurasi multicore, aplikasi Java paralel dijalankan pada prosesor multicore. Dalam mode ini, proses MPJ Express diwakili oleh benang Jawa. Pengguna baru didorong untuk mulai di modus multicore sebelum pindah ke cluster atau awan. L. IMPLEMENTASI HARDWARE Penelitian hardware MPI MPI berfokus pada pelaksanaan langsung pada perangkat keras, misalnya melalui Processor--memori , membangun operasi MPI ke microcircuitry dari RAM chip di setiap node. Dengan implikasi, pendekatan ini tidak tergantung pada bahasa, OS atau CPU, tetapi tidak dapat dengan mudah diperbarui atau dihapus. Pendekatan lain adalah untuk menambahkan akselerasi hardware untuk satu atau lebih bagian dari operasi, termasuk pengolahan hardware antrian MPI dan menggunakan RDMA langsung mentransfer data antara memori dan antarmuka jaringan tanpa intervensi CPU atau kernel OS. Contoh program Berikut ini adalah "Hello World" di MPI ditulis dalam C. Dalam contoh ini, kita mengirim "halo" pesan untuk masing-masing prosesor, memanipulasinya sepele, mengembalikan hasil proses utama, dan mencetak pesan. /* "Hello World" Program Test MPI */
xi

# Include <mpi.h> # Include <stdio.h> # Include <string.h>

# Define BUFSIZE 128 # Define TAG 0

int main (int argc, char * argv []) { idstr char [32]; char buff [BUFSIZE]; int numprocs; int myid; int i; MPI_Status stat;

MPI_Init (& argc, & argv); / * semua program MPI mulai dengan MPI_Init; 'N' proses semua ada setelahnya * / MPI_Comm_size (MPI_COMM_WORLD, & numprocs); / * mengetahui seberapa besar dunia SPMD ini * / MPI_Comm_rank (MPI_COMM_WORLD, & myid); / * dan proses 'Peringkat ini * /

/ * Pada titik ini, semua program yang berjalan setara, peringkat membedakan peran program dalam model SPMD, dengan pangkat 0 sering digunakan khusus ... * / jika (myid == 0) { printf ("% d: Kami memiliki% d prosesor \ n", myid, numprocs); for (i = 1; i <numprocs; i + +) { sprintf (buff, "Hello% D!", i); MPI_Send (buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD); } for (i = 1; i <numprocs; i + +) { MPI_Recv (buff, BUFSIZE, MPI_CHAR, i, TAG, MPI_COMM_WORLD, & stat);
xii

printf ("% d:% s \ n", myid, buff); } } lain { / * Menerima dari 0 peringkat: * / MPI_Recv (buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD, & stat); sprintf (idstr, "Processor% d", myid); strncat (buff, idstr, BUFSIZE - 1); strncat (buff, "laporan untuk tugas \ n", BUFSIZE - 1); / * Kirim ke peringkat 0: * / MPI_Send (buff, BUFSIZE, MPI_CHAR, 0, TAG, MPI_COMM_WORLD); }

MPI_Finalize (); / * Program MPI diakhiri dengan MPI Finalisasi, ini adalah titik sinkronisasi * lemah / return 0; } Perhatikan bahwa lingkungan runtime untuk pelaksanaan MPI digunakan (sering disebut mpirun atau mpiexec) menumbuhkan beberapa salinan program, dengan jumlah salinan menentukan jumlah peringkat proses MPI_COMM_WORLD, yang merupakan descriptor buram untuk komunikasi antara rangkaian proses. Single A-Program-Multiple-Data ( SPMD ) model pemrograman dengan demikian difasilitasi, tetapi tidak diperlukan; banyak memungkinkan beberapa implementasi MPI, berbeda, executables akan dimulai di pekerjaan MPI yang sama. Setiap proses memiliki peringkat sendiri, jumlah proses di dunia, dan kemampuan untuk berkomunikasi di antara mereka baik dengan point-to-point (mengirim / menerima) komunikasi, atau dengan komunikasi bersama antar kelompok. Hal ini cukup bagi MPI untuk memberikan program SPMD gaya dengan MPI_COMM_WORLD, peringkat sendiri, dan ukuran dunia untuk memungkinkan algoritma untuk memutuskan apa yang harus dilakukan. Dalam situasi yang lebih realistis, I / O adalah lebih hati-hati dikelola dari dalam contoh ini. MPI tidak menjamin bagaimana POSIX I / O benar-benar akan bekerja pada sistem tertentu, tetapi umumnya tidak bekerja, setidaknya dari peringkat 0.

xiii

MPI menggunakan gagasan proses daripada prosesor. salinan Program yang dipetakan ke prosesor oleh runtime MPI. Dalam hal ini, mesin paralel dapat peta untuk 1 prosesor fisik, atau N dimana N merupakan jumlah prosesor yang tersedia, atau sesuatu di antaranya. Untuk speedup paralel maksimum, prosesor lebih fisik yang digunakan. Contoh ini menyesuaikan perilakunya dengan ukuran dunia N, sehingga juga berusaha untuk skala konfigurasi runtime tanpa kompilasi untuk setiap variasi ukuran, meskipun keputusan runtime mungkin bervariasi tergantung pada jumlah absolut concurrency yang tersedia. M. MPI-2 Adopsi Sementara adopsi MPI-1.2 telah universal, terutama dalam komputasi cluster, penerimaan MPI-2.1 telah lebih terbatas. Isu meliputi: 1. MPI-2 implementasi termasuk I / O dan manajemen proses yang dinamis, dan ukuran middleware secara substansial lebih besar. Kebanyakan situs yang menggunakan sistem penjadwalan batch tidak dapat mendukung proses manajemen dinamis. -2's paralel MPI I / O adalah diterima dengan baik. 2. Banyak 1.2 MPI-program dikembangkan sebelum MPI-2. keprihatinan Portabilitas awalnya melambat, walaupun dukungan yang lebih luas telah berkurang ini. 3. Banyak aplikasi MPI-1.2 hanya menggunakan subset dari yang standar (16-25 fungsi) dengan tidak perlu nyata untuk MPI-2 fungsi.

xiv