2015-07-18 11 views
7

sto scrivendo del codice in questo momento e ho un segnaposto con matmul che sembra funzionare abbastanza bene, ma mi piacerebbe usare un implementazione LAPACKdgemm. Sto solo usando gfortran in questo momento e ottenendo ottime velocità con matmul, ma mi chiedo se posso migliorare.Il 'matmul' di fortran usa MKL se includo la libreria?

La chiamata attuale è:

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

dove A, B e C sono non-square, double precision matrici. Posso facilmente scrivere un wrapper per con l'attuale implementazione gfortran di LAPACK, ma mi piace il fatto che posso farlo tutto come una funzione (piuttosto che preoccuparmi di call per una surbroutine e di dover gestire lo transpose).

mi chiedo se compilo con ifort e includere i MKL, sarà presente matmul cambiare magicamente a una funzione MKLdgemm per me senza wrapper?

risposta

9

Non si vuole tutti i MATMULs siano dgemm, non è redditizio per molto piccole matrici.

gfortran fa ciò che si vuole

-fexternal-Blas Questa opzione renderà gfortran generare chiamate a funzioni BLAS per alcune operazioni di matrice come MATMUL, invece di utilizzare i nostri algoritmi, se la dimensione del le matrici interessate sono più grandi di un limite dato da (vedere -fblas-matmul-limit). Ciò può essere redditizio se è disponibile una libreria BLAS del fornitore ottimizzata . La libreria BLAS avrà da specificare al momento del collegamento.

e si può anche modificare il limite di dimensione per il passaggio a BLAS da -fblas-matmul-limit = n

Si può facilmente utilizzare MKL in questo modo in gfortran.

Intel Fortran ha qualcosa di simile

[no -] opt-matmul Questa opzione consente [disabili] un compilatore - generato Matrix Multiply (matmul) chiamata di libreria identificando nidi matrice della maglia multiplicat ionico, se qualsiasi e sostituendoli con una chiamata alla libreria matmul per prestazioni migliorate. Questa opzione è abilitata di default se opzioni/O3 ( - O3) - sono specificati (parallela ) e/Qparallel. Questa opzione non ha effetto a meno che non sia impostata l'opzione/O2 ( - O2) o superiore.

Problemi correlati