Using `continue` in a loop has inconsistent behavior.
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 35/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- javascript
- 領域
- compilers
調査の方向性
まず、issue にある 3 つのカーネル例を実行し、ループ境界が固定の場合と可変の場合で出力を比較します。解釈実行されるカーネルループ内で gpu.js が continue をどのように処理するかを追跡します。同じ入力に対してシナリオ A、B、C が同一の結果を生成すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
What is wrong?
continue acts as break when loop is based off an input variable
Where does it happen?
In a kernel or added function, where JS is interpreted, within a loop.
How do we replicate the issue?
A - fixed iteration (i < 4), with or without continue, expected behavior
k = gpu.createKernel(function() {
var a = 0
for(var i = 0; i < 4; i++){
if(i == this.thread.x) { continue }
else { a += i }
}
return a
}).setOutput([4])
console.log(k())
VM3228:9 Float32Array(4) [6, 5, 4, 3]
B - variable iteration (i < n), with continue, completely unexpected behavior
k = gpu.createKernel(function(n) {
var a = 0
for(var i = 0; i < n; i++){
if(i == this.thread.x) { continue }
else { a += i }
}
return a
}).setOutput([4])
console.log(k(4))
VM3217:9 Float32Array(4) [0, 0, 1, 3]
undefined
C - variable iteration (i < n) without continue, a valid workaround
k = gpu.createKernel(function(n) {
var a = 0
for(var i = 0; i < n; i++){
if(i == this.thread.x) { }
else { a += i }
}
return a
}).setOutput([4])
console.log(k(4))
VM3207:9 Float32Array(4) [6, 5, 4, 3]
undefined
How important is this (1-5)?
5
Expected behavior (i.e. solution)
I would expect scenarios A, B, and C to behave identically.
Other Comments
- 主要言語
- JavaScript
- スター
- 15.5k
- フォーク
- 663
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
gpujs/gpu.js のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
-
WebGL backend silently returns all zeros for long-running kernels (no GL error, no context loss)オープン
難易度 5/5 1週間以上 初心者へのやさしさ 42/100
-
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
似ている issue
-
bug good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
amponce/archive-movie-browser#354 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
saayam-for-all/webapp#1870 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
Imageomics/OpenCite#66 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
chr15m/twiiit.com#20 ·
-
documentation
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
antropos17/Aegis#629 ·
メンテナーはふだん 4 日以内に返信