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 ki FORALL 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 és FORALL ciklusos változatok futási idejét!

  • Hogyan lehetne több szinten FOR és FORALL 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!