‹àáîðàòîðíûå ðàáîòû
’åìû ëàáîðàòîðíûõ ðàáîò:
1.
�àðàëëåëüíîå ïðîãðàììèðîâàíèå äëß
ñèñòåì ñ îáùåé ïàìßòüþ ñ èñïîëüçîâàíèåì òåõíîëîãèè OpenMP.
2.
�àðàëëåëüíîå ïðîãðàììèðîâàíèå äëß
ãðàôè÷åñêîãî ïðîöåññîðà â ñðåäå NVidia CUDA.
3.
�àðàëëåëüíîå
ïðîãðàììèðîâàíèå äëß ãåòåðîãåííûõ
âû÷èñëèòåëüíûõ ñèñòåì ñ èñïîëüçîâàíèåì òåõíîëîãèè OpenCL.
4.
�àðàëëåëüíîå ïðîãðàììèðîâàíèå ñ
èñïîëüçîâàíèåì òåõíîëîãèè MPI è áèáëèîòåêè ïðîôèëèðîâàíèß MPE.
‘òóäåíò ïîëó÷àåò îò ïðåïîäàâàòåëß íà
ïåðâîì ëàáîðàòîðíîì çàíßòèè ñâîé èíäèâèäóàëüíûé âàðèàíò çàäàíèß íà öèêë
ëàáîðàòîðíûõ ðàáîò, âêëþ÷àþùèé:
‒
íîìåðà ÷åòûðåõ çàäà÷ èç ñïèñêà,
íàõîäßùåãîñß íà ñàéòå äèöèïëèíû (http://vt.cs.nstu.ru/~malyavko/ParProgrO/Tasks2025.htm);
‒
IP-àäðåñ è ïîðò ñåðâåðà;
‒
ëîãèí;
‒
SSH-êëþ÷.
‚ñå ëàáîðàòîðíûå ðàáîòû äîëæíû áûòü âûïîëíåíû ñ èñïîëüçâàíèåì ßçûêà
ïðîãðàììèðîâàíèß C (èëè C++) â ñðåäå Linux áåç
ãðàôè÷åñêîé îáîëî÷êè (ñ èñïîëüçîâàíèåì êîìïèëßòîðà gcc). �ðåäâàðèòåëüíóþ îòëàäêó ðàçðàáàòûâàåìûõ ïðîãðàìì ìîæíî
âåñòè ñ èñïîëüçîâàíèåì MS Visual Studio (èëè äðóãèõ IDE), îäíàêî ñëåäóåò ïîìíèòü î âîçìîæíûõ íåñîâìåñòèìîñòßõ ñ êîìïèëßòîðîì
èëè áèáëèîòåêàìè öåëåâîé ñðåäû, îñîáåííî âåðîßòíûìè â ñëó÷àå èñïîëüçîâàíèß C++. �îýòîìó ðåêîìåíäóåòñß îãðàíè÷èòüñß ÷èñòûì ‘.
‘òóäåíòàì, íå èìåþùèì îïûòà ðàáîòû â ñèñòåì Linux, ðåêîìåíäóåòñß ïðåäâàðèòåëüíî îçíàêîìèòüñß ñ ñîäåðæèìûì
ôàéëà ÇŽñíîâû ðàáîòû â Linux.pptxÈ, íàõîäßùåãîñß íà ñàéòå äèñöèïëèíû.
‚ êàæäîé
ëàáîðàòîðíîé ðàáîòå íóæíî ðåøèòü îäíó èç çàäà÷. ”îðìóëèðîâêè âñåõ çàäà÷ íàõîäßòñß
íà ñàéòå äèñöèïëèíû â ïóíêòå Ç‘ïèñîê çàäà÷È. ‚ñå çàäà÷è, óêàçàííûå â âàðèàíòå
çàäàíèß, äîëæíû áûòü ðåøåíû. �î æåëàíèþ ñòóäåíòà çàäà÷à ìîæåò áûòü çàìåíåíà
ïðåïîäàâàòåëåì (ïðè ýòîì ñóììàðíûé áàëë äëß àòòåñòàöèè áóäåò óìåíüøåí íà 2
áàëëà çà ïåðâóþ çàìåíßåìóþ çàäà÷ó, íà 4 áàëëà çà âòîðóþ, É).
‘òóäåíò
ñàìîñòîßòåëüíî äåëàåò âûáîð, êàêóþ èç çàäà÷ ðåøàòü ïðè âûïîëíåíèè êàæäîé ëàáîðàòîðíîé
ðàáîòû. �åêîìåíäóåòñß íàèáîëåå àëãîðèòìè÷åñêè ñëîæíóþ (ñ òî÷êè çðåíèß ñòóäåíòà)
çàäà÷ó ðåøàòü ñ èñïîëüçîâàíèåì íàèáîëåå ïðîñòîé òåõíîëîãèè (OpenMP), à íàèáîëåå
ïðîñòûå Ð ñ èñïîëüçîâàíèåì ãðàôè÷åñêîãî ïðîöåññîðà (CUDA / OpenCL).
�îñëåäîâàòåëüíîñòü
âûïîëíåíèß è ñäà÷è ðàáîò ìîæåò íå ñîâïàäàòü ñ èõ íóìåðàöèåé â ñïèñêå òåì.
„îñòóï ê óêàçàííîìó â âàðèàíòå çàäàíèß óçëó êëàñòåðà âûïîëíßåòñß ñ
èñïîëüçîâàíèåì ëþáîãî SSH-êëèåíòà (íàïðèìåð Ð Putty), äëß ïåðåíîñà ôàéëîâ ìåæäó êëèåíòñêèì êîìïüþòåðîì è
êëàñòåðîì ìîæíî èñïîëüçîâàòü ëþáîé SCP-êëèåíò (íàïðèìåð Ð WinSCP). Žáå ïðîãðàììû ßâëßþòñß ñâîáîäíî ðàñïðîñòðàíßåìûìè, íå
òðåáóþò óñòàíîâêè ñ àäìèíèñòðàòîðñêèìè ïðàâàìè è ìîãóò áûòü ñêà÷àíû èç
èíòåðíåòà è çàïóùåíû ñ ëþáîãî íîñèòåëß.
„ëß ñîçäàíèß ïðîåêòà íà
CUDA ìîæíî îðèåíòèðîâàòüñß íà òåõíîëîãèþ, îïèñàííóþ â ôàéëå /home/samples/readme.txt, ñêîïèðîâàòü â ñâîé êàòàëîã è èñïîëüçîâàòü
ôàéë /home/samples/CUDA/Makefile (ïðè íåîáõîäèìîñòè Ð àäàïòèðîâàòü åãî ïîä ñâîè
ïàðàìåòðû, íàïðèìåð, èìåíà ôàéëîâ).
„ëß êîìïèëßöèè ïðîåêòà íà OpenCL ìîæíî èñïîëüçîâàòü ñêðèïò createMMul.sh èç êàòàëîãà
/home/samples/openCl (ñêîïèðîâàòü åãî â ñâîé êàòàëîã è ïðè íåîáõîäèìîñòè àäàïòèðîâàòü
ïîä ñâîè ïàðàìåòðû, íàïðèìåð, èìåíà ôàéëîâ). ‚ ýòîì æå êàòàëîãå íàõîäèòñß
ïðèìåð òåêñòà ïðîãðàììû íàïèñàííîé íà OpenCL.
„ëß êîìïèëßöèè MPI-ïðîãðàìì íóæíî èñïîëüçîâàòü ñêðèïò
/usr/lib64/mpich/bin/mpicc (èëè /usr/lib64/mpich/bin/mpic++). �àðàìåòðû ýòîìó ñêðèïòó çàäàþòñß òàê æå, êàê è
êîìïèëßòîðó gcc. „ëß çàïóñêà MPI-ïðîãðàìì íóæíî èñïîëüçîâàòü óòèëèòó
/usr/lib64/mpich/bin/mpirun (èëè /usr/lib64/mpich/bin/mpiexec), çàäàâàß ñëåäóþùèå
êëþ÷è è ïàðàìåòðû:
-n <êîë-âî ïðîöåññîâ> <ïóòü ê çàïóñêàåìîé MPI-ïðîãðàììå è åå ïàðàìåòðû
Žáùèå òðåáîâàíèß è
ðåêîìåíäàöèè.
‚ êàæäîé ðàáîòå äîëæíû áûòü ðàçðàáîòàíû è ïîñëåäîâàòåëüíûé, è ïàðàëëåëüíûé
âàðèàíò ïðîãðàììû ðåøåíèß çàäà÷è. �å äîëæíà
òðåáîâàòüñß ïåðåêîìïèëßöèß äëß çàïóñêà ïðîãðàììû/ïðîãðàìì äëß ðàçëè÷íûõ âàðèàíòîâ
èñõîäíûõ äàííûõ. „îëæíî áûòü ðåàëèçîâàíî ïðîãðàììíîå ñðàâíåíèå ðåçóëüòàòîâ ïîñëåäîâàòåëüíûõ
è ïàðàëëåëüíûõ âû÷èñëåíèé íà ñîâïàäåíèå, è èçìåðåíû âðåìåííûå çàòðàòû íà êàæäûé
âàðèàíò äëß ðàçëè÷íûõ ñòåïåíåé ðàñïàðàëëåëèâàíèß è, âîçìîæíî, ñ ðàçíûìè
âõîäíûìè äàííûìè.
�åîáõîäèìî
äîáèòüñß òîãî, ÷òîáû ïàðàëëåëüíûé âàðèàíò ðàáîòàë áûñòðåå ïîñëåäîâàòåëüíîãî.
„ëß êàæäîé çàäà÷è äîëæíû áûòü ïðîâåäåíû íåñêîëüêî âû÷èñëèòåëüíûõ ýêñïåðèìåíòîâ
(ñ ðàçëè÷íîé ñòåïåíüþ ïàðàëëåëèçìà èëè ðàçëè÷íûìè âõîäíûìè äàííûìè, É), èõ ðåçóëüòàòû äîëæíû áûòü îòîáðàæåíû â
ðàñ÷åòíî-ãðàôè÷åñêîé ðàáîòå â ôîðìå ãðàôèêîâ èëè òàáëèö ñ îáúßñíåíèåì õàðàêòåðà
çàâèñèìîñòåé âðåìåíè âû÷èñëåíèé îò âàðüèðóåìûõ ïàðàìåòðîâ.
„ëß èçìåðåíèß
äëèòåëüíîñòè âðåìåííûõ èíòåðâàëîâ �…
ñëåäóåò èñïîëüçîâàòü ôóíêöèþ clock(), ýòî ñëèøêîì ãðóáûé èíñòðóìåíò. ‚ìåñòî íåå
íóæíî èñïîëüçîâàòü ëèáî omp_get_wtime() (ýòî òðåáóåò âêëþ÷åíèß çàãîëîâî÷íîãî
ôàéëà omp.h), ëèáî MPI_Wtime() (ýòî òðåáóåò âêëþ÷åíèß çàãîëîâî÷íîãî ôàéëà omp.h), ëèáî clock_gettime() èëè gettimeofday() (èìåþùèåñß â Linux, íî îòñóòñòâóþùèå â MS Windows). ˆíôîðìàöèþ ïî ïîñëåäíèì äâóì ôóíêöèßì
ñòóäåíò äîëæåí ñàìîñòîßòåëüíî íàéòè â èíòåðíåòå.
‹þáûå èñõîäíûå äàííûå äîëæíû çàäàâàòüñß â êîìàíäíîé ñòðîêå çàïóñêà
ïðîãðàììû è, âîçìîæíî, ñ÷èòûâàòüñß èç óêàçàííîãî â íåé ôàéëà (ôàéëîâ), ò.å. îíè
íå äîëæíû çàäàâàòüñß/îïðåäåëßòüñß êàê êîíñòàíòû â ðàçðàáàòûâàåìîé
ïðîãðàììå. „ëß ãåíåðàöèè èñõîäíûõ äàííûõ áîëüøîãî îáúåìà (ìàòðèöû, ãðàôû,
ñèñòåìû êîýôôèöèåíòîâ óðàâíåíèé è ò.ä.) ñëåäóåò èñïîëüçîâàòü óòèëèòó genData.exe, êîòîðóþ ìîæíî ñêà÷àòü ñ ñàéòà äèñöèïëèíû.
Žáúåìíûå ðåçóëüòàòû âû÷èñëåíèé äîëæíû âûâîäèòüñß â ôàéë/ôàéëû, äëß íèõ òàêæå
äîëæíî áûòü ðåàëèçîâàíî ïðîãðàììíîå ñðàâíåíèå ðåçóëüòàòîâ
ïîñëåäîâàòåëüíûõ è ïàðàëëåëüíûõ âû÷èñëåíèé íà ñîâïàäåíèå. �åáîëüøèå ïî îáúåìó ðåçóëüòàòû ìîãóò
âûâîäèòüñß íà êîíñîëü. ‚ûâîäèòüñß äîëæíû âñå äàííûå, íåîáõîäèìûå äëß ïðîâåðêè
ïîëó÷åííîãî ðåçóëüòàòà. �àïðèìåð, åñëè òðåáóåòñß íàéòè äâà ÷èñëà, èìåþùèå
îäèíàêîâîå êîëè÷åñòâî ïðîñòûõ äåëèòåëåé, òî êðîìå íàéäåííûõ ÷èñåë äîëæíû áûòü
âûâåäåíû è ïåðå÷íè èõ äåëèòåëåé. „ëß êàæäîé çàäà÷è ñòóäåíò äîëæåí ïðîäóìàòü,
÷òî è â êàêîì âèäå îí áóäåò âûâîäèòü â êà÷åñòâå ðåçóëüòàòà ðàáîòû ïðîãðàììû. �å
ñëåäóåò âûâîäèòü áîëüøèå èçáûòî÷íûå îáúåìû äàííûõ.
Šàæäàß ïàðàëëåëüíàß ïðîãðàììà äîëæíà àâòîìàòè÷åñêè íàñòðàèâàòüñß íà
ìàêñèìàëüíî äîñòóïíîå (èëè çàäàâàåìîå ïðè åå çàïóñêå) êîëè÷åñòâî
ïîòîêîâ/óçëîâ/ßäåð/âåòâåé/É
�ðè ðåøåíèè çàäà÷, ñâßçàííûõ ñ öåëûìè ÷èñëàìè, ñëåäóåò ðàáîòàòü â 64-ðàçðßäíîì
äèàïàçîíå (èñïîëüçîâàòü òèïû äàííûõ unsigned long long èëè __int64).
�ðè ðåøåíèè çàäà÷, ñâßçàííûõ ñ ïðîñòûìè ÷èñëàìè, ñëåäóåò èñïîëüçîâàòü äëß
èõ íàõîæäåíèß àëãîðèòì "ðåøåòî �ðàòîñôåíà" èëè áîëåå
ïðîèçâîäèòåëüíûé, ëèáî èñïîëüçîâàòü â êà÷åñòâå èñõîäíûõ äàííûõ ôàéëû ñ çàðàíåå
âû÷èñëåííûìè ïðîñòûìè ÷èñëàìè, íàïðèìåð Ð ñ ñàéòà http://primes.utm.edu/lists/small/millions/.
‚ñå ðåçóëüòàòû
âûïîëíåíèß ëàáîðàòîðíûõ ðàáîò äîëæíû ñîõðàíßòüñß â ëè÷íîì êàòàëîãå ñòóäåíòà (/home/avt<yourGroup>-v<N>) â îòäåëüíûõ ïîäêàòàëîãàõ ñ èìåíàìè, ñîîòâåòñòâóþùèìè íîìåðó ðàáîòû (íàïðèìåð,
/home/avt<yourGroup>-v<N>/lr1, /home/avt<yourGroup>-v<N>/lr2, É). �îäêàòàëîãè ñîçäàþòñß ñòóäåíòîì ñàìîñòîßòåëüíî.
�îñëå îòëàäêè
ïîñëåäîâàòåëüíîé è ïàðàëëåëüíîé âåðñèé ïðîãðàììû ðåøåíèß çàäà÷è è ïðîâåäåíèß
ñåðèè âû÷èñëèòåëüíûõ ýêñïåðèìåíòîâ ñòóäåíò ïèøåò è çàãðóæàåò â ñèñòåìó DiSpace ïîäðîáíóþ èíñòðóêöèþ ïî ñáîðêå è çàïóñêó ïðîãðàììû (âûïîëíèâ ñáîðêó
è ñîõðàíèâ èñïîëíßåìóþ ïðîãðàììó/ïðîãðàììû â ïîäêàòàëîãå äàííîé ðàáîòû) â
ôîðìàòå MS Word ôàéëà. „àòîé âûïîëíåíèß è ñäà÷è ðàáîòû ñ÷èòàåòñß èìåííî ýòîò
ìîìåíò, ïîñëå ÷åãî ïðåïîäàâàòåëü ïðîâåðßåò ðàáîòó è ôîðìèðóåò îöåíî÷íûé áàëë
ñîãëàñíî áàëëüíî-ðåéòèíãîâîé ñèñòåìå àòòåñòàöèè. ˆíñòðóêöèß äîëæíà ñîäåðæàòü
ïîñòàíîâêó çàäà÷è è åå íîìåð â ñïèñêå. Žò÷åòû ïî îòäåëüíûì ëàáîðàòîðíûì ðàáîòàì
íå ãîòîâßòñß è íå ñäàþòñß, âìåñòî íèõ ïîñëå âûïîëíåíèß âñåõ ðàáîò ñòóäåíò
ôîðìèðóåò ñâîäíûé îò÷åò Ð ðàñ÷åòíî-ãðàôè÷åñêóþ ðàáîòó. �åðåñìîòð âûñòàâëåííîãî
áàëëà ìîæåò ïðîèçâîäèòüñß ïðåïîäàâàòåëåì òîëüêî â èñêëþ÷èòåëüíûõ ñèòóàöèßõ,
ïîýòîìó ñòóäåíò äîëæåí âíèìàòåëüíî ïðîâåðßòü ñîîòâåòñòâèå ïðåäúßâëßåìûõ äëß
ïðîâåðêè ðåçóëüòàòîâ ïåðå÷èñëåííûì çäåñü òðåáîâàíèßì è ðåêîìåíäàöèßì.
�îñëå ïðèåìà ïðåïîäàâàòåëåì
êàæäîé ðàáîòû èç ñîîòâåòñòâóþùåãî ïîäêàòàëîãà ñòóäåíò äîëæåí óäàëèòü ñêîìïèëèðîâàííûå
èñïîëíßåìûå ïðîãðàììû, îáúåêòíûå ôàéëû è âõîäíûå/âûõîäíûå ôàéëû äàííûõ, îáúåì
êîòîðûõ ïðåâûøàåò åäèíèöû êèëîáàéò. Žñòàâèòü â äîìàøíåì êàòàëîãå ñëåäóåò òîëüêî
èñõîäíûå êîäû ïðîãðàìì è, âîçìîæíî, ñêðèïòû èëè makefileÕû. �ðè ñäà÷å
çà÷åòà ïðåïîäàâàòåëü ïðîâåðßåò ñòåïåíü Çî÷èñòêèÈ ëè÷íîãî êàòàëîãà ñòóäåíòà è
ìîæåò ñíèçèòü èòîãîâûé áàëë ïî äèñöèïëèíå â ñëó÷àå îáíàðóæåíèß ëèøíèõ ôàéëîâ.
�åâûïîëíåíèå
ëþáîãî èç ïåðå÷èñëåííûõ âûøå òðåáîâàíèé ìîæåò ïðèâåñòè ê ñíèæåíèþ áàëëà îöåíêè
ðàáîòû ïî ñðàâíåíèþ ñ ìàêñèìàëüíûì áàëëîì.
Šàòåãîðè÷åñêè çàïðåùàåòñß
çàãðóæàòü íà ñåðâåð ïðîåêòû (â âèäå äåðåâà êàòàëîãîâ) IDE MS Visual Studio (èëè äðóãèõ IDE ñèñòåìû MS Windows). ‡àãðóæàòü ìîæíî
’Ž‹œŠŽ èñõîäíûå òåêñòû ïðîãðàìì (ôàéëû òèïîâ .c .cpp .h .hpp).
Šàòåãîðè÷åñêè çàïðåùàåòñß
çàãðóæàòü íà ñåðâåð îò÷åòû è/èëè èíñòðóêöèè ïî ëàáîðàòîðíûì ðàáîòàì â ëþáîì
ôîðìàòå.
Šàòåãîðè÷åñêè çàïðåùàåòñß äàæå
êðàòêîâðåìåííî ïðåâûøàòü ëèìèò 10 Mb ñóììàðíîãî îáúåìà âñåõ ôàéëîâ ëè÷íîãî êàòàëîãà.
ˆñêëþ÷åíèß âîçìîæíû òîëüêî ïî ñîãëàñîâàíèþ ñ ïðåïîäàâàòåëåì.
Šàòåãîðè÷åñêè çàïðåùàåòñß
èñïîëüçîâàòü ðåñóðñû, âûäåëåííûå äëß âûïîëíåíèß ëàáîðàòîðíûõ ðàáîò, â êàêèõ áû
òî íè áûëî ïîñòîðîííèõ öåëßõ, ýòî ìîæåò ïðèâåñòè íå òîëüêî ê ñíèæåíèþ áàëëîâ ïðè
àòòåñòàöèè, íî è ê ëèøåíèþ äîñòóïà ê ñèñòåìå, ò.å. ê íåâîçìîæíîñòè ñäà÷è çà÷åòà
ïî äèñöèïëèíå.
€äìèíèñòðàòîð
âû÷èñëèòåëüíîãî êëàñòåðà è ïðåïîäàâàòåëü âûïîëíßþò ìîíèòîðèíã èñïîëüçîâàíèß
ðåñóðñîâ ñèñòåìû ñ öåëüþ ïðåäîòâðàùåíèß íåöåëåâîãî èñïîëüçîâàíèß ðåñóðñîâ èëè
ïðåâûøåíèß óñòàíîâëåííûõ ëèìèòîâ.
�àñ÷åòíî-ãðàôè÷åñêàß ðàáîòà
�ƒ� îôîðìëßåòñß â ýëåêòðîííîì âèäå â êà÷åñòâå ñâîäíîãî îò÷åòà ïî âñåì âûïîëíåííûì
ëàáîðàòîðíûì ðàáîòàì. ‘îäåðæàíèåì �ƒ� äîëæíî áûòü:
‒
ïîñòàíîâêà
çàäà÷ ïî òåìå êàæäîé ðàáîòû;
‒
òî÷íîå îïèñàíèå ïîñëåäîâàòåëüíûõ è ïàðàëëåëüíûõ àëãîðèòìîâ ðåøåíèß çàäà÷ (æåëàòåëüíî
Ð â ãðàôè÷åñêîì, âîçìîæíî Ð â ñòðóêòóðèðîâàííîì òåêñòîâîì âèäå);
‒
ðåçóëüòàòû
ñåðèé âû÷èñëèòåëüíûõ ýêñïåðèìåíòîâ (òàáëèöû è/èëè ãðàôèêè çàâèñèìîñòåé âðåìåíè
âû÷èñëåíèé îò ñòåïåíè ðàñïàðàëëåëèâàíèß è çíà÷åíèé èñõîäíûõ äàííûõ) ñ
îáúßñíåíèåì õàðàêòåðà ýòèõ çàâèñèìîñòåé.
Šîäû ðàçðàáîòàííûõ ïðîãðàìì íóæíî ðàçìåùàòü â ïðèëîæåíèè ê �ƒ�.
‘âîäíûé îò÷åò, ò.å. �ƒ�, çàãðóæàåòñß â ñèñòåìó DiSpace èëè îòïðàâëßåòñß íà
ýëåêòðîííóþ ïî÷òó ïðåïîäàâàòåëß â ýëåêòðîííîì âèäå â ôîðìàòå MS Word (îò÷åòû â
äðóãèõ ôîðìàòàõ íå ïðèíèìàþòñß).
Žöåíî÷íûé áàëë çà âûïîëíåííóþ �ƒ� âûñòàâëßåòñß â
çàâèñèìîñòè îò ïîëíîòû è êà÷åñòâà ïðîäåëàííîé ðàáîòû. ’àêæå ñòîèò ó÷èòûâàòü,
÷òî ïðè îòñóòñòâèè â îò÷åòå èëè íåâûïîëíåíèè îäíîé èç ëàáîðàòîðíûõ ðàáîò
îöåíî÷íûé áàëë óìåíüøàåòñß íà 4, ò.å. ìàêñèìàëüíûé âåñ êàæäîé ðàáîòû ñîñòàâëßåò
4 áàëëà â îò÷åòå �ƒ� (ïîäðîáíåå î ïîðßäêå àòòåñòàöèè ìîæíî óçíàòü çäåñü: http://vt.cs.nstu.ru/~malyavko/ParProgrO/Rating.htm).