Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)

Podobné prezentace


Prezentace na téma: "● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)"— Transkript prezentace:

1 ● SWIG - Simplified Wrapper and Interface Generator ● http://www.swig.org/ + google a diskusní fóra http://www.swig.org/ ● nástroj zjednodušující (a sjednocující) napojení knihoven v C/C++ na jazyky:  python(odzkoušeno)  perl  java (odzkoušeno)  tcl, csharp, ruby, php, a další Wrapovani C/C++ pro Python - SWIG

2 SWIG – základní filosofie ● pro C++ třídu je dobré napsat soubor rozhraní modul.i ve formátu SWIGu – viz dále ● na soubory rozhraní se pustí swig -python -I[...] -c++ -o modul_wrapp.cpp modul.i který vygeneruje  soubor který se „includuje“ v cílovém jazyce (např. modul.py)  soubor modul_wrap.cpp, který je třeba přeložit (liší se v závislosti na cílovém jazyce) ● je třeba vygenerovat dynamickou knihovnu z wrapované knihovny, vygenerovaného.cpp a z knihovny cílového jazyka (někdy není ale třeba)

3 Seznamovací příklad ● původní třída (pokus.h): class Pokus { public: int metoda1(int a, float b); void metoda2(int a); float metoda3(char * str); private: jakékoli další metody a atributy }; ● soubor rozhraní (pokus.i) %module pokus { include ''pokus.h'' } class Pokus { public: int metoda1(int a, float b); void metoda2(int a); };

4 SWIG – rozšíření metod ● je možné možnosti původní třídy rozšířit nebo zjednodušit volání jejich metod: class Pokus { public: int metoda1(int a, float b); void metoda2(int a); %extend { void metoda4(float b) { self->metoda1(123, b); } } }; ● tělo rozšiřující metody lze napsat přímo do sekce %extend{}

5 SWIG – šablony ● v.i souboru se definují stejně jako „normální“ třídy: template class Sablona { public: int metoda1(Type a); void metoda2(Type a, int b); }; ● je možné je i rozšiřovat %extend{} ● je ale nutné v.i specifikovat varianty šablon, které se pak budou volat v cílovém jazyce: %tempate(SablonaLong) Sablona %tempate(SablonaChar) Sablona

6 SWIG – „vychytávky“ ● metody vracející alokované objekty: %newobject trida::metoda; (stačí jméno metody) ● konstanty (definované jako #define VALUE 10) %constant int value = VALUE; ● další speciality – dotaz na mě a pokud nebudu vědět tak gooooooogle a diskusní fóra

7 SWIG – máme wrapnuté pro python ● fonetickou transkripci z ERISe ● modul generování prozodie (monotónní, pravidlová) ● modul syntézy ● pokud chcete použít bude lepší osobní konzultace – dám wrapnutou knihovnu + ukázkový příklad

8 python + paralelní akce ● pokud máte utilitky v pythonu které něco dělají (výpočty nebo analýza souborů), je možné je snadno spustit paralelně na Konosu ● udělal jsem modul mpi_pypar.py který implementuje základní filozofii modelu „farmer-worker“ ● použití velmi jednoduché – stačí implementovat 2 metody pozn. „farmer“ rozděluje úlohy paralelně běžícím „workerům“, kteří je zpracovávají a posílají výsledky zpět „farmerovi“

9 mpi_pypar.py – ukázka Farmer: import mpi_pypar # class MyFarmer(mpi_pypar.Farmer) : # Pretizena metoda: def give_tasks(self) : res = 0 # Zadavej ukoly for i in range(5000) : res += self.give_task( ("sum ", […]) ) # cekej, na zbytek vysledku a pricti reslts = self.wait_all() for r in reslts : res += r Worker: import mpi_pypar # class MyWorker(mpi_pypar.Worker) : # Pretizena metoda: def do_task(self, taskData) : return math.sum(taskData[1])

10 mpi_pypar.py – ukázka ● Spusti se: mpi_pypar.start(MyFarmer(), MyWorker()) ● Celý skript je (v PBS) třeba spouštět příkazem mpirun ● Další metody:  mpi_pypar.Farmer.num_workers()  mpi_pypar.Worker.get_id() ● Více informací viz osobní konzultace


Stáhnout ppt "● SWIG - Simplified Wrapper and Interface Generator ● + google a diskusní fóra ● nástroj zjednodušující (a sjednocující)"

Podobné prezentace


Reklamy Google