2. gyakorlat
A FORALL
utasítás
Gyökszámítás
Olvassunk be 100 valós értéket egy fájlból, majd számítsuk ki mindegyik négyzetgyökét!
PROGRAM sqroot;
VAR A: ARRAY [1..100] OF REAL;
i: INTEGER;
BEGIN
FOR i := 1 TO 100 DO
Readln(A[i]);
FOR i := 1 TO 100 DO
A[i] := SQRT(A[i]);
FOR i := 1 TO 100 DO
Writeln(A[i]);
END.
Vizsgáljuk meg a futási időt az elemszám függvényében! Próbáljuk megbecsülni ez alapján az időbonyolultságot!
A középső, számításokat végző
FOR
ciklust cseréljük kiFORALL
ciklusra, és nézzük meg, hogy mennyi a párhuzamos futási idő és a speed-up!Csoportosítsuk a számítási lépéseket a
GROUPING
kulcsszó segítségével, és vizsgáljuk meg, hogy a csoportméret függvényében hogyan változik a futási idő!
Optimális csoportméret számítása
Vezessük be az alábbi jelöléseket!
\(c\): egy processz létrehozási ideje [\(ms\)]
\(G\): a csoportok mérete (az egy processz által végrehajtandó maximális lépésszám)
\(n\): a feladat elvégzéséhez szükséges lépések száma
\(d\): egy számítási lépés végrehatjási ideje [\(ms\)]
\(T\): a számítás végrehajtásához szükséges futási idő.
Feltételezzük, hogy a futtatókörnyezet a processzeket egyidejűleg hozza létre és egyszerre indítja el a számítást.
Hogyan határozhatjuk meg a processzek számát? (Jelöljünk \(p\)-vel!)
Ábrázoljuk Gannt diagramon, hogy hogyan adódik a teljes futási idő!
Írjuk fel a futási idő számítását!
Ismert \(c, d, G\) értékek esetén határozzuk meg az optimális processz számot!
Hogyan tudnánk megbecsülni a \(c\) és \(d\) értékeket? Próbáljuk ezt megtenni!
Ábrázoljuk Gannt diagramon azt az esetet, hogy ha a processzek rögtön elindulnak, amint a futtatókörnyezet létrehozta őket!
Egymásba ágyazott FORALL
ciklusok
Készítsünk egy programot, amelyik 10000 beolvasott valós érték összegét számítja ki!
Vizsgáljuk meg a
FOR
ésFORALL
ciklusos változatok futási idejét!Hogyan lehetne több szinten
FOR
ésFORALL
ciklusok használatával megoldani a problémát?
További feladatok
Tekintsük át a
ranksort
nevű programot!Implementáljuk a mátrix szorzás műveletet soros és párhuzamosított program formájában!
Vizsgáljuk meg a változók hatóköréből adódó problémákat!