Fortran Coder

查看: 2539|回复: 3
打印 上一主题 下一主题

[讨论] 大数组整体操作的堆栈问题

[复制链接]

68

帖子

23

主题

0

精华

熟手

F 币
244 元
贡献
132 点
跳转到指定楼层
楼主
发表于 2022-12-20 17:06:48 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
先贴代码
-----------------------------------------------------
[Fortran] 纯文本查看 复制代码
  X = 0.5*(-MATMUL((R+S), VX(:, temp_A)) + MATMUL((1.0+R), VX(:, temp_B)) + MATMUL((1.0+S), VX(:, temp_C)))
  Y = 0.5*(-MATMUL((R+S), VY(:, temp_A)) + MATMUL((1.0+R), VY(:, temp_B)) + MATMUL((1.0+S), VY(:, temp_C)))

-----------------------------------------------------
运行后提示溢出(如下所示),调试发现问题就出在上面这两行代码。X 是50万行1列的数组,Y也是50万行1列的数组。VX和VY都 是约7500行1列的数组,R和S是66行一列的数组,


后来查到可以在IVF里按下面做调整(运行fortran出现stack overflow错误怎么办-百度经验 (baidu.com))。把0调整到最大1000000000。可以运行成功,得到了想要的结果。但有个疑问,就是如果X和Y的数组规模更大一点呢?达到100万行1列呢?这样设置是否能仍然有效呢?是否能把这两行代码做一些调整,可以不需要调整这个参数,并且能适用于更大规模数组呢?


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

68

帖子

23

主题

0

精华

熟手

F 币
244 元
贡献
132 点
沙发
 楼主| 发表于 2022-12-20 20:06:34 | 显示全部楼层
fcode 发表于 2022-12-20 17:27
100万行1列,如果是real类型的话,只占4MB(double占8MB)。你看看你一行代码里需要几个这样的数组?
乘上 ...

非常感谢您的回复。
X,R和S,VX和VY,都是real(kind=8)类型 ,算下来也没有占多大空间,没想到会溢出。我想到的就是用了内部函数MATMUL的原因。在网上也查了,有人做了对比:自己编码和使用内部函数MATMUL,最后发现还是用MATMUL的计算效率最高。我这个程序,100万行也不是最大的,X和Y最高可能达上500~600万行。我的这个代码是纯计算,没有界面,不用考虑UI占用内存。有两个问题想请教您。
(1)老老实实循环,是就完全可以避免溢出了吗?就不需要调整上面两个参数吗?
(2)像上面那样设置成1G的话,这样运行程序时,要求计算机必须有1G以上的内存吗?
(3)您讲的分块,就是可以借助CUDA-FORTRAN来实现吧?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-7 05:01

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表