【问题标题】:Understanding linpack input configuration了解 linpack 输入配置
【发布时间】:2018-03-18 07:17:16
【问题描述】:
        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 值都等于相应的问题大小会发生什么

Line5- 对齐值到底是什么?

【问题讨论】:

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


【解决方案1】:

这是英特尔优化的 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 等处。请注意,我们使用不同的符号 nN。原因是当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 给出了归一化残差的以下公式。

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

【讨论】:

  • 这样一个写得很好的答案。他们应该将您的答案复制粘贴到原始文档的底部。 @dmitri-chubarov 你太棒了。
  • 输出中的 Residual & Residual(norm) 是什么?
  • @sapy 谢谢。我已经更新了帖子以包含一些关于残差和归一化残差的信息。
  • “运行测试(试验)的次数”如果没有试验 ,可以安全地假设它们将并行
  • @sapy "运行测试的次数(试验)" - 考虑到我们无法控制的抖动,假设抖动源是随机的,每个测试都会运行多次。默认情况下,基准测试是并行化的,每次运行都使用所有可用的处理器内核,因此运行是按顺序执行的。您可以使用OMP_NUM_THREADS 环境变量控制线程数。
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2014-09-04
  • 2020-03-29
  • 2012-01-18
相关资源
最近更新 更多