Fortran Coder

查看: 24310|回复: 14
打印 上一主题 下一主题

[数值问题] 新手求教A common block or variable may not exceed 2147483647 bytes

[复制链接]

8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
跳转到指定楼层
楼主
发表于 2017-2-28 20:47:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
电脑操作系统64位,内存16G,数组大小5,800,000*40,双精度,在debug x64/win32下编译均顺利通过,
但将数组加大到6,000,000*40时,在win32下出现:
错误 1  error #5520: A common block or variable may not exceed 2147483647 bytes
错误 2  Compilation Aborted (code 1)

在x64下出现:错误 1 Compilation Aborted (code 1)

搜索了论坛贴子把设置改成 Support Addresses Larger Than 2 GB (/LARGEADDRESSAWARE) 仍出现以上情况。
请高手帮忙!

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

8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
15#
 楼主| 发表于 2017-3-5 12:20:58 | 只看该作者
vvt 发表于 2017-3-5 09:26
改成动态数组吧,这的确是 windows 的内存限定。

详询:https://software.intel.com/en-us/forums/intel-v ...

谢谢,也只能如此了。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
14#
发表于 2017-3-5 09:26:08 | 只看该作者
改成动态数组吧,这的确是 windows 的内存限定。

详询:https://software.intel.com/en-us ... indows/topic/303762

8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
13#
 楼主| 发表于 2017-3-5 07:30:53 | 只看该作者
本帖最后由 mrzlh 于 2017-3-5 07:35 编辑
vvt 发表于 2017-3-4 22:04
请问您在主楼说:
在debug x64/win32下编译均顺利通过

win32下有2个错误;
x64下有1个错误。

数组加大了就通过不了,好像只能在2G以内,超过了2G就不行了。

error1.png (18.13 KB, 下载次数: 318)

win32下出现2个错误。

win32下出现2个错误。

error2.png (16.94 KB, 下载次数: 284)

error2.png

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
12#
发表于 2017-3-4 22:04:02 | 只看该作者
请问您在主楼说:
在debug x64/win32下编译均顺利通过

意思是:x64下改到 6000000*40 通不过是吗??

能否给一个“输出窗口”的完整的截图?

8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
11#
 楼主| 发表于 2017-3-4 21:51:56 | 只看该作者
vvt 发表于 2017-3-4 08:39
要使用64位编译器,你必须保证:
1.你的CPU是64位的
2.你的操作系统(windows,linux)是64位的。

有可能是家庭版Win10的原因吗?

QQ.png (13.05 KB, 下载次数: 317)

QQ.png

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
10#
发表于 2017-3-4 08:39:28 | 只看该作者
本帖最后由 vvt 于 2017-3-4 09:01 编辑

要使用64位编译器,你必须保证:
1.你的CPU是64位的
2.你的操作系统(windows,linux)是64位的。
3.您按照了64位的编译器。
4.您切换了编译器的编译选项为64位。(这一条很多人忽略)
正如您在主楼说的那样。debug/x64 win32 可以编译。

至于数组大小不能减小,还会慢慢增加。这只是因为你使用了不恰当的数据结构和算法。
有很多关于小内存干大事的实例,比如系数矩阵存储(Sparse matrices)和求解器,比如波前法(front algorithm),比如级联抽样(Cascade decimate)还有数值算法中很常见的思想:分而治之(divide and rule)
没有什么数组是不能减少的。你可以详细看看沙发提供的文章链接。


8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
9#
 楼主| 发表于 2017-3-4 07:37:59 | 只看该作者
vvt 发表于 2017-3-3 22:39
在我这里,错误提示是:The size of the array dimension is too large, and overflow occurred when compu ...

是的,但我的是64位,16G内存。数组大小不能减小,还会慢慢增加。

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
8#
发表于 2017-3-3 22:39:43 | 只看该作者
在我这里,错误提示是:The size of the array dimension is too large, and overflow occurred when computing the array size.
当 Num_All=7000000 时
降低到 6000000,则可以编译和链接(32位)
64位则都可以编译链接。

7,000,000*40*8/1024/1024=2.13G,已经超过了32位内存容许。但没有超过64位的。
建议:合理有效的利用内存。

8

帖子

1

主题

0

精华

入门

F 币
66 元
贡献
37 点
7#
 楼主| 发表于 2017-3-3 19:33:34 | 只看该作者
[Fortran] 纯文本查看 复制代码
   Program Main
    Implicit None
    Integer, Parameter:: Num_All=7000000, Num_List=40,Num_File=15000
    Integer I10,I11,I12,J10,K0,Num_Data
    Character*8 Filename(Num_File)
    Double Precision Num_Total(Num_All, Num_List)
    K0=1
    Open(Unit=10,File='D:\File.txt')
    Do I10=1,Num_File
        Read(10,*)Filename(I10)
    End Do
    Close(10)
    Do I11=1,Num_File
        Open(Unit=11,file='d:\File\'//Filename(I11)//'.txt')
        Read(11,*)Num_Data
        Do I12=1,Num_Data
            Read(11,*)(Num_Total(K0,J10),J10=1,Num_List)
            K0=K0+1
        End Do
        Close(11)
    End Do
    End Program Main
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-11-23 20:58

Powered by Tencent X3.4

© 2013-2024 Tencent

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