|
|
1
1
您确定您没有安排4K矢量的分配时间吗?
事实上,它被用来作为基准 top500 fastest systems 在地球上: HPL 是“高性能linpack”的一种,是线性代数的参考实现。猜猜看…基准中使用的运算是dgemm,即“双精度通用矩阵乘法”。 dgemm是blas库中操作的名称,实际上是线性代数的标准。现在有许多本地优化的blas库,要么是商业的(intel mkl,ibm essl,…),要么是开源的。( ATLAS ,但它们都使用相同的原始BLAS接口(原来是Fortran,现在也是C)。(注: the original implementation 未优化) 基于BLAS,还有 LAPACK 库:系统解算器,特征系统,…还有优化的lapack库,但通常90%的性能被使用优化的blas库压缩。 我非常了解一个(不是唯一一个…hpl是另一个强大的基于MPI的并行库,它是 SCALAPACK 它包含了PBLA(平行BLAS),并且在其中…优化和并行版本的dgemm等。 scalapack附带 SLUG 在这里您可以找到一个关于块循环分布的很好的解释,这是用于压缩并行系统上最佳性能排列线性代数问题的数据分布策略。 但是,要获得最佳性能,您需要将MPI可执行文件链接到本地优化的BLAS库。或者写自己的,但你并不孤单,所以不要重新发明轮子。 局部优化是通过访问矩阵获得的,而不是通过行、列,而是通过块。通过调整块大小以优化缓存和/或TLB的使用(我记得刚才的libgoto,另一个BLAS库,它经过优化以最小化TLB未命中,在某些系统上达到并超过了Intel MKL…前段时间)查找更多信息,例如 ATLAS paper . 无论如何,如果你真的想…我开始分析其他车轮是如何锻造的,然后再尝试制造我的车轮;) |