2015-07-18 23 views
7

Şu anda bazı kod yazıyorum ve oldukça iyi çalışıyor gibi görünüyor matmul bir yer tutucu var ama bir LAPACKdgemm uygulamasını kullanmak istiyorum. Şu anda sadece gfortran kullanıyorum ve matmul ile çok iyi hızları alıyorum, ama daha iyi olabilir mi merak ediyorum.Kütüphaneyi eklediğimde fortran'ın 'matmülü' MKL'yi kullanır mı?

akım çağrısıdır:

A, B ve C, kare olmayan double precision matrisler olan
C = transpose(matmul(transpose(A), B)) 

. dgemm için LAPACK geçerli gfortran uygulaması ile kolayca bir sarıcı yazabilirim, ancak bunu bir işlev olarak yapabilirim (call bir surbroutine için endişelenmekten ve transpose ile uğraşmak zorunda kalmadan). Ben ifort ile derlemek ve MKL eklerseniz

Bu matmul sihirli hiçbir sargı ile benim için MKLdgemm işleve değişecek merak ediyorum?

cevap

9

Bunu çok küçük matrisleri için karlı değil, tüm MATMULs dgemm olmak istemiyoruz.

gfortran istediğini yapar

büyüklüğü, bu seçenek yerine kendi algoritmaları kullanarak, MATMUL gibi bazı matris işlemleri için BLAS işlevlerine telefonla arama gfortran yapacak -fexternal-blas İlgili matrisler verilen bir 'dan daha büyüktür (bkz. -fblas-matmul-limiti). Bir optimize edilmiş satıcı BLAS kütüphanesi mevcutsa bu karlı olabilir. BLAS kitaplığı bağlantı zamanında belirtilecek olacaktır.

ve hatta -fblas-matmul-limit = n

kolaylıkla bu şekilde gfortran içinde MKL kullanabilirsiniz tarafından BLAS geçiş için boyut sınırını değiştirebilir.

Intel Fortran benzer bir şey

[herhangi -] Bu seçenek bir derleyici [devre dışı bırakır] sağlayan-matmul opt - oluşturulan matris çarpın (matmul) matris multiplicat iyon döngü yuva belirleyerek kütüphane çağrı, eğer herhangi bir performans ve daha iyi performans için bir matmul kütüphanesi çağrısı ile değiştirilir. Seçenekler/O3 ( - O3) ve/Qparallel ( - paralel) belirtilmişse, bu seçenek varsayılan olarak etkindir. Seçenek/O2 ( - O2) veya üstü ayarlanmadıkça bu seçeneğin bir etkisi yoktur.

İlgili konular