官方的矩阵相加的示例如下:
2个矩阵相加的实现
for (int i = 0; i < n; ++i) {
C[i] = A[i] + B[i];
}
怎么优化? 可以并行相加,如下
for (int bx = 0; bx < ceil(n / 64); ++bx) {
for (int tx = 0; tx < 64; ++tx) {
int i = bx * 64 + tx;
if (i < n) {
C[i] = A[i] + B[i];
}
}
}
其实,就是把循环继续拆,一个循环拆成2个循环。
TVM和其他框架比如NNVM、XLA的区别?
在tvm看来,nnvm和xla都是计算图级别的优化,属于high level优化,注意做的是内存复用、布局转换和自动微分。
而tvm采用的是一种low level的表示,进行的是内存布局、并行模式、局部性和硬件原语等优化。
TVM和libDNN、cuDNN关系?
tvm会去调用这些库,与这些库共存。
nnvm tensor operator
https://docs.tvm.ai/nnvm_top.html
分5个级别的op:
- level 1: 基础op(34个)
- level 2: 卷积op(6个)
- level 3: 其他tensor op(19个)
- level 4: 广播和约简op(39个)
- level 5: 视觉op(5个)