TNL - numerická knihovna s podporou GPU

Cíl:

Cílem projektu je vytvořit vysoce efektivní a snadno použitelnou knihovnu pro numerické výpočty. Knihovna by měla mít podporu pro základní numerické metody jako konečné diference, konečně objemy nebo konečné prvky. Ty by měly být podpořeny výkonnými řešici lineárních i nelineárních systému. Plánuje se implementace multigridních metod a efektivních předpodmínění. Knihovna by měla efektivně využívat GPU, vícejádrové procesory a výpočetní klastry.

Stručný popis:

Knihovna hodně využívá šablon v C++, což zlepšuje její výkonnost a flexibilitu. Odtud také pochází její název Template Numerical Library. Podobných knihoven je pomerně dost, ale mnoho z nich je psáno v jazyce C tj. neobjektově. Často to znesnadňuje vývoj kódu využívající tyto knihovny. A jen málo numerických knihoven má opravdu nativní podporu pro GPU. Knihovna je postavena na rozhraní CUDA společnosti Nvidia. Z důvodů nedávného otevření standardu CUDA se do budoucna nepočítá s podporou OpenCL. Projekt je součástí CUDA Research Center na katedře matematiky na FJFI.

Co už knihovna umí a podporuje?

  • snadnou instalaci pomocí systému Cmake
  • obsahuje relativně pokročilý a snadno použitelný systém pro načítání vstupních parametrů výpočtů
  • jednotný systém pro snadnou správu paměti na CPU a GPU
  • efektivní formáty pro ukládání řídkých matic na GPU
  • efektivní řešiče lineárních soustav s podporou GPU, OpenMP
  • některé Rungovy-Kuttovy řešiče s podporou GPU, OpenMP a MPI
  • obsahuje řadu testovacích nástrojů pro zajištění spolehlivosti

Co se plánuje?

  • podpora aritmetiky s vysokou přesností
  • výpočty na více GPU
  • výpočty na GPU klastrech
  • rozhraní pro nestrukturované 2D a 3D sítě
  • multigridní metody
  • jednotná šablonová implementace pokročilých schémat z metod konečných diferencí, objemů a prvků se snadnou podporou GPU
  • metoda domain decomposition pro semi-implicitní a implicitní schémata pro výpočty na klastrech

Informace pro zájemce:

Zájemci o vývoj této knihovny se nemusí obávat studia náročné matematiky. Lze se zabývat i jen pokročilými optimalizacemi jak pro GPU, tak ale i pro vícejádrové procesory. Také není nezbytně nutné psát kód pro GPU. Student se může naučit práci na větším projektu v týmu. To obsahuje používání verzovacích nástrojů, psaní testů, dokumentace apod. Tím lze získat cenné zkušenosti do budoucna. Naopak, zájemci o náročné počítačové simulace mohou implementovat a testovat různá numerická schémata například pro simulace proudění. V obou případech je velmi pravděpodobné, že vytvořený kód bude v budoucnu využit při některých praktických projektech.

Kdo už na tomto tématu pracoval?

  • Vítězslav Žabka
    • Využití GPGPU pro řešení soustav lineárních rovnic, diplomová práce 2010
    • Využití GPGPU pro řešení soustav lineárních rovnic a aplikace ve zpracování obrazu, výzkumný úkol 2009
    • Využití GPGPU pro zpracování dat z magnetické rezonance, bakalářská práce 2008
  • Vladimír Klement
    • Implementace řešičů řídkých matic na GPU, diplomová práce 2011
    • Rozpoznávání obrazu pomocí GPGPU a technologie CUDA, výzkumný úkol 2010
    • Implementace algoritmů pro zpracování obrazu s využitím GPGPU, bakalářská práce 2008
  • Martin Heller
    • Implementace maticových řešičů na GPGPU, bakalářská práce 2010
  • Jan Vacata
    • Obecné výpočty na grafických kartách, diplomová práce 2008
    • GPGPU - provádění vědeckých výpočtů prostřednictvím grafických karet osobních počítačů, výzkumný úkol 2007