Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: pupek 25. 01. 2019, 08:34:33
-
mate nejake zkusenosti s pouzivanim instrukci SSE, AVX v gcc?
napr. maticove operace.
rychlost; nebo pouzivat radeji CUDA, OpenCL ?
-
Je nějaký důvod autovektorizaci nepoužít, když programuješ maticové operace?
-
mate nejake zkusenosti s pouzivanim instrukci SSE, AVX v gcc?
napr. maticove operace.
rychlost; nebo pouzivat radeji CUDA, OpenCL ?
Nějaké zkušenosti by byly. Akorát na tvůj dotaz je hodně těžké radit.
Co použít vychází kompletně z toho, co chceš vůbec dělat. Některé problémy se vektorizovat takřka nedají a u jiných to znamená kompletně překopat datové struktury. U gpgpu platí úplně to samé.
Jestli ti jde jen o maticové operace, tak bych doporučoval se vybodnout na vlastní implementaci a použít třeba Eigen.
-
mate nejake zkusenosti s pouzivanim instrukci SSE, AVX v gcc?
napr. maticove operace.
rychlost; nebo pouzivat radeji CUDA, OpenCL ?
Nějaké zkušenosti by byly. Akorát na tvůj dotaz je hodně těžké radit.
Co použít vychází kompletně z toho, co chceš vůbec dělat. Některé problémy se vektorizovat takřka nedají a u jiných to znamená kompletně překopat datové struktury. U gpgpu platí úplně to samé.
Jestli ti jde jen o maticové operace, tak bych doporučoval se vybodnout na vlastní implementaci a použít třeba Eigen.
dik za ten odkaz na eigen.
-
V GCC se tohle pouziva skrze intrinsics, takze staci includovat mmintrin.h / xmmintrin.h / emmintrin.h - pro mmx, sse, sse2 a pak kazda instrukce je pristupna jako jednotlive funkce, kdyz to neprezenete s poctem registru, tak se vam to prelozi vlastne 1:1 do asm.
Pokud potrebujete jen high level operace nad maticema.. tak se podivejte po nejake knihovne co tu optimalizaci za vas udelala,
viz prehled zde: https://en.wikipedia.org/wiki/Comparison_of_linear_algebra_libraries
-
Používám Volk (http://libvolk.org/, mimochodem zdrojáky jsou čitelné a dá se inspirovat) a dělal jsem pár věcí přes intrinsics. Intel má na zkoumání hezké klikátko https://software.intel.com/sites/landingpage/IntrinsicsGuide/.
-
OpenCL je generické API pro CPU i GPU. Na CPU smysl nemá, to už je lepší psát přímo, například AVX512 výkon zvyšuje brutálně, zvlášť když se použije ICC. GPU může být u některých úloh značně rychlejší, ale má-li vlastní RAM, je třeba počítat s latencí (podle rychlosti směrnice). Obecně je většinou nejlepší použít prostě nějakou knihovnu, která je optimalizovaná a použije nejrychlejší implementaci podle dostupné technologie (AVX2/512 apod.).