N^2*(2*N-1) --那么,当稀疏矩阵不够稀疏时,为什么稀疏例程比密集例程慢呢?正在进行哪些额外工作?发布于 2018-07-15 07:33:26
R += S * D,失败数是2*nnz(S)*ncols(D),nnz代表非零数。S变得密集,则触发器的数目与密集情况下相同,但触发器的数目不是决定速度的唯一判据,内存访问通常更重要。首先,对于稀疏存储,每次对S元素的访问都要花费额外的间接代价,比如:value[p[k]]而不是value[i+j*N],用于密集的情况。然后在密集的世界中出现了阻塞算法,以减少缓存丢失、矢量化(SIMD)和指令的最优流水线,以达到CPU的最大性能。一个高效的稠密矩阵积确实比朴素的3个嵌套循环更复杂的数量级,您可以看到特征的实现。挺吓人的,不是吗?https://stackoverflow.com/questions/51345922
复制相似问题