我正在使用一个名为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 …
我可能错过了一些明显的东西,但我正在尝试使用gpu.js并得到一些奇怪的结果.我只是想确保我没有做一些明显愚蠢的事情(很可能).
不确定这是我正在做的问题,还是使用WebGL通过gpu.js完成计算的方式.
我创建了一个新的GPU和新内核:
const gpu = new GPU();
const test = gpu.createKernel(function () {
return 255 +
(255 * 256) +
(255 * 256 * 256) +
(255 * 256 * 256 * 256);
}).setOutput([1]);
const res = test();
Run Code Online (Sandbox Code Playgroud)
这给了我4294967296的结果(包含在float32array中).
如果我从控制台运行相同的计算,我得到4294967295的结果.