将矩阵传递给共享对象时内存使用量翻倍
Memory usage doubled when passing matrix to shared object
我有一组线性方程,其中
A x = b,A 是一个大矩阵,b 也是已知的。
矩阵A设置为python。
现在我想反转矩阵 A 以获得 x.
A 和 b 通过共享对象传递给 Fortran 90 程序。我使用 numpy.f2py 编译了 Fortran 程序:
import numpy.f2py.f2py2e as f2py2e
import sys, os
sys.argv += "-lmkl_rt -c -m MKL_MODULE MKL_WRAPPER.f90".split()
f2py2e.main()
最后,我调用了 f90 子程序:
MKL_MODULE.mkl_wrapper.call_dgelsd(A, b, np.shape(A)[0], np.shape(A)[1])
当调用 fortran 程序时,内存使用量加倍,显然是由于矩阵 A 和 b 的内部副本。
但是,一旦我有了向量 x,我就不再对 A 或 b 感兴趣了。
有什么办法可以避免内部复制并将 A 传递给 Fortran 程序吗?
我已经有了将 A 和 b 保存到 HD 并从 Fortran 程序读取它的想法,但这需要很长时间,而且对于我正在处理的大小的矩阵来说并不是一个真正的选择。
如果数组是 F 序的,则不会进行内部复制
[How to force numpy array order to fortran style?
到 Fortran 风格][1]
我有一组线性方程,其中 A x = b,A 是一个大矩阵,b 也是已知的。 矩阵A设置为python。 现在我想反转矩阵 A 以获得 x.
A 和 b 通过共享对象传递给 Fortran 90 程序。我使用 numpy.f2py 编译了 Fortran 程序:
import numpy.f2py.f2py2e as f2py2e
import sys, os
sys.argv += "-lmkl_rt -c -m MKL_MODULE MKL_WRAPPER.f90".split()
f2py2e.main()
最后,我调用了 f90 子程序:
MKL_MODULE.mkl_wrapper.call_dgelsd(A, b, np.shape(A)[0], np.shape(A)[1])
当调用 fortran 程序时,内存使用量加倍,显然是由于矩阵 A 和 b 的内部副本。 但是,一旦我有了向量 x,我就不再对 A 或 b 感兴趣了。 有什么办法可以避免内部复制并将 A 传递给 Fortran 程序吗?
我已经有了将 A 和 b 保存到 HD 并从 Fortran 程序读取它的想法,但这需要很长时间,而且对于我正在处理的大小的矩阵来说并不是一个真正的选择。
如果数组是 F 序的,则不会进行内部复制
[How to force numpy array order to fortran style? 到 Fortran 风格][1]