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

Reply via email to