Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilVlastimil Soukup
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.