ΠΡΠΎΠ±ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ pvm_barrier() ΠΈ pvm_joingroup(), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π³ΡΡΠΏΠΏΠ° ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄ΠΎ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° (Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π·Π½Π°Π½ΠΈΠΉ) ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ pvm_barrier (). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°Π½ΡΠ° ΠΏΠΎ Π²ΡΠ±ΠΎΡΡ ΠΊΡΡΡΠΎΠ² ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ, Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ , ΠΎΠ±ΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ , Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΡΡ ΠΈ ΡΠ°ΠΊΡΠ»ΡΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΊΡΡΡΠ°Ρ . ΠΠΎΡΡΠΎΠΌΡ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ pvm_barrier () Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ PVM-Π·Π°Π΄Π°Ρ. ΠΠ° ΡΠΈΡ. 13.5 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° UML-Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΈ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β».
ΠΠ°ΡΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π·Π΄Π΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ pvm_barrier () ΠΈ pvm_joingroup (). Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈΠ²Π΅ Π΄ Π΅Π½Π° Π² Π» ΠΈΡΡΠΈΠ½ Π³ Π΅ 13.5.
Π’Π°Π±Π»ΠΈΡΠ° 13.2. ΠΡΡΠΏΠΏΠΎΠ²ΡΠ΅ PVM-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
int pvm_joingroup (char *groupname);ΠΠ½ΠΎΡΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π² Π³ΡΡΠΏΠΏΡ groupname, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ int-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅
int pvm_lvgroup (char *groupname); Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ· Π³ΡΡΠΏΠΏΡ groupname
int pvm_gsive (char *groupname); ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ int-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅Π½ΠΎΠ² Π² Π³ΡΡΠΏΠΏΠ΅ groupname
int pvm_gettid (char *groupname, int inum); ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ int-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌΡ Π½ΠΎΠΌΠ΅ΡΡ Π·Π°Π΄Π°ΡΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³ΡΡΠΏΠΏΡ groupname ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° inum
int pvm_getinst (char *groupname, int taskid); ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ int-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³ΡΡΠΏΠΏΡ groupname ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ taskid
int pvm_barrier (char *groupname, int count); ΠΠ»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° count ΡΠ»Π΅Π½ΠΎΠ² Π² Π³ΡΡΠΏΠΏΠ΅ groupname Π½Π΅ Π²ΡΠ·ΠΎΠ²ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
int pvm_bcast (char *groupname, int messageid); ΠΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π²ΡΠ΅ΠΌ ΡΠ»Π΅Π½Π°ΠΌ Π³ΡΡΠΏΠΏΡ groupname ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Ρ ΡΠ°Π½ΠΈΠΌΠΎΠ΅ Π² Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ messageid
int pvm_reduce (void *operation, void *buffer, int count, int datatype, int messageid, char *groupname, int root); ΠΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ operation Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°Ρ Π³ΡΡΠΏΠΏΡ groupname
Π ΠΈΡ.13.5. UML-Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ° Π²ΠΈΠ΄ΠΎΠ² Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΠ°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ
// ΠΠΈΡΡΠΈΠ½Π³ 13.5. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ operator() //Β Π² ΠΊΠ»Π°ΡΡΠ΅ task
void task::operator()(string X) {
int cc; pvm_mytid();
cc = pvm_spawn(const_cast<char *>(X.data()),NULL,0,"",l, &Tid[N]);
N++;
}
Π€ΡΠ½ΠΊΡΠΈΡ-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ operator () ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ PVM-Π·Π°Π΄Π°Ρ. ΠΠΌΡ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ X. data (). ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ pvm_spawn () (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 13.5) ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°ΡΠ°, Π° Π΅Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Tid[N] . (ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ pvm_spawn () ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ PVM-Π·Π°Π΄Π°Ρ ΡΠΌ. Π³Π»Π°-Π²ΡΠ±.) ΠΠ»Π°ΡΡ task ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΡΡΠ½ΠΊΡΠΈΠΉ). ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°
for_each(Solve.begin(),Solve.end(),Task);
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ operator (), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Task. ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ, ΡΠΎΠ΄Π΅ΡΠΆΠ° Ρ ΠΈΠ΅ΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Solve. ΠΠ»Π³ΠΎΡΠΈΡΠΌ for_each () Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌ ΠΎΠ΄Π΅Π»Ρ SIMD, ΡΠΎ Π² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ for_each () Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ ΠΏΡΡΠΌΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ pvm_spawn(). Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.6 ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ SIMD ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ PVM-Π·Π°Π΄Π°Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ».
// ΠΠΈΡΡΠΈΠ½Π³ 13.6. ΠΠ°ΠΏΡΡΠΊ PVM-Π·Π°Π΄Π°Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°
//Β ΠΊΠ»Π°ΡΡΠ° task
void task::operator()(string X) {
int cc; pvm_mytid();
cc = pvm_spawn(const_cast<char *>(X.data()),NULL,0,"",l, &Tid[N]);N++;
}
Π‘Π²ΡΠ·Ρ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΠ΄Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.6, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ 20 ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ. Π‘Π½Π°ΡΠ°Π»Π° Π²ΡΠ΅ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΡΠ»Π΅ ΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΈΠ³ΡΠ°ΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΈ Β«ΠΊΠ»Π°ΡΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ°Β» ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ PVM-ΡΡΠ΅Π΄Ρ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ Π±ΡΠ΄ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΎΠΉΒ» ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΡΡΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ, ΠΈΠ»ΠΈ ΠΏΠΎ Π΅Π΅ Π°Π΄ΡΠ΅ΡΡ Π² ΡΠ΅ΡΠΈ intranet ΠΈΠ»ΠΈ Internet. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ Π·Π½Π°Π½ΠΈΠΉ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° Π½Π° Β«ΠΊΠ»Π°ΡΡΠ½ΡΡ Π΄ΠΎΡΠΊΡΒ». ΠΡΠΈ ΡΡΡΠ»ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Β«Π·Π°ΡΠΈΡΡΒ» Π² ΠΊΠΎΠ΄ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π·Π½Π°Π½ΠΈΠΉ, ΠΈΠ»ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΡΠ»ΡΠΆΠ±Ρ ΠΈΠΌΠ΅Π½. ΠΠΌΠ΅Ρ ΡΡΡΠ»ΠΊΡ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ORB-Π±ΡΠΎΠΊΠ΅ΡΠΎΠΌ (Object Request Broker β Π±ΡΠΎΠΊΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²), ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (Π·Π½Π°Π½ΠΈΡ) ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ. ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅Β» ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ CORBA-ΠΎΠ±ΡΠ΅ΠΊΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎ ΠΌ Π°Π½Π΄Ρ,
blackboard -ORBIIOPAddr inet:porthos:12458
ΠΠΎ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ ΠΏΠΎΡΡΡ 12458 Ρ ΠΎΡΡΠ° porthos. ΠΠ°ΠΏΡΡΠΊ CORBA-ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ CORBA-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Β«ΠΎΡΠΊΡΡΡΡΡΒ» CORBA-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Mico [25] ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ blackboard ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ», ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π½Π°Π½ΠΈΠΉ. Π ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΎΠΉΒ». Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ CORBA - ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ», ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.7.
// ΠΠΈΡΡΠΈΠ½Π³ 13.7. ΠΠΎΠ΄ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ
//Β Ρ CORBA-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΎΠΉΒ»
1Β #include Β«pvm3.hΒ»
2Β using namespace std;
3Β #include <iostream>
4Β #include <fstream>
5Β #include <string.h>
6Β #include <strstream>
7Β #include Β«black_board_impl.hΒ» 8
9Β int main(int argc, char *argv[])
10Β {
11Β CORBA::ORB_var Orb = CORBA::ORB_init(argc, argv,Β«mico-local-orbΒ»);
12Β CORBA::Object_yar Obj =Orb->bind(Β«IDL:black_board:1.0Β»,Β«inet:por thos:12 4 5 8Β»);
13Β courses Courses;
14Β //...
15Β //...
16Β black_board_var BlackBoard = black_board::_narrow(Obj);
17
18Β int Pid;
19Β //...
20Β //... 21
22Β cout Β« Β«ΠΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π½.Β» Β« endl;
23Β Courses.length(2);
24Β Courses[0] = 255551;
25Β Courses[l] = 253212;
26Β string FileName;
27Β strstream Buffer;
28Β Pid = pvm_mytid();
29Β Buffer Β« Β«Π Π΅Π·ΡΠ»ΡΡΠ°Ρ.Β» Β« Pid Β« ends;
30Β Buffer Β» FileName;
31Β ofstream Fout(FileName.data());
32Β BlackBoard->suggestionsForMajor(Courses);
33Β Fout.close();
34Β pvm_exit();
35Β return(0);
36Β } 37
Π ΡΡΡΠΎΠΊΠ΅ 11 (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³13.7) ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ORB Π±ΡΠΎΠΊΠ΅Ρ . ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊΠΈ 12 ΠΎΡΡ Ρ Π΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° black_board Ρ ΠΏΠΎΡΡΠΎΠΌ 12458 ΠΈ Π²ΠΎΠ·Π²ΡΠ° Ρ Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° CORBA-ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Obj. Π‘ΡΡΠΎΠΊΡ 16 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°, ΡΡΠΎΠ±Ρ ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ BlackBoard ΡΡΡΠ»Π°Π»Π°ΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Β«ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Β». ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» ΠΎΠ±ΡΠ΅ΠΊΡ BlackBoard, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠΉ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ black_board, ΠΊΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 13.1. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π² ΡΡΡΠΎΠΊΠ΅ 13 ΠΎΠ±ΡΠ΅ΠΊΡΠ° Courses. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΠΈΠΏ courses ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ CORBA-ΡΠΈΠΏ sequence. ΠΠ΄Π΅ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π·Π½Π°Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ courses, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ IDL-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΡΠΎΠΊ 24 ΠΈ 25 Π² ΠΎΠ±ΡΠ΅ΠΊΡ Courses Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄Π²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π° Π² ΡΡΡΠΎΠΊΠ΅ 32 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Courses: BlackBoard->suggestionsForMaj or(Courses)