问题描述
我正在尝试使用 GPU JS 来加速动态编程算法的性能。
这是我当前的代码:
let pixels = new Uint32Array(5 * 5);
for (let i = 0; i < pixels.length; i++) {
pixels[i] = i;
}
function kFunction() {
let width = this.output.x;
let row = this.constants.row;
let col = this.thread.x;
let prevRow = (row - 1) * width;
let base = (row * width) + col;
let prevBase = (prevRow * width) + col;
let nw = this.constants.pixels[prevBase - 1];
let n = this.constants.pixels[prevBase];
let ne = this.constants.pixels[prevBase + 1];
return this.constants.pixels[base] + Math.min(Math.min(nw,n),ne);
}
var gpuKernel = gpu.createKernel(kFunction)
.setConstants({ pixels: pixels,row: 1 })
.setoutput([5,5]);
console.log(gpuKernel());
这有效,但我希望它在每一行上运行,而不仅仅是第 1 行。
问题是为了在下一行运行,必须首先计算前一行(对于行 n > 1,nw
、n
和 ne
值应根据前一行的值而不是 pixels
)
我可以通过将 createKernel 置于循环中并在每一行上运行它来轻松解决此问题,但我相信不断从 GPU 返回值并将其发送回很慢。我听说 Textures
或许可以解决这个问题,维持某种状态,但我找不到任何相关信息。
我要求做的事情可行吗?使用单个 GPU 函数调用来计算整个累积总和表,而不为计算的每一行来回传递数据?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)