Mam pakiet R, który używa wielu podprogramów Fortran dla zagnieżdżonych pętli obliczeń rekursywnej liniowej algebry (w dużym stopniu zależnych od procedur BLAS i LAPACK). Jako interfejs do Fortran używam funkcji .Fortran
. Właśnie przeczytałem Jonathan Callahan's blog post o użyciu .Call
zamiast .C
w przypadku podprogramów napisanych w C/C++, i to mnie pomyślałem, że byłoby lepiej użyć interfejsu .Call
również przy użyciu podprogramów Fortran, pisząc proste opakowanie w C, które następnie wywołuje podprogramy Fortran?R: Zalety korzystania z podprogramu Fortran z opakowaniem .Call i C/C++ zamiast .Fortran?
Jak powiedziałem, moje kody Fortran są dość proste w tym sensie, że gram w wielowymiarowe tablice typu double lub integer. Ale nauczyłem się, że muszę napisać całkiem sporo czeków po stronie R, aby upewnić się, że wszystko się nie psuje z powodu przypadkowego zapomnienia zmiany trybu przechowywania niektórych macierzy na całkowitą lub wymiarów niektórych matryc zostały zmienione itp.
Podprogramy zapisywane są jako F90/95.
wydaje się być rozsądnym do użycia .Call() z pewną funkcją C, i wtedy możesz rzeczywiście wywołać twoje podprogramy Fortrana z kodu C, co jest stosunkowo łatwe (lub nawet zrobić wszystko w C, jeśli naprawdę nie potrzebujesz Fortran). – steabert
Tak, ale jakie korzyści może to przynieść? Mógłbym całkowicie przełączyć się na C, ale to byłoby zbyt kłopotliwe i wątpię, że byłoby użyteczne, ponieważ wtedy wzywałbym funkcje Fortran BLAS z C. –
Może być istotna: http://www.ualberta.ca/AICT/RESEARCH/LinuxClusters/doc/ifc91/main_for/mergedProjects/bldaps_for/pgsclmix.htm – KLDavenport