• Nem Talált Eredményt

1. Fordítóprogram

1.12. példa - figure.R

# Konyvtarak betoltese library('ggplot2') library('reshape') library('Cairo') library('grid')

# Sztringek beallitasa

plottitle <- "Teszt grafikon"

xlabel <- c(expression(paste(alpha)), " parameter") ylabel <- "Ido (s)"

filename <- "test.pdf"

plotlabels <- c("Szekvencialis", "Parhuzamos")

# Adatok betoltese

data0 <- read.table('results-seq.dat') data1 <- read.table('results-par.dat')

d <- data.frame(data0$V2, data0$V1, data1$V1) colnames(d) <- c('alpha', 'runtime0', 'runtime1') d <- melt(d, id='alpha', variable_name='series')

# Grafikon elkeszitese

cairo_pdf(filename, width=20, height=8) p<-ggplot(d,

aes_string(x=names(d)[1], y=names(d)[3], colour=names(d)[2]), labeller=label_parsed) +

geom_point(size=4) + geom_line(size=1.5) + labs(title=plottitle) + xlab(xlabel) +

ylab(ylabel) +

scale_colour_manual(values=c("black", "blue", "red", "green", "purple"), name="",

labels=plotlabels,

guide=guide_legend(keyheight=unit(2, "line"), keywidth=unit(5, "line"))) +

theme_gray(24) +

theme(legend.position="bottom") print(p)

dev.off()

A szkriptet az adatfájlokat tartalmazó könyvtárban futtassuk le az user@home> R -f figure.R

utasítással. Az eredményeként előálló grafikon az 1.1. ábrán látható.

1.1. ábra - A teszt grafikon.

A bemutatott szkript nagyon általános, kevés módosítással az R nyelv mélyebb ismeret nélkül is alkalmazható tetszőlegesen sok adatsorra. Az első sorokban betöltjük a szkript értelmezéséhez szükséges csomagokat. Az utasítások második blokkjában beállítjuk a grafikonon megjelenő sztringeket. A plottitle változó kapja értékül a grafikon címét, a xlabel az x-tengely és az ylabel az y-tengely címkéjét. A filename változó értéke lesz az előálló fájl neve, a formátum és így a fájl kiterjesztése is PDF. A plotlabels változó tartalma egy lista, amely a grafikonon megjelenő törtvonalak címkéit tartalmazza. Az x-tengely címkéjének beállítása példával szolgál rá, hogy hogyan helyezhetünk matematikai szimbólumokat a sztringekbe. Az adatok betöltése során az adatfájlok tartalmát a data0 és data1 változókba nyitjuk meg, melyek speciális, az R nyelvre jellemző lista típusú változók, amelyek táblázat formájában tartalmazzák a fájlokban szereplő adatok oszlopait. Ha az utasításokat nem egy szkripten keresztül, hanem rendre az R parancsértelmezőben adjuk ki, nyomon követhetjük a változók tartalmának alakulását, ezzel benyomást szerezve az R működéséről.

> data0 V1 V2 1 8.26 1.0 2 8.46 1.1 3 10.30 1.2 4 10.50 1.3 5 14.85 1.4 6 18.40 1.5 7 20.33 1.6 8 20.14 1.7 9 24.65 1.8 10 28.21 1.9 11 30.10 2.0

>

A data.frame függvény a tetszőleges hosszúságú paraméterlistáján szereplő adatsorokat összefűzi egyetlen adatszerkezetté, amelyet hozzárendelünk a d változóhoz. A d által hivatkozott adatszerkezet tartalma

> d

data0.V2 data0.V1 data1.V1 1 1.0 8.26 5.26 2 1.1 8.46 5.46 3 1.2 10.30 5.30 4 1.3 10.50 6.50 5 1.4 14.85 8.85 6 1.5 18.40 10.40 7 1.6 20.33 11.33 8 1.7 20.14 11.14 9 1.8 24.65 13.65 10 1.9 28.21 15.21

11 2.0 30.10 16.10

>

A következő utasításban a d oszlopait könnyen értelmezhető nevekkel látjuk el, hogy kényelmesen hivatkozhassunk rájuk. Az utasítás végrehajtása után d tartalma

> d

alpha runtime1 runtime2 1 1.0 8.26 5.26 2 1.1 8.46 5.46 3 1.2 10.30 5.30 4 1.3 10.50 6.50 5 1.4 14.85 8.85 6 1.5 18.40 10.40 7 1.6 20.33 11.33 8 1.7 20.14 11.14 9 1.8 24.65 13.65 10 1.9 28.21 15.21 11 2.0 30.10 16.10

Az utolsó lépésben a melt függvénnyel alakítjuk az adatokat a ggplot2 csomag függvényei által kezelhető és a vizualizációhoz szükséges formátumúra. A melt végrehajtása után a d adatszerkezet tartalma

> d

alpha series value 1 1.0 runtime1 8.26 2 1.1 runtime1 8.46 3 1.2 runtime1 10.30 4 1.3 runtime1 10.50 5 1.4 runtime1 14.85 6 1.5 runtime1 18.40 7 1.6 runtime1 20.33 8 1.7 runtime1 20.14 9 1.8 runtime1 24.65 10 1.9 runtime1 28.21 11 2.0 runtime1 30.10 12 1.0 runtime2 5.26 13 1.1 runtime2 5.46 14 1.2 runtime2 5.30 15 1.3 runtime2 6.50 16 1.4 runtime2 8.85 17 1.5 runtime2 10.40 18 1.6 runtime2 11.33 19 1.7 runtime2 11.14 20 1.8 runtime2 13.65 21 1.9 runtime2 15.21 22 2.0 runtime2 16.10

A d adatszerkezet soraiban helyezkednek el a vizualizálandó rekordok. A series oszlop azonos értékeihez tartozó rekordok adják az egyes törtvonalak pontjainak koordinátáit. Az alpha mezők értéke adja az x-koordinátát és a value mező értéke az y-koordinátát.

Ha újabb adatsort szeretnék bevenni a vizualizációba, és feltesszük, hogy az adatok a korábbiakhoz hasonló szerkezetű fájlban vannak, az alábbi lépéseket kell követnünk:

1. meg kell nyitnunk a fájl tartalmát például a data2 változóba,

2. data2 változó megfelelő oszlopát hozzá kell adnunk a data.frame függvény paraméterlistájához, hogy az adatsor bekerüljön a d adatszerkezetbe,

3. ki kell egészítenünk az oszlopok neveit tartalmazó listát egy tetszőleges, például "runtime2" sztringgel és az adatsorok címkéit tartalmazó plotlabels listát az adatsor nevével.

Az módosított kódrészlet tehát az alábbi formát ölti.

plotlabels <- c("Szekvencialis", "Parhuzamos", "Parhuzamos 2")

# Adatok betoltese

data0 <- read.table('results-seq.dat') data1 <- read.table('results-par.dat') data2 <- read.table('results-par2.dat')

d <- data.frame(data0$V2, data0$V1, data1$V1, data2$V1) colnames(d) <- c('alpha', 'runtime0', 'runtime1', 'runtime2')

A szkript bővítésekor arra kell csak ügyelnünk, hogy a plotlabels változó tartalma és data.frame paraméterlistája összhangban legyen: a data.frame első paramétere a független alpha értékeket tartalmazó adatsor, a következő három paraméter sorrendje pedig meg kell feleljen az őket értelmező plotlabels lista tartalmának. A bemutatott szkriptet tehát az R nyelv mélyebb ismerete nélkül is felhasználhatjuk adatsorok vizualizációjára. Az R programozási nyelv iránt érdeklődő olvasók számára ajánljuk az R hivatalos oldalán elérhető oktatási anyagokat és az [6] könyvet, a ggplot2 csomag vizualizációt támogató eszközeinek leírása pedig a [18] könyvben található meg.

4. Feladatok

1. (★) Nyissuk meg az ,,Első cmake projektünk'' szakaszban cmake segítségével létrehozott GNU Makefile -okat és értelmezzük azok tartalmát a következő rövid leírás segítségével! A GNU Makefile szkriptek un.

szabályokból állnak. Egy szabály szerkezete a következő:

target : elofeltetelek_listaja vegrehajtando_utasitas

A make alkalmazás futtatásakor megadhatjuk, hogy melyik Makefile-ban található targetek közül melyiket szeretnénk megvalósítani. Ha nem adunk meg targetet, akkor a felírás sorrendjében első targetet valósítja meg a make a következő lépések végrehajtásával:

a. Az előfeltételek listája targetekből és fájlnevekből áll. A make alkalmazás a felírás sorrendjében értelmezi a előfeltételek listáját:

• ha a Makefile-ban definiált másik targetet talál, megvalósítja azt;

• ha fájlnevet talál, ellenőrzi, hogy létezik-e a fájl: ha nem, megszakad az értelmezés, ha igen, folytatódik az előfeltételek listájának feldolgozása;

• ha az előfeltételek listáján szereplő azonosító nem fájlnév és nem is target, megszakad a Makefile értelmezése.

b. Az előfeltételek listájának feldolgozása után végrehajtja a szabály utolsó elemeként megadott utasítást.

2. (★) Vizsgálja meg és értelmezze a statikus és dinamikus programkönyvtárak méreteinek különbségét!

3. (★) Készítsen tesztalkalmazást, amely összetettebb függvényeket tartalmaz, például implementálja valamelyik gyakran használt rendezési algoritmust, és grafikonok segítségével hasonlítsa össze a rendezendő tömb méretének függvényében a futási időket debug és release fordítások esetén!

2. fejezet - Párhuzamos programok