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).
Zde si můžete stáhnout zdrojové kódy k tomuto článku.
Rozbalování smyček
Následující výraz
for (i = 0; i < n; i++) { data[i] = a[i]; }
lze zaměnit za
for (i = 0; i < n; i += k) { data[i] = a[i]; data[i+1] = a[i+1]; data[i+2] = a[i+2]; ... data[i+k-1] = a[i+k-1]; }
a tak umožnit lepší využití pipeline procesoru.
Specializace šablon
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.
#include "Fast_Vector.h" int main() { int size_ = 5000000 ; /** definice unikatnich vektoru */ Fast_Vector<1> a(size_,1.); Fast_Vector<2> b(size_,2); Fast_Vector<3> c(size_); c = 5. * a + 7. * b ; std::cout << c[0] >> std::endl; }
Š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.
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í.