【发布时间】:2020-01-15 18:17:01
【问题描述】:
我在 Julia 中运行双循环。代码非常简单。
w = rand(1000,1000)
function regular_demo(w::Array{Float64, 2})
n = size(w)[1]
G = zeros(n,n)
@inbounds for j in 1:n-1
wjj = w[j, j]
for i in j+1:n
wii = w[i, i]
wij = w[i, j]
sum = wii + 2wij + 3wjj
sum_inverse = inv(sum)
G[j,j] = G[j,j] + sum_inverse
G[i,i] = G[i,i] + sum_inverse
G[i,j] = G[i,j] - sum_inverse
G[j,i] = G[j,i] - sum_inverse
end
end
G
end
regular_demo(w)
function thread_demo(w::Array{Float64, 2})
n = size(w)[1]
G = zeros(n,n)
@inbounds Threads.@threads for j in 1:n-1
wjj = w[j, j]
for i in j+1:n
wii = w[i, i]
wij = w[i, j]
sum = wii + 2wij + 3wjj
sum_inverse = inv(sum)
G[j,j] = G[j,j] + sum_inverse
G[i,i] = G[i,i] + sum_inverse
G[i,j] = G[i,j] - sum_inverse
G[j,i] = G[j,i] - sum_inverse
end
end
G
end
thread_demo(w)
regular_demo(w) 和 thread_demo(w) 的唯一区别是函数第 4 行中的@inbounds Threads.@threads。如果我对同一个矩阵 w 同时运行 regular_demo(w) 和 thread_demo(w)。输出矩阵 G 不同。如何在 thread_demo(w) 中实现线程以获得与 regular_demo(w) 相同的输出矩阵 G。
【问题讨论】:
标签: julia