$ mpirun -np 16 /trap/search_n_rescue
// ΠΠΈΡΡΠΈΠ½Π³ 9.5. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ MPI-Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ
//Β ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΡΠΏΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠ΅ΠΆΠ΄Π΅Π½Π½ΡΡ
//Β ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
template<T> bool travel(vehicle *Transport,
set<T> Location, T Object)
{
//.. .
Transport->startEngine(); Transport->moveForward(XDegrees); Transport->turnLeft(YDegrees); //.. .
if (Location.find(Transport->location() == Object){ // . .. rescue()
}
//.. .
}
int main(int argc, char *argv[])
326 ΠΠ»Π°Π²Π° 9. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ SPMD ΠΈ MPMD Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²..
{
//...
int Tag = 2; int WorldSize; int TaskRank; MPI_Status Status; MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &TaskRank); MPI_Comm_size(MPI_COMM_WORLD, &WorldSize); //. . .
switch(TaskRank) {
case 1: {
//. . .
car * Car;
set<streets> SearchSpace
travel<streets>(Car, SearchSpace,Street); //.. .
}
break;
case 2:
{
//.. .
helicopter *BlueThunder; set<air_space> NationalAirSpace; travel<air_space>(BlueThunder,
NationalAirSpace,
AirSpace);
//.. .
}
//case n: //. . .
}
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° search_n_rescue Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° Π² 16 ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ , ΠΏΡΠΈΡΠ΅ΠΌ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ , Π° Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ β Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ . ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ (ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½ΡΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ). Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡ ΠΎΠ΄Π½Ρ MPI-Π·Π°Π΄Π°Π»Ρ ΠΎΡ Π΄ΡΡΠ³ΠΎΠΉ (Π° Π·Π½Π°ΡΠΈΡ, ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Π»ΠΈΡΡΠΈ Π½ Π³Π΅ 9.5 ΠΠ I - ΠΏΡΠΎΡΠ΅ΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ TaskRank = 1, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°Ρca Car ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ° Ρ ΠΈΠΉ streets - ΠΎΠ±ΡΠ΅ΠΊΡΡ . MPI-ΠΏΡΠΎΡΠ΅ΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎ Π³ ΠΎ TaskRank = 2, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° helicopter ΠΈ Π°ir_spΠ°ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ±Π΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ travel (). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π±Π»ΠΎΠ½Π½Π°Π» ΡΡΠ½ΠΊΡΠΈΡ travel () ΠΌΠ°Π½ΠΈΠ»ΡΠ»ΠΈΡΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π½Π° ΠΊΠ»Π°ΡΡ vehicle, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡ-Π²Π°ΠΌΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° vehicle. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, Ρ ΠΎΡΡ Π²ΡΠ΅ MPI-Π·Π°Π΄Π°ΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈ Π³Ρ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ travel (), Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²Ρ ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΡΠ°Π°Π»ΠΈΡΠ½Ρ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΈ travel () Π½Π΅Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ case ΠΈΠ»ΠΈ if, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Ρ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΏ vehicle -ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ vehicle -ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. ΠΡΠΎ MPI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Ρ 16 ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ MPMD Π² ΡΡΠ΅Π΄Π΅ MPI, Π½ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΊΠΎΠ΄Π°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π·Π΄Π΅ΡΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ, β ΡΡΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ, ΠΏΠΎ Π΄ Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΏΠΎ Π΄ Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ travel () Π² Π»ΠΈΡΡΠΈΠ½ Π³ Π΅ 9.5 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠ±Π° ΡΠΈΠΏΠ° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°. ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ vehicle *Transport, Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ β ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ set<T> ΠΈ T Object. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΠ Π’Π·Π°Π΄Π°ΡΠΈ ΠΈ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ MPI-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠ°Π±Π». 9.2.
Π’Π°Π±Π»ΠΈΡΠ° 9.2. Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΠ I-Π·Π°Π΄Π°Ρ
Π’ΠΈΠΏΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΠΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½Π° Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ
Π¨Π°Π±Π»ΠΎΠ½Ρ
Β ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ MPMD-ΠΌΠΎΠ΄Π΅Π»ΠΈ c ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ -ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
Π€ΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°. ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° vehicle *Transport Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 9.5, ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ»ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ. ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ operator (). Π€ΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ MPI-Π·Π°Π΄Π°ΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΉ ΡΠΎΡΠΌΡ.
// Π€ΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ΅ΠΊΡ class some_class{ //.. .
operator(); //
};
template<class T> T mpiTask(T X) {
//
Π’ Result; Result = X() //. . .
}
Π¨Π°Π±Π»ΠΎΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ mpiTask () Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ T, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ operator ().
//. . .
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &TaskRank); MPI_Comm_size(MPI_COMM_WORLD, &WorldSize); //. . .
if(TaskRank == 0){ //. . .
user_defined_type M; mpiTask(M); //.. .
}
if(TaskRank == N){ //.. .
some_other_userdefined_type N; mpiTask (N) ;
}
//----
ΠΡΠΎΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π½Π°ΡΠ° MPI-Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²ΠΎΠΉ ΡΠ°Π½Π³, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ operator (), ΡΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ mpiTask () Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΈΠΊΡΠΎΠ²Π°Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° operator (). Π’ΠΎΠ³Π΄Π°, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π·Π°ΠΏΡ Ρ Π΅Π½Π½ΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΡ mpirun, ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²ΡΠ΅ΠΌ MPI-Π·Π°Π΄Π°ΡΠ°ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΠ°ΠΊ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ MPI-Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΊΠΎΠ΄Π° ΠΠ Π’Π·Π°Π΄Π°ΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠΎΡΡΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ MPI-Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΠΈ MPI_Send () ΠΈ MPI_Recv () ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
MPI_Send(Buffer, Count, MPI_LONG, TaskRank, Tag, Comm);
MPI_Recv(Buffer,Count,MPI_INT, TaskRank, Tag, Comm, &Status);
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΊΠ°Π·Π°Π» ΡΠΈΠΏ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π·Π΄Π΅ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π±ΡΡΠ΅Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ . Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΠΏΠ° ΠΏΠΎΡΡΠ»Π°Π΅ΠΌΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΉ Π²ΠΈΠ΄ ΠΈ ΡΡΠ΅Π²Π°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π½Π΅Π²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π ΡΠ°Π±Π». 9.3 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ MPI-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅.
Π’Π°Π±Π»ΠΈΡΠ° 9.3 ΠΡΠΎΡΠΎΡΠΈΠΏΡ MPI-ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ
Π€ΡΠ½ΠΊΡΠΈΠΈΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
#include Β«mpi.hΒ»
int MPI_Send (void *Buffer,int Count, MPI_Datatype Π’ΡΡΠ΅, int Destination, int MessageTag, MPI_Comm Comm) ; ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ Π΄Π°Π½Π½ΡΡ
int MPI_Send_init (void *Buffer,int Count, MPI_Datatype Type, int Destination, int MessageTag, MPI_Comm Comm, MPI_Request *Request); ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π»Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ