LoopVectorization.jl icon indicating copy to clipboard operation
LoopVectorization.jl copied to clipboard

Division by Inf is sometimes producing NaN's

Open ajshephard opened this issue 11 months ago • 1 comments

This problem does not occur on my laptop, just a cluster I am using. On the cluster

julia> versioninfo()
Julia Version 1.11.1
Commit 8f5b7ca12ad (2024-10-16 10:53 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 36 × Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz
  WORD_SIZE: 64
  LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512)
Threads: 1 default, 0 interactive, 1 GC (on 36 virtual cores)

If I do the following

using LoopVectorization
x = ones(32) * Inf
y = similar(x)
@turbo for ix in eachindex(x)
	y[ix] = 1 / x[ix]
end

Then the y vector is

julia> y
32-element Vector{Float64}:
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
 NaN
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0
   0.0

I was expecting that all the elements of y would be zero.

ajshephard avatar Dec 09 '24 22:12 ajshephard

That's it's pipelined division method that mixes divisions with fast-inversions, multiplies, and Newton Raphson. It's the latter that produces NaN.

chriselrod avatar Dec 10 '24 11:12 chriselrod