HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

A hetedik (nyolcadik) labor

2011.03.28. 08:49 nb

É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:

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
[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
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

 

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
[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
láthatólag működik, nem rontottuk el...

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
[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
Jó mulatság, férfi munka volt!

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!

1 komment

Címkék: labor openmp exor boost.asio qt networking

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr922777682

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

eiborn 2011.03.28. 18:30:09

Az OpenMP-s labormérés az EXOR-os példára:

imagerz.com/QFdDXA8GAlQ
süti beállítások módosítása