了解linpack输入配置

时间:2018-03-18 07:17:16

标签: performance-testing benchmarking intel cpu-usage linpack

        5                         # number of tests
        1000 2000 3000 4000 5000  # number of equations (problem sizes)
        1000 2008 3000 4008 5000  # leading dimensions
        4 4 2 1 1                 # number of times to run a test (trials)
        4 4 4 4 4                 # alignment values (in KBytes)

我已阅读documentation,但2,3,5不清楚(我不知道FORTRAN)。

第2行 - 是否要求创建1000 * 1000,2000 * 2000 ... 5000 * 5000矩阵?如果是,方程式与创建矩阵有什么关系?如果不是,这个等式有多复杂,就像解决a = 1.2+2.2或其他一些复杂问题一样简单

第3行 - 它可能指的是子矩阵。但是创建子矩阵的重点是什么?如果所有LDA值等于相应的问题大小,将会发生什么

第5行 - 什么是准确的对齐值?

1 个答案:

答案 0 :(得分:2)

这是针对英特尔优化的Linpack基准测试的设置。您似乎混淆的参数都与表示和访问矩阵的方式有关。

输入参数

Linpack基准测试解决了N联立线性方程组。

a11 * x1 + a12 * x2 + .. + a1N * xN = b1
a21 * x1 + a22 * x2 + .. + a2N * xN = b2
...
aN1 * x1 + aN2 * x2 + .. + aNN * xN = bN

这相当于求解向量方程Ax=b,其中xb是N维向量,AN*N矩阵。

N*N矩阵在内存中表示为N*N数组,其中各列存储在偏移0n2*n等处。我们使用不同的符号n代替N。原因是当n=N运行在多个并行线程中的算法可能会遇到称为cache thrashing的现象。避免这种情况建议设置n>N在列数据之间插入一些填充。通常n被选择为可被8整除的最小整数,大于N。所以我们完成了第2行和第3行。第2行是N,第3行是n

Linpack基准测试使用多个阵列。再次有效地使用缓存,建议让所有数组从内存页面的边界开始。所以它们与4k边界对齐。对于较大的页面,将该值设置为较大的数字可能是有意义的,例如, 16或64.这是我们的第5行。

输出数量

要检查解决方案,Linpack基准计算剩余向量r = Ax - b。向量r的最大范数是其元素max(|r_1|,..,|r_N|)的绝对值的最大值。该值称为残值。它应该是 machine epsilon eps的顺序,即最小的数字1 + eps > eps。对于64位浮点数eps约为1e-15。

要使度量与机器体系结构无关,计算标准化残差Linpack documentation给出了归一化残差的以下公式。

|| Ax - b || _oo /(eps *(|| A || _oo * || x || _oo + || b || _oo)* n)

这里|| X || _oo表示最大范数。看起来很滑稽的下标_oo代表无穷大符号。那是|| Ax - b || _oo是残差,|| A || _oo是矩阵A元素绝对值的最大值 和|| b || _oo是右侧矢量的最大绝对值。

符号|| X || _oo来自分析。有|| X || _1表示X,||的分量的绝对值之和X || _1 = | x1 | + ... + | xN |。 || X || _2 = sqrt(| x1 | ^ 2 + ... + | xN | ^ 2),|| X || _k =(| x1 | ^ k + ... + | xN | ^ k)^(1 / k)。可以证明当k进入无穷大时|| X || _k走向max(|x1|,...,|xk|)

您还应该查看原始High Performance LINPACK