其实搞优化,记住两天:
1.现在的cache策略是怎么样的?要将现有的数据转化为合适的格式,减少数据的访问时间。
2.如果有特定的硬件指令,要讲数据转化为特定的硬件指令。
最典型的是一个Gemm计算;
(M,K)* (K,N) A = (M,K) B = (K,N) C = numpy.dot(A,B)
最后写成循环表达式的形式:
for(m,0,1024) for(n,0,1024) for(k,0,1024) C[m * 1024 + n] = 0f32 // 进行一个初始化 temp2 = m * 1024 temp1 = temp2 + n; // 按照最终输出的图单点进行补点 C[temp1] = C[temp1] + A(temp2+k) * B[(k * 1024)+n];
这里的代码其实比较简单,大家注意看我的注释。
分块:
最典型的方法是分块计算,比如L1的大小是32 * 32,那肯定要分出32*32的片
for(m.o 0:32)
for(n.o, 0:32)
for(m.i, 0,32)
for(n.i, 0,32)
C[m.outer*32768 + m.inner*1024 + n.outer*32 &#