Konkurs na najszybszy algorytm mnożenia macierzy kwadratowych:
gdzie A,B,C są macierzami (dużego) wymiaru N. Punktem odniesienia jest skompilowany (z włączoną opcją optymalizacji kodu) algorytm ijk mnożenia:
for i := 1 to N do for j := 1 to N do for k := 1 to N do C[i,j] := C[i,j] + A[i,k]*B[k,j];
Algorytm najlepiej zaimplementować w języku C lub Fortranie na Unixie. Konserwatyści mogą próbować pisać w Pascalu pod MS Windows. Możliwa jest także rywalizacja na gruncie środowiska Octave. Tam jako czas odniesienia należy wybrać czas działania operacji C = C + A*B.
Porównujemy czas działania tego algorytmu z czasem działania naszego (lepszego?) algorytmu, skompilowanego bez optymalizacji. Czas działania procedury mnożącej macierze proponuję mierzyć w języku C używając funkcji time() i difftime(). W Fortranie można użyć funkcji DTime(). W Octave są funkcje tic i toc.
W raporcie dobrze byłoby podać:
Autorzy najlepszych wyników zostaną uhonorowani zamieszczeniem ich rozwiązań na niniejszej stronie. Powodzenia!
Lista rekordzistów
Kategoria | Miejsce | Imię i nazwisko | Przyspieszenie |
Język C | 1. | Jakub Narębski | 1.66 |
2. | |||
3. | |||
Octave | 1. | Agnieszka Borkowska | 1.91 |
2. | |||
3. | |||
Fortran | 1. | Marek Kwas | 0.77 |
2. | |||
3. |