IV112 Projekt z programování paralelních aplikací
Projekt číslo 7: Multimediální rozšíření CPU
Termín odevzdání: 16. 11. 2016 20:00
Odevzdávarna: Zadání: V tomto projektu je vaším úkolem aplikovat multimediální rozšíření procesoru (SIMD paralelizmus) na jednoduchý problém výpočtu průměrné hodnoty pole náhodných čísel. V zadání dostáváte soubor main.cpp, který není potřeba dále měnit. Dodejte soubory scalar.h a vector.h, které budou implementovat třídu Average s rozhraním požadovaným v main.cpp.
Důležitá omezení: hodnoty předávané v poli jsou vždy menší než 4096. Použijte tedy vhodný datový typ (16b). Dávejte pozor na přetečení. Statická metoda "init" ve třídě Average vytvoří (alokuje) pole zadané velikosti (v případě vektorové implementace pozor na zarovnání). Metoda reset() vynuluje stav objektu a metoda process bude brát *referenci* na hodnotu typu Data který byl předem inicializovaný pomocí init (viz main.cpp). Metoda process může být (je) volaná opakovaně a výsledná hodnota average() musí odpovídat průměru všech hodnot jí předaných od posledního volání reset(). Celkově musí být třída Average schopna zpracovat aspoň 134217728 hodnot (ale pokud možno, i tomuto omezení se vyhněte).
Při implementaci souboru vector.h použijte vestavěné funkce a datové typy pro SIMD z hlavičkového souboru emmintrin.h (součást GCC).
Výstupní tarball/zip bude obsahovat:
Projekt:
Odevzdávarna: Zadání: V tomto projektu je vaším úkolem aplikovat multimediální rozšíření procesoru (SIMD paralelizmus) na jednoduchý problém výpočtu průměrné hodnoty pole náhodných čísel. V zadání dostáváte soubor main.cpp, který není potřeba dále měnit. Dodejte soubory scalar.h a vector.h, které budou implementovat třídu Average s rozhraním požadovaným v main.cpp.
Důležitá omezení: hodnoty předávané v poli jsou vždy menší než 4096. Použijte tedy vhodný datový typ (16b). Dávejte pozor na přetečení. Statická metoda "init" ve třídě Average vytvoří (alokuje) pole zadané velikosti (v případě vektorové implementace pozor na zarovnání). Metoda reset() vynuluje stav objektu a metoda process bude brát *referenci* na hodnotu typu Data který byl předem inicializovaný pomocí init (viz main.cpp). Metoda process může být (je) volaná opakovaně a výsledná hodnota average() musí odpovídat průměru všech hodnot jí předaných od posledního volání reset(). Celkově musí být třída Average schopna zpracovat aspoň 134217728 hodnot (ale pokud možno, i tomuto omezení se vyhněte).
Při implementaci souboru vector.h použijte vestavěné funkce a datové typy pro SIMD z hlavičkového souboru emmintrin.h (součást GCC).
Výstupní tarball/zip bude obsahovat:
- main.cpp (součást zadání)
- Makefile (s případnými úpravami)
- scalar.h
- vector.h
- textovou zprávu v souboru zprava.txt.
Projekt: