need global variables for big data to put it on GPU only once
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 技術スタック
- javascript
- 領域
- performance
調査の方向性
ソースファイル、テスト、エントリポイントは指定されていません。まず、既存のGPU/kernel入力および結果管理APIを調査し、次に、永続的なGPU対応データと部分的な結果へのアクセスがプロジェクトのアーキテクチャに適合するかどうかを判断します。完了条件は、要求されたデータの再利用が、転送の繰り返しや過大な中間アロケーションなしで機能することです。
索引モデルが issue の本文から書いたものです。
説明
What i am working at?
I am developing a program to visualize voxel data by placing many canvases in space, my voxel data is stored as
[ [ Int16Array(2), Int16Array(2) ],[ Int16Array(2), Int16Array(2) ] ] (that is example for 2x2x2px voxel data)
but in real tasks data is often 512x512x512px ( so i need near 256MiB for this data)
let example of voxel data is [[ [0,1], [2,3] ],[ [4,5], [6,7] ]]

so i have 2 x layers 0: [ [0,4], [2,6] ], 1: [ [1,5], [3,7] ]
so i have 2 y layers 0: [ [0,1], [4,5] ], 1: [ [2,3], [6,7] ]
so i have 2 z layers 0: [ [0,1], [2,3] ], 1: [ [4,5], [6,7] ]
and before placing one layer of voxel data on canvas i need to replace voxel value with color
and for this i have array to replace values to color but in special way:
ColArray example:

(in program it is Uint8Array([r0,g0,b0,a0, r1,g1,b1,a1, ...]) )
What is wrong?
so to get color value i must do next operations for each voxel

which will do next

what i can do with is gpu.js is for example:
(lenM1 = colArray.lenght - 1, delta = max - min)
const calc = gpu.createKernel(function(data,min,delta,lenM1) {
return Math.round( (data[this.thread.z][this.thread.y][this.thread.x]-min)/delta*lenM1 )
}, { output: [Xsize,Ysize,Zsize] })
const ColArrayIndexes = calc(...)
but if i give data (int16 512x512x512 memory usage 256 MiB)
and i get result (float32 512x512x512 memory usage 512 MiB)
and once i get alocation error when trying to get result (and that is not PC problem it is js memory managment problem)
also i dont need all result for one layer i need only part of it
Another way to solve the problem was to calc and return only one canvas
const render = gpu.createKernel(function( data, __ ) {
this.color( __ );
}).setOutput([ __ , __ ]).setGraphical(true);
render();
const pixels = render.getPixels();
// and put pixels to canvas
buuuuuut to calc one Canvas i need parts from all data, and if for z layers i can just use js array.slice() method for x and y i need to give all data (i said what are x y and z layers for me near first img)
so when i dive all data (256 MiB) from RAM to GPU memory (if i correctly undarstand how it works) it take some time
and when i want to calc all 512 X layers + all 512 Y layers + all 512 Z layers i give same data (256 MiB) 1536 times and that is not OK and need some time
Where does it happen?
PC:
i7 9700K
RTX 3070
16GB RAM
(but my program also must work normal on mobile and so big memory changes is not good)
Expected solution
i think that my problem can have solution like this
const gpu = new GPU();
gpu.setGlobalVariable( dataName , data ) // put data to GPU memory
const render = gpu.createKernel(function( ___ ) {
return dataName[] // do some math operations (i need only read, but modify can be also cool and useful)
}).setOutput([ __ , __ ])
gpu.destroyGlobalVariable( dataName ) // delete data from GPU memory
also a little better way
const func = gpu.createKernel(function( data ) {
return data[this.thread.z][this.thread.y][this.thread.x] // some operations with given values
}).setOutput([ __ , __ ]).setOutputIsGPUglobalVariable(true) // function will save result only in GPU memory, and can return some parts of it when it is needed
const CalcResultID = func(data) //return only link on data or function to get parts
// also it is good if can get result of calculations in another GPU functions
gpu.destroyGlobalVariable( CalcResultID ) // delete data from GPU memory
- 主要言語
- 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
-
factory-active factory-automatic task-bug-reproduction-success task-identify-harness-labels-done task-identify-issue-type-done
難易度 2/5 1〜3時間 初心者へのやさしさ 90/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
status: waiting triage
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
freeCodeCamp/freeCodeCamp#70412 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
rohitg00/ai-engineering-from-scratch#490 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 6 日以内に返信