一段时间以来,我一直在考虑何时在simd循环中内联或使用declare simd
。我碰到了这个article,OP对此也有类似的问题,但是答案对我来说还不清楚。
我有两个问题:
1)同时拥有declare simd(function_name)
和内联指令(如!DIR$ ATTRIBUTES::FORCEINLINE(function_name)
是否被认为是错误。
2)如何知道要使用哪个?
基本示例
!DIR$ ATTRIBUTES :: FORCEINLINE(call_insimd)
!$OMP DECLARE SIMD(call_insimd)
function call_insimd(a,b) result(res)
implicit none
real, intent(in) :: a,b
real, intent(out):: res
end function
在主循环中
do i = 1,10000
!dir$ forceinline
ar(i) = call_insimd(gf(i),df(i))
enddo