On Thu, Nov 02, 2017 at 12:49:18PM +0000, Szabolcs Nagy wrote:
> to answer my question..
>
> it seems fortran cannot express the type signature
> of mathematical functions because arguments are
> passed by reference.
Fortran indeed normally does pass by reference, and you can vectorize it
that way (you can use various declare simd clauses to express in detail
how the arguments should be handled), or pass by reference:
interface
double precision function foo (x, y)
double precision, value :: x, y
!$omp declare simd (foo)
end function
end interface
and/or using bind(c):
interface
function bar (x, y) bind(C)
use, intrinsic :: iso_c_binding
real(c_double), value :: x, y
real(c_double) :: bar
!$omp declare simd (bar)
end function
end interface
etc.
Jakub