中文
注册

函数说明

线性代数运算库(Linear Algebra PACKage),通过分块、求解算法组合、多线程、BLAS接口优化等手段,基于鲲鹏架构对LAPACK的计算效率进行了优化。

LAPACK原本用Fortran语言实现并由Fortran语言调用,也可由C语言直接调用。以下采用C语法说明标准Fortran接口。

由于LAPACK部分接口会在内部分配额外的内存,且这些额外内存主要受矩阵规模及线程数大小的影响,其具体关系如表1所示(其他接口所需额外内存均小于这三类接口)。因此,在机器内存配置为256GB的典型场景下,为更好的使用优化接口,我们建议最大规模不超过45000(涉及表1中函数接口除外,其以表1中建议规模为准)。

表1 LAPACK额外内存使用及建议规模说明

函数

额外内存占用空间(单位为元素个数)

建议最大规模(256GB机器内存)

?potri

6400 * ldb + 640000

45000

?getri

2000 * ldb + 40000 * 线程数 + 400000

45000

?stedc

(n * n + 8 * n + 10000) * 线程数 + 10000000

18000

需要注意的是,当矩阵规模超过建议值时,可能调用到性能较低的接口而非优化接口,进而会导致最终使用的性能下降。换言之,若机器内存足够大,能满足额外内存的需求,则可在更大矩阵规模下获得最佳性能。

举例:以dsyevd为例,其实现需要调用dstedc接口。则在典型场景下,假定元素类型为双精度(8字节每元素),矩阵大小为18000x18000,使用96个线程,则所需内存的计算如下:

  1. 额外的内存占用:

    ((18000 * 18000 + 18000 * 8 + 10000) * 96 + 10000000) * 8 = 249,030,272,000字节(约231.9 GB)

  2. 必须的内存占用包含:
    • 矩阵本身内存占用:18000 * 18000 * 8 = 2,592,000,000字节(约2.4GB)
    • 工作数组work(6n+2n*n + 3+5n)内存占用:(1 * 6 * 18000 + 2 * 18000 * 18000 + 3 + 5 * 18000) * 8=5,185,584,024‬字节(约4.8GB)

故在此情形下,调用dsyevd时,共需要内存约为231.9 + 2.4 + 4.8 = 239.1GB。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词