I’ve not tried your latest examples, but I’ll consolidate functions to get ForwardDiff and AbstractSIMDs to play well together in SIMDDualNumbers.jl.
It includes functions like abs, max, etc.
This package should be registered on Wednesday (there is a three day waiting period).
using SIMDDualNumbers should fix the error from the original version.
If you run into a problem with a number not working on some combination of AbstractSIMDs and ForwardDiff.Dual, please file an issue there, preferably with the error message, e.g.
julia> for it=1:2
@time main()
end
ERROR: TypeError: non-boolean (VectorizationBase.Mask{8, UInt8}) used in boolean context
Stacktrace:
[1] ifelse(::VectorizationBase.Mask{8, UInt8}, ::ForwardDiff.Dual{ForwardDiff.Tag{var"#3#4"{typeof(Poisson1D), NamedTuple{(:kx, :dx, :ncx, :TW_BC, :TE_BC), Tuple{Float64, Float64, Int64, Float64, Float64}}, VectorizationBase.MM{8, 1, Int64}}, VectorizationBase.Vec{8, Float64}}, VectorizationBase.Vec{8, Float64}, 3}, ::ForwardDiff.Dual{ForwardDiff.Tag{var"#3#4"{typeof(Poisson1D), NamedTuple{(:kx, :dx, :ncx, :TW_BC, :TE_BC), Tuple{Float64, Float64, Int64, Float64, Float64}}, VectorizationBase.MM{8, 1, Int64}}, VectorizationBase.Vec{8, Float64}}, VectorizationBase.Vec{8, Float64}, 3})
@ IfElse ~/.julia/packages/IfElse/u1l5W/src/IfElse.jl:3
[2] Poisson1D(x::SVector{3, ForwardDiff.Dual{ForwardDiff.Tag{var"#3#4"{typeof(Poisson1D), NamedTuple{(:kx, :dx, :ncx, :TW_BC, :TE_BC), Tuple{Float64, Float64, Int64, Float64, Float64}}, VectorizationBase.MM{8, 1, Int64}}, VectorizationBase.Vec{8, Float64}}, VectorizationBase.Vec{8, Float64}, 3}}, data::NamedTuple{(:kx, :dx, :ncx, :TW_BC, :TE_BC), Tuple{Float64, Float64, Int64, Float64, Float64}}, i::VectorizationBase.MM{8, 1, Int64})
So I’ll know what the problem is. E.g., here that I have to add some ifelse methods.