1. Does simd work for Integer types? code_llvm shows vector.body section for Int16,Int32,Float32,Float64 but not for Int64. (on my Windows 64 machine, Julia v0.4.1)
Speedup is seen for Float32 and to lesser extent Float64, as expected. Integers show no speed up. Is this because simd is applied implicitly? Why is Int64 apparently not using simd? buf = IOBuffer() n = 10000 reps = 1000 for T in (Int16,Int32,Int64,Float32,Float64) code_llvm(buf, innersimd, Tuple{Vector{T},Vector{T}}) println(T, " ", contains(takebuf_string(buf), "vector.body")) timeit(T, n, reps) end Int16 true GFlop Int16 = 14.329049425190183 GFlop Int16 (SIMD) = 14.64120268695352 Int32 true GFlop Int32 = 4.339303129613899 GFlop Int32 (SIMD) = 4.436321047681579 Int64 false GFlop Int64 = 2.1942537759816103 GFlop Int64 (SIMD) = 2.195101499298226 Float32 true GFlop Float32 = 2.1954870446504984 GFlop Float32 (SIMD) = 7.82465266366826 Float64 true GFlop Float64 = 2.171535919755667 GFlop Float64 (SIMD) = 4.0068798126383 2. Can simd be applied to unrolled statements? Perhaps using some form of meta expression? begin Expr(:meta, :simd) s = 0 s += x[1]*y[1] s += x[2]*y[2] s += x[3]*y[3] s += x[4]*y[4] s += x[5]*y[5] s += x[6]*y[6] s += x[7]*y[7] s += x[8]*y[8] end