gpt4 book ai didi

memory - 当我增加稀疏矩阵的大小时,SuperLU dgstrf 返回内存分配失败

转载 作者:行者123 更新时间:2023-12-01 05:52:20 26 4
gpt4 key购买 nike

我正在创建一个 FEA 程序,我正在处理 290-96 千平方或 27-90 亿个元素的矩阵。这些矩阵在很大程度上是稀疏的,所以我使用 SuperLU 来解决它们。我已经能够成功地使用 SuperLU 来解决这个问题,该问题与较小矩阵的验证数据相当匹配。但是,随着我增加矩阵的大小,SuperLU 的 dgstrf 函数输出的信息值大约为 9 亿(一次为 914459273,另一次为 893813121)。

文档说这个信息值是“发生内存分配失败时分配的字节数,加上 A->ncol”。但是,这并没有提供有关如何解决此错误的任何信息。在这种情况下是什么限制了内存?图书馆是否限制了内存?它是硬编码到库中还是在编译期间确定?编译我的 Fortran 代码时内存是否有限?

我正在用 Fortran 编写代码,并使用预构建的 c_fortran_dgssv.c 文件与 SuperLU 链接。该文件确实允许系统“通过系统 malloc 在内部分配空间”(lwork=0)。这是我可以改变的东西,以便有更多的空间。

我使用与 fortran 示例类似的调用来调用代码。

nrhs = 1
ldb = Dim3DFull
iopt = 1
call c_fortran_dgssv(iopt,Dim3DFull,TotalNonZeroElements_BCs,nrhs, &
Global_Matrix_T_Value_BC_CSC,Global_Matrix_T_Row_BC_CSC, &
Global_Matrix_T_Col_BC_CSC,Global_Temp,ldb,factors,info)
if (info .eq. 0) then
write (*,*) 'Factorization succeeded'
else
write(*,*) 'INFO from factorization = ', info
endif
!Second, solve the system using the existing factors.
iopt = 2
call c_fortran_dgssv(iopt,Dim3DFull,TotalNonZeroElements_BCs,nrhs, &
Global_Matrix_T_Value_BC_CSC,Global_Matrix_T_Row_BC_CSC, &
Global_Matrix_T_Col_BC_CSC,Global_Temp,ldb,factors,info)
if (info .eq. 0) then
write (*,*) 'Solve succeeded'
else
write(*,*) 'INFO from triangular solve = ', info
endif
!Last, free the storage allocated inside SuperLU
iopt = 3
call c_fortran_dgssv(iopt,Dim3DFull,TotalNonZeroElements_BCs,nrhs, &
Global_Matrix_T_Value_BC_CSC,Global_Matrix_T_Row_BC_CSC, &
Global_Matrix_T_Col_BC_CSC,Global_Temp,ldb,factors,info)

最佳答案

您的矩阵太大而无法使用直接(即基于因式分解)的求解器。直接求解器创建大量新的非零元素;这会导致程序耗尽 RAM。迭代求解器是唯一的解决方案;这里的讨论空间太小,您可能有兴趣在以下博客中查看更多详细信息(并在那里提出任何问题):http://comecau.blogspot.com/2018_09_05_archive.html

关于memory - 当我增加稀疏矩阵的大小时,SuperLU dgstrf 返回内存分配失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52894029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com