Feldspar: Nyelv digitális jelfeldolgozáshoz

Hasonló dokumentumok
A Feldspar fordító, illetve Feldspar programok tesztelése

Eötvös Loránd Tudományegyetem, Informatikai Kar ELTE Informatikai Kar, dec. 12.

Funkcionális Nyelvek 2 (MSc)

Projektmunka és tehetséggondozás az informatikában

2019, Funkcionális programozás. 4. el adás. MÁRTON Gyöngyvér

Programok értelmezése

2018, Funkcionális programozás

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Komputeralgebra Rendszerek

Programozási nyelvek (ADA)

Tulajdonságalapú tesztelés

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Szkriptnyelvek. 1. UNIX shell

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

3. Gyakorlat Ismerkedés a Java nyelvvel

2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

DSL-eket kétféleképpen szoktak megvalósítani:

2018, Funkcionális programozás

Operációs rendszerek funkcionális modellezése

Bevezetés az informatikába

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

1. Jelölje meg az összes igaz állítást a következők közül!

2018, Funkcionális programozás

2016, Funkcionális programozás

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Smalltalk 2. Készítette: Szabó Éva

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Kiterjesztések sek szemantikája

Occam 1. Készítette: Szabó Éva

2018, Funkcionális programozás

Programozási nyelvek II.: JAVA, 4. gyakorlat

A Python programozási nyelv

Matematikai programok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

LibreOffice Makró Basic

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Szoftver-modellellenőrzés absztrakciós módszerekkel

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Fordítóprogramok szerkezete avagy Mi történik Pascalban mikor F9-et nyomunk?

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Programozás II. 2. Dr. Iványi Péter

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

2018, Funkcionális programozás

Matematikai problémák vizsgálata a Maple programcsomag segítségével

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Java I. A Java programozási nyelv

Párhuzamos programozás Haskellben (folytatás)

Java II. I A Java programozási nyelv alapelemei

Operációs Rendszerek II. labor. 2. alkalom

Bemutatkozik az ELTE Informatikai Kara

Matematikai programok

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

S2-01 Funkcionális nyelvek alapfogalmai

BASH script programozás II. Vezérlési szerkezetek

C++ Standard Template Library (STL)

SZTE Nyílt Forrású Szoftverfejlesztő és Minősítő Kompetencia Központ

Ködös határ (Félreértés, hiba)

Programozási nyelvek (ADA)

Programozási nyelvek II.: JAVA, 4. gyakorlat

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Kifejezések. Kozsik Tamás. December 11, 2016

Üzleti lehetőségek a nyílt forráskódú fejlesztésben

A C# programozási nyelv alapjai

Java II. I A Java programozási nyelv alapelemei

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Delphi programozás IV.

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Labor gyakorlat Mikrovezérlők

Térinformatikai programozás Pythonban

és az instanceof operátor

Modern rendszerprogramozási nyelvek

JAVA ALKALMAZÁSOK 1. ELŐADÁS 2/22/2017 1

Maximum kiválasztás tömbben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Számítógépes Hálózatok

Az F# nyelv erőforrásanalízise

Fordító Optimalizálás

8.3. AZ ASIC TESZTELÉSE

Imperatív programozás

Kommunikációs rendszerek teljesítőképesség-vizsgálata

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

6. Közös változóval rendelkező párhuzamos program, Közös változó,

Labor gyakorlat Mikrovezérlők

15. Programok fordítása és végrehajtása

3D-s technológiák a játékfejlesztésben UDK bevezetés

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

S z á m í t ó g é p e s a l a p i s m e r e t e k

Bevezetés a programozásba 2

Alkalmazott Modul III 6. gyakorlat. Objektumorientált programozás: öröklődés és polimorfizmus

Python tanfolyam Python bevezető I. rész

C# osztályok. Krizsán Zoltán

A Python programozási nyelv

Nyelvek típusrendszere (jegyzet)

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Algoritmizálás + kódolás C++ nyelven és Pascalban

Átírás:

Feldspar: Nyelv digitális jelfeldolgozáshoz Eötvös Loránd Tudományegyetem, Budapest Támogatja: Ericsson, KMOP-1.1.2-08

Feldspar funkcionális beágyazott nyelv Feldspar digitális jelfeldolgozáshoz párhuzamossághoz

Feldspar funkcionális beágyazott digitális jelfeldolgozáshoz nyelv párhuzamossághoz

A Feldspar csapata Ericsson (Göteborg, Svédország) Chalmers University of Technology (Göteborg, Svédország) ELTE (Budapest, Magyarország)

A Feldspar csapata Ericsson (Göteborg, Svédország) Chalmers University of Technology (Göteborg, Svédország) ELTE (Budapest)

A Feldspar csapata Ericsson Chalmers University of Technology (Göteborg) ELTE (Budapest)

A Feldspar csapata Ericsson Chalmers University of Technology (Göteborg) ELTE (Budapest)

A Feldspar rövid története 2009-ben indult Támogatás: Ericsson Egyéb állami hozzájárulások: Swedish Foundation for Strategic Research Nemzeti Fejlesztési Ügynökség Nyílt forráskódú projekt, BSD3 licenc A fejlesztés Subversion és Trac segítségével történik

Motiváció chip Valós idejű DSP hardver C nyelv Processzorfüggő utasítások Olvasható Hatékony kód Hardverfüggő programok A programokat nehéz... megírni karbantartani új hardverhez igazítani

Célkitűzések Magasszintű nyelv Hardverfüggetlen Tesztelhető a hardvertől függetlenül Több különböző célplatform: Hardverek támogatása Hardvergyártók saját maguk is fejleszthetnek hozzá platformot

A jelenlegi állapot 0.4 2011. április Nyelvi alapok arithmetikai-, logikai- és bitműveletek Párhuzamos vektorművetelek Streamek Mátrixok Fordítás: C99, Texas Instruments kiterjesztések Fejlesztés alatt: LLVM támogatás; Feldspar,,operációs rendszer''

Telepítés A Haskell nyelvet használjuk Telepítés: A szabványos Haskell csomagkezelő Nyelvi elemek, értelmező cabal install feldspar-language cabal install feldspar-compiler Feldspar kód írása Betöltés Haskell értelmezőbe: kiértékelés / fordítás Fordítás C-re Parancssoros Feldspar fordító

Nyelvek beágyazása Beágyazás (embedding): egy programozási nyelvet egy másik felhasználásával dolgozunk ki Beágyazott nyelv (embedded language) Gazdanyelv (host language) A nyelv elemeivel absztrakt szintaxisfákat hozunk létre Értelmező: a szintaxisfát értelmezi Fordító: a szintaxisfából kódot állít elő

Példa nyelvbeágyazásra data Expr = True False Not Expr And Expr Expr Or Expr Expr data Prog = Skip Print Expr Seq Prog Prog If Expr Prog (&&) :: Expr Expr Expr a && b = And a b ( ) :: Expr Expr Expr a b = Or a b cmds cmds cmds cmds eval :: Prog [Bool] eval p = compile :: Prog String compile p =... :: [Prog] Prog [] = Skip [p] = p (p:ps) = Seq p (cmds ps) myprogram :: Prog myprogram = cmds [ Print True, If (False && True) (Print False) ]

Miért érdemes beágyazni? Lexer Parser Szemantikus ellenőrzés Prototípus gyors elkészítése Gazdanyelv: nagy kifejezőerejű metanyelv, amellyel beágyazott programok hozhatóak létre genprog = cmds [ if n % 2 == 0 then Print True else Print False n [0..99] ] Ellenben: a forrásszöveg a fordító számára nem áll rendelkezésre Hogyan csináljunk nyomkövetést akkor?

Haskell Tiszta Lusta Erős típusrendszer Remekül használható gazdanyelvként: Minimalista szintakszis A számok túlterhelhetőek http://haskell.org

Vektor műveletek map :: (a b) Vector a Vector b fold :: (a b a) a Vector b a (++) :: Vector a Vector a Vector a reverse :: Vector a Vector a take :: Data Length Vector a Vector a zipwith :: (a b c) Vector a Vector b Vector c és a Haskell listafüggvényei Feldsparban

Példa scalarprod :: Numeric t => Vector (Data t) -> Vector (Data t)-> Data t scalarprod a b = sum (zipwith (*) a b)

Példa Egyszerű fordítás scalarprod :: Numeric t => Vector (Data t) -> Vector (Data t)-> Data t scalarprod a b = sum (zipwith (*) a b) for(i=0; i<len; ++i) { temp[i] = in1[i] * in2[i]; } for(i=0; i<len; ++i) { out = out + temp[i]; }

Példa Fusion alkalmazása scalarprod :: Numeric t => Vector (Data t) -> Vector (Data t)-> Data t scalarprod a b = sum (zipwith (*) a b) for(i=0; i<len; ++i) { out = out + in1[i] * in2[i]; }

Fusion...? Az (egyszerűsített) vektor típusunk: data Vector a = Vector { length :: Data Length, idxfun :: Data Index a }

Fusion...? Az (egyszerűsített) vektor típusunk: data Vector a = Vector { length :: Data Length, idxfun :: Data Index a } map, reverse, map f (Vector n ixf) = Vector n (f. ixf) reverse (Vector n ixf) = Vector n (\i ixf (n 1 - i))

Fusion...? Az (egyszerűsített) vektor típusunk: data Vector a = Vector { length :: Data Length, idxfun :: Data Index a } map, reverse, map f (Vector n ixf) = Vector n (f. ixf) reverse (Vector n ixf) = Vector n (\i ixf (n 1 - i)) Fordítási séma: for(i=0; i<n; ++i) { out[i] = ixf i }

Összefoglalás Bővebben itt lehet olvasni a Feldsparról: http://feldspar.inf.elte.hu/ Köszönjük a figyelmet!