JuliaSIMD / JuliaSIMD/LoopVectorization.jl
@tturbo not multithreading nested loops
- 主要言語
- Julia
- スター
- 789
- フォーク
- 73
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
I am currently running Julia with Threads.nthreads()=10, however @tturbo does not use more than one thread in the code below.
The code gets a nice speed up using @turbo, however it is still faster to use Threads.@threads, I was hoping to get the best of both worlds with @tturbo.
```julia
using LoopVectorization,Interpolations
NK = 150
NB = 200
nA = 100
nZ = 30
BM = range(-5.0,stop=5,length = NB);
KM = range(0.0,stop=10,length = NK);
Z = range(-1,stop = 1,length= nZ);
A = range(0.0,stop=10,length = nA);
pdfZ = rand(nZ,nZ) ;
AK1 = rand(1,nA,NK);
DD = zeros(nZ,nA,NK,NB);
EE = zeros(nZ,nA,NK,NB);
O = zeros(nZ,nA,NK,NB);
π1 = rand(nZ,NK,NB) .+1;
Q = rand(nZ,NK,NB).+1;
W = rand(nZ,nA) .+1;
qinterp = extrapolate(Interpolations.scale(interpolate(Q, BSpline(Linear())), Z, KM,BM), Interpolations.Line());
πinterp = extrapolate(Interpolations.scale(interpolate(π1, BSpline(Linear())), Z, KM,BM), Interpolations.Line());
winterp = extrapolate(Interpolations.scale(interpolate(W, BSpline(Linear())), Z, A), Interpolations.Line());
@tturbo for ib1 ∈ eachindex(BM) , ik1 ∈ eachindex(KM),ia ∈ eachindex(A),iz ∈ eachindex(Z)
DD[iz,ia,ik1,ib1] = AK1[1,ia,ik1] + qinterp(Z[iz],KM[ik1],BM[ib1]) * BM[ib1]
for iz1 ∈ eachindex(Z)
EE[iz,ia,ik1,ib1] += pdfZ[iz, iz1] * winterp(Z[iz1], πinterp(Z[iz1],KM[ik1],BM[ib1]))
end
O[iz,ia,ik1,ib1] = -1/max(DD[iz,ia,ik1,ib1], eps()) +(1.0 / (1.0 + 0.1)) * EE[iz,ia,ik1,ib1]
end
```
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
調査の方向性
まず、提供された Julia の再現コードを @tturbo、@turbo、Threads.@threads で実行し、スレッド使用状況と実行時間を比較します。次に、@tturbo が示されているネストしたループをどのように処理するかを調査します。単一スレッドでの動作を説明し、それを修正するか、回帰チェック付きでサポートされている動作として文書化できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- julia
- 領域
- performance, tooling
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100