最近在钻研HPL代码,试图了解HPL的底层实现机制。( http://www.netlib.org/benchmark/hpl/ )
现在,我对 HPL_T_panel 结构中的一些参数有些困惑。(包括/hpl_panel.h)。
A; /* ptr to trailing part of A */
* WORK; /* work space */
* L2; /* ptr to L */
* L1; /* ptr to jb x jb upper block of A */
lda; /* local leading dim of array A */
ldl2; /* local leading dim of array L2 */
几个问题:
“lda”和“ldl2”是什么意思?L2的前导维度和行数有什么区别?
A、L1、L2的值是多少?换句话说,在面板分解的每次迭代之后,L、U 和子矩阵的确切大小是多少?我试图在迭代期间跟踪这些值,但无法分辨出模式。
例如,假设 HPL 有以下参数:
N 1024 (matrix size)
NB 128 (block size)
PxQ 2x2 (process grid)
对于使用 (src/pgesv/HPL_pdgesv0.c) 的“循环 A 的列”,每个进程的每次迭代的 A、L1、L2 的值是多少?你能在这里给我一些统计分析吗?比如索引和剩余矩阵大小。
如果有人(熟悉 HPL 源代码)给我一些建议,我将不胜感激。