2015-07-18 35 views
7

Piszę teraz kod i mam obiekt zastępczy z matmul, który wydaje się działać całkiem dobrze, ale chciałbym użyć implementacji LAPACKdgemm. Obecnie używam tylko gfortran i uzyskuję bardzo dobre prędkości z matmul, ale zastanawiam się, czy mogę się poprawić.Czy "matmul" fortrana korzysta z MKL, jeśli dołączę bibliotekę?

Obecny połączenie jest:

C = transpose(matmul(transpose(A), B)) 

gdzie A, B i C są dla kwadratowy double precision macierzy. Mogę z łatwością napisać opakowanie dla dgemm z bieżącą implementacją gfortran z LAPACK, ale podoba mi się, że mogę to wszystko zrobić jako funkcję (zamiast martwić się o call dla surbroutine i mając do czynienia z transpose).

Zastanawiam się, czy mogę skompilować z ifort i obejmują MKL będzie to matmul magicznie zmienić na MKLdgemm funkcji dla mnie bez owijki?

Odpowiedz

9

Nie chcesz, aby wszystkie MATMULY były dgemm, nie jest opłacalne dla bardzo małych macierzy.

gfortran robi to, co chcesz

-fexternal-blas Ta opcja pozwoli gfortran generować wywołań funkcji Blas dla niektórych operacji macierzowych jak MATMUL, zamiast korzystania z naszych własnych algorytmów, jeśli wielkość Matryce biorące udział są większe niż określony limit (patrz -fblas-matmul-limit). Może to być opłacalne, jeśli dostępna jest biblioteka BLAS dostawcy zoptymalizowana na poziomie . Biblioteka BLAS będzie miała numer do określenia w czasie połączenia.

i można nawet zmienić limit rozmiaru do przełączania Blas przez -fblas-matmul-limit = n

można łatwo korzystać z MKL ten sposób gfortran.

Intel Fortran coś podobnego

[bez -] zrezygnować matmul Ta opcja umożliwia [wyłącza] kompilator - wytworzonej macierzy wielowarstwowy (matmul) wywołanie biblioteki poprzez określenie gniazda matrycy pętli multiplicat jonów, o ile dowolne i zastąpienie ich przez wywołanie biblioteki matmul w celu zwiększenia wydajności. Ta opcja jest domyślnie włączona, jeśli podano opcje/O3 ( - O3) i/Qparallel ( - równolegle). Ta opcja nie ma zastosowania, chyba że ustawiono opcję/O2 ( - O2) lub nowszą.