MPI በ Visual Studio ውስጥ በማገናኘት ላይ። MPI ተግባራት

ከጥናቱ ጋር በቅርብ መገናኘት ስላለብኝ ነው። ትይዩ ስሌትእና በተለይም MPI. ምናልባት ይህ አቅጣጫ ዛሬ በጣም ተስፋ ሰጭ ነው, ስለዚህ የዚህን ሂደት መሰረታዊ መርሆችን ለ hubbrowsers ማሳየት እፈልጋለሁ.

መሰረታዊ መርሆዎች እና ምሳሌዎች
የአርቢ (ሠ) ስሌት እንደ ምሳሌ ጥቅም ላይ ይውላል. እሱን ለማግኘት ካሉት አማራጮች አንዱ የቴይለር ተከታታይ ነው፡-
e^x=∑((x^n)/n!), ማጠቃለያው የሚከሰተው ከ n = 0 እስከ ወሰን የሌለው.

ይህ ቀመር በቀላሉ ሊመሳሰል ይችላል, ምክንያቱም የሚፈለገው ቁጥር የግለሰብ ቃላት ድምር ስለሆነ እና ለዚህም ምስጋና ይግባውና እያንዳንዱ የተለየ ፕሮሰሰርየግለሰብ ቃላትን ማስላት መጀመር ይችላል.

በእያንዳንዱ አንጎለ ኮምፒውተር ውስጥ የሚሰሉት የቃላት ብዛት በሁለቱም የጊዜ ክፍተት ርዝመት እና ባለው የአቀነባባሪዎች ብዛት ላይ ይወሰናል k በስሌቱ ሂደት ውስጥ ሊሳተፉ ይችላሉ. ስለዚህ, ለምሳሌ, የክፍለ ጊዜው ርዝመት n = 4 ከሆነ, እና አምስት ማቀነባበሪያዎች (k=5) በስሌቶቹ ውስጥ ከተሳተፉ, ከመጀመሪያው እስከ አራተኛው ፕሮሰሰር እያንዳንዳቸው አንድ ጊዜ ይቀበላሉ, እና አምስተኛው ጥቅም ላይ አይውልም. n=10 እና k=5 ከሆነ እያንዳንዱ ፕሮሰሰር ለማስላት ሁለት ውሎችን ያገኛል።

መጀመሪያ ላይ የ MPI_Bcast ስርጭት ተግባርን በመጠቀም የመጀመሪያው አንጎለ ኮምፒውተር በተጠቃሚው የተገለጸውን ተለዋዋጭ n ዋጋ ለሌሎች ይልካል። በአጠቃላይ የMPI_Bcast ተግባር የሚከተለው ቅርጸት አለው፡-
int MPI_Bcast (void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm), ቋት ከኤለመንቱ ጋር የመጠባበቂያው አድራሻ ሲሆን ቆጠራው የንጥረ ነገሮች ብዛት ነው, ዳታታይፕ በ MPI ውስጥ ያለው ተዛማጅ የውሂብ አይነት ነው, root is ማስተላለፍን የሚያስተናግድ የዋናው ፕሮሰሰር ደረጃ እና comm የግንኙነት አስማሚው ስም ነው።
በእኔ ሁኔታ የዋናው ፕሮሰሰር ሚና ቀደም ሲል እንደተጠቀሰው 0 ደረጃ ያለው የመጀመሪያው ፕሮሰሰር ይሆናል።

ቁጥሩ በተሳካ ሁኔታ ከተላከ በኋላ እያንዳንዱ ፕሮሰሰር ውሎቹን ማስላት ይጀምራል። ይህንን ለማድረግ በእያንዳንዱ የዑደት ደረጃ, በስሌቶቹ ውስጥ ከሚካፈሉት የአቀነባባሪዎች ቁጥር ጋር እኩል የሆነ ቁጥር ወደ i ቁጥር ይጨመራል, ይህም በመጀመሪያ ደረጃ ከማቀነባበሪያው ደረጃ ጋር እኩል ነው. ቁጥሩ በሂደት ላይ ከሆነ ቀጣይ እርምጃዎችቁጥር እበልጣለሁ። ተጠቃሚ ተገልጿልቁጥር n, loop አፈፃፀም ለ የዚህ ፕሮሰሰርይቆማል።

በዑደቱ አፈፃፀም ወቅት ቃላቶቹ ወደ ተለየ ተለዋዋጭ ይጨምራሉ እና ከተጠናቀቀ በኋላ የተገኘው መጠን ወደ ዋናው ፕሮሰሰር ይላካል። ይህንን ለማድረግ የMPI_Reduce ቅነሳ ኦፕሬሽን ተግባር ጥቅም ላይ ይውላል። ውስጥ አጠቃላይ እይታይህን ይመስላል፡-
int MPI_ቀንስ ( ባዶ * ቡፍ፣ ባዶ * ውጤት፣ ኢንት ቆጠራ፣ MPI_Datatype datatype፣ MPI_Op op፣ int root፣ MPI_Comm comm)

ኦፕሬሽኑን በመጠቀም በቡድን ውስጥ ያሉትን የእያንዳንዱን ሂደት የግቤት ቋት አካላት ያገናኛል እና የተጣመረውን እሴት ወደ የሂደት ቁጥር ስር ወደሚወጣው የውጽአት ቋት ይመልሳል። የእንደዚህ አይነት ቀዶ ጥገና ውጤት አንድ ነጠላ እሴት ይሆናል, ለዚህም ነው የመውሰድ ተግባር ስሙን ያገኘው.

ፕሮግራሙን በሁሉም ፕሮሰሰሮች ላይ ካስፈፀመ በኋላ የመጀመሪያው አንጎለ ኮምፒውተር አጠቃላይ ድምርን ይቀበላል ፣ ይህም እኛ የምንፈልገው አርቢ እሴት ይሆናል።

አርቢውን ለማስላት በትይዩ እና በቅደም ተከተል ዘዴዎች ፣ ፋብሊካዊውን ለማግኘት መቻሉን ልብ ሊባል ይገባል ። ተደጋጋሚ ተግባር. እየተካሄደ ያለውን ተግባር ትይዩ የማድረግ ዘዴ ላይ ውሳኔ በምሰጥበት ጊዜ ፋብሪካውን የማግኘት አማራጭን ተመለከትኩኝ የተለያዩ ማቀነባበሪያዎች, ግን በመጨረሻ ይህ አማራጭ ለእኔ ምክንያታዊ ያልሆነ ነበር.

ዋናው ተግባር አሁንም የአርበኛውን ዋጋ ማግኘት ነው, እና ማቀነባበሪያዎች የእያንዳንዱን ቃል እያንዳንዱን ፋክተር በተናጠል ማስላት ከጀመሩ, ይህ ወደ ትክክለኛው ተቃራኒ ውጤት ማለትም በአፈፃፀም እና በስሌት ፍጥነት ላይ ከፍተኛ ኪሳራ ሊያስከትል ይችላል.
ይህ በዚህ ጉዳይ ላይ መጀመሩን በመግለጽ ይገለጻል ከባድ ጭነትበትይዩ የኮምፒዩተር ስርዓቶች ውስጥ ቀድሞውኑ ደካማ አገናኝ በሆነው የግንኙነት አከባቢ ላይ። ፋብሪካው በእያንዳንዱ ፕሮሰሰር ላይ በግል የሚሰላ ከሆነ በመገናኛ መስመሮች ላይ ያለው ጭነት አነስተኛ ይሆናል. ይህ ጉዳይተብሎ ሊጠራ ይችላል። ጥሩ ምሳሌትይዩ የማድረግ ተግባር አንዳንድ ጊዜ ገደብ ሊኖረው ይገባል.

ኮድ ማስፈጸሚያ አልጎሪዝም
1. የቁጥር ዋጋ n ከእይታ ሼል ወደ ፕሮግራሙ ይተላለፋል, ከዚያም የስርጭት ተግባሩን በመጠቀም ወደ ሁሉም ማቀነባበሪያዎች ይላካል.
2. የመጀመሪያው ዋና ፕሮሰሰር ሲጀመር ሰዓት ቆጣሪ ይጀምራል።
3. እያንዳንዱ ፕሮሰሰር አንድ loop ያከናውናል, የጨመረው እሴት በሲስተሙ ውስጥ ያሉ የአቀነባባሪዎች ብዛት ነው. በእያንዳንዱ የ loop ድግግሞሽ ጊዜ አንድ ቃል ይሰላል እና የእነዚህ ቃላት ድምር በ drobSum ተለዋዋጭ ውስጥ ይከማቻል።
4. ምልክቱ ከተጠናቀቀ በኋላ እያንዳንዱ ፕሮሰሰር የ MPI_Reduce ቅነሳ ተግባርን በመጠቀም የdrobSum እሴቱን ወደ የውጤት ተለዋዋጭ ያክላል።
5. በሁሉም ማቀነባበሪያዎች ላይ ስሌቶችን ካጠናቀቀ በኋላ, የመጀመሪያው ዋና ፕሮሰሰር ጊዜ ቆጣሪውን ያቆማል እና የውጤት ተለዋዋጭ ውጤቱን ወደ የውጤት ዥረቱ ይልካል.
6. በጊዜ ቆጣሪችን በሚሊሰከንዶች የሚለካው የጊዜ እሴት ወደ የውጤት ጅረት ይላካል።
የኮድ ዝርዝር
መርሃግብሩ በ C ++ ውስጥ ተጽፏል, የአፈፃፀም ክርክሮች ከውጪው ቅርፊት ተላልፈዋል ብለን እንገምታለን. ኮዱ ይህን ይመስላል።
#ያካትቱ "mpi.h"
#ያካትቱ
#ያካትቱ
የስም ቦታ std በመጠቀም;

ድርብ እውነታ (int n)
{
ከሆነ (n==0)
መመለስ 1;
ሌላ
መመለስ n * እውነታ (n-1);
}

int ዋና (int argc፣ char *argv)
{
SetConsoleOutputCP(1251);
int n;
int myid;
int ቁጥሮች;
int i;
int rc;
ረጅም ድርብ ጠብታ,drobSum=0,ውጤት, ድምር;
ድርብ ጅምር = 0.0;
ድርብ የመጨረሻ ጊዜ;

N = atoi (argv);

ከሆነ (rc= MPI_Init(&argc, &argv))
{
ኮት<< "የጅምር ስህተት፣ አፈጻጸም ቆሟል" << endl;
MPI_Abort(MPI_COMM_WORLD፣ rc);
}

MPI_Comm_size(MPI_COMM_WORLD፣&nuprocs);
MPI_Comm_ደረጃ(MPI_COMM_WORLD፣&myid);

ከሆነ (ማይድ == 0)
{

Startwtime = MPI_Wtime ();
}
MPI_Bcast (&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

ለ (i = myid; i<= n; i += numprocs)
{
drob = 1 / እውነታ (i);
drobSum += ጠብታ;
}

MPI_ቀንስ (&drobSum፣ & ውጤት፣ 1፣ MPI_LONG_DOUBLE፣ MPI_SUM፣ 0፣ MPI_COMM_WORLD)
cout.ትክክለኛ (20);
ከሆነ (ማይድ == 0)
{
ኮት<< Result << endl;
endwtime = MPI_Wtime ();
ኮት<< (endwtime-startwtime)*1000 << endl;
}

MPI_Finalize ();
መመለስ 0;
}


* ይህ የምንጭ ኮድ በምንጭ ኮድ ሃይላይተር ደመቀ።
ማጠቃለያ
ስለዚህ, በአንድ ጊዜ ብዙ ማቀነባበሪያዎችን በመጠቀም ገላጭውን ለማስላት ቀላል ፕሮግራም አግኝተናል. ምናልባት, ማነቆው ውጤቱን በራሱ እያከማቸ ነው, ምክንያቱም በዲጂቶች ብዛት መጨመር, መደበኛ ዓይነቶችን በመጠቀም ዋጋን ማከማቸት ቀላል አይሆንም እና ይህ ቦታ ማብራራትን ይጠይቃል. ምናልባት ትክክለኛ ምክንያታዊ መፍትሄ ውጤቱን በፋይል ላይ መፃፍ ነው, ምንም እንኳን, የዚህ ምሳሌ ንፁህ ትምህርታዊ ተግባር አንጻር, በዚህ ላይ ብዙ ትኩረት መስጠት አያስፈልግም.

ማብራሪያ፡- ንግግሩ የ MPI ቴክኖሎጂን እንደ ትይዩ የፕሮግራም ደረጃ ለተከፋፈሉ የማህደረ ትውስታ ስርዓቶች ግምት ውስጥ በማስገባት ነው። ዋናው የመረጃ ማስተላለፊያ ዘዴዎች ግምት ውስጥ ይገባል. እንደ የሂደት ቡድኖች እና ኮሙዩኒኬተሮች ያሉ ጽንሰ-ሐሳቦች ቀርበዋል. መሰረታዊ የመረጃ አይነቶችን፣ ነጥብ-ወደ-ነጥብ ስራዎችን፣ የጋራ ስራዎችን፣ የማመሳሰል ስራዎችን እና የጊዜ መለኪያዎችን ይሸፍናል።

የትምህርቱ ዓላማ፡-ትምህርቱ ትይዩ ስልተ ቀመሮችን ለማዘጋጀት አጠቃላይ ዘዴን ለማጥናት ያለመ ነው።

የትምህርቱ ቪዲዮ ቀረጻ - (ድምጽ - 134 ሜባ)።

5.1. MPI፡ መሰረታዊ ፅንሰ-ሀሳቦች እና ትርጓሜዎች

ለኤምፒአይ ደረጃ መሰረታዊ የሆኑ በርካታ ጽንሰ-ሀሳቦችን እና ፍቺዎችን እንመልከት።

5.1.1. ትይዩ ፕሮግራም ጽንሰ-ሐሳብ

ስር ትይዩ ፕሮግራምበMPI ማዕቀፍ ውስጥ፣ በአንድ ጊዜ የተከናወነውን ስብስብ እንረዳለን። ሂደቶች. ሂደቶች በተለያዩ ማቀነባበሪያዎች ላይ ሊከናወኑ ይችላሉ, ነገር ግን በርካታ ሂደቶች በተመሳሳይ ፕሮሰሰር ላይ ሊገኙ ይችላሉ (በዚህ ሁኔታ, በጊዜ መጋራት ሁነታ ላይ ይከናወናሉ). በጣም በከፋ ሁኔታ አንድ ፕሮሰሰር ትይዩ ፕሮግራምን ለማስፈጸም ሊያገለግል ይችላል - እንደ ደንቡ ይህ ዘዴ መጀመሪያ ላይ የትይዩ ፕሮግራም ትክክለኛነትን ለማረጋገጥ ይጠቅማል።

እያንዳንዱ የትይዩ ፕሮግራም ሂደት ከተመሳሳዩ የፕሮግራም ኮድ ቅጂ የተገኘ ነው ( የ SPMP ሞዴል). ይህ የፕሮግራም ኮድ, በ executable ፕሮግራም መልክ የቀረበው, ትይዩ ፕሮግራሙ በሁሉም አቀናባሪዎች ላይ በሚጀመርበት ጊዜ መገኘት አለበት. የማስፈጸሚያው ፕሮግራም ምንጭ ኮድ በአልጎሪዝም ቋንቋዎች C ወይም Fortran አንድ ወይም ሌላ የMPI ቤተ-መጽሐፍትን ትግበራ በመጠቀም ተዘጋጅቷል።

የሂደቶች ብዛት እና የአቀነባባሪዎች ብዛት የሚወሰነው ትይዩ ፕሮግራሙ በሚጀመርበት ጊዜ ነው MPI ፕሮግራም አፈፃፀም አካባቢን በመጠቀም እና በስሌቶች ጊዜ መለወጥ አይችሉም (የ MPI-2 ደረጃ የሂደቱን ብዛት በተለዋዋጭ የመቀየር እድል ይሰጣል)። ሁሉም የፕሮግራም ሂደቶች በቅደም ተከተል ከ 0 እስከ ተቆጥረዋል ገጽ-1፣ የት ገጽአጠቃላይ የሂደቶች ብዛት ነው። የሂደቱ ቁጥር ተጠርቷል ደረጃሂደት.

5.1.2. የውሂብ ማስተላለፍ ስራዎች

MPI በመልዕክት ማስተላለፍ ስራዎች ላይ የተመሰረተ ነው. እንደ MPI አካል ከተሰጡት ተግባራት መካከል የተለያዩ ናቸው እጥፍ ይጨምራል (ነጥብ-ወደ-ነጥብ) በሁለት ሂደቶች መካከል ያሉ ስራዎች እና የጋራ (የጋራ) ለብዙ ሂደቶች በአንድ ጊዜ መስተጋብር የግንኙነት እርምጃዎች።

የተጣመሩ ስራዎችን ለማከናወን የተለያዩ የማስተላለፊያ ዘዴዎችን መጠቀም ይቻላል, የተመሳሰለ, ማገድ, ወዘተ ጨምሮ - በተቻለ መጠን ሙሉ ግምት ውስጥ ይገባል. የማስተላለፊያ ሁነታዎችበንዑስ ክፍል 5.3 ውስጥ ይከናወናል.

ቀደም ሲል እንደተገለፀው የ MPI መስፈርት አብዛኛዎቹን መሰረታዊ የጋራ የመረጃ ልውውጥ ስራዎችን ተግባራዊ ለማድረግ ያቀርባል - ንዑስ ክፍሎችን 5.2 እና 5.4 ይመልከቱ.

5.1.3. የመገናኛዎች ጽንሰ-ሐሳብ

የአንድ ትይዩ ፕሮግራም ሂደቶች ወደ ውስጥ ይጣመራሉ። ቡድኖች. ስር ተግባቢ MPI የሂደቶችን ቡድን እና በርካታ ተጨማሪ መለኪያዎችን የሚያጣምር ልዩ የተፈጠረ የአገልግሎት ነገርን ያመለክታል ( አውድ) የውሂብ ማስተላለፍ ስራዎችን ሲያከናውን ጥቅም ላይ ይውላል.

በተለምዶ፣ የተጣመሩ የውሂብ ማስተላለፍ ስራዎች የሚከናወኑት ለተመሳሳይ አስተላላፊ ለሆኑ ሂደቶች ነው። የጋራ ስራዎች በሁሉም የመገናኛ ሂደቶች ላይ በአንድ ጊዜ ይተገበራሉ. በውጤቱም, በ MPI ውስጥ የውሂብ ማስተላለፍ ስራዎችን ለመጠቀም ኮሙዩኒኬተሩን መግለጽ ግዴታ ነው.

በስሌቶች ጊዜ አዳዲስ የሂደት ቡድኖች እና ኮሙዩኒኬተሮች ሊፈጠሩ እና ነባሮቹ ሊሰረዙ ይችላሉ. ተመሳሳይ ሂደት ለተለያዩ ቡድኖች እና ኮሚዩኒኬተሮች ሊሆን ይችላል. በትይዩ ፕሮግራም ውስጥ ያሉ ሁሉም ሂደቶች በነባሪ በ MPI_COMM_WORLD ለዪ በተፈጠረው ኮሙዩኒኬተር ውስጥ ተካትተዋል።

ከተለያዩ ቡድኖች ሂደቶች መካከል መረጃን ለማስተላለፍ አስፈላጊ ከሆነ ዓለም አቀፍ አስተላላፊ መፍጠር አስፈላጊ ነው ( ተላላፊ).

ከቡድኖች እና ከኮሚኒኬተሮች ጋር አብሮ ለመስራት የ MPI ችሎታዎች ዝርዝር ውይይት በንኡስ ክፍል 5.6 ውስጥ ይከናወናል.

5.1.4. የውሂብ አይነቶች

የመልእክት ማስተላለፍ ስራዎችን በሚሰሩበት ጊዜ በMPI ተግባራት ውስጥ የሚላከው ወይም የሚቀበለውን ውሂብ መግለጽ አለብዎት። ዓይነትየተላከ ውሂብ. MPI ትልቅ ስብስብ ይዟል መሰረታዊ ዓይነቶችበአልጎሪዝም ቋንቋዎች C እና Fortran ውስጥ ከውሂብ ዓይነቶች ጋር በአብዛኛው የሚገጣጠም ውሂብ። በተጨማሪም, MPI አዲስ የመፍጠር ችሎታ አለው የተገኙ ዓይነቶችየተላለፉ መልዕክቶች ይዘት የበለጠ ትክክለኛ እና አጭር መግለጫ ለማግኘት መረጃ።

ከተገኙ የመረጃ አይነቶች ጋር ለመስራት የ MPI ችሎታዎች ዝርዝር ውይይት በንዑስ ክፍል 5.5 ውስጥ ይከናወናል።

5.1.5. ምናባዊ ቶፖሎጂዎች

ቀደም ሲል እንደተገለፀው ፣የተጣመሩ የመረጃ ልውውጥ ስራዎች በማንኛውም ተመሳሳይ የግንኙነት ሂደቶች መካከል ሊከናወኑ ይችላሉ ፣ እና ሁሉም የግንኙነት ሂደቶች በህብረት ክወና ውስጥ ይሳተፋሉ። በዚህ ረገድ በሂደቶች መካከል የግንኙነት መስመሮች አመክንዮአዊ ቶፖሎጂ የተጠናቀቀ ግራፍ መዋቅር አለው (ምንም እንኳን በአቀነባባሪዎች መካከል እውነተኛ አካላዊ የግንኙነት መስመሮች ቢኖሩም)።

በተመሳሳይ ጊዜ (እና ይህ አስቀድሞ በክፍል 3 ውስጥ ተገልጿል) ፣ ለብዙ ትይዩ ስልተ ቀመሮች አቀራረብ እና ቀጣይ ትንተና ፣ አሁን ያለውን የግንኙነት አውታር በተወሰኑ ቶፖሎጂዎች መልክ ሎጂካዊ ውክልና እንዲኖረው ይመከራል።

MPI በቅጹ ውስጥ ብዙ ሂደቶችን የመወከል ችሎታ አለው። ግሬቲንግስየዘፈቀደ ልኬት (ንኡስ ክፍል 5.7 ይመልከቱ)። በዚህ ሁኔታ, የጭራጎቹ የድንበር ሂደቶች በአጎራባችነት ሊታወቁ ይችላሉ, በዚህም ምክንያት, በአይነቱ ላይ በመመስረት, የዓይነቶችን አወቃቀሮች. torus.

በተጨማሪም፣ MPI እንዲሁም ማንኛውንም አስፈላጊ ዓይነት ሎጂካዊ (ምናባዊ) ቶፖሎጂዎችን ለማምረት መሳሪያዎች አሉት። ከቶፖሎጂዎች ጋር ለመስራት ስለ MPI ችሎታዎች ዝርዝር ውይይት በንኡስ ክፍል 5.7 ውስጥ ይከናወናል.

እና በመጨረሻ፣ MPIን ማየት ከመጀመራችን በፊት አንድ የመጨረሻ የማስታወሻ ስብስብ፡-

  • የተግባሮች መግለጫዎች እና ሁሉም የቀረቡት ፕሮግራሞች ምሳሌዎች በአልጎሪዝም ቋንቋ ሲ ውስጥ ይቀርባሉ; ፎርትራን ለአልጎሪዝም ቋንቋ MPI የመጠቀም ባህሪዎች በክፍል 5.8.1 ውስጥ ይሰጣሉ ፣
  • የMPI ቤተ-መጻሕፍት አተገባበር አጭር መግለጫ እና የMPI ፕሮግራሞች አፈጻጸም አካባቢ አጠቃላይ መግለጫ በክፍል 5.8.2 ውስጥ ይብራራል።
  • የ MPI ችሎታዎች ዋና አቀራረብ በስሪት 1.2 ደረጃ ላይ ያተኩራል ( MPI-1); የስሪት 2.0 ደረጃ ተጨማሪ ባህሪያት በአንቀጽ 5.8.3 ውስጥ ይቀርባሉ.

MPI ን ማጥናት ሲጀምሩ በአንድ በኩል MPI በጣም የተወሳሰበ መሆኑን ልብ ሊባል ይችላል - የ MPI ደረጃ ከ 125 በላይ ተግባራትን መኖሩን ያቀርባል. በሌላ በኩል የ MPI መዋቅር በጥንቃቄ የታሰበ ነው - ትይዩ ፕሮግራሞችን ማዘጋጀት 6 MPI ተግባራትን ብቻ ካገናዘበ በኋላ ሊጀምር ይችላል. የተገነቡ ስልተ ቀመሮች እና ፕሮግራሞች ውስብስብነት እየጨመረ ሲሄድ ሁሉም ተጨማሪ የ MPI ባህሪያት ሊታወቁ ይችላሉ. በዚህ ዘይቤ ነው - ከቀላል እስከ ውስብስብ - ሁሉም ትምህርታዊ ጽሑፎች በ MPI ላይ የበለጠ የሚቀርቡት።

5.2. MPI በመጠቀም ትይዩ ፕሮግራም ልማት መግቢያ

5.2.1. MPI መሰረታዊ ነገሮች

በጣም ቀላል የሆኑ ትይዩ ፕሮግራሞችን ለማዘጋጀት በቂ የሆነውን አነስተኛውን የ MPI ተግባራት እናቅርብ።

5.2.1.1 የ MPI ፕሮግራሞችን መጀመር እና ማቆም

የመጀመሪያው ተግባር ይባላል MPI ተግባር መሆን አለበት፡-

int MPI_Init (int *agrc, char ***argv);

የ MPI ፕሮግራም ማስፈጸሚያ አካባቢን ለመጀመር. የተግባር መለኪያዎች በትዕዛዝ መስመሩ ላይ ያሉት የክርክር ብዛት እና የትእዛዝ መስመሩ ጽሑፍ ነው።

የመጨረሻው ተግባር ተጠርቷል MPI ተግባር መሆን አለበት፡-

int MPI_Finalize (ባዶ);

በውጤቱም, MPI ን በመጠቀም የተገነባው ትይዩ ፕሮግራም መዋቅር የሚከተለው ቅጽ ሊኖረው እንደሚገባ ልብ ሊባል ይችላል.

# "mpi.h" int main (int argc፣ char *argv) ያካትቱ (<программный код без использования MPI функций>MPI_Init (& agrc, & argv);<программный код с использованием MPI функций>MPI_Finalize ();<программный код без использования MPI функций>መመለስ 0; )

ልብ ሊባል የሚገባው፡-

  1. ፋይል mpi.hየተሰየሙ ቋሚዎች ትርጓሜዎች፣ የተግባር ፕሮቶታይፕ እና የMPI ቤተ-መጽሐፍት የውሂብ አይነቶችን ይዟል፣
  2. ተግባራት MPI_Initእና MPI_ጨርስየግዴታ ናቸው እና በእያንዳንዱ ትይዩ ፕሮግራም ሂደት (እና አንድ ጊዜ ብቻ) መከናወን አለባቸው ፣
  3. ከጥሪው በፊት MPI_Initተግባር መጠቀም ይቻላል MPI_ተጀመረቀደም ሲል ጥሪ የተደረገ መሆኑን ለመወሰን MPI_Init.

ከላይ የተገለጹት የተግባር ምሳሌዎች በMPI ውስጥ ተግባራትን ለመሰየም አገባብ ሀሳብ ይሰጣሉ። የተግባር ስሙ ከኤምፒአይ ቅድመ ቅጥያ ቀጥሎ አንድ ወይም ከዚያ በላይ የስሙ ቃላቶች ይከተላሉ፣ በተግባሩ ስም ውስጥ ያለው የመጀመሪያው ቃል በካፒታል ቁምፊ ይጀምራል፣ ቃላቶቹ በግርጌ ይለያሉ። የ MPI ተግባራት ስሞች, እንደ አንድ ደንብ, በተግባሩ የተከናወኑ ድርጊቶችን ዓላማ ያብራራሉ.

ልብ ሊባል የሚገባው፡-

  • ተግባቢ MPI_COMM_WORLD, ቀደም ሲል እንደተገለፀው በነባሪነት የተፈጠረ እና ሁሉንም ትይዩ መርሃ ግብሮችን ይወክላል,
  • ተግባሩን በመጠቀም የተገኘ ደረጃ MPI_Comm_ደረጃ, ለዚህ ተግባር ጥሪ ያደረገው የሂደቱ ደረጃ ነው, ማለትም. ተለዋዋጭ ፕሮክራንክበተለያዩ ሂደቶች ውስጥ የተለያዩ እሴቶችን ይወስዳል.

በ C ቋንቋ ትይዩ
ምሳሌ 3 ለ. በፎርታን ውስጥ ትይዩ
ምሳሌ 4 ሀ. በ C ቋንቋ የስርዓት ጊዜ ቆጣሪ ባህሪያትን መወሰን
ምሳሌ 4 ለ. በፎርታን ውስጥ የስርዓት ጊዜ ቆጣሪ ባህሪያትን መግለጽ

1.4. በተለያዩ ሂደቶች መካከል መልዕክቶችን መላክ እና መቀበል

1.4.1. ነጥብ-ወደ-ነጥብ ስራዎች

1.4.2. በማገድ መልዕክቶችን መላክ እና መቀበል

ምሳሌ 5 ሀ. በ C ቋንቋ በሁለት ሂደቶች መካከል የመልእክት ልውውጥ
ምሳሌ 5 ለ. በፎርራን ውስጥ በሁለት ሂደቶች መካከል የመልእክት ልውውጥ
ምሳሌ 6 ሀ. በሲ ውስጥ በእኩል እና ያልተለመዱ ሂደቶች መካከል የመልእክት ልውውጥ
ምሳሌ 6 ለ. በፎርራን ውስጥ በእኩል እና ያልተለመዱ ሂደቶች መካከል የመልእክት ልውውጥ
ምሳሌ 7 ሀ. በሲ ውስጥ ወደማይኖር ሂደት ማስተላለፍ
ምሳሌ 7 ለ. በፎርራን ውስጥ ወደማይኖር ሂደት በማስተላለፍ ላይ
ምሳሌ 8 ሀ. የታሸገ ውሂብ በ C ቋንቋ በመላክ ላይ
ምሳሌ 8 ለ. የታሸገ ውሂብ በፎርራን ቋንቋ በመላክ ላይ
ምሳሌ 9 ሀ. በC ቋንቋ ስለ መልእክት ባህሪያት መረጃ ማግኘት
ምሳሌ 9 ለ. በፎርታን ውስጥ ስለ መልእክት ባህሪያት መረጃ ማግኘት
ምሳሌ 10 ሀ. በC ቋንቋ የቆይታ እና የሂደት ፍቺ
ምሳሌ 10 ለ. በፎርትራን ውስጥ የቆይታ ጊዜን እና የሂደቱን ሂደት መግለፅ

1.4.3. ሳያግዱ መልዕክቶችን መላክ እና መቀበል

ምሳሌ 11 ሀ. በሲ ውስጥ የማያግድ ስራዎችን በመጠቀም የቀለበት ቶፖሎጂን መለዋወጥ
ምሳሌ 11 ለ. በፎርራን ውስጥ የማያግድ ስራዎችን በመጠቀም የቀለበት ቶፖሎጂን ተለዋወጡ
ምሳሌ 12 ሀ. የግንኙነት እቅድ "ዋና - ሰራተኞች" በ C ቋንቋ
ምሳሌ 12 ለ. የግንኙነት ንድፍ "ማስተር - ሰራተኞች" በፎርራን ቋንቋ
ምሳሌ 13 ሀ. የማትሪክስ ሽግግር በ C ቋንቋ
ምሳሌ 13 ለ. በፎርትራን ውስጥ ማትሪክስ በማስተላለፍ ላይ

1.4.4. በመጠባበቅ ላይ ያሉ የግንኙነቶች ጥያቄዎች

ምሳሌ 14 ሀ. በC ቋንቋ የተላለፉ መጠይቆችን በመጠቀም የቀለበት ቶፖሎጂን በመለዋወጥ የመደጋገም ዘዴ እቅድ
ምሳሌ 14 ለ. በፎርራን ውስጥ የተላለፉ መጠይቆችን በመጠቀም የቀለበት ቶፖሎጂን በመለዋወጥ የመደጋገም ዘዴ እቅድ

1.4.5. የመዘጋት ሁኔታዎች

ምሳሌ 15 ሀ. MPI_Sendrecv አሰራርን በC ቋንቋ በመጠቀም ቀለበት ቶፖሎጂን ተለዋወጡ
ምሳሌ 15 ለ. በፎርራን የሚገኘውን MPI_SENDRECV አሰራርን በመጠቀም የቀለበት ቶፖሎጂን ተለዋወጡ

1.5. የጋራ ሂደት መስተጋብር

1.5.1. አጠቃላይ ድንጋጌዎች

1.5.2. መሰናክል

ምሳሌ 16 ሀ. በC ቋንቋ ማነቆ ማመሳሰልን ሞዴል ማድረግ
ምሳሌ 16 ለ. በፎርታን ውስጥ ማገጃ ማመሳሰልን ሞዴል ማድረግ

1.5.3. የስብስብ ውሂብ ማስተላለፍ ስራዎች

1.5.4. አለምአቀፍ ስራዎች

ምሳሌ 17 ሀ. ሁለንተናዊ ማጠቃለያን በመጠቀም ሁለንተናዊ ማጠቃለያን እና የጋራ ስራ MPI_C ቋንቋን ይቀንሱ
ምሳሌ 17 ለ. ሁለንተናዊ ማጠቃለያን በመቅረጽ እና በፎርራን ውስጥ ያለውን የጋራ ተግባር MPI_ቀንስ

1.5.5. ብጁ ግሎባል ኦፕሬሽኖች

ምሳሌ 18 ሀ. ብጁ ዓለም አቀፍ ተግባር በ C ቋንቋ
ምሳሌ 18 ለ. በፎርራን ውስጥ ብጁ ዓለም አቀፍ ተግባር

1.6. ቡድኖች እና ኮሙኒኬተሮች

1.6.1. አጠቃላይ ድንጋጌዎች

1.6.2. ከሂደቱ ቡድኖች ጋር ክዋኔዎች

ምሳሌ 19 ሀ. በ C ቋንቋ ከቡድኖች ጋር መስራት
ምሳሌ 19 ለ. በፎርታን ውስጥ ካሉ ቡድኖች ጋር በመስራት ላይ

1.6.3. ከኮሚኒኬተሮች ጋር የሚሰሩ ስራዎች

ምሳሌ 20 ሀ. በሲ ውስጥ ኮሙዩኒኬተርን ማፍረስ
ምሳሌ 20 ለ. በፎርራን ውስጥ ኮሙዩኒኬተርን መከፋፈል
ምሳሌ 21 ሀ. በ C ቋንቋ ሂደቶችን እንደገና መቁጠር
ምሳሌ 21 ለ. በፎርራን ውስጥ እንደገና መቁጠር ሂደቶች

1.6.4. ኢንተርኮሙኒኬተሮች

ምሳሌ 22 ሀ. በC ቋንቋ ኢንተርኮሙኒኬተርን በመጠቀም ዋና-ሰራተኛ እቅድ
ምሳሌ 22 ለ. በፎርራን ውስጥ ኢንተርኮሙኒኬተርን በመጠቀም ማስተር-ሰራተኛ ወረዳ

1.6.5. ባህሪያት

1.7. ምናባዊ ቶፖሎጂዎች

1.7.1. አጠቃላይ ድንጋጌዎች

1.7.2. የካርቴዥያ ቶፖሎጂ

1.7.3. ግራፍ ቶፖሎጂ

ምሳሌ 23 ሀ. በ C ቋንቋ ግራፍ ቶፖሎጂን በመጠቀም ማስተር-ሰራተኛ ንድፍ
ምሳሌ 23 ለ. በፎርራን ውስጥ የግራፍ ቶፖሎጂን በመጠቀም ዋና-ሰራተኛ እቅድ

1.8. የተለያዩ የውሂብ ዓይነቶችን በመላክ ላይ

1.8.1. አጠቃላይ ድንጋጌዎች

1.8.2. የተገኙ የውሂብ አይነቶች

ምሳሌ 24 ሀ. የማትሪክስ አምዶችን በግልባጭ በC ቋንቋ ማስተካከል
ምሳሌ 24 ለ. የማትሪክስ አምዶችን በተቃራኒ ቅደም ተከተል በፎርራን በማስተካከል ላይ

1.8.3. የውሂብ ማሸግ

ምሳሌ 25 ሀ. በC ቋንቋ የታሸገ ውሂብ በመላክ ላይ
ምሳሌ 25 ለ. በፎርራን ውስጥ የታሸገ ውሂብ በመላክ ላይ

1.9. መረጃ ነገር

1.9.1. አጠቃላይ ድንጋጌዎች

1.9.2. ከመረጃው ነገር ጋር በመስራት ላይ

1.10. ተለዋዋጭ የሂደት ቁጥጥር

1.10.1. አጠቃላይ ድንጋጌዎች

1.10.2.የሂደቶችን መፍጠር

ማስተር.ሲ
ባሪያ.ሲ
ምሳሌ 26 ሀ. በC ቋንቋ የሂደት መራባትን በመጠቀም ዋና-ሰራተኛ እቅድ
ማስተር.ኤፍ
ባሪያ.ኤፍ
ምሳሌ 26 ለ. በፎርራን ውስጥ የሂደት መፈልፈልን በመጠቀም ዋና-ሰራተኛ እቅድ

1.10.3. የደንበኛ-አገልጋይ ግንኙነት

አገልጋይ.ሲ
ደንበኛ.ሲ
ምሳሌ 27 ሀ. በC ቋንቋ የህዝብ ስም በመጠቀም በአገልጋይ እና በደንበኛ መካከል የመረጃ ልውውጥ
አገልጋይ.ኤፍ
ደንበኛ.ኤፍ
ምሳሌ 27 ለ. በፎርራን ቋንቋ የህዝብ ስምን በመጠቀም በአገልጋይ እና በደንበኛው መካከል የውሂብ ልውውጥ

1.10.4. የሂደት ማህበርን ማስወገድ

1.10.5. የሶኬት ግንኙነት

1.11. የአንድ መንገድ ግንኙነቶች

1.11.1. አጠቃላይ ድንጋጌዎች

1.11.2. ከመስኮት ጋር በመስራት ላይ

1.11.3. የውሂብ ማስተላለፍ

1.11.4. ማመሳሰል

ምሳሌ 28 ሀ
ምሳሌ 28 ለ
ምሳሌ 29 ሀ. በሲ ውስጥ ባለ አንድ መንገድ ግንኙነቶችን በመጠቀም ቀለበት ቶፖሎጂን መለዋወጥ
ምሳሌ 29 ለ. በፎርራን የአንድ መንገድ ግንኙነቶችን በመጠቀም የቀለበት ቶፖሎጂን ተለዋወጡ
ምሳሌ 30 ሀ. በሲ ውስጥ ባለ አንድ መንገድ ግንኙነቶችን በመጠቀም ቀለበት ቶፖሎጂን መለዋወጥ
ምሳሌ 30 ለ. በፎርራን የአንድ መንገድ ግንኙነቶችን በመጠቀም የቀለበት ቶፖሎጂን ተለዋወጡ

1.12. ውጫዊ በይነገጾች

1.12.1. አጠቃላይ መጠይቆች

1.12.2. ከሁኔታ መረጃ

1.12.3. ክሮች

1.13. ትይዩ I/O

1.13.1. ፍቺዎች

1.13.2. ከፋይሎች ጋር በመስራት ላይ

1.13.3. የውሂብ መዳረሻ

ምሳሌ 31 ሀ. በC ቋንቋ ከፋይል የተከለለ ንባብ
ምሳሌ 31 ለ. በፎርራን ውስጥ ካለ ፋይል የተከለለ ንባብ
ምሳሌ 32 ሀ. ከፋይል በ C ቋንቋ የጋራ ንባብ
ምሳሌ 32 ለ. በፎርራን ውስጥ ካለ ፋይል የጋራ ንባብ

1.14. አያያዝ ላይ ስህተት

1.14.1. አጠቃላይ ድንጋጌዎች

1.14.2. ከኮሚኒኬተሮች ጋር የተገናኙ የስህተት ተቆጣጣሪዎች

1.14.3. ከመስኮት ጋር የተያያዙ የስህተት ተቆጣጣሪዎች

1.14.4. ከፋይል ጋር የተገናኙ የስህተት ተቆጣጣሪዎች

1.14.5. ተጨማሪ ሂደቶች

1.14.6. የስህተት ኮዶች እና ክፍሎች

1.14.7. የጥሪ ስህተት ተቆጣጣሪዎች

ምሳሌ 33 ሀ. በC ቋንቋ አያያዝ ላይ ስህተት
ምሳሌ 33 ለ. በፎርራን ውስጥ አያያዝ ላይ ስህተት

ምዕራፍ 2 OpenMP ትይዩ ፕሮግራሚንግ ቴክኖሎጂ

2.1. መግቢያ

2.2. መሰረታዊ ጽንሰ-ሐሳቦች

2.2.1. ፕሮግራም ማጠናቀር

ምሳሌ 34 ሀ. ሁኔታዊ ቅንብር በሲ
ምሳሌ 34 ለ
ምሳሌ 34 ሐ. በፎርታን ውስጥ ሁኔታዊ ማጠናቀር

2.2.2. ትይዩ ፕሮግራም ሞዴል

2.2.3. መመሪያዎች እና ሂደቶች

2.2.4. የፕሮግራም አፈፃፀም

2.2.5. ጊዜ አጠባበቅ

ምሳሌ 35 ሀ. በሲ ውስጥ ከስርዓት ቆጣሪዎች ጋር በመስራት ላይ
ምሳሌ 35 ለ. በፎርታን ውስጥ ከስርዓት ቆጣሪዎች ጋር በመስራት ላይ

2.3. ትይዩ እና ተከታታይ ቦታዎች

2.3.1. ትይዩ መመሪያ

ምሳሌ 36 ሀ. በ C ቋንቋ ትይዩ ክልል
ምሳሌ 36 ለ. በፎርራን ውስጥ ትይዩ ክልል
ምሳሌ 37 ሀ. በ C ቋንቋ የመቀነስ አማራጭ
ምሳሌ 37 ለ. በፎርታን ውስጥ የመቀነስ አማራጭ

2.3.2. አጭር መግለጫ

2.3.3. የአካባቢ ተለዋዋጮች እና አጋዥ ሂደቶች

ምሳሌ 38 ሀ. Omp_set_num_threads አሰራር እና የቁጥር_ክሮች አማራጭ በC ቋንቋ
ምሳሌ 38 ለ. ሂደት omp_set_num_threads እና አማራጭ ቁጥርን በፎርራን ቋንቋ
ምሳሌ 39 ሀ. ሂደቶች omp_set_dynamic እና omp_get_dynamic በC ቋንቋ
ምሳሌ 39 ለ. ሂደቶች omp_set_dynamic እና omp_get_dynamic በፎርራን
ምሳሌ 40 ሀ. በC ውስጥ የተከማቸ ትይዩ ክልሎች
ምሳሌ 40 ለ. በፎርራን ውስጥ ያሉ ትይዩ ክልሎች
ምሳሌ 41 ሀ. Omp_in_parallel ተግባር በC ቋንቋ
ምሳሌ 41 ለ. ተግባር omp_in_parallel በፎርራን ቋንቋ

2.3.4. ነጠላ መመሪያ

ምሳሌ 42 ሀ. ነጠላ መመሪያ እና የአሁን አማራጭ በC ቋንቋ
ምሳሌ 42 ለ. ነጠላ መመሪያ እና የአሁን አማራጭ በፎርታን ውስጥ
ምሳሌ 43 ሀ. በC ቋንቋ የቅጂ የግል አማራጭ
ምሳሌ 43 ለ. በፎርራን ውስጥ የቅጂ የግል አማራጭ

2.3.5. ዋና መመሪያ

ምሳሌ 44 ሀ. ዋና መመሪያ በ C ቋንቋ
ምሳሌ 44 ለ. ዋና መመሪያ በፎርራን

2.4. የውሂብ ሞዴል

ምሳሌ 45 ሀ. በ C ቋንቋ የግል አማራጭ
ምሳሌ 45 ለ. በፎርራን ውስጥ ያለው የግል አማራጭ
ምሳሌ 46 ሀ. በC ቋንቋ የተጋራ አማራጭ
ምሳሌ 46 ለ. በፎርታን ውስጥ የተጋራው አማራጭ
ምሳሌ 47 ሀ. የመጀመሪያ የግል አማራጭ በ C ቋንቋ
ምሳሌ 47 ለ. በፎርታን ውስጥ የመጀመሪያ የግል አማራጭ
ምሳሌ 48 ሀ. የግል መመሪያ በ C ቋንቋ
ምሳሌ 48 ለ. በፎርራን ውስጥ ክር የግል መመሪያ
ምሳሌ 49 ሀ. በ C ቋንቋ የመቅዳት አማራጭ
ምሳሌ 49 ለ. በፎርታን የመገልበጥ አማራጭ

2.5. የሥራ ስርጭት

2.5.1. ዝቅተኛ-ደረጃ ትይዩ

ምሳሌ 50 ሀ. ሂደቶች omp_get_num_threads እና omp_get_thread_num በC ቋንቋ
ምሳሌ 50 ለ. ሂደቶች omp_get_num_threads እና omp_get_thread_num በፎርራን

2.5.2. ትይዩ ቀለበቶች

ምሳሌ 51 ሀ. ለ C ቋንቋ መመሪያ
ምሳሌ 51 ለ. በፎርትራን ውስጥ ያለው መመሪያ
ምሳሌ 52 ሀ. የመርሐግብር አማራጭ በ C ቋንቋ
ምሳሌ 52 ለ. Forran ውስጥ መርሐግብር አማራጭ
ምሳሌ 53 ሀ. የመርሐግብር አማራጭ በ C ቋንቋ

MPI ተግባራት

የተገኘ አይነት፣ ኦፕሬሽኖች፣ የውሂብ አይነቶች

ቋት_አያይዝ Get_count ANY_SOURCE Senrecv_የተተካ ማንኛውም_TAG ምርመራ

Allgetherv Alltoall Alltoallv Rduce_scatter ቅኝትን ይቀንሱ

የተገኘ አይነት የሚገነባው አስቀድሞ ከተገለጹት MPI አይነቶች እና ቀደም ሲል ከተገለጹ ልዩ የግንባታ ስራዎችን በመጠቀም ነው.

MPI_Type_contiguous፣ MPI_Type_vector፣ MPI_Type_hvector፣ MPI_Type_indexed፣ MPI_Type_hindexed፣ MPI_Type_struct

ወደ MPI_Type_commit ተግባር በመደወል አዲስ የተገኘ አይነት ተመዝግቧል። ከተመዘገቡ በኋላ ብቻ አዲስ የተገኘ አይነት በግንኙነት አሰራሮች እና በሌሎች ዓይነቶች ግንባታ ውስጥ መጠቀም ይቻላል. አስቀድሞ የተገለጹ MPI ዓይነቶች እንደተመዘገቡ ይቆጠራሉ።

የተገኘ አይነት በማይፈለግበት ጊዜ፣ በMPI_Type_free ተግባር ይጠፋል።

1) MPI_Init - የማስጀመር ተግባር. ይህንን ተግባር በመፈጸሙ ምክንያት ሁሉም የትግበራ ሂደቶች የሚቀመጡበት የሂደት ቡድን ይፈጠራል እና የግንኙነት ቦታ ተፈጥሯል ፣ አስቀድሞ በተገለጸው ኮሚዩኒኬተር MPI_COMM_WORLD ተገልጿል ።

MPI_Type_commit - አይነት ምዝገባ፣ MPI_Type_free - አይነት ማጥፋት

int MPI_Init (int *argc, char ***argv);

2) MPI_Finalize - MPI ፕሮግራሞችን የማጠናቀቅ ተግባር። ተግባሩ ሁሉንም የ MPI ሂደቶችን ይዘጋዋል እና ሁሉንም የመገናኛ ቦታዎችን ያስወግዳል.

int MPI_Finalize (ባዶ);

3) በመገናኛ አካባቢ ውስጥ ያሉትን ሂደቶች ብዛት ለመወሰን ተግባር MPI_Comm_መጠን ተግባሩ በኮሙዩኒኬተር ኮሚዩኒኬሽን አካባቢ ውስጥ ያሉትን ሂደቶች ብዛት ይመልሳል።

int MPI_Comm_size(MPI_Comm comm፣ int *መጠን);

4) የሂደት ቁጥር ማወቂያ ተግባር MPI_Comm_ደረጃ ተግባሩ ይህንን ተግባር የሚጠራውን የሂደቱን ቁጥር ይመልሳል። የሂደት ቁጥሮች በ0...መጠን-1 ክልል ውስጥ ናቸው።

int MPI_Comm_rank(MPI_Comm comm፣ int *rank);

5) የመልእክት ተግባር MPI_ላክ ተግባራቱ የመልእክት ዳታ አይነት ቆጠራ አካሎችን ከመለያ መለያ ጋር ይልካል በኮሚኒኬተር ኮሙኒኬሽን አካባቢ ያለውን ችግር ለማስኬድ።

int MPI_Send ( ባዶ * buf፣ int count፣ MPI_Datatype datatype፣ int dest፣ int tag፣ MPI_Comm comm);

6) የመልእክት መቀበያ ተግባር MPI_Recv. ተግባራቱ የመልእክት ዳታ አይነት ቆጠራ አካላትን ከመለያ መለያ ጋር ከምንጩ ሂደት ጋር በመገናኛ ኮሙኒኬሽን አካባቢ ይቀበላል።

int MPI_Recv( ባዶ* buf፣ int count፣ MPI_Datatype datatype፣ int source፣ int tag፣ MPI_Comm comm፣ MPI_Status * status)

7) የጊዜ አጠባበቅ ተግባር (ሰዓት ቆጣሪ) MPI_Wtime። ተግባሩ ካለፈው ከተወሰነ ጊዜ ጀምሮ ያለፈ (የማጣቀሻ ነጥብ) በሰከንዶች ውስጥ የስነ ፈለክ ጊዜን ይመልሳል።

እጥፍ MPI_Wtime (ባዶ)

በሂደቶች መካከል የመልእክት ማስተላለፍ ተግባራት ተከፍለዋል-

ቅድመ ቅጥያ S (የተመሳሰለ)

የተመሳሰለ የውሂብ ማስተላለፍ ሁነታ ማለት ነው። የውሂብ ማስተላለፍ ስራው የሚያበቃው የመረጃ መቀበያው ሲያልቅ ብቻ ነው። ተግባሩ አካባቢያዊ ያልሆነ ነው።

ቅድመ ቅጥያ B (የተዘጋ)

የታሰረ የውሂብ ማስተላለፍ ሁነታ ማለት ነው። በመላክ ሂደቱ የአድራሻ ቦታ ላይ, ልዩ ተግባርን በመጠቀም, በመለዋወጥ ስራዎች ውስጥ ጥቅም ላይ የሚውል ክሊፕቦርድ ይፈጠራል. በዚህ ቋት ውስጥ ውሂብ ሲቀመጥ የመላክ ክዋኔው ያበቃል። ተግባሩ በአካባቢው ተፈጥሮ ነው.

ቅድመ ቅጥያ አር (ዝግጁ)

ተስማምተው ወይም የተዘጋጀ የውሂብ ማስተላለፊያ ዘዴ. የውሂብ ማስተላለፍ ክዋኔው የሚጀምረው ተቀባዩ ፕሮሰሰር መረጃን ለመቀበል ዝግጁነት ምልክት ሲያስቀምጥ ብቻ ነው ፣ ይህም የመቀበያ ሥራውን ይጀምራል። ተግባሩ አካባቢያዊ ያልሆነ ነው።

ቅድመ ቅጥያ I (ወዲያውኑ)

የማገድ ስራዎችን ይመለከታል።

MPI_ሁኔታ አወቃቀር

መልእክት ካነበቡ በኋላ አንዳንድ መለኪያዎች የማይታወቁ ሊሆኑ ይችላሉ፣ ለምሳሌ የተነበቡ ዕቃዎች ብዛት፣ የመልእክት መታወቂያ እና የላኪው አድራሻ። ይህ መረጃ የሁኔታ መለኪያን በመጠቀም ማግኘት ይቻላል. የሁኔታ ተለዋዋጮች በMPI ፕሮግራም ውስጥ በግልፅ መገለጽ አለባቸው። በC ቋንቋ፣ ሁኔታ የMPI_Status አይነት መዋቅር ነው ባለ ሶስት መስኮች MPI_SOURCE፣ MPI_TAG፣ MPI_ERROR።

8) የተቀበሉትን የመልእክት ክፍሎች ብዛት ለመወሰን ልዩ ተግባር መጠቀም አለብዎት MPI_አግኝ_ቁጥር

int MPI_Get_count (MPI_ሁኔታ *ሁኔታ፣ MPI_Datatype datatype፣ int *count);

9) የ MPI_Probe ተግባርን በመጠቀም ሳያነቡ የተቀበለውን መልእክት መለኪያዎች መወሰን ይችላሉ ። int MPI_Probe (int source፣ int tag፣ MPI_Comm comm፣ MPI_Status * status);

10) በሂደቶች መካከል የጋራ ግንኙነትን ለማከናወን በሚያስፈልግዎት ሁኔታዎች ውስጥ, የተጣመረ ክዋኔን መጠቀም የበለጠ ደህንነቱ የተጠበቀ ነው MPI_Sendrecv . በዚህ ክዋኔ ከ buf ድርድር የተላከው መረጃ በተቀበለው ውሂብ ይተካል.

int MPI_Sendrecv ( ባዶ * መላክ ፣ የላኪ ቁጥር ፣ MPI_Datatype sendtype ፣ int dest ፣ int sendtag ፣ void *recvbuf ፣ int recvcount ፣ MPI_Datatype recvtype ፣ int source ፣ MPI_Datatype recvtag ፣ MPI_Comm_) ፣ Status *MPIstatus

11) የማያግድ ተግባር MPI_Test መጠናቀቁን የማጣራት ተግባር።

int MPI_Test(MPI_ጥያቄ *ጥያቄ፣ int *ባንዲራ፣MPI_ሁኔታ *ሁኔታ)፤

ይህ በአካባቢው ያለ እገዳ ተግባር ነው። ከጥያቄው ጋር የተያያዘው ክዋኔ ከተጠናቀቀ ባንዲራ = እውነት ተመልሷል እና ሁኔታው ​​ስለ ተጠናቀቀው አሠራር መረጃ ይዟል. እየተፈተሸ ያለው ክዋኔ ካልተጠናቀቀ ባንዲራ = ሐሰት ተመልሷል, እና የሁኔታው ዋጋ በዚህ ጉዳይ ላይ አልተገለጸም.

12) የማያግድ ተግባር MPI_Request_free እስኪጠናቀቅ ድረስ ጥያቄን የመሰረዝ ተግባር።

int MPI_Request_free(MPI_ጥያቄ *ጥያቄ);

የጥያቄው ልኬት ወደ MPI_REQUEST_NULL ተቀናብሯል።

13) የ MPI ተግባርን በመጠቀም ከአንድ ሂደት ወደ ሁሉም የፕሮግራም ሂደቶች (መረጃ ማሰራጨት) የውሂብ ማስተላለፍ ስራን በብቃት አፈፃፀም ማሳካት ይቻላል-

int MPI_Bcast( ባዶ * buf፣int count፣MPI_Datatype type፣int root፣MPI_Comm comm)

የMPI_Bcast ተግባር የአይነት አባላትን ከያዘው ከባፍ ቋት ውስጥ ካለው ሂደት ቁጥር ከተሰየመው ስር ወደ ኮሙኒኬተር ውስጥ ወደተካተቱ ሁሉም ሂደቶች ያሰራጫል።

14) ከማንም መልእክት መቀበል ከፈለጉየመላክ ሂደት የምንጭ መለኪያው የተገለጸውን MPI_ANY_SOURCE ዋጋ ሊኖረው ይችላል።

15) ከማንኛውም መለያ ጋር መልእክት መቀበል አስፈላጊ ከሆነ እሴቱ ለመለያ ግቤት ሊገለጽ ይችላል። MPI_ANY_TAG

16) የሁኔታ መለኪያው የተቀበለውን መልእክት በርካታ ባህሪያትን እንዲገልጹ ይፈቅድልዎታል-

- ሁኔታ.MPI_SOURCE - ደረጃየተቀበለውን መልእክት የመላክ ሂደት ፣

- status.MPI_TAG - የተቀበለው መልእክት መለያ።

17) ተግባር

MPI_Get_count t(MPI_ሁኔታ *ሁኔታ፣MPI_Datatype አይነት፣int *count)

በተቀበለው መልእክት ውስጥ ያሉትን የአይነት ንጥረ ነገሮች ብዛት በቁጥር ተለዋዋጭ ይመልሳል።

18) ከሁሉም ሂደቶች ውሂብን ወደ አንድ ሂደት የሚያስተላልፉ ክዋኔዎች. በተሰበሰበው ላይ በዚህ ቀዶ ጥገና

እሴቶች አንድ ወይም ሌላ የውሂብ ሂደት ያካሂዳሉ (የመጨረሻውን ነጥብ ለማጉላት ይህ ክዋኔ የውሂብ ቅነሳ ስራ ተብሎም ይጠራል)

int MPI_ቀንስ ( ባዶ * መላክ ፣ ባዶ * recvbuf ፣ ኢንት ቆጠራ ፣ MPI_Datatype ዓይነት ፣ MPI_Op op ፣int root ፣MPI_Comm comm)

19) የሂደት ማመሳሰል፣ ማለትም የስሌቱ ሂደት በተወሰኑ ነጥቦች ሂደቶች በአንድ ጊዜ ስኬት የ MPI ተግባርን በመጠቀም ይረጋገጣል: int MPI_Barrier(MPI_Comm comm); የMPI_Barrier ተግባር የጋራ ስራን ይገልፃል እና ስለዚህ ጥቅም ላይ ሲውል በሁሉም የኮሚዩኒኬተር ሂደቶች መጠራት አለበት። ወደ MPI_Barrier ተግባር ሲደውሉ

የሂደቱ አፈፃፀም ታግዷል ፣ የሂደቱ ስሌቶች የሚቀጥሉት ሁሉም የግንኙነት ሂደቶች የ MPI_Barrier ተግባር ከጠሩ በኋላ ብቻ ነው።

20) የታሸገ የማስተላለፊያ ሁነታን ለመጠቀም የMPI ማህደረ ትውስታ ቋት መፈጠር እና መተላለፍ አለበት።

ለመልእክት ማቋት - ለዚህ ጥቅም ላይ የዋለው ተግባር ይህን ይመስላል፡ int MPI_Buffer_attach ( ባዶ * buf፣ int size)፣

- ለመልእክት ማቋቋሚያ buf memory buffer፣

- መጠን - ቋት መጠን.

21) ከጠባቂው ጋር መስራቱን ከጨረሰ በኋላ ተግባሩን በመጠቀም ከMPI ጋር መቋረጥ አለበት፡-

int MPI_Buffer_detach ( ባዶ * buf፣ int * መጠን)።

22) የMPI ተግባርን በመጠቀም ውጤታማ እና ዋስትና ያለው የውሂብ ማስተላለፍ እና የመቀበያ ስራዎች በአንድ ጊዜ አፈፃፀም ማሳካት ይቻላል፡-

int MPI_Sendrecv ( ባዶ * sbuf፣ int scount፣ MPI_Datatype stype፣int dest፣ int stag፣ void *rbuf፣int rcount፣MPI_Datatype

rtype፣int source፣int rtag፣MPI_Comm comm፣MPI_Status *ሁኔታ)

23) መልእክቶች አንድ ዓይነት ሲሆኑ፣ MPI አንድ ቋት የመጠቀም ችሎታ አለው፡ intMPI_Sendrecv_replace (void *buf፣ int count፣ MPI_Datatype type፣ int dest፣

int stag፣ int ምንጭ፣ int rtag፣ MPI_Comm comm፣ MPI_Status* ሁኔታ)

24) አጠቃላይ መረጃን ከአንድ ሂደት ወደ ሁሉም ሂደቶች የማሰራጨት ስራ (መረጃ ማከፋፈያ) ከማሰራጨት የሚለየው ሂደቱ የተለያዩ መረጃዎችን ወደ ሂደቶች ስለሚያስተላልፍ ነው (ምስል 4.4 ይመልከቱ)። ይህ ክዋኔ ተግባሩን በመጠቀም ሊከናወን ይችላል-

int MPI_Scatter ( ባዶ * sbuf፣ int scount፣ MPI_Datatype stype፣

25) የአጠቃላይ መረጃን ከሁሉም ማቀነባበሪያዎች ወደ አንድ ሂደት (መረጃ መሰብሰብ) የማስተላለፊያ አሠራር የመረጃ ስርጭት ሂደት ተቃራኒ ነው (ምስል 4.5 ይመልከቱ). ይህንን ክዋኔ በMPI ውስጥ ለማከናወን ተግባር አለ፡-

int MPI_Gather ( ባዶ * sbuf፣ int scount፣ MPI_Datatype stype፣

ባዶ *rbuf፣int rcount፣MPI_Datatype rtype፣int root፣MPI_Comm comm)

26) የ MPI_Gather ተግባርን ሲጠቀሙ የውሂብ መሰብሰብ ብቻ እንደሚከናወን ልብ ሊባል ይገባል

በአንድ ሂደት ላይ. በእያንዳንዱ የመገናኛ ሂደቶች ላይ ሁሉንም የተሰበሰበ መረጃ ለማግኘት

የመሰብሰብ እና የማሰራጨት ተግባርን መጠቀም ያስፈልግዎታል

int MPI_Allgather ( ባዶ * sbuf፣ int scount፣ MPI_Datatype stype፣ ባዶ * rbuf፣ int rcount፣ MPI_Datatype rtype፣ MPI_Comm comm)

27) መረጃን ከሁሉም ሂደቶች ወደ ሁሉም ሂደቶች ማስተላለፍ በጣም የተለመደው የውሂብ ማስተላለፍ ስራ ነው (ምስል 4.6 ይመልከቱ). ይህ ክዋኔ ተግባሩን በመጠቀም ሊከናወን ይችላል-

int MPI_Alltoall ( ባዶ *sbuf፣int scount፣MPI_Datatype stype፣void *rbuf፣int rcount፣MPI_Datatype rtype፣MPI_Comm comm)

28) MPI_Reduce ተግባር የውሂብ ቅነሳ ውጤቶችን ያቀርባል

በአንድ ሂደት ላይ ብቻ. በእያንዳንዱ የግንኙነት ሂደቶች ላይ የውሂብ ቅነሳ ውጤቶችን ለማግኘት የመቀነስ እና የማሰራጨት ተግባርን መጠቀም አለብዎት-

int MPI_Allreduce ( ባዶ * sentbuf፣ ባዶ * recvbuf፣ int ቆጠራ፣ MPI_Datatype ዓይነት፣ MPI_Op op፣MPI_Comm comm)።

29) እና ሁሉም ከፊል ቅነሳ ውጤቶች መገኘታቸውን የሚያረጋግጥ ሌላ የመረጃ አሰባሰብ እና ማቀናበሪያ ስሪት ተግባሩን በመጠቀም ማግኘት ይቻላል-

int MPI_Scan ( ባዶ *sendbuf፣ ባዶ * recvbuf፣int count፣MPI_Datatype type፣ MPI_Op op፣MPI_Comm comm)።

የMPI_Scan ተግባር አጠቃላይ የአፈፃፀም ዲያግራም በምስል ላይ ይታያል። 4.7. የተቀበሉት መልእክቶች አካላት በሂደቶች የሚተላለፉትን ተዛማጅ የመልእክት አካላትን የማስኬድ ውጤቶችን ይወክላሉ ፣ እና በሂደት i ደረጃ ውጤቶችን ለማግኘት ፣ 0≤i

30) ማሸግ ከመጀመሩ በፊት የ bufpos ተለዋዋጭ የመጀመሪያ እሴት መፈጠር አለበት እና ከዚያ በተግባሩ ይዘጋጃል። MPI_Pack ሁሉንም አስፈላጊ መረጃዎች ለማሸግ የMPI_Pack ተግባር በቅደም ተከተል ይጠራል።

int MPI_Pack_size (int ቆጠራ፣ MPI_Datatype አይነት፣ MPI_Comm comm፣ int *መጠን)

31) ሁሉንም አስፈላጊ መረጃዎች ካሸጉ በኋላ፣ የተዘጋጀው ቋት በውሂብ ማስተላለፊያ ተግባራት ውስጥ በተጠቀሰው MPI_PACKED አይነት መጠቀም ይቻላል።

የMPI_PACKED አይነት መልዕክት ከደረሰ በኋላ ውሂቡ ተግባሩን በመጠቀም ሊፈታ ይችላል፡-

int MPI_Unpack ( ባዶ * buf፣ int bufsize፣ int *bufpos፣ void *data፣ int count፣ MPI_Datatype type፣ MPI_Comm comm)

ውስብስብ መመሪያ አዘጋጅ ኮምፒውተር

CISC (እንግሊዝኛ፡ ውስብስብ መመሪያ ስብስብ ኮምፒውቲንግ፣ ወይም እንግሊዝኛ፡ ውስብስብ የትምህርት ስብስብ ኮምፒውተር -

ኮምፒተር ከሙሉ መመሪያዎች ጋር) በሚከተሉት የባህሪዎች ስብስብ ተለይቶ የሚታወቅ የአቀነባባሪ ንድፍ ጽንሰ-ሀሳብ ነው-

በአንጻራዊ ሁኔታ ሲታይ አነስተኛ ቁጥር ያላቸው አጠቃላይ ዓላማዎች መመዝገቢያ;

· ብዛት ያላቸው የማሽን መመሪያዎች ፣ አንዳንዶቹ ከከፍተኛ ደረጃ የፕሮግራም ቋንቋዎች ኦፕሬተሮች ጋር ተመሳሳይ በሆነ መልኩ የተጫኑ እና በብዙ የሰዓት ዑደቶች ውስጥ ይከናወናሉ ፣

· ብዙ ቁጥር ያላቸው የአድራሻ ዘዴዎች;

· የተለያዩ የቢት መጠኖች ብዛት ያላቸው የትዕዛዝ ቅርጸቶች;

· የሁለት-አድራሻ ትዕዛዝ ቅርጸት የበላይነት;

· የዓይነት ማቀነባበሪያ ትዕዛዞች መገኘትመመዝገቢያ-ማህደረ ትውስታ.

ጉድለቶች:

የሃርድዌር ከፍተኛ ወጪ; ከስሌቶች ትይዩ ጋር ችግሮች።

የ CISC መመሪያ ስርዓት የግንባታ ቴክኒክ ከሌላ ዘዴ ተቃራኒ ነው - RISC. በእነዚህ ፅንሰ-ሀሳቦች መካከል ያለው ልዩነት በፕሮግራም አወጣጥ ዘዴዎች ውስጥ እንጂ በእውነተኛው ፕሮሰሰር አርክቴክቸር ውስጥ አይደለም። ሁሉም ማለት ይቻላል ዘመናዊ ፕሮሰሰሮች ሁለቱንም RISC እና CISC አይነት የማስተማሪያ ስብስቦችን ይኮርጃሉ።

የተቀነሱ መመሪያዎች ኮምፒውተር አዘጋጅ

እሱ በ RISC አርክቴክቸር መርሆዎች ላይ የተመሠረተ ነው-ቋሚ የማስተማሪያ ቅርጸት ፣ የመመዝገቢያ ስራዎች ፣ የአንድ-ዑደት መመሪያዎችን አፈፃፀም ፣ ቀላል የአድራሻ ዘዴዎች እና ትልቅ የመመዝገቢያ ፋይል። በተመሳሳይ ጊዜ, ይህን አርክቴክቸር ከሌሎች የ RISC ማቀነባበሪያዎች አርክቴክቸር የሚለዩ በርካታ ጉልህ ባህሪያት አሉ. እነዚህም የሚከተሉትን ያካትታሉ: ለእያንዳንዱ አንቀሳቃሾች ገለልተኛ የመመዝገቢያ ስብስብ; በስርዓቱ ውስጥ የግለሰብ CISC መሰል መመሪያዎችን ማካተት; "የዘገየ ሽግግር" ዘዴ አለመኖር; ሁኔታዊ መዝለሎችን ለመተግበር የመጀመሪያ መንገድ። የማይክሮፕሮሰሰር አርክቴክቸር ዋና ትግበራዎች ከፍተኛ አፈጻጸም ያላቸው አገልጋዮች እና ሱፐር ኮምፒውተሮች ናቸው።

እንደነዚህ ያሉ ኮምፒውተሮች የተመሰረቱት የማስታወሻ መመሪያዎችን ከማስታወሻ መመሪያዎች የሚለይ እና ውጤታማ የቧንቧ ዝርጋታ ላይ አፅንዖት በሚሰጥ አርክቴክቸር ነው። የመመሪያው ስርዓት የተነደፈው የማንኛውም መመሪያ አፈፃፀም አነስተኛ ቁጥር ያላቸውን የማሽን ዑደቶች (በተለይ አንድ የማሽን ዑደት) እንዲወስድ በሚያስችል መንገድ ነው። አፈፃፀሙን ለመጨመር ትዕዛዞችን የማስፈፀሚያ አመክንዮ እራሱ ከfirmware ትግበራ ይልቅ በሃርድዌር ላይ ያተኮረ ነበር። የትእዛዝ ዲኮዲንግ ሎጂክን ለማቃለል ቋሚ ርዝመት ያላቸው ትዕዛዞች ጥቅም ላይ ውለዋል።

እና ቋሚ ቅርጸት.

ውስጥ የሽግግር ዒላማ አድራሻ ቋት ቴክኖሎጂ ነጥቡ ምንድን ነው?

ውስጥ አንጎለ ኮምፒውተር የሽግግሩን አቅጣጫ በተለዋዋጭ ለመተንበይ የሚያስችል ዘዴ አለው። ከዚህ ጋር

በቺፑ ላይ ያለው ኢላማ የቅርንጫፍ ዒላማ ቋት (BTB) የተባለ ትንሽ የመሸጎጫ ማህደረ ትውስታ እና ሁለት ነጻ ጥንዶች መመሪያ ፕሪፌች ቋት (በአንድ ቧንቧ ሁለት ባለ 32-ቢት ቋት) ነው። የቅርንጫፉ ዒላማ አድራሻ ቋጭ በቅድመ-ፍች ቋት ውስጥ ያሉትን የመመሪያዎች አድራሻዎችን ያከማቻል። የፕሪፌች ቋቶች አሠራር በማንኛውም ጊዜ መመሪያው ወደ አንድ ተዛማጅ ጥንድ ቋቶች ውስጥ እንዲገባ በሚያስችል መንገድ የተደራጀ ነው። በመመሪያው ዥረት ውስጥ የቅርንጫፍ ክዋኔ ሲገኝ, የተሰላው የቅርንጫፍ አድራሻ በ BTB ውስጥ ከተከማቹ አድራሻዎች ጋር ይነጻጸራል. ግጥሚያ ካለ ቅርንጫፉ ይከናወናል ተብሎ ተተነበየ እና ሌላ ቅድመ-ፍተሻ ቋት ነቅቷል እና ለተዛማጁ የቧንቧ መስመር ትእዛዝ መስጠት ይጀምራል። አለመመጣጠን ካለ ቅርንጫፉ እንደማይሰራ ይታሰባል እና ፕሪፌች ቋት አልተቀየረም, መደበኛውን የትእዛዝ አሰጣጥ ቅደም ተከተል ይቀጥላል. ይህ የማጓጓዣ ጊዜን ያስወግዳል

መዋቅራዊ ግጭቶች እና እነሱን ለመቀነስ መንገዶች

ጥምር የትዕዛዝ አፈጻጸም ሁኔታ በአጠቃላይ በቧንቧው ውስጥ ያሉትን ሁሉንም የትእዛዞች ጥምረት ለመፍታት የተግባር ክፍሎችን የቧንቧ መስመር እና የሃብት ማባዛትን ይጠይቃል። የትዕዛዝ ጥምረት ካልተሳካ

በሃብት ግጭት ምክንያት ተቀባይነት አግኝቶ ማሽኑ መዋቅራዊ ግጭት አለው ይባላል። የመዋቅራዊ ግጭቶች ሊፈጠሩ የሚችሉባቸው ማሽኖች በጣም የተለመደው ምሳሌ ሙሉ በሙሉ የማይተላለፉ ተግባራዊ መሳሪያዎች ያላቸው ማሽኖች ናቸው.

ማሳነስ፡- የሚፈለገው መሳሪያ እስኪገኝ ድረስ የቧንቧ መስመር የአንዱን ትእዛዛት አፈጻጸም ለአፍታ ያቆማል።

የውሂብ ግጭቶች, የቧንቧ ማቆሚያዎች እና የማለፊያ ዘዴን መተግበር

በእቃ ማጓጓዣ ስርዓቶች አፈፃፀም ላይ ከፍተኛ ተጽዕኖ ከሚያሳድሩ ምክንያቶች መካከል አንዱ በይነተገናኝ ሎጂካዊ ጥገኛዎች ነው። የውሂብ ግጭቶች የሚከሰቱት የቧንቧ ማቀነባበሪያ አጠቃቀም የኦፔራድ ጥሪዎችን ቅደም ተከተል ሊለውጥ ስለሚችል ይህ ቅደም ተከተል መመሪያው በቧንቧ በሌለው ማሽን ላይ በቅደም ተከተል ሲፈፀም ከሚታየው ቅደም ተከተል የተለየ ነው. በዚህ ምሳሌ ላይ የቀረበው ችግር ዳታ ማስተላለፍ፣ ዳታ ማለፍ ወይም አንዳንድ ጊዜ አጭር ዙር በተባለ ትክክለኛ የሃርድዌር ቴክኒክ በመጠቀም ሊፈታ ይችላል።

የቧንቧ መስመር ባለበት እንዲቆም የሚያደርጉ የውሂብ ግጭቶች

በምትኩ፣ ምሳሌው በትክክል መስራቱን ለማረጋገጥ ተጨማሪ ሃርድዌር እንፈልጋለን፣ pipeline interlook hardware። በአጠቃላይ ይህ አይነት መሳሪያ ግጭቶችን ፈልጎ የሚያገኝ እና ግጭት እስካለ ድረስ የቧንቧ መስመርን ለአፍታ ያቆማል። በዚህ አጋጣሚ ይህ ሃርድዌር መረጃውን ለመጠቀም ከሚፈልገው መመሪያ ጀምሮ የቧንቧ መስመሩን ባለበት ያቆማል፣ የቀደመው መመሪያ የእኛ ኦፔራንድ የሆነው ውጤቱ ያንን ውጤት ያስገኛል ። ይህ መሳሪያ የማምረቻ መስመር እንዲቆም ወይም "አረፋ" እንደ መዋቅራዊ ግጭቶች በተመሳሳይ መልኩ እንዲፈጠር ያደርጋል።

ሁኔታዊ የቅርንጫፍ ትንበያ ቋት

ሁኔታዊ የቅርንጫፍ ትንበያ ቋት በትንሹ ጉልህ በሆነ የቅርንጫፍ መመሪያ አድራሻ ሊስተናገድ የሚችል ትንሽ ማህደረ ትውስታ ነው። እያንዳንዱ የዚህ ማህደረ ትውስታ ሕዋስ አንድ ቢት ይይዛል, ይህም የቀድሞው ቅርንጫፍ መፈጸሙን ወይም አለመፈጸሙን ያመለክታል. ይህ በጣም ቀላሉ የዚህ አይነት ቋት አይነት ነው። መለያዎች የሉትም እና የቅርንጫፉን መዘግየት ለመቀነስ የሚጠቅመው የቅርንጫፉን ዒላማ አድራሻ ዋጋ ለማስላት ከሚያስፈልገው ጊዜ በላይ ከሆነ ብቻ ነው። የቅርንጫፉ ትንበያ ቋት እንደ ትንሽ የተወሰነ መሸጎጫ በመመሪያው አድራሻ ሊደረስበት ይችላል መመሪያው የቧንቧ መስመር (IF) መመሪያ በሚሰጥበት ጊዜ ወይም ከእያንዳንዱ መመሪያ መሸጎጫ ጋር የተያያዘ እና ከእያንዳንዱ መመሪያ ጋር የሚመጣ ጥንድ ቢት።