ഒരു കമ്പ്യൂട്ടിംഗ് ക്ലസ്റ്ററിൽ ഒരു MPI ആപ്ലിക്കേഷൻ സമാരംഭിക്കുന്നത് സിസ്റ്റത്തിലൂടെ മാത്രമേ സാധ്യമാകൂ ബാച്ച് പ്രോസസ്സിംഗ്ചുമതലകൾ. ഒരു സമാന്തര പ്രോഗ്രാമിന്റെ സമാരംഭവും ക്യൂയിങ്ങും ലളിതമാക്കുന്നതിന്, ഇത് നൽകിയിരിക്കുന്നു പ്രത്യേക സ്ക്രിപ്റ്റ്എംപിരുൺ. ഉദാഹരണത്തിന്, mpirun -np 20 ./first.exe സമാരംഭിക്കും സമാന്തര പ്രോഗ്രാം 20 പ്രോസസ്സറുകളിൽ first.exe, അതായത്. 5 നോഡുകളിൽ. (ഓരോ നോഡിലും 2 ഡ്യുവൽ കോർ പ്രൊസസറുകൾ ഉണ്ട്). നിലവിലെ ഡയറക്ടറിയിൽ ($pwd) സ്ഥിതി ചെയ്യുന്ന ഒരു എക്സിക്യൂട്ടബിൾ മൊഡ്യൂൾ സമാരംഭിക്കുന്നതിന്, നിങ്ങൾ “./” പാത്ത് വ്യക്തമായി വ്യക്തമാക്കണം എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്, നിരവധി MPI-1 നടപ്പിലാക്കലുകൾ MPI പ്രോഗ്രാമുകൾക്കായി ഒരു ലോഞ്ച് കമാൻഡ് നൽകുന്നു, അതിന് ഫോം ഉണ്ട്. എംപിരുൺ<аргументы mpirun><программа><аргументы программы>
പ്രോഗ്രാമിൽ നിന്ന് പ്രോഗ്രാം ലോഞ്ച് കമാൻഡ് വേർതിരിക്കുന്നത്, പ്രത്യേകിച്ച് നെറ്റ്വർക്കുചെയ്തതും വൈവിധ്യമാർന്നതുമായ നടപ്പിലാക്കലുകൾക്ക് വഴക്കം നൽകുന്നു. ഒരു സ്റ്റാൻഡേർഡ് ട്രിഗർ മെക്കാനിസം ഉള്ളത് പോർട്ടബിലിറ്റി വർദ്ധിപ്പിക്കുന്നു MPI പ്രോഗ്രാമുകൾകമാൻഡ് ലൈനുകളിലേക്കും അവയെ നിയന്ത്രിക്കുന്ന സ്ക്രിപ്റ്റുകളിലേക്കും ഒരു പടി കൂടി മുന്നോട്ട്. ഉദാഹരണത്തിന്, നൂറുകണക്കിന് പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കുന്ന ഒരു കൂട്ടം മൂല്യനിർണ്ണയ പ്രോഗ്രാമുകളുടെ ഒരു സ്ക്രിപ്റ്റ് അത്തരം ഒരു സ്റ്റാൻഡേർഡ് ലോഞ്ച് മെക്കാനിസം ഉപയോഗിച്ചാണ് എഴുതിയതെങ്കിൽ, അത് ഒരു പോർട്ടബിൾ സ്ക്രിപ്റ്റായിരിക്കാം. പ്രായോഗികമായി നിലവിലുള്ളവയുമായി ``സ്റ്റാൻഡേർഡ്' കമാൻഡിനെ ആശയക്കുഴപ്പത്തിലാക്കാതിരിക്കാൻ, ഇത് സ്റ്റാൻഡേർഡ് അല്ലാത്തതും നടപ്പിലാക്കലുകൾക്കിടയിൽ പോർട്ടബിൾ അല്ലാത്തതും, mpirun-ന് പകരം MPI നിർവചിച്ചത് mpiexec ആണ്.
ഒരു സ്റ്റാൻഡേർഡ് ലോഞ്ച് മെക്കാനിസം MPI-യുടെ ഉപയോഗക്ഷമത മെച്ചപ്പെടുത്തുമ്പോൾ, പരിതസ്ഥിതികളുടെ ശ്രേണി വളരെ വൈവിധ്യപൂർണ്ണമാണ് (ഉദാഹരണത്തിന്, ഒരു ഇന്റർഫേസ് പോലും ഇല്ലായിരിക്കാം. കമാൻഡ് ലൈൻ) MPI-ക്ക് അത്തരമൊരു സംവിധാനം നിർബന്ധമാക്കാൻ കഴിയില്ല. പകരം, MPI mpiexec റൺ കമാൻഡ് നിർവചിക്കുകയും ഡെവലപ്പർമാർക്ക് ഒരു ഉപദേശമായി ശുപാർശ ചെയ്യുകയും എന്നാൽ ആവശ്യമില്ല. എന്നിരുന്നാലും, ഒരു നടപ്പിലാക്കൽ mpiexec എന്ന കമാൻഡ് നൽകുന്നുവെങ്കിൽ, അത് താഴെ വിവരിച്ചിരിക്കുന്ന ഫോം എടുക്കണം: mpiexec -n
പ്രകാരം ആയിരിക്കും ഇത്രയെങ്കിലുംഓടാനുള്ള ഒരു വഴി<программу>പ്രാരംഭ MPI_COMM_WORLD-നൊപ്പം ഗ്രൂപ്പ് അടങ്ങിയിരിക്കുന്നു
ഉദാഹരണം 4.1 നിലവിലെ അല്ലെങ്കിൽ ഡിഫോൾട്ട് മെഷീനിൽ myprog-ന്റെ 16 സന്ദർഭങ്ങൾ പ്രവർത്തിപ്പിക്കുന്നു:
mpiexec -n 16 myprog
3. ഒരു പ്രോഗ്രാം എഴുതുക സമാന്തര കമ്പ്യൂട്ടിംഗ്ഇടവേളയിലെ ഫംഗ്ഷൻ 2*(x+2*x*x/1200.0) ന്റെ നിശ്ചിത അവിഭാജ്യ ഘടകം .
ഇടത് ദീർഘചതുരം രീതി
ഇരട്ട എഫ് (ഇരട്ട x)
(റിട്ടേൺ 2*(x+2*x*x/1200);) // iskomyi ഇന്റഗ്രൽ
int main(int argc,char **argv)
MPI_Status നില;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
int n=1000,i,d; // 1000 - uzly
ഫ്ലോട്ട് a=0, b=1, h=(b-a)/n,s=0,r=0; //a i b -nachalo i konec otrezka
എങ്കിൽ (റാങ്ക്!=വലിപ്പം-1) // schitaut vse processy, crome poslednego
(ഇന് = റാങ്ക്*d; i<(rank+1)*d; i++) { s=s+h*f(a+i*h); }
MPI_Send(&s,1,MPI_FLOAT,size-1,1,MPI_COMM_WORLD);)
(ഇതിന് (i=0; i ( MPI_Recv(&s,1,MPI_FLOAT,i,1,MPI_COMM_WORLD, &status); r+=s; ) ) MPI_Finalize();) സുരക് 1. പങ്കിട്ടതും വിതരണം ചെയ്തതുമായ മെമ്മറി ആർക്കിടെക്ചറുകൾ. ഡിസ്ട്രിബ്യൂട്ടഡ് ഷെയർഡ് മെമ്മറി (ഡിഎസ്എം - ഡിസ്ട്രിബ്യൂട്ടഡ് ഷെയർഡ് മെമ്മറി) പരമ്പരാഗതമായി, ഡിസ്ട്രിബ്യൂട്ടഡ് കമ്പ്യൂട്ടിംഗ് ഒരു മെസേജ് പാസിംഗ് മോഡലിനെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്, അതിൽ ഡാറ്റ പ്രോസസറിൽ നിന്ന് പ്രോസസറിലേക്ക് സന്ദേശങ്ങളുടെ രൂപത്തിൽ കൈമാറുന്നു. വിദൂര നടപടിക്രമ കോളുകൾ യഥാർത്ഥത്തിൽ ഒരേ മാതൃകയാണ് (അല്ലെങ്കിൽ വളരെ അടുത്ത്). ഒരു ഡിസ്ട്രിബ്യൂഡ് സിസ്റ്റത്തിന്റെ എല്ലാ നോഡുകളും (പ്രോസസറുകൾ) പങ്കിടുന്ന ഒരു വെർച്വൽ വിലാസ സ്ഥലമാണ് DSM. പരമ്പരാഗത കമ്പ്യൂട്ടറുകളുടെ വെർച്വൽ മെമ്മറിയിൽ ഡാറ്റ ആക്സസ് ചെയ്യുന്ന അതേ രീതിയിൽ പ്രോഗ്രാമുകൾ DSM-ൽ ഡാറ്റ ആക്സസ് ചെയ്യുന്നു. DSM ഉള്ള സിസ്റ്റങ്ങളിൽ, ഒരു കമ്പ്യൂട്ടറിന്റെ റാമിനും എക്സ്റ്റേണൽ മെമ്മറിക്കും ഇടയിൽ ചലിക്കുന്ന അതേ രീതിയിൽ തന്നെ വ്യത്യസ്ത കമ്പ്യൂട്ടറുകളുടെ ലോക്കൽ മെമ്മറികൾക്കിടയിൽ ഡാറ്റ നീങ്ങുന്നു. വിതരണം ചെയ്ത മെമ്മറി കോൺഫിഗറേഷൻ വിതരണം ചെയ്ത മെമ്മറിയുടെ ഒരു വകഭേദമാണ്. ഇവിടെ, ഒരു SMP സ്കീം വഴി ബന്ധിപ്പിച്ചിരിക്കുന്ന ഒന്നോ അതിലധികമോ പ്രൊസസറുകൾ അടങ്ങുന്ന എല്ലാ നോഡുകളും ഒരു പൊതു വിലാസ ഇടം ഉപയോഗിക്കുന്നു. ഈ കോൺഫിഗറേഷനും ഡിസ്ട്രിബ്യൂട്ടഡ് മെമ്മറിയുള്ള ഒരു മെഷീനും തമ്മിലുള്ള വ്യത്യാസം, ഇവിടെ ഏത് പ്രോസസ്സറിനും മെമ്മറിയുടെ ഏത് ഭാഗവും ആക്സസ് ചെയ്യാൻ കഴിയും എന്നതാണ്. എന്നിരുന്നാലും, ക്ലസ്റ്ററിൽ ഫിസിക്കൽ ആയി എവിടെയാണ് സെക്ഷൻ സ്ഥിതിചെയ്യുന്നത് എന്നതിനെ ആശ്രയിച്ച് ഓരോ പ്രോസസറിനും വ്യത്യസ്ത മെമ്മറി വിഭാഗങ്ങൾക്കുള്ള ആക്സസ് സമയം വ്യത്യാസപ്പെടുന്നു. ഇക്കാരണത്താൽ, അത്തരം കോൺഫിഗറേഷനുകളെ നോൺ-യൂണിഫോം മെമ്മറി ആക്സസ് (NUMA) ഉള്ള മെഷീനുകൾ എന്നും വിളിക്കുന്നു. എംപിഐയും പിവിഎമ്മും തമ്മിലുള്ള വ്യത്യാസങ്ങൾ. പിവിഎം (പാരലൽ വെർച്വൽ മെഷീൻ) സിസ്റ്റം സൃഷ്ടിച്ചത് നിരവധി നെറ്റ്വർക്കുചെയ്ത വർക്ക്സ്റ്റേഷനുകളെ ഒരൊറ്റ വെർച്വൽ പാരലൽ കമ്പ്യൂട്ടിംഗ് മെഷീനായി സംയോജിപ്പിക്കാനാണ്. ഈ സിസ്റ്റം UNIX ഓപ്പറേറ്റിംഗ് സിസ്റ്റത്തിലേക്കുള്ള ഒരു ആഡ്-ഓൺ ആണ്, കൂടാതെ വൻതോതിൽ സമാന്തര സിസ്റ്റങ്ങൾ ഉൾപ്പെടെ വിവിധ ഹാർഡ്വെയർ പ്ലാറ്റ്ഫോമുകളിൽ ഇത് ഉപയോഗിക്കുന്നു. ഇന്നത്തെ ഏറ്റവും സാധാരണമായ സമാന്തര പ്രോഗ്രാമിംഗ് സിസ്റ്റങ്ങൾ MPI (മെസേജ് പാഴ്സിംഗ് ഇന്റർഫേസ്) അടിസ്ഥാനമാക്കിയുള്ളതാണ്. എംപിഐയുടെ ആശയം തുടക്കത്തിൽ ലളിതവും വ്യക്തവുമാണ്. ആശയവിനിമയ നടപടിക്രമങ്ങൾ ഉപയോഗിച്ച് ഡാറ്റാ കൈമാറ്റം നിർവ്വഹിക്കുമ്പോൾ പരസ്പരം ഇടപഴകുന്ന സമാന്തര എക്സിക്യൂട്ടിംഗ് പ്രക്രിയകളുടെ ഒരു കൂട്ടമായി ഒരു സമാന്തര പ്രോഗ്രാമിനെ പ്രതിനിധീകരിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു. അവർ എംപിഐ ലൈബ്രറി ഉണ്ടാക്കുന്നു. എന്നിരുന്നാലും, ഇന്റർപ്രോസസർ കമ്മ്യൂണിക്കേഷനുകളെ പിന്തുണയ്ക്കുന്നതിന് MPI ശരിയായി നടപ്പിലാക്കുന്നത് വളരെ ബുദ്ധിമുട്ടാണെന്ന് തെളിയിക്കപ്പെട്ടിട്ടുണ്ട്. ഈ സങ്കീർണ്ണത ഉയർന്ന പ്രോഗ്രാം പ്രകടനം നേടേണ്ടതിന്റെ ആവശ്യകതയുമായി ബന്ധപ്പെട്ടിരിക്കുന്നു, നിരവധി മൾട്ടികമ്പ്യൂട്ടർ ഉറവിടങ്ങൾ ഉപയോഗിക്കേണ്ടതിന്റെ ആവശ്യകത, അതിന്റെ ഫലമായി, ഡാറ്റാ പ്രോസസ്സിംഗ് മോഡിനെ ആശ്രയിച്ച് ആശയവിനിമയ നടപടിക്രമങ്ങൾ നടപ്പിലാക്കുന്നതിൽ ഒരു വലിയ വൈവിധ്യം. എംപിഐ എങ്ങനെ ഇൻസ്റ്റാൾ ചെയ്യാമെന്നും വിഷ്വൽ സ്റ്റുഡിയോയിലേക്ക് കണക്റ്റുചെയ്യാമെന്നും തുടർന്ന് നിർദ്ദിഷ്ട പാരാമീറ്ററുകൾ (കമ്പ്യൂട്ട് നോഡുകളുടെ എണ്ണം) ഉപയോഗിച്ച് എങ്ങനെ ഉപയോഗിക്കാമെന്നും ഈ കുറിപ്പ് കാണിക്കുന്നു. ഈ ലേഖനം വിഷ്വൽ സ്റ്റുഡിയോ 2015 ഉപയോഗിക്കുന്നു, കാരണം... ഇതാണ് എന്റെ വിദ്യാർത്ഥികൾക്ക് പ്രശ്നങ്ങളുണ്ടായത് (ഈ കുറിപ്പ് വിദ്യാർത്ഥികൾക്കായി എഴുതിയതാണ്), എന്നാൽ നിർദ്ദേശങ്ങൾ മറ്റ് പതിപ്പുകൾക്കും പ്രവർത്തിക്കും. ഘട്ടം 1: ഘട്ടം 2: “C:\Program Files\Microsoft HPC Pack 2008 SDK\ഉൾക്കൊള്ളുക” ലൈബ്രറി ഡയറക്ടറി ഫീൽഡിൽ: "C:\Program Files\Microsoft HPC Pack 2008 SDK\Lib\amd64" ലൈബ്രറി ഫീൽഡിൽ, 32-ബിറ്റ് പതിപ്പ് ഉണ്ടെങ്കിൽ, amd64-ന് പകരം i386 നൽകേണ്ടതുണ്ട്. Msmpi.lib : ഘട്ടം 3: ലോഞ്ച് കോൺഫിഗർ ചെയ്യുന്നതിന്, നിങ്ങൾ ഡീബഗ്ഗിംഗ് ടാബിലേക്ക് പോയി കമാൻഡ് ഫീൽഡിൽ വ്യക്തമാക്കേണ്ടതുണ്ട്: “C:\Program Files\Microsoft HPC Pack 2008 SDK\Bin\mpiexec.exe” കമാൻഡ് ആർഗ്യുമെന്റ് ഫീൽഡിൽ, വ്യക്തമാക്കുക, ഉദാഹരണത്തിന്, N 4 $(ടാർഗെറ്റ്പാത്ത്) നമ്പർ 4 പ്രക്രിയകളുടെ എണ്ണം സൂചിപ്പിക്കുന്നു. പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിന് നിങ്ങൾ ലൈബ്രറി ബന്ധിപ്പിക്കേണ്ടതുണ്ട് പദ്ധതിയിലേക്കുള്ള പാതയിൽ സിറിലിക് അടങ്ങിയിരിക്കരുത്. പിശകുകൾ സംഭവിക്കുകയാണെങ്കിൽ, നിങ്ങൾക്ക് Microsoft വെബ്സൈറ്റിൽ ലഭ്യമായ Microsoft MPI ഉപയോഗിക്കാം. ഇത് ചെയ്യുന്നതിന്, ഇൻസ്റ്റാളേഷന് ശേഷം, ഡീബഗ്ഗിംഗ് ടാബിന്റെ കമാൻഡ് ഫീൽഡിൽ പാത്ത് നൽകുക: “C:\Program Files\Microsoft MPI\Bin\mpiexec.exe” കൂടാതെ, പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിന് മുമ്പ്, അതിന്റെ ബിറ്റ് ഡെപ്ത് സൂചിപ്പിക്കാൻ മറക്കരുത്: MPI ഉപയോഗിച്ച് ഒരു പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിനുള്ള ഉദാഹരണം: #ഉൾപ്പെടുന്നു 2 നോഡുകളിൽ പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നു: സി ഭാഷയിൽ സമാന്തരവൽക്കരണം ഉദാഹരണം 5a. സി ഭാഷയിൽ രണ്ട് പ്രക്രിയകൾക്കിടയിൽ സന്ദേശങ്ങളുടെ കൈമാറ്റം ഉദാഹരണം 11a. C-യിലെ നോൺ-ബ്ലോക്കിംഗ് ഓപ്പറേഷനുകൾ ഉപയോഗിച്ച് ഒരു റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക ഉദാഹരണം 14a. സി ഭാഷയിലെ ഡിഫർഡ് ക്വറികൾ ഉപയോഗിച്ച് റിംഗ് ടോപ്പോളജി സഹിതം എക്സ്ചേഞ്ച് ചെയ്യുന്ന ഒരു ആവർത്തന രീതിയുടെ സ്കീം ഉദാഹരണം 15a. സി ഭാഷയിൽ MPI_Sendrecv നടപടിക്രമം ഉപയോഗിച്ച് ഒരു റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക ഉദാഹരണം 16a. സി ഭാഷയിൽ മോഡലിംഗ് ബാരിയർ സിൻക്രൊണൈസേഷൻ ഉദാഹരണം 17a. ഒരു ഇരട്ടിപ്പിക്കൽ സ്കീമും C ഭാഷയിൽ MPI_Reduce എന്ന കൂട്ടായ പ്രവർത്തനവും ഉപയോഗിച്ച് ആഗോള സംഗ്രഹം മാതൃകയാക്കുന്നു ഉദാഹരണം 18a. സി ഭാഷയിൽ ഇഷ്ടാനുസൃത ആഗോള പ്രവർത്തനം ഉദാഹരണം 19a. സി ഭാഷയിൽ ഗ്രൂപ്പുകളുമായി പ്രവർത്തിക്കുന്നു ഉദാഹരണം 20a. സിയിലെ ഒരു ആശയവിനിമയം തകർക്കുന്നു ഉദാഹരണം 22a. സി ഭാഷയിൽ ഒരു ഇന്റർകമ്മ്യൂണിക്കേറ്റർ ഉപയോഗിക്കുന്ന മാസ്റ്റർ-വർക്കർ സ്കീം ഉദാഹരണം 23a. സി ഭാഷയിൽ ഗ്രാഫ് ടോപ്പോളജി ഉപയോഗിക്കുന്ന മാസ്റ്റർ-വർക്കർ ഡയഗ്രം ഉദാഹരണം 24a. സി ഭാഷയിൽ മാട്രിക്സ് നിരകൾ വിപരീത ക്രമത്തിൽ പുനഃക്രമീകരിക്കുന്നു ഉദാഹരണം 25a. സി ഭാഷയിൽ പാക്ക് ചെയ്ത ഡാറ്റ അയയ്ക്കുന്നു മാസ്റ്റർ.സി server.c ഉദാഹരണം 28a ഉദാഹരണം 31a. C ഭാഷയിലുള്ള ഒരു ഫയലിൽ നിന്ന് ബഫർ ചെയ്ത വായന ഉദാഹരണം 33a. സി ഭാഷയിൽ കൈകാര്യം ചെയ്യുന്നതിൽ പിശക് ഉദാഹരണം 34a. സിയിലെ സോപാധിക സമാഹാരം ഉദാഹരണം 35a. സിയിലെ സിസ്റ്റം ടൈമറുകളിൽ പ്രവർത്തിക്കുന്നു ഉദാഹരണം 36a. സി ഭാഷയിൽ സമാന്തര മേഖല ഉദാഹരണം 38a. സി ഭാഷയിൽ Omp_set_num_threads നടപടിക്രമവും num_threads ഓപ്ഷനും ഉദാഹരണം 42a. സി ഭാഷയിൽ സിംഗിൾ ഡയറക്ടീവും Nowait ഓപ്ഷനും ഉദാഹരണം 44a. സി ഭാഷയിൽ മാസ്റ്റർ നിർദ്ദേശം ഉദാഹരണം 45a. സി ഭാഷയിൽ സ്വകാര്യ ഓപ്ഷൻ ഉദാഹരണം 50a. സി ഭാഷയിൽ omp_get_num_threads ഉം omp_get_thread_num ഉം നടപടിക്രമങ്ങൾ ഉദാഹരണം 51a. സി ഭാഷയിലുള്ള നിർദ്ദേശത്തിനായി വിതരണം ചെയ്ത മെമ്മറിയുള്ള സമാന്തര സിസ്റ്റങ്ങൾക്കുള്ള ഏറ്റവും സാധാരണമായ പ്രോഗ്രാമിംഗ് സാങ്കേതികവിദ്യ നിലവിൽ MPI (മെസേജ് പാസിംഗ് ഇന്റർഫേസ്) ആണ്. അത്തരം സിസ്റ്റങ്ങളിൽ സമാന്തര പ്രക്രിയകൾ പരസ്പരം ഇടപഴകുന്ന പ്രധാന മാർഗം സന്ദേശം കൈമാറുക എന്നതാണ്. അടിസ്ഥാനപരമായി, സി അല്ലെങ്കിൽ ഫോർട്രാനിലെ സമാന്തര പ്രോഗ്രാമുകൾക്കായുള്ള ഒരു ലൈബ്രറിയും നിർവ്വഹണ അന്തരീക്ഷവുമാണ് MPI. ഈ ട്യൂട്ടോറിയൽ സി ഭാഷയിലുള്ള പ്രോഗ്രാമുകളുടെ ഉദാഹരണങ്ങൾ വിവരിക്കും. തുടക്കത്തിൽ, MIMD (മൾട്ടിപ്പിൾ ഇൻസ്ട്രക്ഷൻ മൾട്ടിപ്പിൾ ഡാറ്റ) പ്രോഗ്രാമിംഗ് മോഡൽ ഉപയോഗിക്കാൻ MPI അനുവദിക്കുന്നു - നിർദ്ദേശങ്ങളുടെയും ഡാറ്റയുടെയും നിരവധി സ്ട്രീമുകൾ, അതായത്. വ്യത്യസ്ത ഡാറ്റയുമായി വ്യത്യസ്ത പ്രോഗ്രാമുകൾ സംയോജിപ്പിക്കുന്നു. എന്നാൽ പ്രായോഗികമായി അത്തരമൊരു മോഡലിനായുള്ള പ്രോഗ്രാമിംഗ് വളരെ സങ്കീർണ്ണമായി മാറുന്നു, അതിനാൽ SIMD (സിംഗിൾ പ്രോഗ്രാം മൾട്ടിപ്പിൾ ഡാറ്റ) മോഡൽ സാധാരണയായി ഉപയോഗിക്കുന്നു - ഒരു പ്രോഗ്രാമും നിരവധി ഡാറ്റ സ്ട്രീമുകളും. ഇവിടെ, ഒരു സമാന്തര പ്രോഗ്രാം അതിന്റെ വിവിധ ഭാഗങ്ങൾക്ക് ഒരേസമയം ചുമതലയുടെ ഭാഗം നിർവഹിക്കാൻ കഴിയുന്ന തരത്തിൽ എഴുതിയിരിക്കുന്നു, അങ്ങനെ സമാന്തരത കൈവരിക്കുന്നു. എല്ലാ MPI ഫംഗ്ഷനുകളും ലൈബ്രറിയിൽ അടങ്ങിയിരിക്കുന്നതിനാൽ, ഒരു സമാന്തര പ്രോഗ്രാം കംപൈൽ ചെയ്യുമ്പോൾ, അനുബന്ധ മൊഡ്യൂളുകൾ ലിങ്ക് ചെയ്യേണ്ടത് ആവശ്യമാണ്. MPI-യിൽ, ഒരേസമയം നടപ്പിലാക്കുന്ന പ്രക്രിയകളുടെ ഒരു കൂട്ടമായാണ് സമാന്തര പ്രോഗ്രാമിനെ നിർവചിച്ചിരിക്കുന്നത്. വ്യത്യസ്ത പ്രോസസറുകളിൽ പ്രോസസ്സുകൾ എക്സിക്യൂട്ട് ചെയ്യാൻ കഴിയും, എന്നാൽ ഒരേ പ്രോസസറിൽ നിരവധി പ്രോസസ്സുകൾ സ്ഥാപിക്കാനും കഴിയും (ഈ സാഹചര്യത്തിൽ, അവ സമയ-പങ്കിടൽ മോഡിൽ നടപ്പിലാക്കുന്നു). ഒരു ക്ലസ്റ്ററിൽ ഒരു MPI പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുമ്പോൾ, അതിന്റെ ഓരോ നോഡുകളും പ്രോഗ്രാമിന്റെ സ്വന്തം പകർപ്പ് പ്രവർത്തിപ്പിക്കുകയും ടാസ്ക്കിന്റെ സ്വന്തം ഭാഗം നിർവ്വഹിക്കുകയും ചെയ്യുന്നു, ഒരു സമാന്തര പ്രോഗ്രാം എന്നത് ഒരു കൂട്ടം സംവേദന പ്രക്രിയകളാണ്, അവ ഓരോന്നും സ്വന്തമായി പ്രവർത്തിക്കുന്നു. വിലാസ സ്ഥലം. അങ്ങേയറ്റത്തെ സാഹചര്യത്തിൽ, ഒരു സമാന്തര പ്രോഗ്രാം എക്സിക്യൂട്ട് ചെയ്യാൻ ഒരൊറ്റ പ്രോസസ്സർ ഉപയോഗിക്കാം - ഒരു ചട്ടം പോലെ, സമാന്തര പ്രോഗ്രാമിന്റെ കൃത്യത പരിശോധിക്കാൻ ഈ രീതി ഉപയോഗിക്കുന്നു. എംപിഐ പ്രോഗ്രാം എക്സിക്യൂഷൻ എൻവയോൺമെന്റ് ഉപയോഗിച്ച് സമാന്തര പ്രോഗ്രാം സമാരംഭിക്കുന്ന സമയത്ത് പ്രോസസ്സുകളുടെ എണ്ണവും ഉപയോഗിച്ച പ്രോസസ്സറുകളുടെ എണ്ണവും നിർണ്ണയിക്കപ്പെടുന്നു, കൂടാതെ കണക്കുകൂട്ടൽ സമയത്ത് മാറ്റാൻ കഴിയില്ല. പ്രോഗ്രാമിന്റെ എല്ലാ പ്രക്രിയകളും 0 മുതൽ np-1 വരെ തുടർച്ചയായി അക്കമിട്ടിരിക്കുന്നു, ഇവിടെ np എന്നത് മൊത്തം പ്രക്രിയകളുടെ എണ്ണമാണ്. പ്രോസസ്സ് നമ്പറിനെ പ്രോസസ്സ് റാങ്ക് എന്ന് വിളിക്കുന്നു. സന്ദേശങ്ങൾ അയച്ചുകൊണ്ട് സമാന്തര പ്രക്രിയകൾ പരസ്പരം സംവദിക്കുന്നു. രണ്ട് തരത്തിലുള്ള അയയ്ക്കൽ രീതികളുണ്ട് (അവയെ ആശയവിനിമയങ്ങൾ എന്ന് വിളിക്കുന്നു) - കൂട്ടായതും പോയിന്റ്-ടു-പോയിന്റും. കൂട്ടായ ആശയവിനിമയത്തിലൂടെ, ഒരു പ്രക്രിയ മുഴുവൻ പ്രക്രിയകളിലേക്കും ഒരേസമയം ആവശ്യമായ വിവരങ്ങൾ അയയ്ക്കുന്നു; ഒരു കൂട്ടം പ്രക്രിയകൾക്കുള്ളിൽ, ഓരോ പ്രക്രിയയിൽ നിന്നും ഓരോന്നിലേക്കും വിവരങ്ങൾ കൈമാറുമ്പോൾ കൂടുതൽ പൊതുവായ ഒരു സാഹചര്യവുമുണ്ട്. ലളിതമായ ആശയവിനിമയങ്ങൾ പോയിന്റ്-ടു-പോയിന്റ് ആശയവിനിമയങ്ങളാണ്, അവിടെ ഒരു പ്രക്രിയ മറ്റൊന്നിലേക്ക് വിവരങ്ങൾ അയയ്ക്കുന്നു അല്ലെങ്കിൽ അവ രണ്ടും വിവരങ്ങൾ കൈമാറുന്നു. ആശയവിനിമയ പ്രവർത്തനങ്ങളാണ് MPI ലൈബ്രറിയുടെ പ്രധാന പ്രവർത്തനങ്ങൾ. കൂടാതെ, ആവശ്യമായ പ്രവർത്തനങ്ങൾ MPI ഇനീഷ്യലൈസേഷൻ, ടെർമിനേഷൻ ഫംഗ്ഷനുകൾ - MPI_Init, MPI_Finalize എന്നിവയാണ്. പ്രോഗ്രാമുകളുടെ തുടക്കത്തിൽ തന്നെ MPI_Init വിളിക്കണം, അവസാനം MPI_Finalize ചെയ്യണം. ഈ രണ്ട് ഫംഗ്ഷനുകൾക്കിടയിൽ മറ്റെല്ലാ MPI ഫംഗ്ഷനുകളും വിളിക്കേണ്ടതാണ്. കണക്കുകൂട്ടലിന്റെ ഏത് ഭാഗമാണ് ചെയ്യേണ്ടതെന്ന് ഒരു പ്രോസസ്സ് എങ്ങനെ അറിയും? ക്ലസ്റ്ററിൽ പ്രവർത്തിക്കുന്ന ഓരോ പ്രക്രിയയ്ക്കും അതിന്റേതായ അദ്വിതീയ സംഖ്യയുണ്ട് - റാങ്ക്. ഒരു പ്രോസസ്സ് അതിന്റെ റാങ്കും മൊത്തം പ്രക്രിയകളുടെ എണ്ണവും അറിഞ്ഞുകഴിഞ്ഞാൽ, അതിന് ജോലിയുടെ പങ്ക് നിർണ്ണയിക്കാനാകും. ഈ ആവശ്യത്തിനായി, MPI - MPI_Comm_rank, MPI_Comm_size എന്നിവയിൽ പ്രത്യേക ഫംഗ്ഷനുകളുണ്ട്. MPI_Comm_rank അത് വിളിക്കുന്ന പ്രക്രിയയുടെ ഒരു പൂർണ്ണസംഖ്യ നൽകുന്നു, കൂടാതെ MPI_Comm_size പ്രവർത്തിക്കുന്ന പ്രക്രിയകളുടെ ആകെ എണ്ണം നൽകുന്നു. സമാന്തര ഉപയോക്തൃ പ്രോഗ്രാമിന്റെ ഡീബഗ്ഗ് ചെയ്യുന്ന പ്രക്രിയകൾ ഗ്രൂപ്പുകളായി സംയോജിപ്പിച്ചിരിക്കുന്നു. MPI-യിൽ, ഡാറ്റാ ട്രാൻസ്ഫർ പ്രവർത്തനങ്ങൾ നടത്തുമ്പോൾ ഉപയോഗിക്കുന്ന ഒരു കൂട്ടം പ്രക്രിയകളും നിരവധി അധിക പാരാമീറ്ററുകളും (സന്ദർഭം) സംയോജിപ്പിക്കുന്ന ഒരു പ്രത്യേകമായി സൃഷ്ടിച്ച സേവന ഒബ്ജക്റ്റായി ഒരു കമ്മ്യൂണിക്കേഷൻ മനസ്സിലാക്കുന്നു. പ്രോഗ്രാം ആരംഭിക്കുമ്പോൾ സ്വയമേവ സൃഷ്ടിക്കുന്ന ഒരു കമ്മ്യൂണിക്കേറ്ററിനെ, ക്ലസ്റ്ററിലെ എല്ലാ പ്രക്രിയകളും ഉൾക്കൊള്ളുന്നതിനെ MPI_COMM_WORLD എന്ന് വിളിക്കുന്നു. കണക്കുകൂട്ടലുകൾക്കിടയിൽ, പുതിയ പ്രോസസ് ഗ്രൂപ്പുകളും കമ്മ്യൂണിക്കേറ്ററുകളും സൃഷ്ടിക്കാനും നിലവിലുള്ള പ്രോസസ് ഗ്രൂപ്പുകളും ആശയവിനിമയങ്ങളും ഇല്ലാതാക്കാനും കഴിയും. ഒരേ പ്രക്രിയ വ്യത്യസ്ത ഗ്രൂപ്പുകൾക്കും ആശയവിനിമയക്കാർക്കും ഉൾപ്പെടാം. എല്ലാ ആശയവിനിമയ പ്രക്രിയകൾക്കും കൂട്ടായ പ്രവർത്തനങ്ങൾ ഒരേസമയം പ്രയോഗിക്കുന്നു, അതിനാൽ അവയ്ക്ക് പരാമീറ്ററുകളിലൊന്ന് എല്ലായ്പ്പോഴും ആശയവിനിമയമായിരിക്കും. MPI ഫംഗ്ഷനുകളിൽ സന്ദേശം കൈമാറുന്ന പ്രവർത്തനങ്ങൾ നടത്തുമ്പോൾ, അയയ്ക്കുന്ന ഡാറ്റയുടെ തരം വ്യക്തമാക്കേണ്ടത് ആവശ്യമാണ്. സി ഭാഷയുടെ സ്റ്റാൻഡേർഡ് ഡാറ്റാ തരങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ള അടിസ്ഥാന ഡാറ്റാ തരങ്ങളുടെ ഒരു വലിയ സെറ്റ് MPI-ൽ അടങ്ങിയിരിക്കുന്നു. കൂടാതെ, പ്രത്യേക MPI ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് പ്രോഗ്രാമർക്ക് സ്വന്തം ഡാറ്റ തരങ്ങൾ നിർമ്മിക്കാൻ കഴിയും. അടിസ്ഥാന ഡാറ്റ തരങ്ങൾക്കായുള്ള ഒരു മാപ്പിംഗ് പട്ടിക ചുവടെയുണ്ട്. MPI ലൈബ്രറി സമാരംഭിക്കുന്നതിനുള്ള ഉദാഹരണം: ലോഗിൻ വിദ്യാർത്ഥി, പാസ്വേഡ് s304. #ഉൾപ്പെടുന്നു #ഉൾപ്പെടുന്നു int main (int argc, char *argv) /* MPI സമാരംഭം */ MPI_Init(&argc, &argv); /* പ്രോസസ്സ് റാങ്ക് നേടുന്നു */ MPI_Comm_rank (MPI_COMM_WORLD, &rank); /* മൊത്തം പ്രക്രിയകളുടെ എണ്ണം നേടുക */ MPI_Comm_size (MPI_COMM_WORLD, &size); printf("%d ന്റെ %d പ്രക്രിയയിൽ നിന്നുള്ള ഹലോ വേൾഡ്\n", റാങ്ക്, വലുപ്പം); /* പൂർണ്ണമായ MPI */ സമാഹാരത്തിനായി ഒരു കംപൈലറും ലിങ്കറും ഉപയോഗിക്കുന്നു. കമാൻഡ് ലൈൻ mpicc.
(mpicc കാണുക...- സഹായം) ഓരോ പ്രവർത്തിക്കുന്ന പ്രക്രിയയും അതിന്റെ റാങ്കും മൊത്തം പ്രക്രിയകളുടെ എണ്ണവും പ്രദർശിപ്പിക്കണം. ഈ പ്രോഗ്രാം കംപൈൽ ചെയ്ത് പ്രവർത്തിപ്പിക്കാൻ ശ്രമിക്കാം. $ mpicc hello.c –o hello.o $ mpicc hello.o –o ഹലോ ഹലോ ഫയൽ എക്സിക്യൂട്ടബിൾ ഫയലായിരിക്കും. നിങ്ങൾക്ക് ഇത് ഒരു മെഷീനിൽ പ്രവർത്തിപ്പിക്കാനും പ്രോസസ്സറുകളുടെ എണ്ണം 1 ന് തുല്യമാണെന്നും പ്രോസസ്സ് റാങ്ക് 0 ആയിരിക്കുമെന്നും കാണാൻ കഴിയും: $./ഹലോ ഹലോ വേൾഡ് പ്രോസസ് 0-ൽ നിന്ന് 1 ഒരു സെർവറിൽ പ്രവർത്തിക്കുമ്പോൾ, ആരംഭിക്കാൻ കമാൻഡ് ഉപയോഗിക്കുന്നു എംപിരുൺ
. ഇതിന് രണ്ട് പ്രധാന ആർഗ്യുമെന്റുകളുണ്ട് - നോഡ് വിലാസങ്ങൾ അടങ്ങിയ ഫയലിന്റെ പേരും പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്ന നോഡുകളുടെ എണ്ണവും. $ mpirun n0-6 –v ഹോസ്റ്റുകൾ ഹലോ പ്രോസസ് 0-ൽ 7-ൽ നിന്ന് ഹലോ വേൾഡ് ഹലോ വേൾഡ് പ്രോസസ് 3 / 7 ൽ നിന്ന് 7-ൽ 5-ൽ നിന്നുള്ള ഹലോ വേൾഡ് ഹലോ വേൾഡ് പ്രോസസ് 4-ൽ നിന്ന് 7 ഹലോ വേൾഡ് പ്രോസസ് 2-ൽ 7 ഹലോ വേൾഡ് പ്രോസസ് 6 / 7 ൽ നിന്ന് 7-ൽ 1 പ്രോസസ് മുതൽ ഹലോ വേൾഡ് പ്രോഗ്രാം 7 നോഡുകളിൽ പ്രവർത്തിക്കും (സെർവർ ഉൾപ്പെടെ), ഈ നോഡുകളുടെ വിലാസങ്ങൾ ഹോസ്റ്റ് ഫയൽ.സ്ക്രീനിലേക്ക് പ്രിന്റുചെയ്യുന്നത് അവയുടെ റാങ്കുകൾക്ക് പുറത്തുള്ള പ്രക്രിയകളിലൂടെയാണ്. പ്രോസസുകളുടെ റണ്ണിംഗ് സിൻക്രൊണൈസ് ചെയ്യപ്പെടാത്തതാണ് ഇതിന് കാരണം, എന്നാൽ പ്രോസസ്സുകൾ സമന്വയിപ്പിക്കുന്നതിന് MPI-ക്ക് പ്രത്യേക പ്രവർത്തനങ്ങൾ ഉണ്ട്. ഏറ്റവും ലളിതമായ പ്രോഗ്രാമിൽ സന്ദേശ കൈമാറ്റ പ്രവർത്തനങ്ങൾ അടങ്ങിയിട്ടില്ല. യഥാർത്ഥ പ്രശ്നങ്ങളിൽ, പ്രക്രിയകൾ പരസ്പരം ഇടപെടേണ്ടതുണ്ട്. സ്വാഭാവികമായും, സന്ദേശങ്ങൾ കൈമാറുന്നതിനായി സമയം ചെലവഴിക്കുന്നു, ഇത് ചുമതലയുടെ സമാന്തരവൽക്കരണ ഗുണകം കുറയ്ക്കുന്നു. മെസേജ് ട്രാൻസ്ഫർ ഇന്റർഫേസിന്റെ ഉയർന്ന വേഗത (ഉദാഹരണത്തിന്, 10Mb/sec ഇഥർനെറ്റ്, ഗിഗാബിറ്റ് ഇഥർനെറ്റ്), ഡാറ്റാ ട്രാൻസ്ഫർ ചെലവ് കുറയും. കാരണം പ്രോസസ്സുകൾ തമ്മിലുള്ള ഡാറ്റാ കൈമാറ്റത്തിനുള്ള സമയം അതിന്റെ മെമ്മറിയിലേക്കുള്ള ആക്സസ് സമയത്തേക്കാൾ വളരെ കൂടുതലാണ് (മാഗ്നിറ്റ്യൂഡ് ഓർഡറുകൾ പ്രകാരം), പ്രോസസ്സുകൾക്കിടയിലുള്ള ജോലിയുടെ വിതരണം 'നാടൻ-ധാന്യം' ആയിരിക്കണം, കൂടാതെ അനാവശ്യ ഡാറ്റാ കൈമാറ്റങ്ങൾ ഒഴിവാക്കുകയും വേണം. സംഖ്യാ വിശകലനത്തിന്റെ പ്രശ്നങ്ങൾക്കിടയിൽ, സമാന്തരവൽക്കരണം വ്യക്തമാകുന്ന നിരവധി പ്രശ്നങ്ങളുണ്ട്. ഉദാഹരണത്തിന്, സംഖ്യാ സംയോജനം യഥാർത്ഥത്തിൽ ഇന്റഗ്രാൻഡ് ഫംഗ്ഷന്റെ (നിരവധി) കണക്കുകൂട്ടലുകളിലേക്ക് വരുന്നു (ഇത് സ്വാഭാവികമായും വ്യക്തിഗത പ്രക്രിയകളെ ഏൽപ്പിച്ചിരിക്കുന്നു), പ്രധാന പ്രക്രിയ കണക്കുകൂട്ടൽ പ്രക്രിയയെ നിയന്ത്രിക്കുന്നു (പ്രക്രിയകൾക്കിടയിൽ സംയോജന പോയിന്റുകൾ വിതരണം ചെയ്യുന്നതിനുള്ള തന്ത്രം നിർണ്ണയിക്കുകയും ഭാഗിക തുകകൾ ശേഖരിക്കുകയും ചെയ്യുന്നു) . ഒരു ലീനിയർ ലിസ്റ്റിൽ തിരയുന്നതിലും അടുക്കുന്നതിലും ഉള്ള പ്രശ്നങ്ങൾ, ഫംഗ്ഷനുകളുടെ വേരുകൾ സംഖ്യാപരമായി കണ്ടെത്തൽ, നിരവധി വേരിയബിളുകളുടെ ഒരു ഫംഗ്ഷന്റെ എക്സ്ട്രീമ തിരയൽ, സീരീസ് കണക്കാക്കൽ, മറ്റുള്ളവയ്ക്ക് സമാനമായ സമാന്തരവൽക്കരണം എന്നിവയുണ്ട്. ഈ ലാബിൽ π കണക്കാക്കുന്നതിനുള്ള രണ്ട് സമാന്തര അൽഗോരിതങ്ങൾ ഞങ്ങൾ പരിശോധിക്കും. സംഖ്യാ സംയോജന രീതി ഉപയോഗിച്ച് π എന്ന സംഖ്യയുടെ കണക്കുകൂട്ടൽ എന്നാണ് അറിയുന്നത് ഇന്റഗ്രലിന്റെ കണക്കുകൂട്ടൽ ഒരു പരിമിതമായ സംഗ്രഹം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നു, നമുക്കുണ്ട് വ്യക്തമായും, ഓരോ പ്രക്രിയയും അതിന്റെ ഭാഗിക തുക കണക്കാക്കുകയും കണക്കുകൂട്ടലിന്റെ ഫലം പ്രധാന പ്രക്രിയയിലേക്ക് കൈമാറുകയും ചെയ്താൽ ഈ പ്രശ്നം സമാന്തരമാക്കുന്നത് എളുപ്പമാണ്. ഇവിടെ ആവർത്തിച്ചുള്ള കണക്കുകൂട്ടലുകൾ എനിക്ക് എങ്ങനെ ഒഴിവാക്കാനാകും? പ്രക്രിയ അതിന്റെ റാങ്ക്, മൊത്തം പ്രക്രിയകളുടെ എണ്ണം, സെഗ്മെന്റ് വിഭജിക്കപ്പെടുന്ന ഇടവേളകളുടെ എണ്ണം (കൂടുതൽ ഇടവേളകൾ, ഉയർന്ന കൃത്യത) എന്നിവ അറിഞ്ഞിരിക്കണം. തുടർന്ന്, 1 മുതൽ ഇടവേളകളുടെ എണ്ണം വരെയുള്ള ഒരു സൈക്കിളിൽ, പ്രക്രിയ i-th ഇടവേളയിലെ സ്ട്രിപ്പിന്റെ വിസ്തീർണ്ണം കണക്കാക്കും, തുടർന്ന് അടുത്ത i+1 ഇടവേളയിലേക്കല്ല, i+m ഇടവേളയിലേക്ക് നീങ്ങും. , ഇവിടെ m എന്നത് പ്രക്രിയകളുടെ എണ്ണം. നമുക്ക് ഇതിനകം അറിയാവുന്നതുപോലെ, പ്രക്രിയകളുടെ റാങ്കും ആകെ എണ്ണവും ലഭിക്കുന്നതിന് ഫംഗ്ഷനുകൾ ഉണ്ട് MPI_Comm_rank
ഒപ്പം MPI_Comm_size
. കണക്കുകൂട്ടലുകൾ ആരംഭിക്കുന്നതിന് മുമ്പ്, പ്രധാന പ്രക്രിയ മറ്റെല്ലാവർക്കും ഇടവേളകളുടെ എണ്ണം കൈമാറണം, കണക്കുകൂട്ടലുകൾക്ക് ശേഷം, അവയിൽ നിന്ന് ലഭിച്ച ഭാഗിക തുകകൾ ശേഖരിച്ച് സംഗ്രഹിക്കുക; MPI-യിൽ ഇത് സന്ദേശങ്ങൾ കൈമാറിയാണ് നടപ്പിലാക്കുന്നത്. സന്ദേശങ്ങൾ അയയ്ക്കുന്നതിന് ഇവിടെ കൂട്ടായ ഇടപെടൽ പ്രവർത്തനം ഉപയോഗിക്കുന്നത് സൗകര്യപ്രദമാണ് MPI_Bcast
, ഇത് ഒരു പ്രോസസ്സിൽ നിന്ന് മറ്റെല്ലാവരിലേക്കും ഒരേ ഡാറ്റ അയയ്ക്കുന്നു. ഭാഗിക തുകകൾ ശേഖരിക്കുന്നതിന് 2 ഓപ്ഷനുകൾ ഉണ്ട് - നിങ്ങൾക്ക് ഉപയോഗിക്കാം MPI_Gather
, ഇത് എല്ലാ പ്രക്രിയകളിൽ നിന്നും ഡാറ്റ ശേഖരിക്കുകയും ഒന്നിന് നൽകുകയും ചെയ്യുന്നു (m മൂലകങ്ങളുടെ ഒരു നിര ലഭിക്കുന്നു, ഇവിടെ m എന്നത് പ്രക്രിയകളുടെ എണ്ണം) അല്ലെങ്കിൽ MPI_Reduce
. MPI_Reduce
സമാനമായി പ്രവർത്തിക്കുന്നു MPI_Gather
- എല്ലാ പ്രക്രിയകളിൽ നിന്നും ഡാറ്റ ശേഖരിക്കുകയും അത് ഒന്നിന് നൽകുകയും ചെയ്യുന്നു, പക്ഷേ ഒരു അറേയുടെ രൂപത്തിലല്ല, ആദ്യം അറേയുടെ ഘടകങ്ങൾക്കിടയിൽ ഒരു നിശ്ചിത പ്രവർത്തനം നടത്തുന്നു, ഉദാഹരണത്തിന്, സംഗ്രഹം, തുടർന്ന് ഒരു ഘടകം നൽകുന്നു. ഈ ടാസ്ക്കിനായി ഇത് ഉപയോഗിക്കാൻ കൂടുതൽ സൗകര്യപ്രദമാണെന്ന് തോന്നുന്നു MPI_Reduce
. പ്രോഗ്രാമിന്റെ വാചകം ചുവടെ നൽകിയിരിക്കുന്നു #"mpi.h" ഉൾപ്പെടുത്തുക #ഉൾപ്പെടുന്നു #ഉൾപ്പെടുന്നു ഇരട്ട എഫ് (ഇരട്ട a) റിട്ടേൺ (4.0 / (1.0 + a*a)); int main(int argc, char *argv) int n, myid, numprocs, i; ഇരട്ട PI25DT = 3.141592653589793238462643; ഇരട്ട mypi, pi, h, sum, x; ഇരട്ട ആരംഭ സമയം, അവസാന സമയം; MPI_Init(&argc,&argv); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); MPI_Comm_rank(MPI_COMM_WORLD,&myid); ആരംഭസമയം = MPI_Wtime(); MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD); h = 1.0 / (ഇരട്ട) n; (i = myid + 1; i<= n; i += numprocs) x = h * ((ഇരട്ട) i - 0.5); MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); printf("pi ഏകദേശം %.16f ആണ്, പിശക് %.16f\n", പൈ, ഫാബ്സ് (പൈ - PI25DT)); endwtime = MPI_Wtime(); printf("വാൾ ക്ലോക്ക് സമയം = %f\n", endwtime-startwtime); ഫംഗ്ഷൻ കോളുകൾ നമുക്ക് സൂക്ഷ്മമായി പരിശോധിക്കാം MPI_Bcast
ഒപ്പം MPI_Reduce
: MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD) - റാങ്ക് 0 ഉള്ള ഒരു പ്രക്രിയയിൽ നിന്നുള്ള വേരിയബിളിന്റെ ഉള്ളടക്കങ്ങളും MPI_INT തരം MPI_INT യുടെ ഒരു ഘടകവും മറ്റെല്ലാ പ്രക്രിയകളിലേക്കും (MPI_COMM_WORLD - ആശയവിനിമയത്തിലെ എല്ലാ പ്രക്രിയകളും) ഒരേ വേരിയബിളിലേക്ക് അയയ്ക്കുന്നു. . ഈ കോളിന് ശേഷം, ഓരോ പ്രക്രിയയ്ക്കും ആകെ ഇടവേളകളുടെ എണ്ണം അറിയാം. കണക്കുകൂട്ടലുകളുടെ അവസാനം, MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD) തുകകൾ (MPI_SUM പാരാമീറ്റർ) ഓരോ പ്രോസസ്സിന്റെയും MPI_DOUBLE തരത്തിന്റെ mypi വേരിയബിളുകളിൽ നിന്നുള്ള മൂല്യങ്ങൾ പ്രോസസ്സ് ചെയ്യുകയും ഫലം എഴുതുകയും ചെയ്യുന്നു. റാങ്ക് 0 ഉള്ള വേരിയബിൾ pi. കണക്കുകൂട്ടൽ സമയം അളക്കുന്നതിന്, പ്രധാന പ്രക്രിയ MPI_Wtime ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു. ഇരട്ട MPI_Wtime(); MPI_Wtimeഫ്ലോട്ടിംഗ് പോയിന്റ് ഫോർമാറ്റിൽ സെക്കൻഡുകളുടെ എണ്ണം നൽകുന്നു, ഇത് പ്രോഗ്രാം ആരംഭിച്ചതിന് ശേഷം കടന്നുപോയ സമയത്തെ പ്രതിനിധീകരിക്കുന്നു. മോണ്ടെ കാർലോ രീതി ഉപയോഗിച്ച് നമ്പർ π കണക്കാക്കുന്നു π യുടെ മൂല്യം കണക്കാക്കാൻ, നിങ്ങൾക്ക് 'ഷൂട്ടിംഗ്' രീതി ഉപയോഗിക്കാം. ഈ കേസിൽ പ്രയോഗിക്കുമ്പോൾ, ഒരു ദ്വിമാന പ്രദേശത്ത് ഒരേപോലെ വിതരണം ചെയ്യുന്ന പോയിന്റുകൾ സൃഷ്ടിക്കുന്നതും നിർണ്ണയിക്കുന്നതും രീതി ഉൾക്കൊള്ളുന്നു. ഈ രീതിയിൽ കണക്കാക്കിയ π യുടെ മൂല്യം ഏകദേശമാണ്; പൊതുവേ, 'ഷോട്ടുകളുടെ' എണ്ണവും റാൻഡം നമ്പർ ജനറേറ്ററിന്റെ ഗുണനിലവാരവും അനുസരിച്ച് ആവശ്യമുള്ള മൂല്യം കണക്കാക്കുന്നതിന്റെ കൃത്യത വർദ്ധിക്കുന്നു; കൃത്യമായ ഒരു സംഖ്യാ കണക്ക് ഉണ്ടാക്കാൻ പ്രയാസമുള്ളപ്പോൾ സമാനമായ രീതികൾ ഉപയോഗിക്കുന്നു. ഈ രീതി ഉപയോഗിച്ച് നമ്പർ π കണക്കാക്കുന്നതിനുള്ള സമാന്തര അൽഗോരിതം ഞങ്ങൾ പരിഗണിച്ച മുൻ അൽഗോരിതത്തിന് സമാനമാണ്. ക്രമരഹിതമായ സംഖ്യകൾ സൃഷ്ടിക്കുന്നതിന്, നിങ്ങൾ സ്രാൻഡ് ഫംഗ്ഷൻ ഉപയോഗിക്കേണ്ടതുണ്ട്, ഇത് പ്രക്രിയയുടെ റാങ്ക് ഒരു ആർഗ്യുമെന്റായി (സീക്വൻസ് സീഡ്) സജ്ജമാക്കുന്നു, അങ്ങനെ ഓരോ പ്രക്രിയയ്ക്കും അതിന്റേതായ ക്രമം ഉണ്ടായിരിക്കും. #ഉൾപ്പെടുന്നു ശൂന്യമായ സ്രാൻഡ് (ഒപ്പ് ചെയ്യാത്ത വിത്ത്); srand() ഫംഗ്ഷൻ, rand() ഫംഗ്ഷൻ സൃഷ്ടിക്കുന്ന ക്രമത്തിന്റെ സീഡ് നമ്പർ സജ്ജമാക്കുന്നു. #ഉൾപ്പെടുന്നു int rand(അസാധു); റാൻഡ്() ഫംഗ്ഷൻ സ്യൂഡോറാൻഡം നമ്പറുകളുടെ ഒരു ശ്രേണി സൃഷ്ടിക്കുന്നു. ഓരോ തവണയും ഫംഗ്ഷൻ വിളിക്കുമ്പോൾ, പൂജ്യത്തിനും RAND_MAX മൂല്യത്തിനും ഇടയിലുള്ള ഒരു പൂർണ്ണസംഖ്യ നൽകും. ഇവിടെ ഫലം ശേഖരിക്കുന്നതിന്, ഒരു സമ്മേഷൻ ഓപ്പറേഷൻ (MPI_SUM) ഉപയോഗിച്ച് MPI_Reduce ഉപയോഗിക്കുന്നതും സൗകര്യപ്രദമാണ്, തുടർന്ന് ലഭിക്കുന്ന തുകയെ പ്രോസസ്സറുകളുടെ എണ്ണം കൊണ്ട് ഹരിക്കുക, ഗണിത ശരാശരി നേടുക. int MPI_Reduce(void* sendbuf, void* recvbuf, int count, MPI_Datatype ഡാറ്റാടൈപ്പ്, MPI_Op op, int root, MPI_Comm comm); ഓപ്ഷനുകൾ: അയയ്ക്കുന്ന ബഫറിന്റെ sendbuf വിലാസം സ്വീകരിക്കുന്ന ബഫറിന്റെ recvbuf വിലാസം ഒപ് റിഡക്ഷൻ ഓപ്പറേഷൻ com കമ്മ്യൂണിക്കേറ്റർ int MPI_Bcast(അസാധുവായ *ബഫർ, int കൗണ്ട്, MPI_Datatype ഡാറ്റാടൈപ്പ്, int റൂട്ട്, MPI_Comm comm); ഓപ്ഷനുകൾ: അയയ്ക്കുന്ന/സ്വീകരിക്കുന്ന ബഫറിന്റെ ബഫർ വിലാസം അയയ്ക്കുന്ന ബഫറിലെ മൂലകങ്ങളുടെ എണ്ണം (പൂർണ്ണസംഖ്യ) ബഫർ ഘടകങ്ങൾ അയയ്ക്കുന്നതിന്റെ ഡാറ്റാ ടൈപ്പ് ഡാറ്റ തരം റൂട്ട് പ്രധാന പ്രോസസ്സ് നമ്പർ (പൂർണ്ണസംഖ്യ) com കമ്മ്യൂണിക്കേറ്റർ വ്യായാമം ചെയ്യുക: ഓപ്ഷൻ നമ്പറിന് അനുസൃതമായി, നൽകിയിരിക്കുന്ന അൽഗോരിതം ഉപയോഗിച്ച് നമ്പർ π കണക്കാക്കുന്ന ഒരു സമാന്തര പ്രോഗ്രാം കംപൈൽ ചെയ്ത് പ്രവർത്തിപ്പിക്കുക. ഒരു നോഡിലും ഒരു ക്ലസ്റ്ററിൽ നിന്ന് ഒരു നിശ്ചിത എണ്ണം നോഡുകളിലും ഒരു ടാസ്ക് പ്രവർത്തിപ്പിക്കുക. നെറ്റ്വർക്ക് കാലതാമസം സൈദ്ധാന്തികമായും ജോലിയുടെ ഫലങ്ങളെ അടിസ്ഥാനമാക്കിയും കണക്കിലെടുത്ത് കണക്കുകൂട്ടൽ സമയം, കൃത്യത, അംദാൽ പാരലലൈസേഷൻ കോഫിഫിഷ്യന്റ് എന്നിവ വിലയിരുത്തുക. ടാസ്ക് ഓപ്ഷനുകൾ · പ്രശ്നത്തിന്റെ പ്രസ്താവന, ഓപ്ഷൻ. · അസൈൻമെന്റ് അനുസരിച്ച് സി ഭാഷയിൽ ഒരു സമാന്തര പ്രോഗ്രാമിന്റെ വാചകം. · ഒരു നോഡിൽ പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിന്റെ ഫലങ്ങൾ, എക്സിക്യൂഷൻ സമയം t i , കണക്കുകൂട്ടൽ ഫലം, പിശക്. സെർവറിൽ പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിന്റെ ഫലങ്ങൾ, എക്സിക്യൂഷൻ സമയം, കണക്കുകൂട്ടൽ ഫലങ്ങൾ, പിശക്. · സമാന്തര അൽഗോരിതം വിവരിക്കുക, പ്രോഗ്രാം എക്സിക്യൂഷൻ സമയത്തും നോഡ് കാഷെ മെമ്മറി ലോഡുചെയ്യുമ്പോഴും വിവരങ്ങൾ ഒഴുകുന്നു. പ്രോഗ്രാമിന്റെ ഫലങ്ങളെ അടിസ്ഥാനമാക്കി Amdahl കോഫിഫിഷ്യന്റ് - K j കണക്കാക്കുക. · ഒരു കൂട്ടം വിദ്യാർത്ഥികളുടെ ജോലിയുടെ ഫലങ്ങൾ കണക്കിലെടുത്ത്, കണക്കുകൂട്ടലുകളിൽ പങ്കെടുക്കുന്ന പ്രോസസ്സറുകളുടെ എണ്ണത്തിൽ K j, t i യുടെ ആശ്രിതത്വത്തിന്റെ ഒരു ഹിസ്റ്റോഗ്രാം നിർമ്മിക്കുക. ഇന്റൽ എംപിഐ ലൈബ്രറിയുടെ ഉദാഹരണം ഉപയോഗിച്ച് MPI ഉപയോഗിച്ച് ഡാറ്റാ കൈമാറ്റം സംഘടിപ്പിക്കുന്നതിനെക്കുറിച്ച് ഈ പോസ്റ്റിൽ നമ്മൾ സംസാരിക്കും. പ്രായോഗികമായി സമാന്തര ഉയർന്ന പ്രകടനമുള്ള കമ്പ്യൂട്ടിംഗ് മേഖലയുമായി പരിചയപ്പെടാൻ ആഗ്രഹിക്കുന്ന ആർക്കും ഈ വിവരങ്ങൾ താൽപ്പര്യമുള്ളതാണെന്ന് ഞങ്ങൾ കരുതുന്നു. MPI അടിസ്ഥാനമാക്കി സമാന്തര ആപ്ലിക്കേഷനുകളിൽ ഡാറ്റാ കൈമാറ്റം എങ്ങനെ സംഘടിപ്പിക്കപ്പെടുന്നു എന്നതിന്റെ ഒരു ഹ്രസ്വ വിവരണവും കൂടുതൽ വിശദമായ വിവരണത്തോടെ ബാഹ്യ ഉറവിടങ്ങളിലേക്കുള്ള ലിങ്കുകളും ഞങ്ങൾ നൽകും. പ്രായോഗിക ഭാഗത്ത്, "ഹലോ വേൾഡ്" MPI ഡെമോ ആപ്ലിക്കേഷൻ വികസിപ്പിക്കുന്നതിന്റെ എല്ലാ ഘട്ടങ്ങളുടെയും ഒരു വിവരണം നിങ്ങൾ കണ്ടെത്തും, ആവശ്യമായ അന്തരീക്ഷം സജ്ജീകരിക്കുന്നത് മുതൽ പ്രോഗ്രാം സമാരംഭിക്കുന്നത് വരെ. സമാന്തര പ്രോഗ്രാമിംഗിനുള്ള ഏറ്റവും സാധാരണമായ ഡാറ്റാ ഇന്റർഫേസ് സ്റ്റാൻഡേർഡാണ് MPI. MPI ഫോറം ആണ് MPI സ്റ്റാൻഡേർഡൈസേഷൻ നടത്തുന്നത്. മിക്ക ആധുനിക പ്ലാറ്റ്ഫോമുകൾക്കും ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങൾക്കും ഭാഷകൾക്കും MPI നടപ്പിലാക്കലുകൾ ഉണ്ട്. കമ്പ്യൂട്ടേഷണൽ ഫിസിക്സ്, ഫാർമസ്യൂട്ടിക്കൽസ്, മെറ്റീരിയൽ സയൻസ്, ജനിതകശാസ്ത്രം, വിജ്ഞാനത്തിന്റെ മറ്റ് മേഖലകൾ എന്നിവയിലെ വിവിധ പ്രശ്നങ്ങൾ പരിഹരിക്കുന്നതിന് MPI വ്യാപകമായി ഉപയോഗിക്കുന്നു. ഒരു MPI വീക്ഷണകോണിൽ, ഒരു സമാന്തര പ്രോഗ്രാം വ്യത്യസ്ത കമ്പ്യൂട്ടിംഗ് നോഡുകളിൽ പ്രവർത്തിക്കുന്ന പ്രക്രിയകളുടെ ഒരു കൂട്ടമാണ്. ഓരോ പ്രക്രിയയും ഒരേ പ്രോഗ്രാം കോഡിൽ നിന്നാണ്. എംപിഐയിലെ പ്രധാന പ്രവർത്തനം സന്ദേശം കൈമാറുക എന്നതാണ്. MPI മിക്കവാറും എല്ലാ അടിസ്ഥാന ആശയവിനിമയ പാറ്റേണുകളും നടപ്പിലാക്കുന്നു: പോയിന്റ്-ടു-പോയിന്റ്, കൂട്ടായതും ഏകപക്ഷീയവും. പ്രദർശനത്തിനായി, ഞാൻ Amazon Elastic Compute Cloud (Amazon EC2) സേവനം തിരഞ്ഞെടുത്തു. ആമസോൺ പുതിയ ഉപയോക്താക്കൾക്ക് എൻട്രി ലെവൽ സെർവറുകളുടെ സൗജന്യ ട്രയൽ വർഷം നൽകുന്നു. Amazon EC2-ൽ പ്രവർത്തിക്കുന്നത് അവബോധജന്യമാണ്. നിങ്ങൾക്ക് എന്തെങ്കിലും ചോദ്യങ്ങളുണ്ടെങ്കിൽ, വിശദമായ ഡോക്യുമെന്റേഷൻ (ഇംഗ്ലീഷിൽ) നിങ്ങൾക്ക് റഫർ ചെയ്യാം. വേണമെങ്കിൽ, നിങ്ങൾക്ക് സമാനമായ മറ്റേതെങ്കിലും സേവനം ഉപയോഗിക്കാം. ഞങ്ങൾ രണ്ട് പ്രവർത്തിക്കുന്ന വെർച്വൽ സെർവറുകൾ സൃഷ്ടിക്കുന്നു. മാനേജ്മെന്റ് കൺസോളിൽ തിരഞ്ഞെടുക്കുക ക്ലൗഡിലെ EC2 വെർച്വൽ സെർവറുകൾ, പിന്നെ ലോഞ്ച് ഇൻസ്റ്റൻസ്("ഉദാഹരണം" എന്നാൽ വെർച്വൽ സെർവർ ഉദാഹരണം എന്നാണ് അർത്ഥമാക്കുന്നത്). അടുത്ത ഘട്ടം ഓപ്പറേറ്റിംഗ് സിസ്റ്റം തിരഞ്ഞെടുക്കുക എന്നതാണ്. Intel MPI ലൈബ്രറി Linux, Windows എന്നിവയെ പിന്തുണയ്ക്കുന്നു. MPI-യുമായി ആദ്യമായി പരിചയപ്പെടാൻ, ഞങ്ങൾ OS Linux തിരഞ്ഞെടുക്കും. തിരഞ്ഞെടുക്കുക Red Hat Enterprise Linux 6.6 64-ബിറ്റ്അഥവാ SLES11.3/12.0. സേവനം റൺ ചെയ്യാൻ ഞങ്ങളെ പ്രേരിപ്പിച്ചതിന് ശേഷം സന്ദർഭങ്ങൾ സമാരംഭിക്കുക(കോൺഫിഗർ ചെയ്ത വെർച്വൽ സെർവറുകൾ), പുറത്ത് നിന്നുള്ള വെർച്വൽ സെർവറുകളുമായി ആശയവിനിമയം നടത്താൻ ആവശ്യമായ SSH കീകൾ ഞങ്ങൾ സംരക്ഷിക്കുന്നു. പ്രാദേശിക കമ്പ്യൂട്ടർ സെർവറുകളുമായുള്ള ആശയവിനിമയത്തിനുള്ള വെർച്വൽ സെർവറുകളുടെയും IP വിലാസങ്ങളുടെയും നില മാനേജ്മെന്റ് കൺസോളിൽ നിരീക്ഷിക്കാനാകും. പ്രധാന പോയിന്റ്: ക്രമീകരണങ്ങളിൽ നെറ്റ്വർക്ക് & സെക്യൂരിറ്റി / സെക്യൂരിറ്റി ഗ്രൂപ്പുകൾ TCP കണക്ഷനുകൾക്കായി പോർട്ടുകൾ തുറക്കുന്ന ഒരു നിയമം ഞങ്ങൾ സൃഷ്ടിക്കേണ്ടതുണ്ട് - ഇത് MPI പ്രോസസ്സ് മാനേജറിന് ആവശ്യമാണ്. നിയമം ഇതുപോലെയാകാം: അവസാനമായി, ഉയർന്ന പ്രകടനമുള്ള കമ്പ്യൂട്ടിംഗിൽ ഭാവി പ്രസിദ്ധീകരണങ്ങൾക്കായി സാധ്യമായ വിഷയങ്ങളെക്കുറിച്ചുള്ള ഒരു ചെറിയ വോട്ടെടുപ്പ്. രജിസ്റ്റർ ചെയ്ത ഉപയോക്താക്കൾക്ക് മാത്രമേ സർവേയിൽ പങ്കെടുക്കാൻ കഴിയൂ. , ദയവായി.
ഔദ്യോഗിക Microsoft വെബ്സൈറ്റിൽ ലഭ്യമായ HPC Pack 2008 SDK SP2 (നിങ്ങളുടെ കാര്യത്തിൽ ഇതിനകം മറ്റൊരു പതിപ്പ് ഉണ്ടായിരിക്കാം) നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യണം. പാക്കേജിന്റെയും സിസ്റ്റത്തിന്റെയും ബിറ്റ് ശേഷി പൊരുത്തപ്പെടണം.
നിങ്ങൾ പാതകൾ ക്രമീകരിക്കേണ്ടതുണ്ട്; ഇത് ചെയ്യുന്നതിന്, ഡീബഗ് - പ്രോപ്പർട്ടീസ് ടാബിലേക്ക് പോകുക:
ഉദാഹരണം 3b. ഫോർട്രാനിലെ സമാന്തരവൽക്കരണം
ഉദാഹരണം 4a. സി ഭാഷയിൽ സിസ്റ്റം ടൈമറിന്റെ സവിശേഷതകൾ നിർണ്ണയിക്കുന്നു
ഉദാഹരണം 4b. ഫോർട്രാനിലെ സിസ്റ്റം ടൈമർ സവിശേഷതകൾ നിർവചിക്കുന്നു1.4 പ്രത്യേക പ്രക്രിയകൾക്കിടയിൽ സന്ദേശങ്ങൾ അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുന്നു
1.4.1. പോയിന്റ്-ടു-പോയിന്റ് പ്രവർത്തനങ്ങൾ
1.4.2. തടയൽ ഉപയോഗിച്ച് സന്ദേശങ്ങൾ അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുന്നു
ഉദാഹരണം 5 ബി. ഫോർട്രാനിലെ രണ്ട് പ്രക്രിയകൾക്കിടയിൽ സന്ദേശങ്ങളുടെ കൈമാറ്റം
ഉദാഹരണം 6a. സിയിലെ ഇരട്ട, ഒറ്റ പ്രക്രിയകൾ തമ്മിലുള്ള സന്ദേശ കൈമാറ്റം
ഉദാഹരണം 6b. ഫോർട്രാനിലെ ഇരട്ട, ഒറ്റ പ്രക്രിയകൾ തമ്മിലുള്ള സന്ദേശ കൈമാറ്റം
ഉദാഹരണം 7a. സിയിൽ നിലവിലില്ലാത്ത ഒരു പ്രക്രിയയിലേക്ക് കൈമാറുന്നു
ഉദാഹരണം 7b. ഫോർട്രാനിൽ നിലവിലില്ലാത്ത ഒരു പ്രക്രിയയിലേക്ക് കൈമാറുന്നു
ഉദാഹരണം 8a. ബഫർ ചെയ്ത ഡാറ്റ സി ഭാഷയിൽ അയയ്ക്കുന്നു
ഉദാഹരണം 8b. ഫോർട്രാൻ ഭാഷയിൽ ബഫർ ചെയ്ത ഡാറ്റ അയയ്ക്കുന്നു
ഉദാഹരണം 9a. സി ഭാഷയിൽ സന്ദേശ ആട്രിബ്യൂട്ടുകളെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുന്നു
ഉദാഹരണം 9b. ഫോർട്രാനിലെ സന്ദേശ ആട്രിബ്യൂട്ടുകളെക്കുറിച്ചുള്ള വിവരങ്ങൾ നേടുന്നു
ഉദാഹരണം 10a. സി ഭാഷയിലെ ലേറ്റൻസിയുടെയും ത്രൂപുട്ടിന്റെയും നിർവ്വചനം
ഉദാഹരണം 10 ബി. ഫോർട്രാനിലെ ലേറ്റൻസിയും ത്രൂപുട്ടും നിർവചിക്കുന്നു1.4.3. തടയാതെ സന്ദേശങ്ങൾ അയയ്ക്കുകയും സ്വീകരിക്കുകയും ചെയ്യുന്നു
ഉദാഹരണം 11 ബി. ഫോർട്രാനിലെ നോൺ-ബ്ലോക്കിംഗ് ഓപ്പറേഷനുകൾ ഉപയോഗിച്ച് റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക
ഉദാഹരണം 12a. സി ഭാഷയിൽ ആശയവിനിമയ പദ്ധതി "മാസ്റ്റർ - തൊഴിലാളികൾ"
ഉദാഹരണം 12 ബി. ഫോർട്രാൻ ഭാഷയിൽ ആശയവിനിമയ ഡയഗ്രം "മാസ്റ്റർ - തൊഴിലാളികൾ"
ഉദാഹരണം 13a. സി ഭാഷയിൽ മാട്രിക്സ് ട്രാൻസ്പോസിഷൻ
ഉദാഹരണം 13 ബി. ഫോർട്രാനിൽ ഒരു മാട്രിക്സ് ട്രാൻസ്പോസ് ചെയ്യുന്നു1.4.4. തീർപ്പുകൽപ്പിക്കാത്ത ആശയവിനിമയ അഭ്യർത്ഥനകൾ
ഉദാഹരണം 14 ബി. ഫോർട്രാനിലെ മാറ്റിവെച്ച അന്വേഷണങ്ങൾ ഉപയോഗിച്ച് റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുന്ന ഒരു ആവർത്തന രീതിയുടെ സ്കീം1.4.5. സ്തംഭനാവസ്ഥയിലുള്ള സാഹചര്യങ്ങൾ
ഉദാഹരണം 15 ബി. ഫോർട്രാനിലെ MPI_SENDRECV നടപടിക്രമം ഉപയോഗിച്ച് ഒരു റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക1.5 കൂട്ടായ പ്രക്രിയ ഇടപെടലുകൾ
1.5.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.5.2. തടസ്സം
ഉദാഹരണം 16b. ഫോർട്രാനിലെ മോഡലിംഗ് ബാരിയർ സിൻക്രൊണൈസേഷൻ1.5.3. കൂട്ടായ ഡാറ്റ കൈമാറ്റ പ്രവർത്തനങ്ങൾ
1.5.4. ആഗോള പ്രവർത്തനങ്ങൾ
ഉദാഹരണം 17 ബി. ഫോർട്രാനിലെ ഒരു ഇരട്ടിപ്പിക്കൽ പദ്ധതിയും MPI_Reduce എന്ന കൂട്ടായ പ്രവർത്തനവും ഉപയോഗിച്ച് ആഗോള സംഗ്രഹത്തെ മാതൃകയാക്കുന്നു1.5.5. കസ്റ്റം ഗ്ലോബൽ ഓപ്പറേഷൻസ്
ഉദാഹരണം 18b. ഫോർട്രാനിലെ ഇഷ്ടാനുസൃത ആഗോള പ്രവർത്തനം1.6 ഗ്രൂപ്പുകളും ആശയവിനിമയക്കാരും
1.6.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.6.2. പ്രോസസ് ഗ്രൂപ്പുകളുമായുള്ള പ്രവർത്തനങ്ങൾ
ഉദാഹരണം 19 ബി. ഫോർട്രാനിലെ ഗ്രൂപ്പുകളുമായി പ്രവർത്തിക്കുന്നു1.6.3. ആശയവിനിമയം നടത്തുന്നവരുമായുള്ള പ്രവർത്തനങ്ങൾ
ഉദാഹരണം 20 ബി. ഫോർട്രാനിൽ ഒരു കമ്മ്യൂണിക്കേറ്ററിനെ വിഭജിക്കുന്നു
ഉദാഹരണം 21a. C ഭാഷയിൽ പ്രക്രിയകളുടെ പുനർനമ്പറിങ്ങ്
ഉദാഹരണം 21 ബി. ഫോർട്രാനിലെ റീനമ്പറിംഗ് പ്രക്രിയകൾ1.6.4. ആശയവിനിമയം നടത്തുന്നവർ
ഉദാഹരണം 22b. ഫോർട്രാനിലെ ഒരു ഇന്റർകമ്മ്യൂണിക്കേറ്റർ ഉപയോഗിക്കുന്ന മാസ്റ്റർ-വർക്കർ സർക്യൂട്ട്1.6.5. ഗുണവിശേഷങ്ങൾ
1.7 വെർച്വൽ ടോപ്പോളജികൾ
1.7.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.7.2. കാർട്ടീഷ്യൻ ടോപ്പോളജി
1.7.3. ഗ്രാഫ് ടോപ്പോളജി
ഉദാഹരണം 23b. ഫോർട്രാനിലെ ഗ്രാഫ് ടോപ്പോളജി ഉപയോഗിക്കുന്ന മാസ്റ്റർ-വർക്കർ സ്കീം1.8 വ്യത്യസ്ത തരം ഡാറ്റ അയയ്ക്കുന്നു
1.8.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.8.2. ലഭിച്ച ഡാറ്റ തരങ്ങൾ
ഉദാഹരണം 24b. ഫോർട്രാനിൽ മാട്രിക്സ് നിരകൾ വിപരീത ക്രമത്തിൽ പുനഃക്രമീകരിക്കുന്നു1.8.3. ഡാറ്റ പാക്കിംഗ്
ഉദാഹരണം 25b. ഫോർട്രാനിൽ പാക്ക് ചെയ്ത ഡാറ്റ അയയ്ക്കുന്നു1.9 വിവര വസ്തു
1.9.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.9.2. വിവര വസ്തു ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു
1.10 ഡൈനാമിക് പ്രോസസ് കൺട്രോൾ
1.10.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.10.2.പ്രക്രിയകളുടെ സൃഷ്ടി
അടിമ.സി
ഉദാഹരണം 26a. സി ഭാഷയിൽ പ്രോസസ് സ്പോണിംഗ് ഉപയോഗിക്കുന്ന മാസ്റ്റർ-വർക്കർ സ്കീം
master.f
അടിമ.എഫ്
ഉദാഹരണം 26b. ഫോർട്രാനിലെ പ്രോസസ് സ്പോണിംഗ് ഉപയോഗിച്ചുള്ള മാസ്റ്റർ-വർക്കർ സ്കീം1.10.3. ക്ലയന്റ്-സെർവർ ആശയവിനിമയം
client.c
ഉദാഹരണം 27a. സി ഭാഷയിൽ ഒരു പൊതു നാമം ഉപയോഗിച്ച് സെർവറും ക്ലയന്റും തമ്മിലുള്ള ഡാറ്റ കൈമാറ്റം
server.f
client.f
ഉദാഹരണം 27b. ഫോർട്രാൻ ഭാഷയിൽ പൊതുനാമം ഉപയോഗിച്ച് സെർവറും ക്ലയന്റും തമ്മിലുള്ള ഡാറ്റ കൈമാറ്റം1.10.4. ഒരു പ്രോസസ് അസോസിയേഷൻ നീക്കംചെയ്യുന്നു
1.10.5. സോക്കറ്റ് കമ്മ്യൂണിക്കേഷൻ
1.11. വൺ-വേ ആശയവിനിമയങ്ങൾ
1.11.1. സാധാരണയായി ലഭ്യമാവുന്നവ
1.11.2. ഒരു വിൻഡോ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു
1.11.3. ഡാറ്റ കൈമാറ്റം
1.11.4. സമന്വയം
ഉദാഹരണം 28b
ഉദാഹരണം 29a. C-യിലെ വൺ-വേ കമ്മ്യൂണിക്കേഷൻസ് ഉപയോഗിച്ച് ഒരു റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക
ഉദാഹരണം 29b. ഫോർട്രാനിലെ വൺ-വേ കമ്മ്യൂണിക്കേഷൻസ് ഉപയോഗിച്ച് റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക
ഉദാഹരണം 30a. C-യിലെ വൺ-വേ കമ്മ്യൂണിക്കേഷൻസ് ഉപയോഗിച്ച് ഒരു റിംഗ് ടോപ്പോളജി വഴി കൈമാറ്റം ചെയ്യുക
ഉദാഹരണം 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 ബി. ഫോർട്രാനിലെ ഒരു ഫയലിൽ നിന്നുള്ള വായന ബഫർ ചെയ്തു
ഉദാഹരണം 32a. സി ഭാഷയിലുള്ള ഒരു ഫയലിൽ നിന്നുള്ള കൂട്ടായ വായന
ഉദാഹരണം 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 ബി. ഫോർട്രാനിൽ കൈകാര്യം ചെയ്യുന്നതിൽ പിശക്അധ്യായം 2 ഓപ്പൺഎംപി പാരലൽ പ്രോഗ്രാമിംഗ് ടെക്നോളജി
2.1 ആമുഖം
2.2 അടിസ്ഥാന സങ്കൽപങ്ങൾ
2.2.1. ഒരു പ്രോഗ്രാം കംപൈൽ ചെയ്യുന്നു
ഉദാഹരണം 34 ബി
ഉദാഹരണം 34c. ഫോർട്രാനിലെ സോപാധിക സമാഹാരം2.2.2. സമാന്തര പ്രോഗ്രാം മോഡൽ
2.2.3. നിർദ്ദേശങ്ങളും നടപടിക്രമങ്ങളും
2.2.4. പ്രോഗ്രാം എക്സിക്യൂഷൻ
2.2.5. സമയത്തിന്റെ
ഉദാഹരണം 35 ബി. ഫോർട്രാനിലെ സിസ്റ്റം ടൈമറുകളിൽ പ്രവർത്തിക്കുന്നു2.3 സമാന്തരവും സീരിയൽ ഏരിയകളും
2.3.1. സമാന്തര നിർദ്ദേശം
ഉദാഹരണം 36 ബി. ഫോർട്രാനിലെ സമാന്തര പ്രദേശം
ഉദാഹരണം 37a. സി ഭാഷയിലെ റിഡക്ഷൻ ഓപ്ഷൻ
ഉദാഹരണം 37 ബി. ഫോർട്രാനിലെ റിഡക്ഷൻ ഓപ്ഷൻ2.3.2. ചുരുക്കെഴുത്ത്
2.3.3. പരിസ്ഥിതി വേരിയബിളുകളും സഹായ നടപടിക്രമങ്ങളും
ഉദാഹരണം 38b. ഫോർട്രാൻ ഭാഷയിൽ ഓപ്ഷൻ_സെറ്റ്_എണ്ണം_ത്രെഡുകളും ഓപ്ഷൻ നം_ത്രെഡുകളും
ഉദാഹരണം 39a. സി ഭാഷയിൽ omp_set_dynamic, omp_get_dynamic നടപടിക്രമങ്ങൾ
ഉദാഹരണം 39 ബി. ഫോർട്രാനിലെ ഓംപ്_സെറ്റ്_ഡൈനാമിക്, ഒംപ്_ഗെറ്റ്_ഡൈനാമിക് നടപടിക്രമങ്ങൾ
ഉദാഹരണം 40a. സിയിലെ സമാന്തര പ്രദേശങ്ങൾ
ഉദാഹരണം 40 ബി. ഫോർട്രാനിലെ സമാന്തര പ്രദേശങ്ങൾ
ഉദാഹരണം 41a. സി ഭാഷയിൽ Omp_in_parallel function
ഉദാഹരണം 41 ബി. ഫോർട്രാൻ ഭാഷയിൽ omp_in_parallel ഫംഗ്ഷൻ2.3.4. ഒരൊറ്റ നിർദ്ദേശം
ഉദാഹരണം 42 ബി. ഫോർട്രാനിൽ സിംഗിൾ ഡയറക്ടീവും Nowait ഓപ്ഷനും
ഉദാഹരണം 43a. സി ഭാഷയിൽ കോപ്പി പ്രൈവറ്റ് ഓപ്ഷൻ
ഉദാഹരണം 43b. ഫോർട്രാനിലെ കോപ്പി പ്രൈവറ്റ് ഓപ്ഷൻ2.3.5. മാസ്റ്റർ നിർദ്ദേശം
ഉദാഹരണം 44b. ഫോർട്രാനിലെ പ്രധാന നിർദ്ദേശം2.4 ഡാറ്റ മോഡൽ
ഉദാഹരണം 45 ബി. ഫോർട്രാനിലെ സ്വകാര്യ ഓപ്ഷൻ
ഉദാഹരണം 46a. സി ഭാഷയിൽ പങ്കിട്ട ഓപ്ഷൻ
ഉദാഹരണം 46b. ഫോർട്രാനിലെ പങ്കിട്ട ഓപ്ഷൻ
ഉദാഹരണം 47a. സി ഭാഷയിൽ ആദ്യ സ്വകാര്യ ഓപ്ഷൻ
ഉദാഹരണം 47b. ഫോർട്രാനിലെ ആദ്യ സ്വകാര്യ ഓപ്ഷൻ
ഉദാഹരണം 48a. സി ഭാഷയിൽ ത്രെഡ് പ്രൈവറ്റ് നിർദ്ദേശം
ഉദാഹരണം 48b. ഫോർട്രാനിലെ ത്രെഡ് പ്രൈവറ്റ് നിർദ്ദേശം
ഉദാഹരണം 49a. സി ഭാഷയിൽ കോപ്പിയിൻ ഓപ്ഷൻ
ഉദാഹരണം 49b. ഫോർട്രാനിലെ കോപ്പിഇൻ ഓപ്ഷൻ2.5 ജോലി വിതരണം
2.5.1. താഴ്ന്ന നിലയിലുള്ള സമാന്തരവൽക്കരണം
ഉദാഹരണം 50 ബി. ഫോർട്രാനിലെ omp_get_num_threads, omp_get_thread_num നടപടിക്രമങ്ങൾ2.5.2. സമാന്തര ലൂപ്പുകൾ
ഉദാഹരണം 51 ബി. ഫോർട്രാനിലെ ചെയ്യേണ്ട നിർദ്ദേശം
ഉദാഹരണം 52a. സി ഭാഷയിൽ ഷെഡ്യൂൾ ഓപ്ഷൻ
ഉദാഹരണം 52 ബി. ഫോർട്രാനിലെ ഷെഡ്യൂൾ ഓപ്ഷൻ
ഉദാഹരണം 53a. സി ഭാഷയിൽ ഷെഡ്യൂൾ ഓപ്ഷൻഅടിസ്ഥാന MPI പ്രവർത്തനങ്ങൾ
MPI സ്ഥിരാങ്കങ്ങൾ സി ഭാഷാ ഡാറ്റ തരം
MPI_INT ഒപ്പിട്ട ഇൻറ്റ്
MPI_UNSIGNED ഒപ്പിടാത്ത സംഖ്യ
MPI_SHORT ഒപ്പിട്ട ഇൻറ്റ്
MPI_LONG നീണ്ട സംഖ്യ ഒപ്പിട്ടു
MPI_UNSIGNED_SHORT ഒപ്പിടാത്ത സംഖ്യ
MPI_UNSIGNED_LONG ഒപ്പിടാത്ത നീണ്ട സംഖ്യ
MPI_FLOAT ഫ്ലോട്ട്
MPI_DOUBLE ഇരട്ടി
MPI_LONG_DOUBLE നീണ്ട ഇരട്ട
MPI_UNSIGNED_CHAR ഒപ്പിടാത്ത ചാർ
MPI_CHAR ഒപ്പിട്ട ചാർ
, ഇവിടെ n എന്നത് സംഖ്യാ സംയോജന സമയത്ത് സംഗ്രഹ വിഭാഗങ്ങളുടെ എണ്ണമാണ്. ഓരോ വിഭാഗത്തിന്റെയും വിസ്തീർണ്ണം 'സ്ട്രിപ്പിന്റെ' വീതിയുടെയും 'സ്ട്രിപ്പിന്റെ' മധ്യത്തിലുള്ള ഫംഗ്ഷന്റെ മൂല്യത്തിന്റെയും ഉൽപ്പന്നമായി കണക്കാക്കുന്നു, തുടർന്ന് പ്രദേശങ്ങൾ പ്രധാന പ്രക്രിയയാൽ സംഗ്രഹിക്കുന്നു (ഒരു ഏകീകൃത ഗ്രിഡ് ഉപയോഗിച്ചു).
ഓപ്ഷൻ നമ്പർ. അൽഗോരിതം പ്രോസസ്സറുകളുടെ എണ്ണം ഓരോ പ്രോസസറിലെയും ആവർത്തനങ്ങളുടെ എണ്ണം
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
സംഖ്യാ സംയോജനം
മോണ്ടെ കാർലോ
MPI (മെസേജ് പാസിംഗ് ഇന്റർഫേസ്)
ഒരേ ടാസ്ക് ചെയ്യുന്ന പ്രക്രിയകൾക്കിടയിലുള്ള ഒരു മെസേജ് പാസിംഗ് ഇന്റർഫേസാണ് MPI. ഇത് പ്രാഥമികമായി ഡിസ്ട്രിബ്യൂട്ടഡ് മെമ്മറി സിസ്റ്റങ്ങൾക്ക് (MPP) വേണ്ടിയുള്ളതാണ്, ഉദാഹരണത്തിന്, OpenMP. ഒരു ഡിസ്ട്രിബ്യൂട്ടഡ് (ക്ലസ്റ്റർ) സിസ്റ്റം, ഒരു ചട്ടം പോലെ, ഉയർന്ന പ്രകടനമുള്ള ആശയവിനിമയ ചാനലുകൾ (ഉദാഹരണത്തിന്, ഇൻഫിനിബാൻഡ്) ബന്ധിപ്പിച്ചിട്ടുള്ള ഒരു കൂട്ടം കമ്പ്യൂട്ടിംഗ് നോഡുകളാണ്. എംപിഐയിൽ പ്രവർത്തിക്കുന്നു
ഒരു സാധാരണ MPI പ്രോഗ്രാം എങ്ങനെയാണ് ക്രമീകരിച്ചിരിക്കുന്നത് എന്നതിന്റെ ഒരു തത്സമയ ഉദാഹരണം നോക്കാം. ഒരു ഡെമോ ആപ്ലിക്കേഷൻ എന്ന നിലയിൽ, നമുക്ക് Intel MPI ലൈബ്രറിയിൽ വരുന്ന സോഴ്സ് കോഡ് ഉദാഹരണമായി എടുക്കാം. ഞങ്ങളുടെ ആദ്യ MPI പ്രോഗ്രാം പ്രവർത്തിപ്പിക്കുന്നതിന് മുമ്പ്, പരീക്ഷണങ്ങൾക്കായി ഒരു പ്രവർത്തന അന്തരീക്ഷം ഞങ്ങൾ തയ്യാറാക്കുകയും സജ്ജീകരിക്കുകയും വേണം. ഒരു ക്ലസ്റ്റർ പരിതസ്ഥിതി സജ്ജീകരിക്കുന്നു
പരീക്ഷണങ്ങൾക്കായി, ഞങ്ങൾക്ക് ഒരു ജോടി കമ്പ്യൂട്ടിംഗ് നോഡുകൾ ആവശ്യമാണ് (സമാന സ്വഭാവസവിശേഷതകളുള്ളതാണ് നല്ലത്). നിങ്ങൾക്ക് രണ്ട് സെർവറുകൾ ഇല്ലെങ്കിൽ, നിങ്ങൾക്ക് എല്ലായ്പ്പോഴും ക്ലൗഡ് സേവനങ്ങൾ ഉപയോഗിക്കാം.
തിരഞ്ഞെടുക്കുക ഉദാഹരണ തരം(സെർവർ തരം). പരീക്ഷണങ്ങൾക്ക്, t2.micro (1 vCPUs, 2.5 GHz, Intel Xeon പ്രൊസസർ ഫാമിലി, 1 GiB of RAM) ഞങ്ങൾക്ക് അനുയോജ്യമാണ്. അടുത്തിടെ രജിസ്റ്റർ ചെയ്ത ഒരു ഉപയോക്താവ് എന്ന നിലയിൽ, എനിക്ക് ഈ തരം സൗജന്യമായി ഉപയോഗിക്കാം - "ഫ്രീ ടയർ യോഗ്യൻ" എന്ന് അടയാളപ്പെടുത്തിയിരിക്കുന്നു. ഞങ്ങൾ സജ്ജമാക്കി സംഭവങ്ങളുടെ എണ്ണം: 2 (വെർച്വൽ സെർവറുകളുടെ എണ്ണം).തരം: ഇഷ്ടാനുസൃത TCP റൂൾ
പ്രോട്ടോക്കോൾ: ടിസിപി
പോർട്ട് റേഞ്ച്: 1024-65535
ഉറവിടം: 0.0.0.0/0
സുരക്ഷാ കാരണങ്ങളാൽ, നിങ്ങൾക്ക് കൂടുതൽ കർശനമായ ഒരു നിയമം സജ്ജമാക്കാൻ കഴിയും, എന്നാൽ ഞങ്ങളുടെ ഡെമോയ്ക്ക് ഇത് മതിയാകും.