我有一個R包,它使用大量Fortran子例程來遞歸線性代數計算的嵌套循環(很大程度上取決於BLAS和LAPACK例程)。作爲Fortran的接口,我使用了.Fortran
函數。我剛剛讀了Jonathan Callahan's blog post關於使用.Call
而不是.C
來編寫用C/C++編寫的子程序,它讓我想到在使用Fortran子程序時,使用.Call
接口會更好一些,方法是在C中編寫一個簡單的包裝器, Fortran子程序?如上所述,我的Fortran代碼非常簡單,因爲我只是玩類型double或integer的多維數組。但我已經瞭解到,我必須在R端編寫相當多的檢查以確保一切都不會因爲我不小心忘記將某些矩陣的存儲模式更改爲整數或某些矩陣的維數發生變化而崩潰。R:使用帶有.Call和C/C++包裝器的Fortran子程序代替.Fortran的優點?
子程序寫爲F90/95。
似乎合理的使用.Call()和一些C函數,然後你可以從C代碼中調用你的Fortran子程序,這是相對容易的(或者如果你真的不需要Fortran,甚至可以用C語言來做所有事情)。 – steabert 2013-03-29 13:02:59
是的,但如果有的話會帶來什麼樣的好處?我可以完全切換到C,但是那樣會太麻煩,我懷疑它會有用,因爲我會從C調用Fortran BLAS函數。 – 2013-03-31 21:05:20
可能是相關的:http://www.ualberta.ca/AICT/RESEARCH/LinuxClusters/doc/ifc91/main_for/mergedProjects/bldaps_for/pgsclmix.htm – KLDavenport 2013-03-31 22:26:08