Skoro vyreseny zkouskovy termin, ktery je verejne pristupny na strankach CW:
https://cw.fel.cvut.cz/wiki/_media/courses/b4b36pdv/zk_05.zip - balicek ke stazeni
Upozornění: Váš kód musí být korektní z hlediska vícevláknového přístupu ke sdíleným proměnným. Pokud nezabezpečíte synchronizaci, budeme Vaše řešení ručně penalizovat.
Vaším úkolem je v daném poli std::vectorstd::string vector projít slova a zjistit, jaká je Levenshteinho vzdálenost každých dvou slov v tomto poli obsažených. Zároveň musíte najít i nejnižší index dvojice slov takový, že vzdálenost mezi těmito slovy je největší.
Zparalelizujte metodu distances (pouze tuto metodu, zadnou jinou) v souboru levenshtein.cpp, která vrátí sumu vzdáleností slov ve vector každého s každým. Index s maximální vzdáleností uložte do proměnné maxIdx. Soubor levenshtein.cpp odevzdávejte do BRUTE do úlohy ZK_05_A.
Vaším úkolem je paralelizovat aplikaci lokálního filtru ve čtvercové matici čísel na základě čtyř-okolí prvku. Filtr se aplikuje v iteracích, přičemž v každé iteraci se pro každý prvek table(i,j) aplikuje výpočet:
table(i,j) = sqrt( (table(i,j)^2 + table(i-1,j)^2 + table(i+1,j)^2 + table(i,j-1)^2 + table(i,j+1)^2)/3 )
sekvenčně od prvku 0,0 po řádcích (pokud prvky v okolí přesahují index matice, použije se hodnota 0).
Zparalelizujte metodu filtering v souboru filter.cpp, která tento výpočet provádí. Soubor filter.cpp odevzdávejte do BRUTE do úlohy
Prumerny cas behu v ms
Sekvencni | Referencni | Paralelizace | |
---|---|---|---|
levenshtein | 162 | 63.3748 | 64.4912 (1.02x od referenci) |
filter | 1192.551 | 486.6795 | 262.073 (0.54x od referenci) |