Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem/error in execution order #531

Open
chengxo opened this issue Jan 31, 2024 · 0 comments
Open

Problem/error in execution order #531

chengxo opened this issue Jan 31, 2024 · 0 comments

Comments

@chengxo
Copy link

chengxo commented Jan 31, 2024

I observe that the following MWE code works differently with vs without the tturbo.

using LoopVectorization, Random
function weird_update(a, c, d)
    @tturbo for j in axes(a, 2)
        tmp = 0.0
        for i in axes(a, 1)
            a_ij = a[i, j]
            b_ij = a_ij + 1.0
            tmp += b_ij^2
        end
        c[j] = tmp
        d[j] = exp(2.0*tmp)
    end
    return nothing
end
m = 100
n = 5
rng = MersenneTwister(0)
a = zeros(n, m)
randn!(rng, a)
c = zeros(m)
d = zeros(m)
weird_update(a, c, d)
println(c)
println(d)

In fact, with tturbo, d is always 1, as if the code for updating d is written after tmp=0.0. On the other hand, the update for c works well.

Could you help me figure out a way to do this correctly with tturbo?

UPDATE1: it is weird that if I change d[j] = exp(2.0*tmp) to d[j]=exp(2.0*(0.0+tmp)), then it works correctly.

UPDATE2: The following code works even more weirdly

function weird_update(a, c, d)
    @tturbo for j in axes(a, 2)
        tmp = 0.0
        for i in axes(a, 1)
            a_ij = a[i, j]
            b_ij = a_ij + 1.0
            tmp += b_ij^2
        end
        c[j] = tmp
        d[j] = exp(2.0*c[j])
        
    end
    return nothing
end
m = 100
n = 5
rng = MersenneTwister(0)
a = zeros(n, m)
randn!(rng, a)
c = ones(m)
d = zeros(m)
weird_update(a, c, d)
println(c)
println(d)

The output of d is all one's -- not even exp(2). I am totally confused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant