问题描述
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]);
但是,由于我不是通过CUDA或OpenGL等低级协议来使用GPU,而是通过几层抽象,即WebGL之上的GPU.js,来使用GPU,因此,我真的不必学习较低级的基础知识。矩阵运算在硬件上的组装方式的精确度。
但是我注意到,对于GPU.js,每个GPU都限制了我可以操作的矩阵大小,通常限制为GPU支持的最大屏幕分辨率。因此,如果我不得不猜测,我会认为我一次可以在GPU上并行执行的矩阵运算的最大数量为7680 x 4320 x 3(宽度x高度x 3个颜色通道),例如RTX 3080:
所以我想我对该卡的限额是:
.setoutput([7680,4320,3]);
编辑:
这是不对的,因为每一代Nvidia GPU的最大分辨率规格:1000、2000、3000系列都保持不变,并且时钟速度也几乎保持不变,这是CUDA核心数增加,并且似乎会增加该卡每秒能够处理的最大并发矩阵操作数,based on the number of threads per core(参考7m52s),但是即使looking at the docs我也不确定如何计算搞清楚那是什么,甚至就是那么简单。
如何计算GPU在一次并行处理中可以处理的最大矩阵运算大小?
解决方法
似乎
gl.getParameter(gl.MAX_TEXTURE_SIZE)
可能是正确的答案,但我仍然不确定如何找到卡by their documentation的计算方法。好像是cuda core count * thread count per core
based on the architecture(7分52秒)。