类 BlockRealMatrix

java.lang.Object
org.hipparchus.linear.AbstractRealMatrix
org.hipparchus.linear.BlockRealMatrix
所有已实现的接口:
Serializable, AnyMatrix, RealLinearOperator, RealMatrix, Blendable<RealMatrix>

public class BlockRealMatrix extends AbstractRealMatrix implements Serializable
使用平面数组实现的缓存友好型RealMatrix,用于存储矩阵的方块块。

此实现专为缓存友好而设计。方块块被存储为小数组,并允许以行主方向和列主方向高效遍历数据,一次一个块。这极大地提高了使用交叉方向循环的算法(如乘法或转置)的性能。

方块块的大小是一个静态参数。它可以根据目标计算机处理器的缓存大小进行调整。作为经验法则,它应该是允许同时缓存三个块的最大值(例如,这对于矩阵乘法是必要的)。默认值是使用52x52块,非常适合具有64k L1缓存的处理器(一个块可容纳2704个值或21632字节)。对于具有32k L1缓存的处理器,此值可以降低到36x36。

常规块表示BLOCK_SIZE x BLOCK_SIZE方块。右侧和底部的块可能较小以适应矩阵维度。方块块以单维数组的行主序列方式展开,因此对于常规块,它们是BLOCK_SIZE2元素长。块本身按行主序排列。

例如,对于52x52的块大小,100x60矩阵将存储在4个块中。块0将是一个double[2704]数组,保存左上角的52x52方块,块1将是一个double[416]数组,保存右上角的52x8矩形,块2将是一个double[2496]数组,保存左下角的48x52矩形,块3将是一个double[384]数组,保存右下角的48x8矩形。

与简单将矩阵映射到java数组相比,布局复杂性开销对于小矩阵来说是可以忽略的(约为1%)。缓存效率带来的收益可使中等到大型矩阵的性能提高多达3倍。

另请参阅: