Úkolem tohoto projektu bylo implementovat aplikaci pro maticové násobení s možností porovnání výkonu mezi jednovláknovou a vícevláknovou verzí algoritmu. Program by měl umožnit načítání matic z textových souborů, jejich násobení jak v sekvenčním, tak i paralelním režimu, a měření časových výkonů obou verzí. Dále byla implementována funkce pro generování testovacích souborů s náhodnými maticemi, které lze použít k testování výkonnosti aplikace na různých velikostech matic.
## Popis implementace
V aplikaci je použita třída `Matrix`, která obsahuje metody pro práci s maticemi, jako je načítání matice ze souboru, provádění maticového násobení, a metody pro generování náhodných matic. Implementace maticového násobení zahrnuje dvě verze:
1.**Sekvenční verze (one-thread)**:
- Každý prvek výsledné matice je spočítán v rámci jednoho vlákna, iterováním přes řádky a sloupce obou matic. Tato metoda je jednoduchá a přímočará.
2.**Paralelní verze (multi-thread)**:
- Umožňuje využití více vláken pro výpočet jednotlivých prvků výsledné matice. Každé vlákno se stará o výpočet jednoho prvku výsledné matice, čímž se zrychluje výpočet při větších maticích.
## Popis funkčnosti a ovládání aplikace
Program poskytuje několik funkcí, které jsou dostupné přes příkazovou řádku:
1.**Generování testovacích souborů**:
- Pomocí parametru `--generate` je možné vygenerovat testovací soubory s náhodně generovanými maticemi. Uživatelský vstup určuje velikost matic, např. `--generate 100` vygeneruje matici 100x100.
2.**Testování výkonu na všech souborech v adresáři**:
- Pomocí parametru `--test-all` lze spustit testování výkonu maticového násobení na všech maticích v daném adresáři. Program provede násobení pro všechny kombinace matic v adresáři a porovná čas potřebný pro jednovláknovou a vícevláknovou verzi. Při testování jsou násobeny pouze matice, které mají stejný rozměr (tj. stejný počet řádků a sloupců).
3.**Porovnání jednovláknové a vícevláknové verze**:
- Program umožňuje provádět porovnání času mezi jednovláknovou a vícevláknovou verzí násobení. Výsledek porovnání je zobrazen v konzoli, včetně průměrného času, minimálního a maximálního času pro každou verzi.