Vědecké výpočty v Jave
Vědecké výpočty – Definice Cílem je řešení problémů reálného světa Nutnost využití ICT – současné problémy jsou příliš složité/časově náročné Obvykle jde o výpočty v pohyblivé řádové čárce (floating point arithmetic) Většinou jsou prováděny na superpočítačích, distrubuovaných počítačových sítích (grid computing), nebo na samostatných počítačových platformách (cloud computing)
Vědecké výpočty – využití Využívá se v odvětvích, kde je třeba zpracovat velké množství dat, např.: Bioinformatika, výpočetní biologie Chemoinformatika, výpočetní chemie Výpočetní matematika, výpočetní statistika Výpočetní fyzika Finanční modelování, výpočetní ekonomie V CERNu se zpracovává okolo 1 petabytu dat denně
Technologie Pro vědecké výpočty se využívají různé programovací jazyky a technologie FORTRAN C/C++ Python MATLAB Mathematica R Scala
Proč Java Objektově orientovaný jazyk Garbage Collector Velké množství programátorů Portabilita Již neplatí, že programy v Javě jsou pomalé – ve vědeckých výpočtech obecně dosahují okolo 50%, v některých případech však i 90% rychlosti programů psaných ve Fortranu nebo C/C++ Podpora multithreadingu
Nevýhody Javy Nepodporuje komplexní čísla Nemožnost přetěžování operátorů -> často nevzhledná syntaxe Přes značné zrychlení nedosahuje výkonnosti programů napsaných ve Fortranu, C, atd.
Knihovny Colt Apache Commons Math ND4J EJML jblas MTJ ojAlgo
Porovnání – Pure Java
Porovnání – Java + nativní kód
Porovnání – Java + nativní kód
Porovnání
Colt Vyvinut v CERNu Podpora vícerozměrných polí, histogramů, simulace Monte Carlo a dalších Poslední verze vydána 9. září 2004, codebase byla integrována do knihovny Parallel Colt, která obsahuje kompletní funkcionalitu knihovny Colt a přidává podporu multithreadingu, specializované maticové datové struktury, netlib-java a další http://dst.lbl.gov/ACSSoftware/colt/index.html
jblas Knihovna založená na BLAS a LAPACK – v podstatě wrapper nad BLAS a LAPACK rutinami – programátor se nemusí zabývat volacími konvencemi Fortranu atd. http://jblas.org/
Apache Commons Math Operace s komplexními čísly, maticemi, vektory, atd. Knihovna je vhodná pro menší množství dat http://commons.apache.org/proper/commons- math/
ojAlgo Nejrychlejší pure Java knihovna zaměřená na matematiku, lineární algebru a optimalizaci, nezávislá na jiných knihovnách http://ojalgo.org/
Efficient Java Matrix Library (EJML) Knihovna zaměřená na vyrovnanou rychlost u malého i velkého množství dat 3 způsoby interakce: procedurální – obecně nejrychlejší, SimpleMatrix – objektový, Equations – symbolický rovnicový zápis připomínající MATLAB http://ejml.org/
ND4J Podpora CUDA GPU Sesterská knihovna ND4S (Scala) syntakticky napodobuje populární Python knihovnu Numpy http://nd4j.org/
MTJ Nejrychlejší knihovna pro vědecké výpočty – je založena BLAS a LAPACK Využívá netlib-java -> automaticky použije optimalizovaný nativní kód https://github.com/fommil/matrix-toolkits-java/
Odkazy Benchmarks - http://lessthanoptimal.github.io/Java-Matrix- Benchmark/ http://citeseerx.ist.psu.edu/viewdoc/download?rep=rep1 &type=pdf&doi=10.1.1.217.5795