Viz*_*ary 6 javascript gpu gpu.js
我正在使用一个名为GPU.js的 JS 库。像这样使用:
const gpu = new GPU();
const multiplyMatrix = gpu.createKernel(function(a, b) {
let sum = 0;
for (let i = 0; i < 512; i++) {
sum += a[this.thread.y][i] * b[i][this.thread.x];
}
return sum;
}).setOutput([512, 512]);
Run Code Online (Sandbox Code Playgroud)
但是因为我不是通过像 CUDA 或 OpenGL 这样的低级协议来使用 GPU,而是通过几个抽象层,即 WebGL 之上的 GPU.js,我真的没有必要学习底层的基础知识到底如何矩阵运算在硬件上组装。
但是我注意到对于 GPU.js,每个 GPU 对我可以操作的矩阵的大小都有限制,通常限于 GPU 支持的最大屏幕分辨率。因此,如果我不得不猜测,我会认为我可以在 GPU 上一次并行执行的矩阵运算的最大数量是 7680 x 4320 x 3(宽 x 高 x 3 个颜色通道),例如 RTX 3080:
所以我猜我对那张卡的限制是:
.setOutput([7680, 4320, 3]);
Run Code Online (Sandbox Code Playgroud)
编辑:
这不可能是正确的,因为每一代 Nvidia GPU 的最大分辨率规格:1000、2000、3000 系列都保持不变,时钟速度也几乎保持不变,增加了 CUDA 核心数,并且根据每个核心的线程数(参考 7m52s),似乎会增加卡每秒能够执行的最大并发矩阵操作数,但即使查看文档我也不知道如何弄清楚那是什么,或者如果它甚至那么简单。
如何计算 GPU 可以在一次并行传递中处理的最大矩阵运算大小?
看起来
gl.getParameter(gl.MAX_TEXTURE_SIZE)
Run Code Online (Sandbox Code Playgroud)
可能是正确的答案,但我仍然不确定我们如何找到如何通过卡片的文档来计算该值。看起来它是cuda core count * thread count per core 基于架构(7m52s)的。