I’m getting some puzzling results. Consider this:
using LoopVectorization
t = [26, 94]
c = [26, 94]
x = collect([25 12]')
α = 2.85
β = [-13.3, -0.006]
function logℒ_fast(α, β, t, c, x)
eα = abs(α)
n, k = size(x)
(n == length(t) == length(c) && length(β) == k + 1) || throw(DimensionMismatch())
s = zero(typeof(α))
@inbounds for i in 1:n
xb = sum(@inbounds(x[i, j] * β[j+1]) for j in 1:k) + β[1]
ti = t[i]
s += (1 - (c[i] == ti)) * (log(eα) + (eα - 1) * log(ti) + xb) - ti^eα * exp(xb)
end
return s
end
function logℒ_fast_turbo(α, β, t, c, x)
eα = abs(α)
n, k = size(x)
(n == length(t) == length(c) && length(β) == k + 1) || throw(DimensionMismatch())
s = zero(typeof(α))
@turbo for i in 1:n
xb0 = 0.0
for j in 1:k
xb0 += x[i,j] * β[j+1]
end
xb = xb0 + β[1]
ti = t[i]
s += (1 - (c[i] == ti)) * (log(eα) + (eα - 1) * log(ti) + xb) - ti^eα * exp(xb)
end
return s
end
Those are the same functions you defined above, however:
julia> logℒ_fast_turbo(α, β, t, c, x)
NaN
julia> logℒ_fast(α, β, t, c, x)
-0.6702178908853803
I can’t figure out what’s going on here.