Redian新闻
>
所需内存太大怎么办???
avatar
所需内存太大怎么办???# Computation - 科学计算
p*g
1
问一个计算内存太大的问题。
做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
,再读出来算,这样相当于把硬盘当内存,速度奇慢。
程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。
avatar
sc
2
A怎么大了?几乘几乘几?单精双精?

【在 p*****g 的大作中提到】
: 问一个计算内存太大的问题。
: 做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
: 它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
: ,再读出来算,这样相当于把硬盘当内存,速度奇慢。
: 程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。

avatar
x*y
3
It's dangerous to use harddisk as memory. It can destroy your harddisk. I lost
two hard disks because of this.




【在 p*****g 的大作中提到】
: 问一个计算内存太大的问题。
: 做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
: 它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
: ,再读出来算,这样相当于把硬盘当内存,速度奇慢。
: 程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。

avatar
a*s
4
一个字

【在 p*****g 的大作中提到】
: 问一个计算内存太大的问题。
: 做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
: 它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
: ,再读出来算,这样相当于把硬盘当内存,速度奇慢。
: 程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。

avatar
p*g
5
thanks. is there any way around?

lost



【在 x*y 的大作中提到】
: It's dangerous to use harddisk as memory. It can destroy your harddisk. I lost
: two hard disks because of this.
:
: 存
: 盘

avatar
p*g
6
Two one-dimentisonal arrays, one stores the non-zero elements, the other one
stores the column index. There is another small array record the number of
non-zero elements per row. The two big ones are real*4 and integer, size is
about 1,000,000,000 each.

储存
硬盘

【在 sc 的大作中提到】
: A怎么大了?几乘几乘几?单精双精?
avatar
v*n
7
用那些采取更多近似,但是可以压缩矩阵尺寸,压缩运算的算法吧。
其实这是个大课题了,很多人在搞。呵呵,单独这个矩阵运算问题
就可以发好多文章了。你搞大分子模拟的吧?

【在 p*****g 的大作中提到】
: Two one-dimentisonal arrays, one stores the non-zero elements, the other one
: stores the column index. There is another small array record the number of
: non-zero elements per row. The two big ones are real*4 and integer, size is
: about 1,000,000,000 each.
:
: 储存
: 硬盘

avatar
f*d
8

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呵呵,如果FORTRAN中你用双精度,非零部分就至少14位有效小数!撑死你的内存。
建议,如果精度可以,小数点后全部只保留3位有效数字。

【在 p*****g 的大作中提到】
: 问一个计算内存太大的问题。
: 做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
: 它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
: ,再读出来算,这样相当于把硬盘当内存,速度奇慢。
: 程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。

avatar
o*d
9
自己写IO部分肯定效率不行,你应该用动态数据结构,让OS去自己管理.
比如,new,malloc,我不记得FORTRAN里面的函数了,自己查查吧.在C/C++里,
你肯本不用关心无力内存多大.

【在 p*****g 的大作中提到】
: 问一个计算内存太大的问题。
: 做反演计算,需要迭代一个数组x, 每次迭代需要用到一个矩阵A, 这个A很大,我只储存
: 它的非零成分,但是光是非零成分, 1G的内存就太小,所以现在只能是一段段写到硬盘
: ,再读出来算,这样相当于把硬盘当内存,速度奇慢。
: 程序是用FORTRAN写的,读写是unformmated, 请问有没有什么办法加快。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。