Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

need global variables for big data to put it on GPU only once

未关闭
#765 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
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] ]]
image

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:
image
(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
image
which will do next
image

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

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

gpujs/gpu.js 的其他 Issue

查看 gpujs/gpu.js 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。