0
        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)

我已经阅读了文档,但是 2,3, 5 不清楚(我不知道 FORTRAN)。

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

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

Line5-对齐值到底是什么?

4

1 回答 1

4

这是英特尔优化的 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数组,其中各个列存储在偏移量0等处。请注意n2*n我们使用不同的符号n而不是N。原因是当n=N算法在多个并行线程中运行时可能会遇到一种称为缓存抖动的现象。请避免这种情况,建议设置n>N在列数据之间插入一些填充。通常n被选为可被 8 整除且大于 的最小整数N。所以我们完成了第 2 行和第 3 行。第 2N行是,第 3 行是n

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

输出数量

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

为了获得独立于机器架构的度量,计算归一化残差Linpack 文档给出了标准化残差的以下公式。

|| 斧头 - 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|)

您还应该看看原来的高性能 LINPACK

于 2018-03-18T07:38:28.890 回答