24小时热门版块排行榜    

查看: 797  |  回复: 10

ddli123456

铁虫 (初入文坛)

[求助] 内存泄漏

有没有哪位编写过并行程序的?额用fortran,调用MKL库不断求解7200*7200矩阵的本征值,可是循环几次,内存就被消耗完了,额没有使用过动态数组,可能是内存泄漏。不知道有木有碰到过类是问题的?有木有知道该怎么解决的?谢谢啦!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖

感谢参与,应助指数 +1
你算下内存占用,如果是双精度,一个差不多有400M的样子。如果你内存里同时有好几个的话,就会溢出。一个办法是用动态数组,循环一次释放一次。
2楼2012-02-11 17:26:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

#include

算的方法
int main()
{
     long memsize;
     memsize = sizeof(double) * 7200 * 7200;
     printf("%d,%ld\n", sizeof(double), memsize/1024/1024);

     return 0;
}
3楼2012-02-11 17:27:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ddli123456

铁虫 (初入文坛)

引用回帖:
: Originally posted by 锐利的碎片 at 2012-02-11 17:26:20:
你算下内存占用,如果是双精度,一个差不多有400M的样子。如果你内存里同时有好几个的话,就会溢出。一个办法是用动态数组,循环一次释放一次。

动态数组我用过了,并且也释放了,没有效果。我用的服务器单个节点内存有20G,有4个线程,每个线程同时有3个那么大的矩阵,循环7次就死掉了,有没有函数可以监测剩余内存的?谢谢!
4楼2012-02-11 18:25:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖

ddli123456(金币+1): 有帮助 2012-02-12 08:24:40
allocate可以带一个参数返回状态,如果失败可以退出。
5楼2012-02-11 18:37:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ddli123456

铁虫 (初入文坛)

引用回帖:
: Originally posted by 锐利的碎片 at 2012-02-11 18:37:16:
allocate可以带一个参数返回状态,如果失败可以退出。

恩,我试一下不断申请再释放来估计一下剩余内存
6楼2012-02-11 18:42:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

你最好给个大概的代码看看。
7楼2012-02-11 18:44:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ddli123456

铁虫 (初入文坛)

引用回帖:
: Originally posted by 锐利的碎片 at 2012-02-11 18:44:39:
你最好给个大概的代码看看。

代码有一千多行,下面是求解本征值的部分:
           call BLACS_BARRIER(0,'All')
           call DESCINIT(DESCA,N,N,NB_,NB_,0,0,CONTEXT,LDA,INFO)
           call DESCINIT(DESCZ,N,N,NB_,NB_,0,0,CONTEXT,LDA,INFO)
           call PDLACP3(N,1,hmatr,DESCA,vect,N,0,0,1)
           print*,'After first PDLACP3'
           call PDSYEVD('V','U',N,hmatr,1,1,DESCA,eigen,BB,1,1,
     $                 DESCZ,WORK,LWORK,IWORK,LIWORK,INFO)
           print*,'After PDSYEVD','INFO',INFO
           call BLACS_BARRIER(0,'All')
           print*,'BB',size(BB,1),size(BB,2)  
          print*,'vect',size(vect,1),size(vect,2)
!----
         call PDLACP3(N,1,BB,DESCZ,vect,N,-1,-1,0)
!----
           print*,'After second PDLACP3'
程序就是在---- 和 ---- 之间出错的,当时是内存用完了,后的PDLACP3没有执行就卡死了
8楼2012-02-11 19:07:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

BB大小是多少?
9楼2012-02-11 19:29:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ddli123456

铁虫 (初入文坛)

引用回帖:
: Originally posted by 锐利的碎片 at 2012-02-11 19:29:46:
BB大小是多少?

7200*7200
10楼2012-02-11 21:31:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ddli123456 的主题更新
信息提示
请填处理意见