了解 linpack 输入配置
Understanding linpack input configuration
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 行-对齐值到底是多少?
这是英特尔优化的 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
,其中 x
和 b
是 N-dimensional 向量,A
是 N*N
矩阵.
N*N
矩阵在内存中表示为 N*N
数组,其中各个列存储在偏移量 0
、n
、2*n
等处. 请注意,我们使用不同的符号 n
而不是 N
。原因是当 n=N
算法 运行 在几个并行线程中运行时可能 运行 变成一种称为 cache thrashing 的现象。请避免这种情况,建议设置 n>N
在列数据之间插入一些填充。通常选择 n
作为大于 N
的可被 8 整除的最小整数。所以我们完成了第 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 是残差,||一个||_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。
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 行-对齐值到底是多少?
这是英特尔优化的 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
,其中 x
和 b
是 N-dimensional 向量,A
是 N*N
矩阵.
N*N
矩阵在内存中表示为 N*N
数组,其中各个列存储在偏移量 0
、n
、2*n
等处. 请注意,我们使用不同的符号 n
而不是 N
。原因是当 n=N
算法 运行 在几个并行线程中运行时可能 运行 变成一种称为 cache thrashing 的现象。请避免这种情况,建议设置 n>N
在列数据之间插入一些填充。通常选择 n
作为大于 N
的可被 8 整除的最小整数。所以我们完成了第 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 是残差,||一个||_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。