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行 - 什么是准确的对齐值?
答案 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
,其中x
和b
是N维向量,A
是N*N
矩阵。
N*N
矩阵在内存中表示为N*N
数组,其中各列存储在偏移0
,n
,2*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。