Éppen a szakmai napok miatt maradnak el laborok így a már eddig sem egyértelmű számozásuk tovább borul...
Laborvezetőknek
Az első hat előadás laborkártyái közül válogatva kérdezzük végig a hallgatóságot! Arra külön figyeljünk, hogy aki nem tudott egy kártyát, az mindenképpen kapjon a következő laboron is!
Hallgatóknak
A szokásos: sosem árt előre készülni a laborra, nálam szereztek így kisbajnokság trófeát. Ha többen is elkészítik, akkor holtversenyben mindannyian megkapják a "trófeákat". Illetve a laborkártyákat nem a beugró helyett találtuk ki, hanem hogy megadja a rendszeres heti készülés alaphangját annak is, aki nem tud, vagy nem akar részt venni a vadászatban. De ha de facto ilyen funkciója is kialakul, az sem baj. Más: lassan lehet védeni a teljesítés egyik szükséges feltételét.
Már komoly mennyiségű munkát elvégeztünk ebben a félévben (eddig is, de még sok élmény vár :), ezért aki nem készült heti gyakorisággal, az úgy érezheti: elmélyült körülötte a víz. Itt a tavaszi szünet holnaptól, az érintve érzett hallgatóknak azt ajánlom, hogy pótolják be az elmaradt munkát, élményeket, tapasztalatokat, azaz programozzanak. Kezdjék ennek a blognak az elején és fogják fel olyan on-line tutoriálnak, ahol (lehetőleg) gyorsan választ is adunk a kommentben felmerült kérdésekre! Ha a programozás helyett a kurzust "átszervező" elmélkedésbe kezdenél, akkor kezd ezzel :)
Tematika
Az alábbi témák legtöbbjét próbáljuk lefedni a "7/8" gyakorlaton:
- korábbi laboron foglalkoztunk a berkeley socket C API-val: ez volt a multiplexelt, forkos, szemaforos osztott memóriás TCP szerver. Most C++-ból socketezünk.
- a tegnapi openMP-s labormérést végezd el a korábbi bevezető EXOR töréses példára
BN laborján
C++-ban használhatunk becsomagoló osztályos implementációkat, egy ilyet magunk is írunk majd az előadásban. A valóságbani használatra két komoly alternatíva van:
A félévben mindkettővel mélyebben is megismerkedsz majd. Most egy egyszerű TCP szervert írunk meg kezdetként, Qt konzolos alkalmazásként! Majd ezt párhuzamosítjuk.
Az OpenMP-s labormérést az EXOR-os példára (5 trófeáért) az alábbi lépéseken keresztül valósítsd meg:
SVN lerántása, tiszta szövegből titkos készítése (e.c-vel, 8 számjegyű kulccsal), t.c-vel brute force törés: [norbi@sgu labor8]$ svn co svn://hallg.inf.unideb.hu:2005/bevezetes
jó lassú, de a félév elején más volt a cél... viszont ha gondolkodás nélkül párhuzamosítjuk nem fog működni, hiszen ha külön szálak dolgoznak majd a "kulcs"-al és a "titkos"-al, akkor el is rontják egymásnak azokat... ezért át kell írnunk a t.c-t. Ezt a következő két képpel segítem, ahol az első mutatja, hogy a párhuzamos szálak egy saját kulcs kulccsal dolgoznak majd
[norbi@sgu labor8]$ cd bevezetes/C/bugylibicska/
[norbi@sgu bugylibicska]$ gcc e.c -o e -std=gnu99
[norbi@sgu bugylibicska]$ echo "Már komoly mennyiségű munkát elvégeztünk ebben a félévben (eddig is, de még sok élmény vár :), ezért aki nem készült heti gyakorisággal, az úgy érezheti: elmélyült körülötte a víz. Itt a tavaszi szünet holnaptól, az érintve érzett hallgatóknak azt ajánlom, hogy pótolják be az elmaradt munkát, élményeket, tapasztalatokat, azaz programozzanak. Kezdjék ennek a blognak az elején és fogják fel olyan on-line tutoriálnak, ahol (lehetőleg) gyorsan választ is adunk a kommentben felmerült kérdésekre! Ha a programozás helyett a kurzust "átszervező" elmélkedésbe kezdenél, akkor kezd ezzel :)"|./e 59934434 > titkos.szoveg
[norbi@sgu bugylibicska]$ cp titkos.szoveg ../exor/
[norbi@sgu bugylibicska]$ cd ../exor/
[norbi@sgu exor]$ gcc t.c -O3 -o t -std=c99
[norbi@sgu exor]$ time ./t <titkos.szoveg |grep 59934434
[norbi@sgu exor]$ time ./t <titkos.szoveg |grep 59934434
Kulcs: [59934434]
real 4m24.133s
user 4m23.699s
sys 0m0.037s
illetve a titkos buffer-ből is mindenki egy saját másolaton dolgozik:
s ezek után az exor() fgv.-ben már a dinamikusan foglalt buffer-be tesszük az eredményt:
for (int i = 0; i < titkos_meret; ++i)
{
buffer[i] = titkos[i] ^ kulcs[kulcs_index];
kulcs_index = (kulcs_index + 1) % kulcs_meret;
}
s persze a kiíratást is elintéztük korábban, a main-ben már nincs mit stb.
Futassunk most az új kódon párhuzamosság, azaz egyelőre OpenMP nélkül:
[norbi@sgu exor]$ gcc t.c -O3 -o t -std=c99
láthatólag működik, nem rontottuk el...
[norbi@sgu exor]$ time ./t <titkos.szoveg |grep 59934434
59934434Már komoly mennyiségű munkát elvégeztünk ebben a félévben (eddig is, de még sok élmény vár :), ezért aki nem készült heti gyakorisággal, az úgy érezheti: elmélyült körülötte a víz. Itt a tavaszi szünet holnaptól, az érintve érzett hallgatóknak azt ajánlom, hogy pótolják be az elmaradt munkát, élményeket, tapasztalatokat, azaz programozzanak. Kezdjék ennek a blognak az elején és fogják fel olyan on-line tutoriálnak, ahol (lehetőleg) gyorsan választ is adunk a kommentben felmerült kérdésekre! Ha a programozás helyett a kurzust átszervező elmélkedésbe kezdenél, akkor kezd ezzel :)
real 3m34.691s
user 3m33.855s
sys 0m0.069s
Párhuzamosan (for-os rész elé ne feledd: #pragma omp parallel for) pedig:
[norbi@sgu exor]$ gcc t.c -fopenmp -O3 -o t -std=c99
Jó mulatság, férfi munka volt!
[norbi@sgu exor]$ time ./t <titkos.szoveg |grep 59934434
59934434Már komoly mennyiségű munkát elvégeztünk ebben a félévben (eddig is, de még sok élmény vár :), ezért aki nem készült heti gyakorisággal, az úgy érezheti: elmélyült körülötte a víz. Itt a tavaszi szünet holnaptól, az érintve érzett hallgatóknak azt ajánlom, hogy pótolják be az elmaradt munkát, élményeket, tapasztalatokat, azaz programozzanak. Kezdjék ennek a blognak az elején és fogják fel olyan on-line tutoriálnak, ahol (lehetőleg) gyorsan választ is adunk a kommentben felmerült kérdésekre! Ha a programozás helyett a kurzust átszervező elmélkedésbe kezdenél, akkor kezd ezzel :)
real 1m10.466s
user 3m50.372s
sys 0m0.057s
PS.: utólag, de még most a labor előtt belegondolva: talán a hallgatóknak nem elég ajándék ma, hogy az Ő laboruk nem marad el, + szokásosan lesznek "súlytó" laborkártyák... így az első 3 egyedül dolgozó hallgatónak jóváírom a laboron a trófeákat!