HPC

warning: Creating default object from empty value in /local/home/oberhuber/public_html/modules/i18n/i18ntaxonomy/i18ntaxonomy.pages.inc on line 40.
High Performance Computing

Lehký úvod do technologie Grid

Vítejte na stránce věnované technologii zvané "Grid". Tato stránka vznikla na základě vyučovaného předmětu Paralelní algoritmy a architektury (PAA) při FJFI ČVUT (konkrétně katedry matematiky).

Zdrojové kódy

Zde si můžete stáhnout zdrojové kódy k tomuto článku.

Rozbalování smyček

Rozbalování smyček

Následující výraz

  1. for (i = 0; i < n; i++)
  2. {
  3. data[i] = a[i];
  4. }

lze zaměnit za

  1. for (i = 0; i < n; i += k)
  2. {
  3. data[i] = a[i];
  4. data[i+1] = a[i+1];
  5. data[i+2] = a[i+2];
  6. ...
  7. data[i+k-1] = a[i+k-1];
  8. }

a tak umožnit lepší využití pipeline procesoru.

Specializace šablon

Expanze výrazů za pomoci přetěžování operátorů

Cíl

Cílem je používat vektory obdobně jako v následujícím příkladu, tedy s využitím přetěžování operátorů, ale bez vlivu na rychlost.

  1. #include "Fast_Vector.h"
  2.  
  3. int main()
  4. {
  5. int size_ = 5000000 ;
  6. /**
  7.   definice unikatnich vektoru
  8.   */
  9. Fast_Vector<1> a(size_,1.);
  10. Fast_Vector<2> b(size_,2);
  11. Fast_Vector<3> c(size_);
  12.  
  13. c = 5. * a + 7. * b ;
  14. std::cout << c[0] >> std::endl;
  15. }

Předmluva

Šablony v jazyce C++ velmi rozšiřují možnosti ovlivňovat výstupní kód v průběhu kompilace. Je možné provádět různé optimalizace a tím dosáhnout urychlení konstrukcí jazyka C++, které často za jazykem C ve výkonu značně zaostávají. V tomto článku se budu zabývat urychlením operací s vektory, zvláště urychlením operací s přetěžováním operátorů. Využívám kód navržený Jochen Härdtleinem. Tento kód rozšiřuji o vlastní implementaci rozbalování smyček.

Expanze vektorových výrazů pomocí šablon v C++

Abstrakt

Text popisuje využití šablon v C++ při práci s vektory. Zejména v numerické matematice, kde často pracujeme s velkými poli dat, není možné využít běžné přetěžování operátorů. Například pro sčítání velkých vektorů by výsledný kód byl velice neefektivní.

Syndikovat obsah