JuliaSIMD / JuliaSIMD/LoopVectorization.jl

@tturbo not multithreading nested loops

オープン
#362 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
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

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。