Kuunganisha MPI katika Visual Studio. Vipengele vya MPI

Ilifanyika kwamba nilipaswa kuwasiliana kwa karibu na utafiti kompyuta sambamba na hasa MPI. Labda mwelekeo huu unaahidi sana leo, kwa hivyo ningependa kuwaonyesha hubbrows misingi ya mchakato huu.

Kanuni za msingi na mfano
Hesabu ya kielelezo (e) itatumika kama mfano. Moja ya chaguzi za kuipata ni safu ya Taylor:
e^x=∑((x^n)/n!), ambapo majumuisho hutokea kutoka n=0 hadi infinity.

Fomula hii inaweza kusawazishwa kwa urahisi, kwani nambari inayotakiwa ni jumla ya maneno ya mtu binafsi na, shukrani kwa hili, kila moja. processor tofauti inaweza kuanza kuhesabu masharti ya mtu binafsi.

Idadi ya masharti ambayo yatahesabiwa katika kila kichakataji hutegemea urefu wa muda n na kwa idadi inayopatikana ya wasindikaji k ambao wanaweza kushiriki katika mchakato wa kuhesabu. Kwa hiyo, kwa mfano, ikiwa urefu wa muda ni n = 4, na wasindikaji watano (k = 5) wanahusika katika mahesabu, basi wasindikaji wa kwanza hadi wa nne watapata muda mmoja kila mmoja, na wa tano hawatatumiwa. Ikiwa n=10 na k=5, kila kichakataji kitapata maneno mawili ya kukokotoa.

Hapo awali, kichakataji cha kwanza, kwa kutumia kitendakazi cha utangazaji cha MPI_Bcast, hutuma kwa wengine thamani ya kigezo kilichoainishwa na mtumiaji n. Kwa ujumla, kitendakazi cha MPI_Bcast kina umbizo lifuatalo:
int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm), ambapo bafa ni anwani ya bafa yenye kipengele, hesabu ni idadi ya vipengele, aina ya data ni aina ya data inayolingana katika MPI, mzizi ni cheo cha kichakataji kikuu ambacho kinashughulikia usambazaji, na comm ni jina la mwasiliani.
Kwa upande wangu, jukumu la processor kuu, kama ilivyotajwa tayari, itakuwa processor ya kwanza na kiwango cha 0.

Baada ya nambari n kutumwa kwa ufanisi, kila processor itaanza kuhesabu masharti yake. Ili kufanya hivyo, katika kila hatua ya mzunguko, nambari sawa na idadi ya wasindikaji wanaoshiriki katika mahesabu itaongezwa kwa nambari i, ambayo mwanzoni ni sawa na kiwango cha processor. Ikiwa nambari inaendelea hatua zinazofuata namba nitazidi mtumiaji amefafanuliwa nambari n, utekelezaji wa kitanzi kwa ya processor hii itakoma.

Wakati wa utekelezaji wa mzunguko, masharti yataongezwa kwa kutofautiana tofauti na, baada ya kukamilika kwake, kiasi kilichopatikana kitatumwa kwa processor kuu. Ili kufanya hivyo, kazi ya operesheni ya kupunguza MPI_Reduce itatumika. KATIKA mtazamo wa jumla inaonekana kama hii:
int MPI_Reduce(batili *buf, batili *matokeo, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)

Huunganisha vipengee vya bafa ya ingizo ya kila mchakato katika kikundi kwa kutumia operesheni ya op na kurejesha thamani iliyounganishwa kwenye bafa ya pato ya mzizi wa nambari ya mchakato. Matokeo ya operesheni kama hiyo itakuwa thamani moja, ndiyo sababu kazi ya utupaji ilipata jina lake.

Baada ya kutekeleza programu kwenye wasindikaji wote, processor ya kwanza itapokea jumla ya maneno, ambayo itakuwa thamani ya kielelezo tunayohitaji.

Ikumbukwe kwamba katika njia zote mbili zinazofanana na zinazofuatana za kuhesabu kielelezo, kupata sababu. kazi ya kujirudia. Wakati wa kufanya uamuzi juu ya jinsi ya kusawazisha kazi inayofanywa, nilizingatia chaguo la kupata factorial pia wasindikaji tofauti, lakini mwishowe chaguo hili halikuwa la maana kwangu.

Kazi ya msingi bado ni kutafuta thamani ya kipeo, na ikiwa wasindikaji wataanza kuhesabu kila kipengele cha kila neno tofauti, hii inaweza kusababisha athari tofauti kabisa, ambayo ni hasara kubwa katika utendaji na kasi ya hesabu.
Hii inaelezwa na ukweli kwamba katika kesi hii itaanza shinikizo kubwa juu ya mazingira ya mawasiliano, ambayo tayari mara nyingi ni kiungo dhaifu katika mifumo ya kompyuta sambamba. Ikiwa factorial imehesabiwa kwa faragha kwenye kila processor, mzigo kwenye mistari ya mawasiliano itakuwa ndogo. Kesi hii inaweza kuitwa mfano mzuri kwamba kazi ya kusawazisha lazima pia wakati mwingine iwe na mipaka yake.

Kanuni ya Utekelezaji wa Kanuni
1. Thamani ya nambari n huhamishwa kutoka kwa ganda la kuona hadi kwenye programu, ambayo hutumwa kwa wasindikaji wote kwa kutumia kazi ya utangazaji.
2. Wakati processor kuu ya kwanza imeanzishwa, kipima saa kinaanza.
3. Kila processor hutekeleza kitanzi, ambapo thamani ya ongezeko ni idadi ya wasindikaji katika mfumo. Katika kila marudio ya kitanzi, neno huhesabiwa na jumla ya maneno kama haya huhifadhiwa katika kutofautiana kwa drobSum.
4. Baada ya kitanzi kukamilika, kila kichakataji huongeza thamani yake ya drobSum kwenye kigezo cha Matokeo kwa kutumia kitendakazi cha kupunguza MPI_Reduce.
5. Baada ya kukamilisha mahesabu kwa wasindikaji wote, processor kuu ya kwanza inasimamisha timer na kutuma thamani inayotokana ya matokeo ya kutofautiana kwa mkondo wa pato.
6. Thamani ya muda inayopimwa na kipima muda katika milisekunde pia hutumwa kwenye mkondo wa kutoa matokeo.
Kuorodhesha nambari
Mpango huo umeandikwa katika C ++, tutafikiri kwamba hoja za utekelezaji zinapitishwa kutoka kwa shell ya nje. Nambari inaonekana kama hii:
#pamoja na "mpi.h"
#pamoja na
#pamoja na
kutumia nafasi ya majina std;

Ukweli mara mbili (int n)
{
ikiwa (n==0)
kurudi 1;
mwingine
kurudi n* Ukweli(n-1);
}

int main (int argc, char *argv)
{
SetConsoleOutputCP(1251);
int n;
int myid;
int numprocs;
int i;
int rc;
drob ndefu mara mbili,drobSum=0,Tokeo, jumla;
wakati wa kuanza mara mbili = 0.0;
mwisho wa mara mbili;

N = atoi(argv);

ikiwa (rc= MPI_Init(&argc, &argv))
{
koti<< "Hitilafu ya kuanzisha, utekelezaji umesimamishwa" << endl;
MPI_Abort(MPI_COMM_WORLD, rc);
}

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Comm_cheo(MPI_COMM_WORLD,&myid);

ikiwa (myid == 0)
{

Wakati wa kuanza = MPI_Wtime();
}
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);

kwa (i = myid; i<= n; i += numprocs)
{
drob = 1/ Ukweli(i);
drobSum += drob;
}

MPI_Punguza(&drobSum, &Result, 1, MPI_LONG_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
usahihi.cout(20);
ikiwa (myid == 0)
{
koti<< Result << endl;
endwtime = MPI_Wtime();
koti<< (endwtime-startwtime)*1000 << endl;
}

MPI_Finalize();
kurudi 0;
}


* Msimbo huu wa chanzo uliangaziwa kwa Kiangazia Chanzo cha Msimbo.
Hitimisho
Kwa hivyo, tulipokea programu rahisi ya kuhesabu kielelezo kwa kutumia wasindikaji kadhaa mara moja. Pengine, kizuizi kinahifadhi matokeo yenyewe, kwa sababu kwa ongezeko la idadi ya tarakimu, kuhifadhi thamani kwa kutumia aina za kawaida haitakuwa ndogo na mahali hapa panahitaji ufafanuzi. Labda, suluhisho la busara ni kuandika matokeo kwa faili, ingawa, kwa kuzingatia kazi ya kielimu ya mfano huu, hakuna haja ya kuzingatia sana hii.

Ufafanuzi: Hotuba hiyo imejitolea kuzingatia teknolojia ya MPI kama kiwango cha programu sambamba kwa mifumo ya kumbukumbu iliyosambazwa. Njia kuu za usambazaji wa data zinazingatiwa. Dhana kama vile vikundi vya mchakato na wawasilianaji huletwa. Inashughulikia aina za msingi za data, shughuli za hatua kwa hatua, shughuli za pamoja, shughuli za ulandanishi na vipimo vya wakati.

Kusudi la hotuba: Muhadhara huo unalenga kusoma mbinu ya jumla ya kutengeneza algoriti sambamba.

Kurekodi video ya hotuba - (kiasi - 134 MB).

5.1. MPI: dhana za msingi na ufafanuzi

Hebu tuzingatie idadi ya dhana na ufafanuzi ambazo ni za msingi kwa kiwango cha MPI.

5.1.1. Dhana ya mpango sambamba

Chini ya programu sambamba ndani ya mfumo wa MPI, tunaelewa seti ya kutekelezwa kwa wakati mmoja taratibu. Taratibu zinaweza kutekelezwa kwa wasindikaji tofauti, lakini michakato kadhaa inaweza pia kupatikana kwenye processor sawa (katika kesi hii, inatekelezwa kwa hali ya kugawana wakati). Katika hali mbaya, processor moja inaweza kutumika kutekeleza programu inayofanana - kama sheria, njia hii hutumiwa hapo awali kuangalia usahihi wa programu inayofanana.

Kila mchakato wa programu sambamba hutolewa kutoka kwa nakala ya msimbo sawa wa programu ( Mfano wa SPMP) Nambari hii ya programu, iliyotolewa kwa namna ya programu inayoweza kutekelezwa, lazima ipatikane wakati programu inayofanana inazinduliwa kwenye wasindikaji wote wanaotumiwa. Nambari ya chanzo ya programu inayoweza kutekelezwa inatengenezwa katika lugha za algorithmic C au Fortran kwa kutumia utekelezaji mmoja au mwingine wa maktaba ya MPI.

Idadi ya michakato na idadi ya wasindikaji wanaotumiwa imedhamiriwa wakati programu sambamba inazinduliwa kwa kutumia mazingira ya utekelezaji wa programu ya MPI na haiwezi kubadilika wakati wa mahesabu (kiwango cha MPI-2 kinatoa uwezekano wa kubadilisha idadi ya michakato kwa nguvu). Michakato yote ya programu imehesabiwa kwa mpangilio kutoka 0 hadi uk-1, Wapi uk ni jumla ya idadi ya michakato. Nambari ya mchakato inaitwa cheo mchakato.

5.1.2. Shughuli za kuhamisha data

MPI inategemea shughuli za kupitisha ujumbe. Miongoni mwa kazi zinazotolewa kama sehemu ya MPI, kuna tofauti maradufu (uhakika-kwa-uhakika) shughuli kati ya michakato miwili na pamoja (pamoja) vitendo vya mawasiliano kwa mwingiliano wa wakati mmoja wa michakato kadhaa.

Kufanya shughuli za jozi, njia tofauti za maambukizi zinaweza kutumika, ikiwa ni pamoja na synchronous, kuzuia, nk - kuzingatia kamili ya iwezekanavyo. njia za maambukizi itatekelezwa katika kifungu kidogo cha 5.3.

Kama ilivyobainishwa hapo awali, kiwango cha MPI kinatoa hitaji la kutekeleza shughuli nyingi za msingi za uhamishaji data - tazama vifungu vidogo vya 5.2 na 5.4.

5.1.3. Dhana ya wawasilianaji

Taratibu za programu sambamba zimeunganishwa kuwa vikundi. Chini ya mzungumzaji MPI inarejelea kitu cha huduma iliyoundwa mahsusi ambacho kinachanganya kikundi cha michakato na idadi ya vigezo vya ziada ( muktadha) hutumika wakati wa kufanya shughuli za uhamishaji data.

Kwa kawaida, shughuli za uhamishaji data zilizooanishwa hufanywa kwa michakato inayomilikiwa na mwasilianishi sawa. Uendeshaji wa pamoja hutumika kwa wakati mmoja kwa michakato yote ya mawasiliano. Kwa hivyo, kubainisha kiwasilishi cha kutumia ni lazima kwa shughuli za uhamishaji data katika MPI.

Wakati wa mahesabu, vikundi vipya vya mchakato na wawasilianaji vinaweza kuundwa na vikundi vilivyopo vya michakato na wawasilianaji vinaweza kufutwa. Utaratibu huo unaweza kuwa wa vikundi tofauti na wawasilianaji. Michakato yote iliyopo katika programu sambamba imejumuishwa kwenye kiwasilishi kilichoundwa kwa chaguomsingi kwa kitambulisho cha MPI_COMM_WORLD.

Ikiwa ni muhimu kuhamisha data kati ya michakato kutoka kwa vikundi tofauti, ni muhimu kuunda mawasiliano ya kimataifa ( kiunganishi).

Mjadala wa kina wa uwezo wa MPI kufanya kazi na vikundi na wawasilianaji utafanywa katika kifungu kidogo cha 5.6.

5.1.4. Aina za data

Wakati wa kufanya shughuli za kupitisha ujumbe, lazima ueleze data itakayotumwa au kupokea katika vitendaji vya MPI. aina data iliyotumwa. MPI ina seti kubwa aina za msingi data ambayo kwa kiasi kikubwa inalingana na aina za data katika lugha za algoriti C na Fortran. Kwa kuongeza, MPI ina uwezo wa kuunda mpya aina zinazotokana data kwa maelezo sahihi zaidi na mafupi ya yaliyomo kwenye ujumbe uliotumwa.

Mjadala wa kina wa uwezo wa MPI kufanya kazi na aina za data zinazotokana utafanywa katika kifungu kidogo cha 5.5.

5.1.5. Topolojia halisi

Kama ilivyobainishwa awali, shughuli za uhamishaji data zilizooanishwa zinaweza kufanywa kati ya michakato yoyote ya mwasilianishaji sawa, na michakato yote ya mwasilianishaji inashiriki katika operesheni ya pamoja. Katika suala hili, topolojia ya mantiki ya mistari ya mawasiliano kati ya taratibu ina muundo wa grafu kamili (bila kujali kuwepo kwa njia halisi za mawasiliano ya kimwili kati ya wasindikaji).

Wakati huo huo (na hii ilikuwa tayari imeelezwa katika Sehemu ya 3), kwa uwasilishaji na uchambuzi uliofuata wa idadi ya algorithms sambamba, inashauriwa kuwa na uwakilishi wa kimantiki wa mtandao wa mawasiliano uliopo kwa namna ya topolojia fulani.

MPI ina uwezo wa kuwakilisha michakato mingi katika fomu gratings mwelekeo wa kiholela (tazama kifungu kidogo cha 5.7). Katika kesi hii, michakato ya mipaka ya lati inaweza kutangazwa jirani na, kwa hivyo, kwa kuzingatia lati, miundo ya aina. torasi.

Kwa kuongeza, MPI ina zana za kuzalisha topolojia za kimantiki (virtual) za aina yoyote inayohitajika. Mjadala wa kina wa uwezo wa MPI kufanya kazi na topolojia utafanywa katika kifungu kidogo cha 5.7.

Na mwishowe, seti moja ya mwisho ya noti kabla ya kuanza kuangalia MPI:

  • Maelezo ya kazi na mifano yote ya programu zinazotolewa zitawasilishwa kwa lugha ya algorithmic C; vipengele vya kutumia MPI kwa lugha ya algorithmic Fortran vitatolewa katika sehemu ya 5.8.1,
  • Maelezo mafupi ya utekelezaji unaopatikana wa maktaba za MPI na maelezo ya jumla ya mazingira ya utekelezaji wa programu za MPI yatajadiliwa katika sehemu ya 5.8.2.
  • Uwasilishaji kuu wa uwezo wa MPI utazingatia toleo la 1.2 la kawaida ( MPI-1); sifa za ziada za kiwango cha toleo la 2.0 zitawasilishwa katika kifungu cha 5.8.3.

Wakati wa kuanza kusoma MPI, inaweza kuzingatiwa kuwa, kwa upande mmoja, MPI ni ngumu sana - kiwango cha MPI hutoa uwepo wa kazi zaidi ya 125. Kwa upande mwingine, muundo wa MPI unafikiriwa kwa uangalifu - maendeleo ya programu zinazofanana zinaweza kuanza baada ya kuzingatia kazi 6 tu za MPI. Vipengele vyote vya ziada vya MPI vinaweza kufahamika kadiri ugumu wa algorithms na programu zilizotengenezwa unavyoongezeka. Ni kwa mtindo huu - kutoka rahisi hadi ngumu - kwamba nyenzo zote za elimu kwenye MPI zitawasilishwa zaidi.

5.2. Utangulizi wa ukuzaji wa programu sambamba kwa kutumia MPI

5.2.1. Misingi ya MPI

Hebu tuwasilishe seti ya chini inayohitajika ya kazi za MPI, za kutosha kwa ajili ya maendeleo ya programu zinazofanana.

5.2.1.1 Kuanzisha na kukomesha programu za MPI

Kazi ya kwanza inaitwa MPI inapaswa kuwa chaguo:

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

kuanzisha mazingira ya utekelezaji wa programu ya MPI. Vigezo vya kazi ni idadi ya hoja kwenye mstari wa amri na maandishi ya mstari wa amri yenyewe.

Kitendaji cha mwisho kiliitwa MPI lazima iwe chaguo:

int MPI_Finalize(batili);

Kama matokeo, inaweza kuzingatiwa kuwa muundo wa programu sambamba iliyotengenezwa kwa kutumia MPI inapaswa kuwa na fomu ifuatayo:

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

Ikumbukwe:

  1. Faili mpi.h ina ufafanuzi wa viunga vilivyopewa jina, prototypes za kazi na aina za data za maktaba ya MPI,
  2. Kazi MPI_Init Na MPI_Maliza ni ya lazima na lazima itekelezwe (na mara moja tu) kwa kila mchakato wa programu sambamba,
  3. Kabla ya simu MPI_Init kazi inaweza kutumika MPI_Ilianzishwa ili kubaini kama simu ilipigwa hapo awali MPI_Init.

Mifano ya kazi zilizojadiliwa hapo juu hutoa wazo la sintaksia ya kutaja kazi katika MPI. Jina la kazi linatanguliwa na kiambishi awali cha MPI, ikifuatiwa na neno moja au zaidi ya jina, neno la kwanza la jina la kazi huanza na herufi kubwa, na maneno yanatenganishwa na underscore. Majina ya kazi za MPI, kama sheria, huelezea madhumuni ya vitendo vinavyofanywa na kazi.

Ikumbukwe:

  • Mwasiliani MPI_COMM_WORLD, kama ilivyoonyeshwa hapo awali, huundwa kwa chaguo-msingi na inawakilisha michakato yote ya programu sambamba inayotekelezwa,
  • Cheo kilichopatikana kwa kutumia chaguo la kukokotoa MPI_Comm_cheo, ni kiwango cha mchakato ambao ulitoa wito kwa kazi hii, i.e. kutofautiana ProcRank itachukua maadili tofauti katika michakato tofauti.

Usambamba katika lugha C
Mfano 3b. Usambamba katika Fortran
Mfano 4a. Kubainisha sifa za kipima muda cha mfumo katika lugha C
Mfano 4b. Kufafanua sifa za kipima saa cha mfumo huko Fortran

1.4. Kutuma na kupokea ujumbe kati ya michakato tofauti

1.4.1. Operesheni za kumweka-kwa-hatua

1.4.2. Kutuma na kupokea ujumbe kwa kuzuia

Mfano 5a. Ubadilishanaji wa ujumbe kati ya michakato miwili katika lugha C
Mfano 5b. Kubadilishana kwa ujumbe kati ya michakato miwili huko Fortran
Mfano 6a. Kubadilishana ujumbe kati ya michakato sawa na isiyo ya kawaida katika C
Mfano 6b. Kubadilishana ujumbe kati ya michakato sawa na isiyo ya kawaida huko Fortran
Mfano 7a. Kusambaza kwa mchakato ambao haupo katika C
Mfano 7b. Inasambaza kwa mchakato ambao haupo katika Fortran
Mfano 8a. Data iliyoakibishwa kutuma katika lugha C
Mfano 8b. Data iliyohifadhiwa inatumwa kwa lugha ya Fortran
Mfano 9a. Kupata taarifa kuhusu sifa za ujumbe katika lugha C
Mfano 9b. Kupata habari kuhusu sifa za ujumbe katika Fortran
Mfano 10a. Ufafanuzi wa muda na matokeo katika lugha C
Mfano 10b. Kufafanua muda na upitishaji katika Fortran

1.4.3. Kutuma na kupokea ujumbe bila kuzuia

Mfano 11a. Badilishana kupitia topolojia ya pete kwa kutumia shughuli zisizo za kuzuia katika C
Mfano 11b. Badilishana kupitia topolojia ya pete kwa kutumia shughuli zisizo za kuzuia huko Fortran
Mfano 12a. Mpango wa mawasiliano "bwana - wafanyikazi" katika lugha ya C
Mfano 12b. Mchoro wa mawasiliano "bwana - wafanyikazi" katika lugha ya Fortran
Mfano 13a. Ubadilishaji wa Matrix katika lugha C
Mfano 13b. Kubadilisha matrix huko Fortran

1.4.4. Maombi ya mwingiliano yanayosubiri

Mfano 14a. Mpango wa mbinu ya kurudia na kubadilishana pamoja na topolojia ya pete kwa kutumia hoja zilizoahirishwa katika lugha C
Mfano 14b. Mpango wa mbinu ya kurudia na kubadilishana juu ya topolojia ya pete kwa kutumia hoja zilizoahirishwa katika Fortran

1.4.5. Hali za kufuli

Mfano 15a. Badilishana kupitia topolojia ya pete kwa kutumia utaratibu wa MPI_Sendrecv katika lugha ya C
Mfano 15b. Badilishana kupitia topolojia ya pete kwa kutumia utaratibu wa MPI_SENDRECV huko Fortran

1.5. Maingiliano ya mchakato wa pamoja

1.5.1. Masharti ya jumla

1.5.2. Kizuizi

Mfano 16a. Usawazishaji wa vizuizi vya kuiga katika lugha C
Mfano 16b. Usawazishaji wa kizuizi cha mfano huko Fortran

1.5.3. Shughuli za pamoja za kuhamisha data

1.5.4. Uendeshaji wa Kimataifa

Mfano 17a. Kuiga majumuisho ya kimataifa kwa kutumia mpango unaoongezeka maradufu na operesheni ya pamoja ya MPI_Reduce katika lugha C
Mfano 17b. Kuiga muhtasari wa kimataifa kwa kutumia mpango unaoongezeka maradufu na operesheni ya pamoja ya MPI_Reduce katika Fortran

1.5.5. Operesheni Maalum za Ulimwenguni

Mfano 18a. Utendaji maalum wa kimataifa katika lugha C
Mfano 18b. Utendaji maalum wa kimataifa huko Fortran

1.6. Vikundi na wawasilianaji

1.6.1. Masharti ya jumla

1.6.2. Operesheni na vikundi vya mchakato

Mfano 19a. Kufanya kazi na vikundi katika lugha C
Mfano 19b. Kufanya kazi na vikundi huko Fortran

1.6.3. Uendeshaji na wawasilianaji

Mfano 20a. Kuvunja mawasiliano katika C
Mfano 20b. Kugawanya mwasiliani huko Fortran
Mfano 21a. Mchakato wa kuweka nambari tena katika lugha C
Mfano 21b. Mchakato wa kuorodhesha tena huko Fortran

1.6.4. Waunganishaji

Mfano 22a. Mpango wa mfanyakazi mkuu kwa kutumia kiunganishi katika lugha C
Mfano 22b. Mzunguko wa mfanyakazi mkuu kwa kutumia kiunganishi huko Fortran

1.6.5. Sifa

1.7. Topolojia halisi

1.7.1. Masharti ya jumla

1.7.2. Topolojia ya Cartesian

1.7.3. Topolojia ya grafu

Mfano 23a. Mchoro wa mfanyakazi mkuu kwa kutumia topolojia ya grafu katika lugha C
Mfano 23b. Mpango wa mfanyakazi mkuu kwa kutumia topolojia ya grafu huko Fortran

1.8. Kutuma aina tofauti za data

1.8.1. Masharti ya jumla

1.8.2. Aina za data zinazotolewa

Mfano 24a. Kupanga upya safu wima za matrix kwa mpangilio wa kinyume katika lugha C
Mfano 24b. Kupanga upya safu wima za matrix kwa mpangilio wa nyuma katika Fortran

1.8.3. Ufungaji wa Data

Mfano 25a. Inatuma data iliyopakiwa katika lugha C
Mfano 25b. Inatuma Data Iliyofungwa huko Fortran

1.9. kitu cha habari

1.9.1. Masharti ya jumla

1.9.2. Kufanya kazi na kitu cha habari

1.10. Udhibiti wa Mchakato wa Nguvu

1.10.1. Masharti ya jumla

1.10.2.Uundaji wa taratibu

bwana.c
mtumwa.c
Mfano 26a. Mpango wa mfanyakazi mkuu kwa kutumia mchakato wa kuzaa katika lugha C
bwana.f
mtumwa.f
Mfano 26b. Mpango wa mfanyakazi mkuu kwa kutumia mchakato wa kuzaa huko Fortran

1.10.3. Mawasiliano ya mteja-server

seva.c
mteja.c
Mfano 27a. Ubadilishanaji wa data kati ya seva na mteja kwa kutumia jina la umma katika lugha C
seva.f
mteja.f
Mfano 27b. Ubadilishanaji wa data kati ya seva na mteja kwa kutumia jina la umma katika lugha ya Fortran

1.10.4. Kuondoa muungano wa mchakato

1.10.5. Mawasiliano ya Soketi

1.11. Mawasiliano ya njia moja

1.11.1. Masharti ya jumla

1.11.2. Kufanya kazi na dirisha

1.11.3. Uhamisho wa data

1.11.4. Usawazishaji

Mfano 28a
Mfano 28b
Mfano 29a. Badilishana kupitia topolojia ya pete kwa kutumia mawasiliano ya njia moja katika C
Mfano 29b. Badilishana kupitia topolojia ya pete kwa kutumia mawasiliano ya njia moja huko Fortran
Mfano 30a. Badilishana kupitia topolojia ya pete kwa kutumia mawasiliano ya njia moja katika C
Mfano 30b. Badilishana kupitia topolojia ya pete kwa kutumia mawasiliano ya njia moja huko Fortran

1.12. Violesura vya nje

1.12.1. Maswali ya jumla

1.12.2. Habari kutoka kwa hali

1.12.3. Mizizi

1.13. Sambamba na I/O

1.13.1. Ufafanuzi

1.13.2. Kufanya kazi na faili

1.13.3. Ufikiaji wa data

Mfano 31a. Usomaji uliohifadhiwa kutoka kwa faili katika lugha ya C
Mfano 31b. Usomaji uliohifadhiwa kutoka kwa faili katika Fortran
Mfano 32a. Usomaji wa pamoja kutoka kwa faili katika lugha ya C
Mfano 32b. Usomaji wa pamoja kutoka kwa faili huko Fortran

1.14. Hitilafu katika kuchakata

1.14.1. Masharti ya jumla

1.14.2. Vidhibiti vya hitilafu vinavyohusishwa na wawasiliani

1.14.3. Vidhibiti vya makosa yanayohusiana na dirisha

1.14.4. Vidhibiti vya makosa yanayohusiana na faili

1.14.5. Taratibu za ziada

1.14.6. Misimbo ya hitilafu na madarasa

1.14.7. Kupiga Vidhibiti Hitilafu

Mfano 33a. Hitilafu katika kushughulikia C lugha
Mfano 33b. Kushughulikia Hitilafu huko Fortran

Sura ya 2 OpenMP Sambamba Programming Technology

2.1. Utangulizi

2.2. Dhana za Msingi

2.2.1. Kuandaa programu

Mfano 34a. Mkusanyiko wa masharti katika C
Mfano 34b
Mfano 34c. Mkusanyiko wa masharti huko Fortran

2.2.2. Mfano wa programu sambamba

2.2.3. Maelekezo na taratibu

2.2.4. Utekelezaji wa Programu

2.2.5. Muda

Mfano 35a. Kufanya kazi na vipima muda vya mfumo katika C
Mfano 35b. Kufanya kazi na vipima muda vya mfumo huko Fortran

2.3. Sambamba na maeneo ya serial

2.3.1. mwongozo sambamba

Mfano 36a. Eneo sambamba katika lugha C
Mfano 36b. Mkoa sambamba huko Fortran
Mfano 37a. Chaguo la kupunguza katika lugha C
Mfano 37b. Chaguo la kupunguza katika Fortran

2.3.2. Nukuu ya mkato

2.3.3. Vigezo vya Mazingira na Taratibu za Msaidizi

Mfano 38a. Utaratibu wa Omp_set_num_threads na chaguo num_threads katika lugha C
Mfano 38b. Utaratibu wa omp_set_num_threads na chaguo num_threads katika lugha ya Fortran
Mfano 39a. Taratibu omp_set_dynamic na omp_get_dynamic katika lugha C
Mfano 39b. Taratibu za omp_set_dynamic na omp_get_dynamic katika Fortran
Mfano 40a. Mikoa Sambamba katika C
Mfano 40b. Mikoa Sambamba Iliyowekwa katika Fortran
Mfano 41a. Chaguo za kukokotoa za Omp_in_parallel katika lugha ya C
Mfano 41b. Fanya kazi omp_in_parallel katika lugha ya Fortran

2.3.4. mwongozo mmoja

Mfano 42a. Agizo moja na chaguo la kusubiri katika lugha C
Mfano 42b. Maagizo moja na chaguo la kusubiri huko Fortran
Mfano 43a. Chaguo la kunakili katika lugha ya C
Mfano 43b. chaguo la nakala ya kibinafsi huko Fortran

2.3.5. agizo kuu

Mfano 44a. Maagizo kuu katika lugha ya C
Mfano 44b. maagizo kuu huko Fortran

2.4. Mfano wa data

Mfano 45a. Chaguo la kibinafsi katika lugha ya C
Mfano 45b. Chaguo la kibinafsi huko Fortran
Mfano 46a. Chaguo la pamoja katika lugha C
Mfano 46b. Chaguo la pamoja katika Fortran
Mfano 47a. chaguo la kwanza la kibinafsi katika lugha ya C
Mfano 47b. chaguo la kwanza la kibinafsi huko Fortran
Mfano 48a. mwongozo wa kibinafsi katika lugha ya C
Mfano 48b. threadprivate maelekezo katika Fortran
Mfano 49a. Chaguo la kunakili katika lugha C
Mfano 49b. chaguo la kunakili huko Fortran

2.5. Usambazaji wa kazi

2.5.1. Usambamba wa kiwango cha chini

Mfano 50a. Taratibu za omp_get_num_threads na omp_get_thread_num katika lugha C
Mfano 50b. Taratibu za omp_get_num_threads na omp_get_thread_num katika Fortran

2.5.2. Loops sambamba

Mfano 51a. kwa maagizo katika lugha C
Mfano 51b. Maagizo ya kufanya huko Fortran
Mfano 52a. Ratiba chaguo katika lugha C
Mfano 52b. ratiba chaguo katika Fortran
Mfano 53a. Ratiba chaguo katika lugha C

Vipengele vya MPI

Aina Inayotolewa, Uendeshaji, Aina za Data

Tuma Buffer_ambatisha Get_count ANY_SOURCE Sendrecv_replace ANY_TAG Probe

Allgetherv Alltoall Alltoallv Punguza Rduce_scatter Scan

Aina inayotokana imeundwa kutoka kwa aina zilizoainishwa za MPI na aina zilizoainishwa hapo awali kwa kutumia vitendaji maalum vya kijenzi.

MPI_Type_contiguous, MPI_Type_vector, MPI_Type_hvector, MPI_Type_indexed, MPI_Type_hindexed, MPI_Type_struct.

Aina mpya inayotokana imesajiliwa kwa kupiga kitendakazi cha MPI_Type_commit. Tu baada ya usajili unaweza aina mpya inayotokana kutumika katika taratibu za mawasiliano na katika ujenzi wa aina nyingine. Aina za MPI zilizoainishwa awali huchukuliwa kuwa zimesajiliwa.

Wakati aina inayotokana haihitajiki tena, inaharibiwa na kitendakazi cha MPI_Type_free.

1) MPI_Init - kazi ya uanzishaji. Kama matokeo ya kutekeleza kazi hii, kikundi cha mchakato huundwa ambamo michakato yote ya maombi huwekwa, na eneo la mawasiliano linaundwa, lililoelezewa na mwasiliani aliyefafanuliwa MPI_COMM_WORLD.

MPI_Type_commit - usajili wa aina, MPI_Type_free - uharibifu wa aina

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

2) MPI_Finalize - Kazi ya kukamilisha programu za MPI. Kazi hufunga michakato yote ya MPI na kuondoa maeneo yote ya mawasiliano.

int MPI_Finalize(batili);

3) Kazi ya kuamua idadi ya michakato katika eneo la mawasiliano MPI_Comm_size . Chaguo za kukokotoa hurejesha idadi ya michakato katika eneo la mawasiliano la comm ya mwasiliani.

int MPI_Comm_size(MPI_Comm comm, int *size);

4) Kazi ya kutambua nambari ya mchakato MPI_Comm_cheo . Chaguo za kukokotoa hurejesha nambari ya mchakato ulioita chaguo hili la kukokotoa. Nambari za mchakato ziko katika safu 0..size-1.

int MPI_Comm_rank(MPI_Comm comm, int *cheo);

5) Kitendaji cha ujumbe MPI_Tuma. Chaguo za kukokotoa hutuma vipengele vya hesabu vya aina ya data ya ujumbe na lebo ya kitambulisho ili kuchakata mwisho katika eneo la mawasiliano la comm ya mwasiliani.

int MPI_Send(utupu* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);

6) Kitendaji cha kupokea ujumbe MPI_Recv. Chaguo za kukokotoa hupokea vipengele vya hesabu vya aina ya data ya ujumbe na lebo ya kitambulisho kutoka kwa mchakato wa chanzo katika eneo la mawasiliano la comm ya mwasiliani.

int MPI_Recv(batili* buf, int count, MPI_Datatype datatype, chanzo cha int, int tag, MPI_Comm comm, MPI_Status *hali)

7) Kitendakazi cha muda (kipima saa) MPI_Wtime. Chaguo la kukokotoa hurejesha muda wa unajimu katika sekunde ambazo zimepita tangu wakati fulani huko nyuma (hatua ya marejeleo).

MPI_Wtime mara mbili (utupu)

Kazi za kupitisha ujumbe kati ya michakato imegawanywa katika:

Kiambishi awali S (sawazishaji)

inamaanisha hali ya uhamishaji data iliyosawazishwa. Operesheni ya uwasilishaji wa data inaisha tu wakati upokezi wa data unamalizika. Chaguo hili si la ndani.

Kiambishi awali B (kimebafa)

inamaanisha hali ya uhamishaji data iliyoakibishwa. Ubao wa clipboard huundwa katika nafasi ya anwani ya mchakato wa kutuma kwa kutumia kazi maalum, ambayo hutumiwa katika shughuli za kubadilishana. Operesheni ya kutuma inaisha wakati data imewekwa kwenye bafa hii. Kazi ni ya kawaida kwa asili.

Kiambishi awali R (tayari)

njia iliyokubaliwa au iliyotayarishwa ya usambazaji wa data. Uendeshaji wa uhamisho wa data huanza tu wakati processor inayopokea imeweka ishara ya utayari wa kupokea data, kuanzisha operesheni ya kupokea. Chaguo hili si la ndani.

kiambishi awali I (papo hapo)

inahusu shughuli zisizo za kuzuia.

Muundo wa MPI_Hali

Baada ya kusoma ujumbe, baadhi ya vigezo vinaweza kuwa havijulikani, kama vile idadi ya vipengee vilivyosomwa, kitambulisho cha ujumbe, na anwani ya mtumaji. Taarifa hii inaweza kupatikana kwa kutumia parameter ya hali. Vigezo vya hali lazima vitangaze kwa uwazi katika mpango wa MPI. Katika lugha ya C, hali ni muundo wa aina ya MPI_Hali iliyo na sehemu tatu za MPI_SOURCE, MPI_TAG, MPI_ERROR.

8) Kuamua idadi ya vipengele vya ujumbe vilivyopokelewa kweli, lazima utumie kazi maalum MPI_Pata_hesabu .

int MPI_Get_count (MPI_Status *status, MPI_Datatype datatype, int *count);

9) Unaweza kuamua vigezo vya ujumbe uliopokelewa bila kuusoma kwa kutumia kazi ya MPI_Probe. int MPI_Probe (chanzo cha int, int tag, MPI_Comm comm, MPI_Status *hali);

10) Katika hali ambapo unahitaji kubadilishana data kati ya michakato, ni salama kutumia operesheni ya pamoja MPI_Sendrecv . Katika operesheni hii, data iliyotumwa kutoka kwa safu ya buf inabadilishwa na data iliyopokelewa.

int MPI_Sendrecv(batili *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, MPI_Datatype recvtag, MPI_Comm commstatus, MPI_Comm_Status);

11) Kazi ya kuangalia kukamilika kwa operesheni isiyo ya kuzuia MPI_Test.

int MPI_Test(MPI_Request *request, int *bendera, MPI_Hali *hali);

Hii ni operesheni ya ndani isiyo ya kuzuia. Ikiwa operesheni inayohusishwa na ombi imekamilika, bendera = kweli inarudishwa, na hali ina habari kuhusu operesheni iliyokamilishwa. Ikiwa operesheni inayoangaliwa haijakamilika, bendera = uongo inarejeshwa, na thamani ya hali haijafafanuliwa katika kesi hii.

12) Kazi ya kughairi ombi bila kusubiri kukamilika kwa operesheni isiyozuia MPI_Request_free.

int MPI_Request_free(MPI_Request *request);

Kigezo cha ombi kimewekwa kuwa MPI_REQUEST_NULL.

13) Kufikia utekelezaji bora wa uhamishaji data kutoka kwa mchakato mmoja hadi michakato yote ya programu (utangazaji wa data) kunaweza kufikiwa kwa kutumia kitendakazi cha MPI:

int MPI_Bcast(batili *buf, int count,MPI_Datatype type,int root,MPI_Comm comm)

Chaguo za kukokotoa za MPI_Bcast hutangaza data kutoka kwa bafa iliyo na vipengele vya hesabu vya aina kutoka kwa mzizi wenye nambari hadi michakato yote iliyojumuishwa kwenye kiwasilishi cha comm.

14) Ikiwa unahitaji kupokea ujumbe kutoka kwa mtu yeyote mchakato wa kutuma unaweza kuwa na thamani MPI_ANY_SOURCE iliyobainishwa kwa kigezo cha chanzo

15) Ikiwa ni muhimu kupokea ujumbe na lebo yoyote, thamani inaweza kutajwa kwa parameter ya lebo MPI_ANY_TAG

16) Kigezo cha hali hukuruhusu kufafanua idadi ya sifa za ujumbe uliopokelewa:

- status.MPI_SOURCE - cheo mchakato wa kutuma ujumbe uliopokelewa,

- status.MPI_TAG - lebo ya ujumbe uliopokelewa.

17) Kazi

MPI_Get_count t(MPI_Status *status, MPI_Datatype aina, int *count)

inarejesha katika kigezo cha hesabu idadi ya vipengele vya aina katika ujumbe uliopokelewa.

18) Operesheni zinazohamisha data kutoka kwa michakato yote hadi mchakato mmoja. Katika operesheni hii juu ya zilizokusanywa

maadili hufanya usindikaji wa data moja au nyingine (ili kusisitiza jambo la mwisho, operesheni hii pia inaitwa operesheni ya kupunguza data)

int MPI_Reduce (batili *sendbuf, void *recvbuf,int count,MPI_Datatype type, MPI_Op op,int root,MPI_Comm comm)

19) Usawazishaji wa mchakato, i.e. mafanikio ya wakati huo huo na michakato ya vidokezo fulani vya mchakato wa hesabu huhakikishwa kwa kutumia kazi ya MPI: int. MPI_Barrier(MPI_Comm comm); Kazi ya MPI_Barrier inafafanua operesheni ya pamoja na, kwa hiyo, inapotumiwa, lazima iitwe na michakato yote ya mwasiliani aliyetumiwa. Wakati wa kupiga kazi ya MPI_Barrier

utekelezaji wa mchakato umezuiwa; hesabu za mchakato zitaendelea tu baada ya michakato yote ya mwasilianishaji kuita kitendakazi cha MPI_Barrier.

20) Ili kutumia hali ya uhamishaji iliyoakibishwa, buffer ya kumbukumbu ya MPI lazima iundwe na kuhamishwa

kuakibisha ujumbe - kazi inayotumika kwa hii inaonekana kama: int MPI_Buffer_attach (utupu *buf, saizi ya int),

- buf memory buffer kwa ujumbe wa kuakibisha,

- saizi - saizi ya bafa.

21) Baada ya kumaliza kufanya kazi na bafa, lazima ikatishwe kutoka kwa MPI kwa kutumia kazi:

int MPI_Buffer_detach (batili *buf, int *size).

22) Kufikia ufanisi na uhakikisho wa utekelezaji sawia wa utumaji na upokeaji wa data unaweza kupatikana kwa kutumia kipengele cha MPI:

int MPI_Sendrecv (batili *sbuf, int scount,MPI_Datatype stype,int dest, int stag, void *rbuf,int rcount,MPI_Datatype

type,int source,int rtag, MPI_Comm comm, MPI_Hali *hali)

23) Wakati ujumbe ni wa aina moja, MPI ina uwezo wa kutumia bafa moja: intMPI_Sendrecv_replace (utupu *buf, int count, MPI_Datatype type, int dest,

int stag, int source, int rtag, MPI_Comm comm, MPI_Status* hali)

24) Uendeshaji wa jumla wa kusambaza data kutoka kwa mchakato mmoja hadi kwa michakato yote (usambazaji wa data) hutofautiana na utangazaji kwa kuwa mchakato hupeleka data tofauti kwa michakato (ona Mtini. 4.4). Operesheni hii inaweza kukamilika kwa kutumia kazi:

int MPI_Scatter (utupu *sbuf, int scount, aina ya MPI_Datatype,

25) Uendeshaji wa uhamisho wa data wa jumla kutoka kwa wasindikaji wote hadi mchakato mmoja (mkusanyiko wa data) ni kinyume cha utaratibu wa usambazaji wa data (ona Mchoro 4.5). Ili kufanya operesheni hii katika MPI kuna kazi:

int MPI_Gather (batili *sbuf, int scount, aina ya MPI_Datatype,

void *rbuf,int rcount,MPI_Datatype type, int root, MPI_Comm comm)

26) Ikumbukwe kwamba wakati wa kutumia kazi ya MPI_Gather, ukusanyaji wa data unafanywa tu

kwenye mchakato mmoja. Ili kupata data zote zilizokusanywa kwenye kila moja ya michakato ya mwasiliani

unahitaji kutumia kazi ya ukusanyaji na usambazaji:

int MPI_Allgather (batili *sbuf, int scount, aina ya MPI_Datatype, void *rbuf, int rcount, MPI_Datatype type, MPI_Comm comm)

27) Kuhamisha data kutoka kwa michakato yote hadi kwa michakato yote ndiyo operesheni ya kawaida ya uhamishaji data (ona Mchoro 4.6). Operesheni hii inaweza kukamilika kwa kutumia kazi:

int MPI_Alltoall (batili *sbuf,int scount,MPI_Datatype aina, void *rbuf,int rcount,MPI_Datatype type,MPI_Comm comm)

28) Chaguo za kukokotoa za MPI_Reduce hutoa matokeo ya kupunguza data

kwa mchakato mmoja tu. Ili kupata matokeo ya upunguzaji wa data kwenye kila moja ya michakato ya mwasiliani, lazima utumie kipengele cha kupunguza na kusambaza:

int MPI_Allreduce (batili *sendbuf, batili *recvbuf,int count,MPI_Datatype type, MPI_Op op,MPI_Comm comm).

29) Na toleo jingine la ukusanyaji na usindikaji wa data, ambayo inahakikisha kwamba matokeo yote ya kupunguzwa kwa sehemu yanapatikana, yanaweza kupatikana kwa kutumia kazi:

int MPI_Scan (batili *sendbuf, batili *recvbuf,int count,MPI_Datatype aina, MPI_Op op,MPI_Comm comm).

Mchoro wa jumla wa utekelezaji wa kitendakazi cha MPI_Scan umeonyeshwa kwenye Mtini. 4.7. Vipengele vya ujumbe uliopokelewa huwakilisha matokeo ya usindikaji wa vipengele vinavyolingana vya ujumbe unaopitishwa na michakato, na kupata matokeo kwenye mchakato wenye cheo i, 0≤i.

30) Thamani ya awali ya mabadiliko ya bufpos lazima iundwe kabla ya ufungaji kuanza na kisha kuwekwa na chaguo la kukokotoa MPI_Pack. Kitendakazi cha MPI_Pack kinaitwa mfuatano ili kufunga data zote muhimu.

int MPI_Pack_size (idadi ya int, aina ya MPI_Datatype, MPI_Comm comm, int *size)

31) Baada ya kufunga data zote muhimu, bafa iliyotayarishwa inaweza kutumika katika vitendaji vya uhamishaji data na aina ya MPI_PACKED iliyobainishwa.

Baada ya kupokea ujumbe wenye aina ya MPI_PACKED, data inaweza kufunguliwa kwa kutumia chaguo hili:

int MPI_Unpack (batili *buf, int bufsize, int *bufpos, batili *data, int count, MPI_Datatype aina, MPI_Comm comm)

Maelekezo Complex Weka Kompyuta

CISC (Kiingereza Complex seti ya maagizo ya kompyuta, au seti ya kompyuta ya maagizo ya Kiingereza -

kompyuta iliyo na seti kamili ya maagizo) ni dhana ya muundo wa processor ambayo ina sifa ya seti zifuatazo za mali:

idadi ndogo ya rejista za madhumuni ya jumla;

· idadi kubwa ya maagizo ya mashine, ambayo baadhi yake hupakiwa kwa kisemantiki sawa na waendeshaji wa lugha za kiwango cha juu cha programu na hutekelezwa katika mizunguko mingi ya saa;

· idadi kubwa ya njia za kushughulikia;

· idadi kubwa ya muundo wa amri wa saizi tofauti;

· ukuu wa umbizo la amri ya anwani mbili;

· uwepo wa amri za usindikaji wa aina rejista-kumbukumbu.

Mapungufu:

gharama kubwa ya vifaa; shida na usawazishaji wa mahesabu.

Mbinu ya ujenzi wa mfumo wa mafundisho ya CISC ni kinyume cha mbinu nyingine - RISC. Tofauti kati ya dhana hizi iko katika njia za programu, sio katika usanifu halisi wa processor. Takriban wasindikaji wote wa kisasa huiga seti za maelekezo ya aina ya RISC na CISC.

Maagizo yaliyopunguzwa Weka Kompyuta

Inategemea kanuni za usanifu wa RISC: muundo wa maelekezo ya kudumu, shughuli za rejista, utekelezaji wa mzunguko mmoja wa maagizo, mbinu rahisi za kushughulikia, na faili kubwa ya rejista. Wakati huo huo, kuna vipengele kadhaa muhimu vinavyofautisha usanifu huu kutoka kwa usanifu wa wasindikaji wengine wa RISC. Hizi ni pamoja na: seti ya kujitegemea ya rejista kwa kila mmoja wa watendaji; kuingizwa kwa maagizo ya mtu binafsi ya CISC kwenye mfumo; ukosefu wa utaratibu wa "kuchelewa kwa mpito"; njia ya awali ya kutekeleza kuruka kwa masharti. Maombi kuu ya usanifu wa microprocessor ni seva za utendaji wa juu na kompyuta kubwa.

Kompyuta kama hizo zilitegemea usanifu ambao ulitenganisha maagizo ya usindikaji kutoka kwa maagizo ya kumbukumbu na kusisitiza uboreshaji wa bomba. Mfumo wa maagizo uliundwa kwa njia ambayo utekelezaji wa maagizo yoyote ulichukua idadi ndogo ya mzunguko wa mashine (ikiwezekana mzunguko wa mashine moja). Mantiki yenyewe ya kutekeleza amri ili kuongeza utendaji ililenga kwenye maunzi badala ya utekelezaji wa programu dhibiti. Ili kurahisisha mantiki ya kusimbua amri, amri za urefu usiobadilika zilitumiwa

Na umbizo la kudumu.

KATIKA Je, lengo la teknolojia ya bafa ya anwani ya mpito ni nini?

KATIKA Kichakataji hutoa utaratibu wa kutabiri kwa nguvu mwelekeo wa mipito. Pamoja na hili

Lengwa kwenye chip ni kumbukumbu ndogo ya akiba inayoitwa bafa lengwa la tawi (BTB), na jozi mbili huru za vibafa vya kuleta awali vya maagizo (vibafa viwili vya 32-bit kwa kila bomba). Bafa ya anwani inayolengwa ya tawi huhifadhi anwani za maagizo ambayo yako kwenye vihifadhi vya kuleta mapema. Uendeshaji wa vibafa vya kuletwa mapema hupangwa kwa njia ambayo wakati wowote, maagizo yanaletwa tu katika moja ya bafa za jozi zinazolingana. Operesheni ya tawi inapogunduliwa katika mkondo wa maagizo, anwani ya tawi iliyokokotwa inalinganishwa na anwani zilizohifadhiwa katika BTB. Iwapo kuna mechi, tawi linatabiriwa kufanyika na bafa nyingine ya kuleta mapema imewashwa na kuanza kutoa amri kwa bomba linalolingana ili kutekelezwa. Ikiwa kuna kutolingana, inachukuliwa kuwa tawi halitatekelezwa na bafa ya kuleta mapema haijawashwa, kuendelea na agizo la kawaida la kutoa amri. Hii inaepuka wakati wa kupungua kwa conveyor

Migogoro ya kimuundo na njia za kuipunguza

Njia ya pamoja ya utekelezaji wa amri kwa ujumla inahitaji bomba la vitengo vya kazi na kurudia rasilimali ili kutatua michanganyiko yote ya amri kwenye bomba. Ikiwa mchanganyiko wowote wa amri utashindwa

kukubalika kwa sababu ya mgongano wa rasilimali, basi mashine inasemekana kuwa na mgongano wa kimuundo. Mfano wa kawaida wa mashine ambazo migogoro ya kimuundo inaweza kutokea ni mashine zilizo na vifaa vya kufanya kazi ambavyo havijasafirishwa kikamilifu.

Kupunguza: Bomba linasitisha utekelezaji wa mojawapo ya amri hadi kifaa kinachohitajika kinapatikana.

Migogoro ya data, vituo vya bomba na utekelezaji wa utaratibu wa bypass

Mojawapo ya mambo ambayo yana athari kubwa katika utendaji wa mifumo ya conveyor ni utegemezi wa kimantiki baina ya maelekezo. Migogoro ya data hutokea wakati utumiaji wa uchakataji wa bomba unaweza kubadilisha mpangilio wa simu za uendeshaji ili agizo hili liwe tofauti na agizo ambalo huzingatiwa wakati maagizo yanatekelezwa kwa kufuatana kwenye mashine isiyo na bomba. Tatizo lililotolewa katika mfano huu linaweza kutatuliwa kwa kutumia mbinu rahisi ya maunzi inayoitwa usambazaji wa data, kupita data, au wakati mwingine mzunguko mfupi.

Migogoro ya data inayosababisha bomba kusitisha

Badala yake, tunahitaji maunzi ya ziada, yanayoitwa pipeline interlook hardware, ili kuhakikisha mfano unafanya kazi ipasavyo. Kwa ujumla, aina hii ya vifaa hutambua migogoro na kusitisha bomba mradi tu kuna mgogoro. Katika hali hii, maunzi haya husitisha bomba kuanzia na maagizo ambayo yanataka kutumia data wakati maagizo ya hapo awali, ambayo matokeo yake ni operesheni yetu, hutoa matokeo hayo. Kifaa hiki husababisha mstari wa uzalishaji kukwama au "Bubble" kuonekana kwa njia sawa na katika kesi ya migogoro ya miundo.

Vibafa vya utabiri vya tawi vya masharti

Bafa ya utabiri wa tawi yenye masharti ni kumbukumbu ndogo inayoweza kushughulikiwa na sehemu ndogo kabisa za anwani ya maagizo ya tawi. Kila seli ya kumbukumbu hii ina biti moja, ambayo inaonyesha kama tawi la awali lilitekelezwa au la. Hii ndiyo aina rahisi zaidi ya bafa ya aina hii. Haina lebo na ni muhimu tu kwa kupunguza muda wa kusubiri wa tawi iwapo ucheleweshaji utakuwa mrefu kuliko muda unaohitajika kukokotoa thamani ya anwani inayolengwa ya tawi. Bafa ya utabiri wa tawi inaweza kutekelezwa kama akiba ndogo iliyojitolea inayofikiwa na anwani ya maagizo wakati wa hatua ya kuleta maagizo ya bomba (IF), au kama jozi ya biti zinazohusiana na kila kizuizi cha kache ya maagizo na kuletwa kwa kila maagizo.