ကၽြန္ေတာ္တို႔ MPI program တစ္ပုဒ္ကို စတင္မေရးသားမွီ parallel computing ကိုလုပ္ေဆာင္မဲ့ ကြန္ပ်ဴတာ နက္၀က္ အေပၚ MPI အေနျဖင့္ ဘယ္လို ေခၚေ၀ၚ သံုးစြဲ သလဲဆိုတာကို စတင္ေျပာျပပါမယ္ ။ ကြန္ပ်ဴတာ နက္၀က္ အတြင္း မွာရွိတဲ့ ကြန္ပ်ဴတာ မ်ားကို ခ်ိတ္ဆက္ ေပးနိုင္ဖို႔ ခ်ိတ္ဆက္ေပးနိုင္သူ (communicators) ကို အသံုးျပဳျပီး ဘယ္ကြန္ပ်ဴတာေတြကေတာ့ ဘယ္အုပ္စုထဲမွာ ပါတယ္ဆို တာကို သိေအာင္ အုပ္စု ဖြဲ႔ (group)ေပးရပါတယ္ ။ ခ်ိတ္ဆက္ေပးသူမ်ား အေၾကာင္းနဲ႔ အုပ္စုဖြဲ႔ျခင္းအေၾကာင္းကို ေနာက္ပိုင္းတြင္ ပိုမိုျပည့္စံုေအာင္ ေဖာ္ျပပါမယ္ ။
ခ်ိတ္ဆက္ ထားတဲ့ နက္၀က္ တစ္ခု လံုးကို အခ်င္းခ်င္းဆက္သြယ္ေဆာင္ရြက္နိုင္ဖို႔ ဆက္သြယ္ေပးသူအျဖစ္ MPI_COMM_WORLD ကို အသံုးျပဳပါတယ္ ။ ဆက္သြယ္ေပးသူ (MPI_COMM_WORLD) ကို MPI ေတြ ရဲ့ function ေတြကိုေခၚသံုးတဲ့ေနရာမွာ လိုအပ္တဲ့အရာေတြတခါထဲထည့္ေပးလိုက္သလိုမ်ဳိး argument အျဖစ္ ထည့္ေပးရပါတယ္ ။ နက္၀က္အတြင္း မွာ ရွိတဲ့ CPU တိုင္းကို process လို႔လဲေခၚပါတယ္ ။ MPI_COMM_WORLD ကိုေတာ့ နက္၀က္အတြင္း process အခ်င္းခ်င္းဆက္သြယ္ခ်ိတ္ဆက္လို႔ရေအာင္ ဆက္သြယ္ေပးသူအျဖစ္အသံုးျပဳပါတယ္ ။ ၎ ကို အသံုးျပဳမွသာ နက္၀က္အတြင္းမွာရွိတဲ့ process တိုင္းရဲ့ memory မွာ message ေတြ ေပးပို႔လက္ခံ နိုင္မွာျဖစ္ပါတယ္ ။ အခ်င္းခ်င္း ခ်ိတ္ဆက္ထားတဲ့ process ေလးေတြရဲ့ ေခါင္းေဆာင္ဆုိလဲမမွားပါဘူး ။ ျပီးေတာ့ MPI_COMM_WORLD ဆိုတဲ့ ဆက္သြယ္ေပးသူရဲ့အတြင္းမွာ ရွိတဲ့ process ေလးေတြကိုလဲ တစ္ခုနဲ႔တစ္ခု ေရာေထြးျပီးမမွားရေလေအာင္ process ေလးေတြကို တစ္ခုခ်င္းစီအလိုက္ နံပါတ္ေလး ေတြနဲ႔ သက္မွတ္ေပးထားပါတယ္ ။ နံပါတ္ေပးရမွာ '0' က စျပီ ဆက္သြယ္ေပးသူရဲ့အတြင္းမွာရွိသေလာက္ process တိုင္းကိုနံပါတ္အစဥ္တိုင္းေပးပါတယ္ ။ MPI ဟာ MPI_COMM_WORLD ရဲ့လက္ေအာက္မွာရိွတဲ့ process ေလးေတြကိုေတာ့ rank လို႔သတ္မွတ္ပါတယ္ ။ rank 0 , rank 1 ... အေနျဖင့္သတ္မွတ္ပါတယ္ ။ program ထဲမွာ rank ေတြ ရဲ့ နံပါတ္ေတြနဲ႔ ထိန္းခ်ဳပ္ ေဆာင္ရြက္နိုင္ပါတယ္ ။ ဥပမာ rank နံပါတ္ 0 ျဖစ္ရင္ ဟိုဟာလုပ္ ၊ 1 ျဖစ္ရင္ ဒီဟာလုပ္ဆိုျပီေတာ့ ခိုင္းေစလို႔ရပါတယ္ ။ ျပီးေတာ့ messsage ေတြကို ပို႔ေဆာင္ရယူတဲ့ အခါ နံပါတ္ေတြ ကို အသံုးျပဳျပီး ယူရမဲ့ေနရာ ပို႔ေဆာင္ရမဲ့ေနရာကိုသတ္မွတ္လို႔ရပါတယ္ ။ တခါတေလ rank ေတြကို "task ID" လို႔လဲေခၚျပန္ပါေသးတယ္ ။
ကၽြန္ေတာ္တို႔ C/C++ မွာဆိုရင္ header file တစ္ခုအတြင္းမွာ အလြယ္တကူ အသင့္ယူသံုးနိုင္ေသာ function ေပါင္း မ်ားစြာရွိပါတယ္ ။ ဤနည္းတူပဲ MPI မွာ လဲ သူ႔ရဲ့ header file အတြင္းမွာ အသင့္ယူသံုးနိုင္ေသာ function ေပါင္း မ်ားစြာပါရွိပါတယ္ ။ အဲဒီ function ေတြကို C/C++ တို႔မွာလို function လို႔မေခၚပဲ routine ေတြလို႔ေခၚပါတယ္ ။ MPI မွာ အသင့္ယူသံုးနိုင္ေသာ routine မ်ားရွိတဲ့အျပင္ အဲဒီ routine ေတြကို အသံုးျပဳတဲ့ေနရာအေပၚမူတည္ျပီး အမ်ိဳးအစားေတြခြဲျခားထားပါတယ္ ။ အမ်ိဳးအစားေတြကေတာ့
(1) Environment Management Routines
(2) Point to Point Communication Routines
(3) Collective Communication Routines
(4) Derived Data Types
(5) Group and Communicator Management Routines
(6) Virtual Topologies
တို႔ပဲျဖစ္ပါတယ္ ။
ခ်ိတ္ဆက္ ထားတဲ့ နက္၀က္ တစ္ခု လံုးကို အခ်င္းခ်င္းဆက္သြယ္ေဆာင္ရြက္နိုင္ဖို႔ ဆက္သြယ္ေပးသူအျဖစ္ MPI_COMM_WORLD ကို အသံုးျပဳပါတယ္ ။ ဆက္သြယ္ေပးသူ (MPI_COMM_WORLD) ကို MPI ေတြ ရဲ့ function ေတြကိုေခၚသံုးတဲ့ေနရာမွာ လိုအပ္တဲ့အရာေတြတခါထဲထည့္ေပးလိုက္သလိုမ်ဳိး argument အျဖစ္ ထည့္ေပးရပါတယ္ ။ နက္၀က္အတြင္း မွာ ရွိတဲ့ CPU တိုင္းကို process လို႔လဲေခၚပါတယ္ ။ MPI_COMM_WORLD ကိုေတာ့ နက္၀က္အတြင္း process အခ်င္းခ်င္းဆက္သြယ္ခ်ိတ္ဆက္လို႔ရေအာင္ ဆက္သြယ္ေပးသူအျဖစ္အသံုးျပဳပါတယ္ ။ ၎ ကို အသံုးျပဳမွသာ နက္၀က္အတြင္းမွာရွိတဲ့ process တိုင္းရဲ့ memory မွာ message ေတြ ေပးပို႔လက္ခံ နိုင္မွာျဖစ္ပါတယ္ ။ အခ်င္းခ်င္း ခ်ိတ္ဆက္ထားတဲ့ process ေလးေတြရဲ့ ေခါင္းေဆာင္ဆုိလဲမမွားပါဘူး ။ ျပီးေတာ့ MPI_COMM_WORLD ဆိုတဲ့ ဆက္သြယ္ေပးသူရဲ့အတြင္းမွာ ရွိတဲ့ process ေလးေတြကိုလဲ တစ္ခုနဲ႔တစ္ခု ေရာေထြးျပီးမမွားရေလေအာင္ process ေလးေတြကို တစ္ခုခ်င္းစီအလိုက္ နံပါတ္ေလး ေတြနဲ႔ သက္မွတ္ေပးထားပါတယ္ ။ နံပါတ္ေပးရမွာ '0' က စျပီ ဆက္သြယ္ေပးသူရဲ့အတြင္းမွာရွိသေလာက္ process တိုင္းကိုနံပါတ္အစဥ္တိုင္းေပးပါတယ္ ။ MPI ဟာ MPI_COMM_WORLD ရဲ့လက္ေအာက္မွာရိွတဲ့ process ေလးေတြကိုေတာ့ rank လို႔သတ္မွတ္ပါတယ္ ။ rank 0 , rank 1 ... အေနျဖင့္သတ္မွတ္ပါတယ္ ။ program ထဲမွာ rank ေတြ ရဲ့ နံပါတ္ေတြနဲ႔ ထိန္းခ်ဳပ္ ေဆာင္ရြက္နိုင္ပါတယ္ ။ ဥပမာ rank နံပါတ္ 0 ျဖစ္ရင္ ဟိုဟာလုပ္ ၊ 1 ျဖစ္ရင္ ဒီဟာလုပ္ဆိုျပီေတာ့ ခိုင္းေစလို႔ရပါတယ္ ။ ျပီးေတာ့ messsage ေတြကို ပို႔ေဆာင္ရယူတဲ့ အခါ နံပါတ္ေတြ ကို အသံုးျပဳျပီး ယူရမဲ့ေနရာ ပို႔ေဆာင္ရမဲ့ေနရာကိုသတ္မွတ္လို႔ရပါတယ္ ။ တခါတေလ rank ေတြကို "task ID" လို႔လဲေခၚျပန္ပါေသးတယ္ ။
ကၽြန္ေတာ္တို႔ C/C++ မွာဆိုရင္ header file တစ္ခုအတြင္းမွာ အလြယ္တကူ အသင့္ယူသံုးနိုင္ေသာ function ေပါင္း မ်ားစြာရွိပါတယ္ ။ ဤနည္းတူပဲ MPI မွာ လဲ သူ႔ရဲ့ header file အတြင္းမွာ အသင့္ယူသံုးနိုင္ေသာ function ေပါင္း မ်ားစြာပါရွိပါတယ္ ။ အဲဒီ function ေတြကို C/C++ တို႔မွာလို function လို႔မေခၚပဲ routine ေတြလို႔ေခၚပါတယ္ ။ MPI မွာ အသင့္ယူသံုးနိုင္ေသာ routine မ်ားရွိတဲ့အျပင္ အဲဒီ routine ေတြကို အသံုးျပဳတဲ့ေနရာအေပၚမူတည္ျပီး အမ်ိဳးအစားေတြခြဲျခားထားပါတယ္ ။ အမ်ိဳးအစားေတြကေတာ့
(1) Environment Management Routines
(2) Point to Point Communication Routines
(3) Collective Communication Routines
(4) Derived Data Types
(5) Group and Communicator Management Routines
(6) Virtual Topologies
တို႔ပဲျဖစ္ပါတယ္ ။
No comments:
Post a Comment