Wielowątkowe mnożenie macierzy przez macierz z wykorzystaniem instrukcji wektorowych

0

Witam, problem jak w temacie, zacznę od początku.
Aplikacja WPF(C#) z dwoma bibliotekami dll - jedna biblioteka C++, druga Asembler.
Program ma umożliwiać mnożenie wczytanych lub wygenerowanych macierzy i przy okazji mierzyć czas tego mnożenia.

Mam problem z implementacją samego algorytmu tak, aby można było wykorzystywać wielowątkowość. Czytałem nieco o mnożeniu macierzy Cauchy’ego, może ktoś już miał styczność z podobnym projektem i mógłby mnie nakierować?

Pozdrawiam i dziękuje z góry za jakiekolwiek porady.

1

https://stackoverflow.com/questions/36379480/multithreading-matrix-multiplication-in-c-sharp

Wygląda nawet jak gotowiec algorytmu do zaimplementowania.

A może tak: https://www.codeproject.com/Articles/29813/Parallel-Computations-in-C

Wraz z opisem co się dzieje.
I też jest mierzony czas.

2

No właściwie to każdy wyraz macierzy wyjściowej jest iloczynem skalarnym wiersza i kolumny z macierzy wejściowych, więc dopóki zrównoleglasz tak, że dany wyraz liczy jeden wątek to zrównoleglenie jest trywialne - kwestia podzielenia zadania na podzadania ;) możesz np. spróbować dekompozycji blokowej, kolumnowej i wierszowej (względem macierzy wynikowej) i sobie porównać wyniki.

Możesz spróbować dzielenia bloków i wierszy na mniejsze, liczyć wyrazy kawałkami itd. (ale musisz uważać jak dzielisz zadanie, żeby wciąż było thread safe) i zobaczyć, czy coś ugrasz na bardziej efektywnym korzystaniu z wyrazów macierzy wejściowych, które zostają w cache po poprzednich odczytach.

0

@superdurszlak: Jest to pomysł, lecz do dyspozycji mam maksymalnie 64 wątki a przykładowe macierze będą rozmiarów 1000x1000. Myślałem nad tym, aby z pomocą Mnożenia macierzy Cauchy’ego porozbijać wiersze macierzy wyjściowej tak aby x wątków obliczało y wierszy macierzy wyjściowej, ale czy będzie to do zrobienia w asm?

2
Tomek5821 napisał(a):

@superdurszlak: Jest to pomysł, lecz do dyspozycji mam maksymalnie 64 wątki a przykładowe macierze będą rozmiarów 1000x1000.

To żaden problem, dekompozycja to jedno, a przydzielanie wydzielonych w ten sposób podzadań danym wątkom to drugie. Nie musi ich być dokładnie tyle, ile bloków/wierszy

1 użytkowników online, w tym zalogowanych: 0, gości: 1