Domov > Obvestila > Andrej Muhič: Matlabove mex funkcije, uporaba BLASa in LAPACKa v C++-u (2. del)

Andrej Muhič: Matlabove mex funkcije, uporaba BLASa in LAPACKa v C++-u (2. del)

Datum objave: 22. 10. 2013
Vir: Seminar za numerično analizo
Sreda 23. 10. 2013 od 10h do 11h, soba 3.06 na Jadranski 21
 

Predavanje od 10h do 11h 


Andrej Muhič: Matlabove mex funkcije, uporaba BLASa in LAPACKa v C++-u (2. del)

 

Kdor lahko, naj sabo prinese prenosnik, da bomo uporabo mex funkcij preizkusili na konkretnem primeru, kjer bomo uporabili predpripravljen projekt v Microsoft Visual Studiju.

Prav tako bodo na volji zgledi v c++-u, ki bodo omogočali preprost

preizkus "wrapper" knjižnic kot so Eigen in Armadilo in uporabo

visoko zmogljvih knjižnic.

 

Ogledali si bomo kako lahko C/C++ uporabimo v Matlabu s pomočjo mex funkcij. Pokazali bomo nekaj primerov, kot je nalaganje polne matrike, razpršene matrike, kjer lahko standardne funkcije pohitrimo za faktor večji kot 10. Poleg tega si bomo ogledali še bolj obširen primer, kjer bomo implementirali nekaj funkcij za delo s tekstom (rudarjenje podatkov). Kot rezultat bomo napisali funkcijo v Matlabu, ki za podan tekst ločen s presledki, vrne razpršen vektor s frekvencami elementov. To omogoča preprosto delo in močno olajša uporabo.

 

Če ostane kaj časa, si bomo ogledali še nekaj primerov uporabe LAPCAKA in BLASA. Najprej na standarden način, preko fortranskega vmesnika za c in c vmesnika. Pokazali bomo, da je naivna implementacija, recimo množenje z dvema for zankama, ponavadi slaba izbira.

Nato si bomo uporabo LAPCAKA in BLASA močno olajšali z uporabo "wrapper" knjižnic kot so Eigen in Armadilo. Knjižnici omogočata avtomatsko opimizacijo izrazov kot so A*B*C, kot tudi enostavno uporabo visoko zmogljivih knjžnic za LAPACK in BLAS, če so le te na voljo.

 Armadillo primer

 

mat X = randu<mat>(5,5); 
 

mat Y = randu<mat>(5,5); 
 

mat Z = X*Y; 
mat Q, R; 
qr(Q,R,X); 

Pretvorba kode iz Matlab sintakse:

Matlab/Octave -> Armadillo
Matlab/Octave->Eigen