ນີ້ແມ່ນຄໍາສັ່ງ mpy.mpich2 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
mpy - ຂໍ້ຄວາມຜ່ານ Yorick
ສະຫຼຸບສັງລວມ
mpirun -np mp_size ມອນ [ - ຈ pfile1.i [ - ຈ pfile2.i [... ]]] [ -i file1.i [ -i file2.i [
... ]]]
mpirun -np mp_size ມອນ - ຊຸດ file.i
ລາຍລະອຽດ
ແຈັກກີ້ ເປັນພາສາທີ່ໄດ້ຮັບການຕີລາຄາເຊັ່ນ: ພື້ນຖານຫຼື Lisp, ແຕ່ໄວກວ່າ. ເບິ່ງ ໂຢຣິກ (1) ໄປ
ຮຽນຮູ້ເພີ່ມເຕີມກ່ຽວກັບມັນ.
Mpy ເປັນສະບັບຂະຫນານຂອງ ແຈັກກີ້ ອີງໃສ່ Message Passing Interface (MPI). ໄດ້
syntax ທີ່ແນ່ນອນສໍາລັບການເປີດຕົວວຽກຂະຫນານແມ່ນຂຶ້ນກັບສະພາບແວດລ້ອມ MPI ຂອງທ່ານ. ມັນອາດຈະເປັນ
ມີຄວາມຈໍາເປັນເພື່ອເປີດຕົວ daemon ພິເສດກ່ອນທີ່ຈະໂທຫາ mirun ຫຼືຄໍາສັ່ງທຽບເທົ່າ.
ຄໍາອະທິບາຍ
ຊຸດ mpy ເຊື່ອມຕໍ່ yorick ກັບຫ້ອງສະຫມຸດການຂຽນໂປຼແກຼມຂະຫນານ MPI. MPI ຫຍໍ້ມາຈາກ
ຂໍ້ຄວາມຜ່ານການໂຕ້ຕອບ; ແນວຄວາມຄິດແມ່ນເພື່ອເຊື່ອມຕໍ່ຫຼາຍຕົວຢ່າງຂອງ yorick ວ່າ
ຕິດຕໍ່ສື່ສານລະຫວ່າງເຂົາເຈົ້າຜ່ານຂໍ້ຄວາມ. Mpy ສາມາດປະຕິບັດແບບງ່າຍດາຍ, ຂະຫນານສູງ
ວຽກງານເປັນໂຄງການຕີຄວາມບໍລິສຸດ, ຫຼືມັນສາມາດເລີ່ມຕົ້ນແລະການຊີ້ນໍາການສັງລວມສະລັບສັບຊ້ອນ arbitrarily
ແພັກເກດທີ່ສາມາດໃຊ້ MPI API ທີ່ລວບລວມໄດ້ໂດຍບໍ່ເສຍຄ່າ. API ທີ່ແປບໍ່ໄດ້ມີຈຸດປະສົງ
ເປັນ wrapper MPI; ແທນທີ່ຈະເປັນມັນຖືກລອກອອກໄປໃນຕໍາ່ສຸດທີ່ເປົ່າ.
ນີ້ແມ່ນສະບັບ 2 ຂອງ mpy (ປ່ອຍອອກມາເມື່ອປີ 2010); ມັນບໍ່ເຂົ້າກັນໄດ້ກັບເວີຊັນ 1 ຂອງ mpy
(ປ່ອຍອອກມາໃນກາງຊຸມປີ 1990), ເນື່ອງຈາກວ່າສະບັບ 1 ມີຂໍ້ບົກພ່ອງໃນການອອກແບບຈໍານວນຫລາຍເຮັດໃຫ້ມັນຫຼາຍ.
ຍາກທີ່ຈະຂຽນໂຄງການທີ່ບໍ່ມີເງື່ອນໄຂເຊື້ອຊາດ, ແລະເປັນໄປບໍ່ໄດ້ທີ່ຈະຂະຫນາດເປັນລ້ານ
ຂອງໂປເຊດເຊີ. ຢ່າງໃດກໍຕາມ, ທ່ານສາມາດດໍາເນີນການຫຼາຍທີ່ສຸດສະບັບ 1 mpy ໂຄງການພາຍໃຕ້ການສະບັບ 2 ໂດຍການເຮັດ
mp_include,"mpy1.i" ກ່ອນທີ່ທ່ານຈະ mp_include ໄຟລ໌ໃດກໍານົດວຽກງານຂະຫນານ mpy1 (ນັ້ນແມ່ນ.
ກ່ອນທີ່ໄຟລ໌ໃດຫນຶ່ງທີ່ມີການໂທຫາ mp_task.)
ການນໍາໃຊ້ ອ່ືນ
ສະພາບແວດລ້ອມ MPI ບໍ່ໄດ້ຖືກກໍານົດຢ່າງແທ້ຈິງໂດຍມາດຕະຖານ; ສະພາບແວດລ້ອມທີ່ມີຢູ່ແລ້ວ
crude ຫຼາຍ, ແລະຢ່າງແຂງແຮງ batch ວຽກທີ່ບໍ່ມີການໂຕ້ຕອບ. ຈໍານວນຂອງຂະບວນການແມ່ນ
ແກ້ໄຂກ່ອນ MPI ເລີ່ມຕົ້ນ; ແຕ່ລະຂະບວນການມີອັນດັບ, ຕົວເລກຈາກ 0 ຫາຫນຶ່ງຫນ້ອຍກວ່າ
ຈໍານວນຂະບວນການ. ທ່ານໃຊ້ອັນດັບເປັນທີ່ຢູ່ເພື່ອສົ່ງຂໍ້ຄວາມ, ແລະຂະບວນການ
ການໄດ້ຮັບຂໍ້ຄວາມສາມາດ probe ເພື່ອເບິ່ງວ່າອັນດັບໃດໄດ້ສົ່ງຂໍ້ຄວາມໄປຫາມັນ, ແລະແນ່ນອນ
ໄດ້ຮັບຂໍ້ຄວາມເຫຼົ່ານັ້ນ.
ບັນຫາໃຫຍ່ໃນການຂຽນໂປຼແກຼມຖ່າຍທອດຂໍ້ຄວາມແມ່ນການຈັດການເຫດການຫຼືຂໍ້ຄວາມ
ມາຮອດໃນຄໍາສັ່ງທີ່ບໍ່ໄດ້ວາງແຜນໄວ້. MPI ຮັບປະກັນພຽງແຕ່ວ່າລໍາດັບຂອງຂໍ້ຄວາມທີ່ສົ່ງໂດຍ
ອັນດັບ A ຫາອັນດັບ B ຈະມາຮອດໃນຄໍາສັ່ງທີ່ສົ່ງ. ບໍ່ມີການຮັບປະກັນກ່ຽວກັບຄໍາສັ່ງຂອງ
ການມາຮອດຂອງຂໍ້ຄວາມເຫຼົ່ານັ້ນທີ່ກ່ຽວຂ້ອງກັບຂໍ້ຄວາມທີ່ຖືກສົ່ງໄປຫາ B ຈາກອັນດັບທີສາມ C. In
ໂດຍສະເພາະ, ສົມມຸດວ່າ A ສົ່ງຂໍ້ຄວາມໄປຫາ B, ຫຼັງຈາກນັ້ນ A ສົ່ງຂໍ້ຄວາມໄປຫາ C (ຫຼືແມ້ກະທັ້ງການແລກປ່ຽນ
ຂໍ້ຄວາມຈໍານວນຫນຶ່ງທີ່ມີ C) ທີ່ສົ່ງຜົນໃຫ້ C ສົ່ງຂໍ້ຄວາມໄປ B. ຂໍ້ຄວາມຈາກ C
ອາດຈະມາຮອດ B ກ່ອນຂໍ້ຄວາມຈາກ A. ໂຄງການ MPI ທີ່ບໍ່ອະນຸຍາດໃຫ້ສໍາລັບການນີ້
ຄວາມເປັນໄປໄດ້ມີແມງໄມ້ທີ່ເອີ້ນວ່າ "ສະພາບເຊື້ອຊາດ". ເງື່ອນໄຂການເຊື້ອຊາດອາດຈະລະອຽດອ່ອນທີ່ສຸດ,
ໂດຍສະເພາະໃນເວລາທີ່ຈໍານວນຂອງຂະບວນການມີຂະຫນາດໃຫຍ່.
ການໂຕ້ຕອບການຕີຄວາມຫມາຍ mpy ພື້ນຖານປະກອບດ້ວຍສອງຕົວແປ:
mp_size = ຈໍານວນຂະບວນການ
mp_rank = ອັນດັບຂອງຂະບວນການນີ້ແລະສີ່ຫນ້າທີ່:
mp_send, to, msg; // ສົ່ງຂໍ້ຄວາມເພື່ອຈັດອັນດັບ "ເຖິງ"
msg = mp_recv(ຈາກ); // ໄດ້ຮັບ msg ຈາກອັນດັບ "ຈາກ"
ranks = mp_probe(block); // ສອບຖາມຜູ້ສົ່ງຂໍ້ຄວາມທີ່ຍັງຄ້າງຢູ່
mp_exec, ຊ່ອຍແນ່; // parse ແລະປະຕິບັດ string ໃນທຸກໆອັນດັບ
ທ່ານໂທຫາ mp_exec ໃນອັນດັບ 0 ເພື່ອເລີ່ມຕົ້ນວຽກງານຂະຫນານ. ໃນເວລາທີ່ໂຄງການຕົ້ນຕໍດັ່ງນັ້ນຈຶ່ງສ້າງ
ສຳເລັດແລ້ວ, ອັນດັບທັງໝົດທີ່ນອກເໜືອໄປຈາກອັນດັບ 0 ກັບຄືນສູ່ວົງຮອບທີ່ບໍ່ມີປະໂຫຍດ, ລໍຖ້າຕໍ່ໄປ
mp_exec. ອັນດັບ 0 ເລືອກແຖວການປ້ອນຂໍ້ມູນຕໍ່ໄປຈາກ stdin (ນັ້ນແມ່ນລໍຖ້າການປ້ອນຂໍ້ມູນຢູ່ຂອງມັນ
prompt ໃນເຊດຊັນແບບໂຕ້ຕອບ), ຫຼືຢຸດຂະບວນການທັງຫມົດຖ້າບໍ່ມີການປ້ອນຂໍ້ມູນເພີ່ມເຕີມ
ມີໃຫ້ຢູ່ໃນກອງປະຊຸມ batch.
ຊຸດ mpy ດັດແປງວິທີທີ່ yorick ຈັດການກັບ #include parser directive, ແລະປະກອບມີ
ແລະຮຽກຮ້ອງໃຫ້ມີຫນ້າທີ່. ຄື, ຖ້າວຽກງານຂະຫນານກໍາລັງແລ່ນ (ນັ້ນແມ່ນ, ຫນ້າທີ່ເລີ່ມຕົ້ນ
ໂດຍ mp_exec), ທັງຫມົດເຫຼົ່ານີ້ກາຍເປັນການດໍາເນີນງານລວມ. ນັ້ນແມ່ນ, ອັນດັບ 0 ອ່ານທັງຫມົດ
ເນື້ອໃນຂອງໄຟລ໌, ແລະສົ່ງເນື້ອຫາໃນຂະບວນການອື່ນໆເປັນຂໍ້ຄວາມ MPI (ເຊັ່ນ:
mp_exec ຂອງເນື້ອໃນໄຟລ໌). ທຸກໆຂະບວນການນອກເໜືອໄປຈາກອັນດັບ 0 ແມ່ນພຽງແຕ່ແລ່ນໃນລະຫວ່າງ
ວຽກງານຂະຫນານ; ຢູ່ນອກວຽກງານຂະຫນານເມື່ອພຽງແຕ່ອັນດັບ 0 ກໍາລັງແລ່ນ (ແລະອັນດັບອື່ນໆທັງຫມົດ
ກໍາລັງລໍຖ້າ mp_exec ຕໍ່ໄປ), #include directive and the include and require
ຟັງຊັນກັບຄືນສູ່ການປະຕິບັດ serial ປົກກະຕິຂອງພວກເຂົາ, ມີຜົນກະທົບພຽງແຕ່ອັນດັບ 0.
ເມື່ອ mpy ເລີ່ມຕົ້ນ, ມັນຢູ່ໃນຮູບແບບຂະຫນານ, ດັ່ງນັ້ນໄຟລ໌ທັງຫມົດ yorick ປະກອບມີເວລາທີ່ມັນ
ເລີ່ມຕົ້ນ (ໄຟລ໌ໃນ Y_SITE/i0) ຖືກລວມເຂົ້າເປັນການດໍາເນີນງານລວມ. ໂດຍບໍ່ມີການນີ້
ຄຸນນະສົມບັດ, ທຸກໆຂະບວນການ yorick ຈະພະຍາຍາມເປີດແລະອ່ານການເລີ່ມຕົ້ນປະກອບມີໄຟລ໌,
overloading ລະບົບໄຟລ໌ກ່ອນທີ່ mpy ເຄີຍເລີ່ມຕົ້ນ. ຖ່າຍທອດເນື້ອໃນເຫຼົ່ານີ້
ໄຟລ໌ເປັນຂໍ້ຄວາມ MPI ແມ່ນວິທີດຽວທີ່ຈະຮັບປະກັນວ່າມີແບນວິດພຽງພໍສໍາລັບທຸກໆ
ຂະບວນການອ່ານເນື້ອໃນຂອງໄຟລ໌ດຽວ.
ໄຟລ໌ສຸດທ້າຍລວມຢູ່ໃນການເລີ່ມຕົ້ນແມ່ນໄຟລ໌ທີ່ລະບຸໄວ້ໃນທາງເລືອກ -batch, ຫຼື
ໄຟລ໌ custom.i. ເພື່ອຫຼີກເວັ້ນບັນຫາກັບລະຫັດໃນ custom.i ທີ່ອາດຈະບໍ່ປອດໄພສໍາລັບ
ການປະຕິບັດຂະຫນານ, mpy ບໍ່ໄດ້ຊອກຫາ custom.i, ແຕ່ສໍາລັບ custommp.i ແທນ. ໄດ້
ຄໍາແນະນໍາໃນໄຟລ໌ -batch ຫຼືໃນ custommp.i ແມ່ນປະຕິບັດໃນຮູບແບບ serial ໃນອັນດັບ 0
ເທົ່ານັ້ນ. ເຊັ່ນດຽວກັນ, mpy overrides ຟັງຊັນ process_argv ປົກກະຕິ, ດັ່ງນັ້ນ -i ແລະອື່ນໆ
ຕົວເລືອກແຖວຄໍາສັ່ງຖືກປະມວນຜົນພຽງແຕ່ຢູ່ໃນອັນດັບ 0 ໃນຮູບແບບ serial. ຄວາມຕັ້ງໃຈໃນທັງຫມົດເຫຼົ່ານີ້
ກໍລະນີແມ່ນເພື່ອເຮັດໃຫ້ -batch ຫຼື custommp.i ຫຼື -i ປະກອບມີໄຟລ໌ປະຕິບັດພຽງແຕ່ຢູ່ໃນອັນດັບ 0, ເປັນ
ຖ້າຫາກວ່າທ່ານໄດ້ພິມໃຫ້ເຂົາເຈົ້າມີການໂຕ້ຕອບ. ທ່ານສາມາດໂທຫາ mp_exec ຈາກສິ່ງເຫຼົ່ານີ້ໄດ້
ໄຟລ໌ເພື່ອເລີ່ມຕົ້ນວຽກງານຂະຫນານ, ແຕ່ໄຟລ໌ຕົວມັນເອງແມ່ນ serial.
ທາງເລືອກແຖວຄໍາສັ່ງເພີ່ມເຕີມແມ່ນເພີ່ມໃສ່ຊຸດປົກກະຕິ:
mpy -j somefile.i
ປະກອບມີ somefile.i ໃນຮູບແບບຂະຫນານໃນທຸກອັນດັບ (ອີກເທື່ອຫນຶ່ງ, -i other.i ປະກອບມີ other.i ເທົ່ານັ້ນ
ໃນອັນດັບ 0 ໃນຮູບແບບ serial). ຖ້າມີຫຼາຍທາງເລືອກ -j, ຂະຫນານປະກອບມີເກີດຂຶ້ນ
ໃນຄໍາສັ່ງເສັ້ນຄໍາສັ່ງ. ຖ້າຕົວເລືອກ -j ແລະ -i ຖືກປະສົມ, ແນວໃດກໍ່ຕາມ, ທັງຫມົດ -j ປະກອບມີເກີດຂຶ້ນ
ກ່ອນໃດ -i ປະກອບມີ.
ໃນຖານະເປັນຜົນຂ້າງຄຽງຂອງຄວາມສັບສົນຂອງການລວມເອົາຫນ້າທີ່ຢູ່ໃນ mpy, ຄຸນນະສົມບັດ autoload ແມ່ນ
ຄົນພິການ; ຖ້າລະຫັດຂອງເຈົ້າກະຕຸ້ນການລວມໂດຍການໂທຫາຟັງຊັນທີ່ໂຫລດອັດຕະໂນມັດ, mpy
ຈະຢຸດດ້ວຍຄວາມຜິດພາດ. ທ່ານຕ້ອງໄດ້ໂຫລດຢ່າງຈະແຈ້ງຫນ້າທີ່ທີ່ຈໍາເປັນສໍາລັບການຂະຫນານ
ວຽກງານທີ່ໃຊ້ຮຽກຮ້ອງໃຫ້ມີຟັງຊັນເອີ້ນຕົວເອງພາຍໃນວຽກງານຂະຫນານ.
ຟັງຊັນ mp_send ສາມາດສົ່ງ array yorick ຕົວເລກໃດໆ (ປະເພດ char, short, int, long,
float, double, ຫຼື complex), ຫຼື scalar value. ຂະບວນການສົ່ງຂໍ້ຄວາມ
ຜ່ານ MPI ຮັກສາພຽງແຕ່ຈໍານວນຂອງອົງປະກອບ, ດັ່ງນັ້ນ mp_recv ຜະລິດພຽງແຕ່ມູນຄ່າ scalar ຫຼື
array 1D ຂອງຄ່າ, ບໍ່ວ່າຂະຫນາດໃດຖືກສົ່ງກັບ mp_send.
ຟັງຊັນ mp_recv ຮຽກຮ້ອງໃຫ້ທ່ານລະບຸຜູ້ສົ່ງຂໍ້ຄວາມທີ່ທ່ານຫມາຍເຖິງ
ຮັບ. ມັນຂັດຂວາງຈົນກ່ວາຂໍ້ຄວາມຕົວຈິງມາຮອດຈາກຜູ້ສົ່ງນັ້ນ, ຄິວເຖິງໃດໆ
ຂໍ້ຄວາມຈາກຜູ້ສົ່ງອື່ນໆທີ່ອາດຈະມາຮອດກ່ອນ. ຂໍ້ຄວາມທີ່ຈັດຄິວຈະເປັນ
ດຶງເອົາມັນຄໍາສັ່ງທີ່ໄດ້ຮັບເມື່ອທ່ານໂທຫາ mp_recv ສໍາລັບຜູ້ສົ່ງທີ່ກົງກັນ. ໄດ້
ຄຸນສົມບັດການເຂົ້າຄິວເຮັດໃຫ້ມັນງ່າຍຂຶ້ນຫຼາຍທີ່ຈະຫຼີກເວັ້ນຈາກສະພາບການແຂ່ງຂັນທີ່ງ່າຍດາຍທີ່ສຸດ
ເມື່ອເຈົ້າຂຽນໂປຣແກຣມຂະໜານທີ່ມີການແປ.
ຟັງຊັນ mp_probe ສົ່ງຄືນລາຍຊື່ຂອງຜູ້ສົ່ງທັງໝົດຂອງຂໍ້ຄວາມທີ່ຖືກຈັດຄິວ (ຫຼື nil if
ແຖວຫວ່າງເປົ່າ). ໂທ mp_probe(0) ເພື່ອກັບຄືນໄປບ່ອນໃນທັນທີ, ເຖິງແມ່ນວ່າຖ້າຫາກວ່າແຖວຈະຫວ່າງເປົ່າ.
ໂທ mp_probe(1) ເພື່ອຕັນຖ້າຫາກວ່າແຖວຫວ່າງເປົ່າ, ກັບຄືນມາພຽງແຕ່ໃນເວລາທີ່ຢ່າງຫນ້ອຍຫນຶ່ງຂໍ້ຄວາມ
ມີໃຫ້ສໍາລັບ mp_recv. ໂທ mp_probe(2) ຕັນຈົນກ່ວາຂໍ້ຄວາມໃຫມ່ມາຮອດ, ເຖິງແມ່ນວ່າ
ຂໍ້ຄວາມບາງຢ່າງແມ່ນມີຢູ່ໃນຂະນະນີ້.
ຟັງຊັນ mp_exec ໃຊ້ logarithmic fanout - ອັນດັບ 0 ສົ່ງໄປຫາຂະບວນການ F, ແຕ່ລະອັນ.
ເຊິ່ງສົ່ງໄປຫາ F ຫຼາຍ, ແລະອື່ນໆ, ຈົນກ່ວາຂະບວນການທັງຫມົດມີຂໍ້ຄວາມ. ເມື່ອຂະບວນການ
ສໍາເລັດການປະຕິບັດການສົ່ງຂອງມັນທັງຫມົດ, ມັນ parses ແລະປະຕິບັດເນື້ອໃນຂອງຂໍ້ຄວາມ.
ສູດການຄິດໄລ່ fanout ຮອດຂະບວນການ N ໃນບັນທຶກໄປຫາພື້ນຖານ F ຂອງ N ຂັ້ນຕອນ. ຂະບວນການ F
rank 0 ສົ່ງໄປເປັນອັນດັບ 1, 2, 3, ..., F. ໂດຍທົ່ວໄປ, ຂະບວນການທີ່ມີອັນດັບ r ສົ່ງໄປຫາ.
ອັນດັບ r*F+1, r*F+2, ..., r*F+F (ເມື່ອສິ່ງເຫຼົ່ານີ້ໜ້ອຍກວ່າ N-1 ສໍາລັບຂະບວນການ N). ຊຸດນີ້
ຖືກເອີ້ນວ່າ "ພະນັກງານ" ຂອງ r. ອັນດັບທີ່ມີ r>0 ໄດ້ຮັບຂໍ້ຄວາມຈາກອັນດັບ (r-1)/F,
ເຊິ່ງເອີ້ນວ່າ "ນາຍຈ້າງ" ຂອງ r. ການເອີ້ນ mp_exec interoperates ກັບແຖວ mp_recv;
ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ຂໍ້ຄວາມຈາກອັນດັບອື່ນທີ່ບໍ່ແມ່ນນາຍຈ້າງໃນລະຫວ່າງການ fanout mp_exec ຈະເປັນ
ຈັດຄິວສໍາລັບການດຶງຂໍ້ມູນພາຍຫຼັງໂດຍ mp_recv. (ໂດຍບໍ່ມີຄຸນສົມບັດນີ້, ວຽກງານຂະຫນານໃດໆ
ໃຊ້ຮູບແບບຂໍ້ຄວາມອື່ນນອກຈາກ fanout logarithmic ຈະມີຄວາມອ່ອນໄຫວຕໍ່ກັບເຊື້ອຊາດ
ເງື່ອນໄຂ.)
fanout logarithmic ແລະ inward ທຽບເທົ່າຂອງມັນມີປະໂຫຍດຫຼາຍທີ່ mpy ໃຫ້ຄູ່ຜົວເມຍ
ຂອງຟັງຊັນລະດັບສູງກວ່າທີ່ໃຊ້ຮູບແບບ fanout ດຽວກັນກັບ mp_exec:
mp_handout, msg;
total = mp_handin(ຄ່າ);
ເພື່ອໃຊ້ mp_handout, ອັນດັບ 0 ຈະຄິດໄລ່ msg, ຈາກນັ້ນອັນດັບທັງໝົດໂທຫາ mp_handout, ເຊິ່ງສົ່ງ msg.
(ຜົນຜະລິດໃນການຈັດອັນດັບທັງຫມົດນອກຈາກ 0) ຢູ່ທົ່ວທຸກແຫ່ງໂດຍ fanout ດຽວກັນກັບ mp_exec. ການນໍາໃຊ້
mp_handin, ທຸກໆຂະບວນການຄິດໄລ່ມູນຄ່າ, ຫຼັງຈາກນັ້ນໂທຫາ mp_handin, ເຊິ່ງສົ່ງຄືນຜົນລວມຂອງ
ມູນຄ່າຂອງຕົນເອງແລະພະນັກງານທັງຫມົດຂອງພວກເຂົາ, ດັ່ງນັ້ນຢູ່ໃນອັນດັບ 0 mp_handin ກັບຄືນຜົນລວມຂອງ
ຄຸນຄ່າຈາກທຸກໆຂະບວນການ.
ທ່ານສາມາດໂທຫາ mp_handin ເປັນຫນ້າທີ່ບໍ່ມີການໂຕ້ຖຽງເພື່ອເຮັດຫນ້າທີ່ເປັນ synchronization; ເມື່ອໃດ
ອັນດັບ 0 ສືບຕໍ່ຫຼັງຈາກການໂທດັ່ງກ່າວ, ທ່ານຮູ້ວ່າທຸກໆອັນດັບອື່ນໆໄດ້ມາຮອດຈຸດນັ້ນ.
ວຽກງານຂະໜານທັງໝົດ (ອັນໃດກໍໄດ້ເລີ່ມຕົ້ນດ້ວຍ mp_exec) ຕ້ອງສຳເລັດດ້ວຍການໂທຫາ mp_handin,
ຫຼືການຮັບປະກັນທຽບເທົ່າວ່າຂະບວນການທັງໝົດໄດ້ກັບຄືນສູ່ສະຖານະບໍ່ເຮັດວຽກເມື່ອວຽກງານ
ຈົບອັນດັບ 0.
ທ່ານສາມາດດຶງຂໍ້ມູນຫຼືປ່ຽນຕົວກໍານົດການ fanout F ໂດຍໃຊ້ຟັງຊັນ mp_nfan. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 16, ເຊິ່ງຄວນຈະສົມເຫດສົມຜົນເຖິງແມ່ນວ່າສໍາລັບຂະບວນການຈໍານວນຫລາຍ.
ວຽກຂະໜານພິເສດອັນໜຶ່ງເອີ້ນວ່າ mp_connect, ເຊິ່ງທ່ານສາມາດໃຊ້ເພື່ອປ້ອນການແປ
ເສັ້ນຄໍາສັ່ງໄປຫາອັນດັບດຽວທີ່ບໍ່ແມ່ນ 0, ໃນຂະນະທີ່ອັນດັບອື່ນໆທັງຫມົດນັ່ງຢູ່ຊື່ໆ. ອັນດັບ 0 ຢູ່ໃນ ກ
loop ອ່ານແປ້ນພິມແລະສົ່ງສາຍໄປຫາ "ເຊື່ອມຕໍ່", ເຊິ່ງດໍາເນີນການ
ເຂົາເຈົ້າ, ແລະສົ່ງການຮັບຮູ້ກັບຄືນໄປບ່ອນອັນດັບ 0. ທ່ານດໍາເນີນການຟັງຊັນ mp_disconnect ກັບ.
ສໍາເລັດວຽກງານຂະຫນານແລະຫຼຸດລົງກັບຄືນໄປບ່ອນອັນດັບ 0.
ສຸດທ້າຍ, ບັນທຶກກ່ຽວກັບການຟື້ນຕົວຄວາມຜິດພາດ. ໃນກໍລະນີທີ່ມີຄວາມຜິດພາດໃນລະຫວ່າງການເຮັດວຽກຂະຫນານ,
mpy ພະຍາຍາມອອກຈາກ mp_exec ຢ່າງສະຫງ່າງາມ, ດັ່ງນັ້ນເມື່ອອັນດັບ 0 ກັບຄືນມາ, ອັນດັບອື່ນໆທັງຫມົດ
ເປັນທີ່ຮູ້ກັນວ່າບໍ່ເຮັດວຽກ, ກຽມພ້ອມສໍາລັບ mp_exec ຕໍ່ໄປ. ຂັ້ນຕອນນີ້ຈະຫ້ອຍຕະຫຼອດໄປຖ້າມີ
ຫນຶ່ງໃນຂະບວນການແມ່ນຢູ່ໃນ loop infinite, ຫຼືຖ້າບໍ່ດັ່ງນັ້ນຢູ່ໃນສະຖານະທີ່ມັນຈະບໍ່ເຄີຍ
ໂທຫາ mp_send, mp_recv, ຫຼື mp_probe, ເພາະວ່າ MPI ບໍ່ມີວິທີທີ່ຈະສົ່ງສັນຍານວ່າ.
ຂັດຂວາງຂະບວນການທັງຫມົດ. (ນີ້ແມ່ນວິທີຫນຶ່ງທີ່ສະພາບແວດລ້ອມ MPI
" crude ") ຂະບວນການອັນດັບ 0 ແມ່ນປະໄວ້ກັບອັນດັບຂອງຂະບວນການທໍາອິດທີ່ລາຍງານ a
ຄວາມຜິດ, ບວກກັບຈໍານວນຂະບວນການທີ່ຜິດພາດສໍາລັບເຫດຜົນອື່ນນອກເຫນືອຈາກການເປັນ
ສົ່ງຂໍ້ຄວາມວ່າອັນດັບອື່ນມີຄວາມຜິດ. ຂະບວນການຜິດພາດທໍາອິດສາມາດເຂົ້າໄປໃນ dbug
ໂຫມດຜ່ານ mp_connect; ໃຊ້ mp_disconnect ຫຼື dbexit ເພື່ອເລື່ອນກັບຄືນສູ່ໂໝດ serial ໃນອັນດັບ 0.
ທາງເລືອກໃນການ
-j file.i ປະກອບມີໄຟລ໌ແຫຼ່ງ Yorick file.i ເປັນ mpy ເລີ່ມຕົ້ນໃນຮູບແບບຂະຫນານ
ຢູ່ໃນອັນດັບທັງຫມົດ. ອັນນີ້ເທົ່າກັບຟັງຊັນ mp_include ຫຼັງຈາກ mpy
ໄດ້ເລີ່ມຕົ້ນ.
-i file.i ປະກອບມີໄຟລ໌ແຫຼ່ງ Yorick file.i ເປັນ mpy ເລີ່ມຕົ້ນ, ໃນຮູບແບບ serial.
ນີ້ເທົ່າກັບຄໍາສັ່ງ #include ຫຼັງຈາກ mpy ໄດ້ເລີ່ມຕົ້ນ.
- ຊຸດ file.i ປະກອບມີໄຟລ໌ແຫຼ່ງ Yorick file.i ເປັນ mpy ເລີ່ມຕົ້ນ, ໃນຮູບແບບ serial.
ໄຟລ໌ການປັບແຕ່ງຂອງທ່ານ custommp.i, ຖ້າມີ, ແມ່ນ ບໍ່ ອ່ານ, ແລະ mpy ແມ່ນ
ວາງໄວ້ໃນຮູບແບບ batch. ໃຊ້ຄໍາສັ່ງຊ່ວຍເຫຼືອກ່ຽວກັບຟັງຊັນ batch
(help, batch) ເພື່ອຊອກຫາເພີ່ມເຕີມກ່ຽວກັບ batch mode. ໃນຮູບແບບ batch, ທັງຫມົດ
ຄວາມຜິດພາດແມ່ນຕາຍ; ໂດຍປົກກະຕິ, mpy ຈະຢຸດການປະຕິບັດແລະລໍຖ້າຕື່ມອີກ
ການປ້ອນຂໍ້ມູນຫຼັງຈາກຄວາມຜິດພາດ.
ໃຊ້ mpy.mpich2 ອອນໄລນ໌ ໂດຍໃຊ້ບໍລິການ onworks.net