Dans un projet Fortran, nous utilisons une recherche binaire pour trouver une valeur souhaitée:fonctions inline dans Fortran
integer function binsearch(tab, el)
implicit none
real, intent(in) :: tab(:), el
integer :: a, b, mid
a = 1
b = size(tab)
do while (b - a > 1)
mid = (a + b)/2
if (el >= tab(mid)) then
a = mid
else
b = mid
endif
! if (el < tab(mid + 1)) exit ! BAD OPTIMIZATION !
enddo
binsearch = a
end function binsearch
Plus tard nous utilisons simplement
foo = binsearch(tab, el)
Malheureusement, la routine environnante est utilisé si lourdement , que le BAD OPTIMIZATION
augmente le temps d'exécution total de moitié. J'ai donc considéré la fonction pour diminuer le coût de l'appel.
Est-il possible de marquer de toute façon cette fonction pour inline? En C il y a le mot-clé inline
qui est une suggestion pour le compilateur - et y a-t-il quelque chose comme ça dans Fortran 2008?
Je ne veux pas copier-coller ceci pour la clarté du code.
S'il vous plaît voir http://stackoverflow.com/questions/6763402/inline-keyword-gfortran – solalito
En C le mot-clé 'inline' ne surtout rien de toute façon. –
Comme mentionné dans l'URL donnée ci-dessus, la procédure interne est la plus propice à l'inlining à travers tous les compilateurs. La recherche binaire peut ne pas être la meilleure, en fonction de la taille de la table et des capacités des différents compilateurs pour vectoriser la recherche linéaire. – tim18