如何有效地将 GPU JS 函数的输出反馈给它?

问题描述

我正在尝试使用 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,nwnne 值应根据前一行的值而不是 pixels)

计算

我可以通过将 createKernel 置于循环中并在每一行上运行它来轻松解决此问题,但我相信不断从 GPU 返回值并将其发送回很慢。我听说 Textures 或许可以解决这个问题,维持某种状态,但我找不到任何相关信息。

我要求做的事情可行吗?使用单个 GPU 函数调用来计算整个累积总和表,而不为计算的每一行来回传递数据?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)