Ini ialah arahan mpy yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
mpy - Mesej Lulus Yorick
SINOPSIS
mpirun -np mp_size mpy [ -j pfile1.i [ -j pfile2.i [ ... ]]] [ -i fail1.i [ -i fail2.i [
... ]]]
mpirun -np mp_size mpy -batch fail.i
DESCRIPTION
yorick ialah bahasa yang ditafsirkan seperti Asas atau Lisp, tetapi jauh lebih pantas. Lihat Yorick (1) kepada
ketahui lebih lanjut mengenainya.
Mpy ialah versi selari daripada yorick berdasarkan Message Passing Interface (MPI). The
sintaks yang tepat untuk melancarkan kerja selari bergantung pada persekitaran MPI anda. Ia mungkin
diperlukan untuk melancarkan daemon khas sebelum memanggil mirun atau perintah yang setara.
Penjelasan
Pakej mpy antara muka yorick ke perpustakaan pengaturcaraan selari MPI. MPI bermaksud
Antara Muka Mesej Lulus; ideanya adalah untuk menyambungkan beberapa contoh yorick itu
berkomunikasi sesama mereka melalui mesej. Mpy boleh melakukan sama ada mudah, sangat selari
tugasan sebagai program yang ditafsirkan tulen, atau ia boleh memulakan dan mengemudi kompleks yang disusun secara sewenang-wenangnya
pakej yang bebas untuk menggunakan API MPI yang disusun. API yang ditafsirkan tidak dimaksudkan
menjadi pembungkus MPI; sebaliknya ia dilucutkan ke tahap minimum.
Ini adalah versi 2 mpy (dikeluarkan pada 2010); ia tidak serasi dengan versi 1 mpy
(dikeluarkan pada pertengahan 1990-an), kerana versi 1 mempunyai banyak kelemahan reka bentuk menjadikannya sangat
sukar untuk menulis program tanpa syarat kaum, dan mustahil untuk skala kepada berjuta-juta
daripada pemproses. Walau bagaimanapun, anda boleh menjalankan kebanyakan program mpy versi 1 di bawah versi 2 dengan melakukan
mp_include,"mpy1.i" sebelum anda mp_include mana-mana fail yang mentakrifkan tugas selari mpy1 (iaitu
sebelum mana-mana fail mengandungi panggilan ke mp_task.)
Penggunaan nota
Persekitaran MPI tidak benar-benar ditentukan oleh piawaian; persekitaran sedia ada ialah
sangat kasar, dan sangat menyukai pekerjaan kelompok bukan interaktif. Bilangan proses ialah
ditetapkan sebelum MPI bermula; setiap proses mempunyai pangkat, nombor dari 0 hingga satu kurang daripada
bilangan proses. Anda menggunakan pangkat sebagai alamat untuk menghantar mesej, dan prosesnya
menerima mesej boleh menyiasat untuk melihat pangkat yang telah menghantar mesej kepadanya, dan sudah tentu
menerima mesej tersebut.
Masalah utama dalam menulis program penghantaran mesej ialah mengendalikan acara atau mesej
tiba dalam susunan yang tidak dirancang. MPI hanya menjamin bahawa urutan mesej dihantar oleh
pangkat A hingga pangkat B akan tiba mengikut pesanan yang dihantar. Tiada jaminan tentang pesanan
ketibaan mesej tersebut berbanding dengan mesej yang dihantar kepada B dari peringkat ketiga C. Dalam
khususnya, katakan A menghantar mesej kepada B, kemudian A menghantar mesej kepada C (atau bertukar
beberapa mesej dengan C) yang mengakibatkan C menghantar mesej kepada B. Mesej daripada C
mungkin tiba di B sebelum mesej daripada A. Program MPI yang tidak membenarkan ini
kemungkinan mempunyai pepijat yang dipanggil "keadaan perlumbaan". Keadaan perlumbaan mungkin sangat halus,
terutamanya apabila bilangan proses adalah besar.
Antara muka yang ditafsirkan mpy asas terdiri daripada dua pembolehubah:
mp_size = bilangan proses
mp_rank = pangkat proses ini dan empat fungsi:
mp_send, to, msg; // hantar msg ke pangkat "ke"
msg = mp_recv(dari); // terima msg dari pangkat "dari"
pangkat = mp_probe(blok); // tanya penghantar mesej yang belum selesai
mp_exec, rentetan; // menghuraikan dan melaksanakan rentetan pada setiap pangkat
Anda memanggil mp_exec pada kedudukan 0 untuk memulakan tugasan selari. Apabila program utama dibuat
selesai, semua pangkat selain daripada kedudukan 0 kembali ke gelung terbiar, menunggu yang seterusnya
mp_exec. Kedudukan 0 mengambil baris input seterusnya dari stdin (iaitu, menunggu input padanya
segera dalam sesi interaktif), atau menamatkan semua proses jika tiada lagi input
tersedia dalam sesi kelompok.
Pakej mpy mengubah suai cara yorick mengendalikan arahan penghurai #include dan termasuk
dan memerlukan fungsi. Iaitu, jika tugas selari sedang berjalan (iaitu, fungsi dimulakan
oleh mp_exec), ini semua menjadi operasi kolektif. Iaitu, peringkat 0 membaca keseluruhan
kandungan fail, dan menghantar kandungan ke proses lain sebagai mesej MPI (seperti
mp_exec kandungan fail). Setiap proses selain daripada peringkat 0 hanya berjalan semasa
tugas selari; di luar tugasan selari apabila hanya peringkat 0 sedang berjalan (dan semua pangkat lain
sedang menunggu mp_exec seterusnya), arahan #include dan sertakan dan perlukan
fungsi kembali kepada operasi bersiri biasa, hanya menjejaskan kedudukan 0.
Apabila mpy bermula, ia berada dalam mod selari, supaya semua fail yorick termasuk apabila ia
bermula (fail dalam Y_SITE/i0) disertakan sebagai operasi kolektif. Tanpa ini
ciri, setiap proses yorick akan cuba membuka dan membaca permulaan termasuk fail,
melebihkan sistem fail sebelum mpy dimulakan. Lulus kandungan ini
fail sebagai mesej MPI adalah satu-satunya cara untuk memastikan terdapat lebar jalur yang mencukupi untuk setiap
proses untuk membaca kandungan satu fail.
Fail terakhir yang disertakan semasa permulaan ialah sama ada fail yang dinyatakan dalam pilihan -batch, atau
fail custom.i. Untuk mengelakkan masalah dengan kod dalam custom.i yang mungkin tidak selamat untuk
pelaksanaan selari, mpy tidak mencari custom.i, tetapi untuk custommp.i sebaliknya. The
arahan dalam fail -batch atau dalam custommp.i dilaksanakan dalam mod bersiri pada kedudukan 0
sahaja. Begitu juga, mpy mengatasi fungsi process_argv biasa, supaya -i dan lain-lain
pilihan baris arahan diproses hanya pada kedudukan 0 dalam mod bersiri. Niat dalam semua ini
kes adalah untuk membuat -batch atau custommp.i atau -i termasuk fail dilaksanakan hanya pada kedudukan 0, sebagai
jika anda telah menaipnya di sana secara interaktif. Anda bebas untuk menghubungi mp_exec daripada mana-mana daripada ini
fail untuk memulakan tugas selari, tetapi fail itu sendiri adalah bersiri.
Pilihan baris arahan tambahan ditambahkan pada set biasa:
mpy -j somefile.i
termasuk somefile.i dalam mod selari pada semua pangkat (sekali lagi, -i other.i termasuk other.i sahaja
pada kedudukan 0 dalam mod bersiri). Jika terdapat berbilang pilihan -j, selari termasuk berlaku
dalam susunan baris arahan. Jika pilihan -j dan -i bercampur, bagaimanapun, semua -j termasuk berlaku
sebelum sebarang -i termasuk.
Sebagai kesan sampingan daripada kerumitan fungsi include dalam mpy, ciri autoload ialah
kurang upaya; jika kod anda sebenarnya mencetuskan termasuk dengan memanggil fungsi autoloaded, mpy
akan terhenti dengan kesilapan. Anda mesti memuatkan secara eksplisit sebarang fungsi yang diperlukan untuk selari
tugasan menggunakan fungsi memerlukan memanggil diri mereka di dalam tugasan selari.
Fungsi mp_send boleh menghantar sebarang susunan yorick berangka (jenis char, short, int, long,
terapung, berganda atau kompleks), atau nilai rentetan skalar. Proses menghantar mesej
melalui MPI hanya mengekalkan bilangan elemen, jadi mp_recv hanya menghasilkan nilai skalar atau
tatasusunan nilai 1D, tidak kira apa dimensi yang dihantar kepada mp_send.
Fungsi mp_recv memerlukan anda untuk menentukan pengirim mesej yang anda maksudkan
menerima. Ia menyekat sehingga mesej benar-benar tiba daripada pengirim itu, beratur apa-apa
mesej daripada penghantar lain yang mungkin tiba lebih awal. Mesej beratur akan menjadi
mendapatkannya semula pesanan yang diterima apabila anda menghubungi mp_recv untuk pengirim yang sepadan. The
ciri beratur menjadikannya lebih mudah untuk mengelakkan jenis keadaan perlumbaan yang paling mudah
apabila anda menulis program selari yang ditafsirkan.
Fungsi mp_probe mengembalikan senarai semua penghantar mesej beratur (atau tiada jika
barisan kosong). Panggil mp_probe(0) untuk kembali serta-merta, walaupun baris gilir kosong.
Hubungi mp_probe(1) untuk menyekat jika baris gilir kosong, kembali hanya apabila sekurang-kurangnya satu mesej
tersedia untuk mp_recv. Panggil mp_probe(2) untuk menyekat sehingga mesej baharu tiba, walaupun
beberapa mesej tersedia pada masa ini.
Fungsi mp_exec menggunakan fanout logaritma - pangkat 0 dihantar ke proses F, setiap satu
yang menghantar ke F lagi, dan seterusnya, sehingga semua proses mempunyai mesej. Sekali proses
menyelesaikan semua operasi penghantarannya, ia menghuraikan dan melaksanakan kandungan mesej.
Algoritma fanout mencapai N proses dalam log ke asas F bagi N langkah. Proses F
pangkat 0 menghantar ke adalah pangkat 1, 2, 3, ..., F. Secara umumnya, proses dengan pangkat r menghantar ke
berpangkat r*F+1, r*F+2, ..., r*F+F (apabila ini kurang daripada N-1 untuk proses N). Set ini
dipanggil "kakitangan" pangkat r. Kedudukan dengan r>0 menerima mesej daripada pangkat (r-1)/F,
yang dipanggil "bos" r. Panggilan mp_exec saling beroperasi dengan baris gilir mp_recv;
dalam erti kata lain, mesej daripada pangkat selain daripada bos semasa mp_execut fanout akan menjadi
beratur untuk mendapatkan semula kemudian oleh mp_recv. (Tanpa ciri ini, sebarang tugas selari yang
menggunakan corak mesej selain fanout logaritma akan terdedah kepada perlumbaan
syarat.)
Fanout logaritma dan setara dalamannya sangat berguna sehingga mpy menyediakan pasangan
fungsi peringkat lebih tinggi yang menggunakan corak fanout yang sama seperti mp_exec:
mp_edaran, msg;
jumlah = mp_handin(nilai);
Untuk menggunakan mp_handout, kedudukan 0 mengira mesej, kemudian semua pangkat memanggil mp_handout, yang menghantar mesej
(output pada semua pangkat selain 0) di mana-mana dengan fanout yang sama seperti mp_exec. Untuk menggunakan
mp_handin, setiap proses mengira nilai, kemudian memanggil mp_handin, yang mengembalikan jumlah
nilai mereka sendiri dan semua kakitangan mereka, supaya pada pangkat 0 mp_handin mengembalikan jumlah
nilai daripada setiap proses.
Anda boleh memanggil mp_handin sebagai fungsi tanpa hujah untuk bertindak sebagai penyegerakan; bila
pangkat 0 diteruskan selepas panggilan sedemikian, anda tahu bahawa setiap pangkat lain telah mencapai tahap itu.
Semua tugasan selari (apa-apa sahaja yang bermula dengan mp_exec) mesti diselesaikan dengan panggilan ke mp_handin,
atau jaminan yang setara bahawa semua proses telah kembali ke keadaan terbiar apabila tugas itu
tamat pada kedudukan 0.
Anda boleh mendapatkan semula atau menukar parameter fanout F menggunakan fungsi mp_nfan. lalai
nilai ialah 16, yang sepatutnya munasabah walaupun untuk bilangan proses yang sangat besar.
Satu tugas selari khas dipanggil mp_connect, yang boleh anda gunakan untuk memberi tafsiran suapan
baris arahan kepada mana-mana satu pangkat bukan 0, manakala semua pangkat lain duduk melahu. Kedudukan 0 duduk dalam a
gelung membaca papan kekunci dan menghantar baris ke pangkat "bersambung", yang dilaksanakan
mereka, dan menghantar pengakuan kembali ke kedudukan 0. Anda menjalankan fungsi mp_disconnect ke
selesaikan tugasan selari dan turun semula ke kedudukan 0.
Akhir sekali, nota tentang pemulihan ralat. Sekiranya berlaku ralat semasa tugasan selari,
mpy cuba untuk keluar dari mp_exec dengan anggun, supaya apabila kedudukan 0 kembali, semua kedudukan lain
diketahui melahu, bersedia untuk mp_exec seterusnya. Prosedur ini akan bertahan selama-lamanya jika ada
salah satu proses berada dalam gelung tak terhingga, atau sebaliknya dalam keadaan yang tidak akan pernah berlaku
panggil mp_send, mp_recv, atau mp_probe, kerana MPI tidak menyediakan cara untuk menghantar isyarat yang
mengganggu semua proses. (Ini adalah salah satu cara persekitaran MPI
"kasar".) Proses peringkat 0 ditinggalkan dengan peringkat proses pertama yang melaporkan a
kesalahan, ditambah kiraan bilangan proses yang rosak kerana sebab selain daripada menjadi
menghantar mesej bahawa pangkat lain telah disalahkan. Proses faulting pertama boleh memasuki dbug
mod melalui mp_connect; gunakan mp_disconnect atau dbexit untuk kembali ke mod bersiri pada kedudukan 0.
Pilihan
-j fail.i termasuk fail sumber Yorick fail.i kerana mpy bermula dalam mod selari
pada semua peringkat. Ini bersamaan dengan fungsi mp_include selepas mpy
telah bermula.
-i fail.i termasuk fail sumber Yorick fail.i apabila mpy bermula, dalam mod bersiri.
Ini bersamaan dengan arahan #include selepas mpy telah bermula.
-batch fail.i termasuk fail sumber Yorick fail.i apabila mpy bermula, dalam mod bersiri.
Fail penyesuaian anda custommp.i, jika ada, adalah tidak baca, dan mpy ialah
diletakkan dalam mod kelompok. Gunakan arahan bantuan pada fungsi kelompok
(bantuan, kelompok) untuk mengetahui lebih lanjut tentang mod kelompok. Dalam mod kelompok, semua
kesilapan membawa maut; biasanya, mpy akan menghentikan pelaksanaan dan menunggu lebih banyak lagi
input selepas ralat.
Gunakan mpy dalam talian menggunakan perkhidmatan onworks.net