50 likes | 192 Views
Domácí úkol. Domácí úkol č. 2. Referenční algoritmus for ( i = 0; i < L; ++ i ) for ( j = 0; j < M; ++ j) { c[ i ][j] = false; for ( k = 0; k < N; ++ k) c[ i ][j] |= a[ i ][k] & b[k][j]; } Toto nen í nejrychlejší algoritmus Nevyhovuje z hlediska cache
E N D
Domácí úkol NPRG054 Vývoj vysoce výkonného software - 2012/2013 David Bednárek
Domácí úkol č. 2 • Referenční algoritmus • for( i = 0; i < L; ++ i) • for( j = 0; j < M; ++ j) • { • c[i][j] = false; • for( k = 0; k < N; ++ k) • c[i][j] |= a[i][k] & b[k][j]; • } • Toto není nejrychlejší algoritmus • Nevyhovuje z hlediska cache • Uložení po bitech umožňuje paralelní operace • Násobení booleovských matic • Datová struktura pro matici • Plýtvání prostorem povoleno • Očekávaný počet sloupců > 50 • Rozměr určen předem • Parametry konstruktoru • Operace násobení • Testovací mechanismus • Naplnění/alokace matic • Opakované provedení násobení • Měření času • Mimo standard C++ NPRG054 Vývoj vysoce výkonného software - 2012/2013 David Bednárek
Domácí úkol č. 2 • Předepsané rozhraní matice • Umožňuje připojení k jinému testovacímu mechanismu • class matrix { • public: • matrix(size_t m, size_t n); • size_t vsize() const; • size_t hsize() const; • boolget(size_t i, size_t j) const; • void set(size_t i, size_t j, bool e); • void assign_mul(const matrix & a, const matrix & b); • private: // ... • }; • Neřešíme kompletnost a odolnost třídy (copy/move-metody apod.) • Násobení booleovských matic • Datová struktura pro matici • Plýtvání prostorem povoleno • Očekávaný počet sloupců > 50 • Rozměr určen předem • Parametry konstruktoru • Operace násobení • Testovací mechanismus • Naplnění/alokace matic • Opakované provedení násobení • Měření času • Mimo standard C++ NPRG054 Vývoj vysoce výkonného software - 2012/2013 David Bednárek
DÚ 1 – porovnání výsledků NPRG054 Vývoj vysoce výkonného software - 2012/2013 David Bednárek
DÚ2 NPRG054 Vývoj vysoce výkonného software - 2012/2013 David Bednárek