大型运算崩溃

当我指定ADCIRC应该编写一个netCDF热启动文件时,它在较小的测试网格(30k节点)下可以正常工作,但在较大的网格(1M节点)上出现分段违规的情况而失败。我正在使用英特尔编译器。但是,当我使用gfortran和gcc编译器时,ADCIRC成功为两个网格写入了热启动文件。

答:这是intel fortran处理堆栈和堆上的数组的方式的问题。您应该使用以下编译器标志重新编译ADCIRC和netCDF fortran库:“ –heap-arrays 8192”,其中“ 8192”是“ ulimit -s”的输出。这将迫使intel编译器将数组创建的某些情况放在堆而不是堆栈上。您看到的导致崩溃的大型阵列(即,超过2M个元素)正在耗尽机器的堆栈空间。

必须在ADCIRC构建过程以及netCDF库的构建过程中添加此编译器标志。如果netcdf-fortran库不是使用此标志构建的,则故障仍然可能发生。这是因为在netcdf库中创建了一个隐式数组,因此我们无法单独使用ADCIRC来解决该问题,除非建议netcdf-fortran库也与该标志一起重新编译。

阵列大小可能因机器而异,也可能不会发生,具体取决于所使用的英特尔版本或netcdf的构建方式。(此外,Outlook将扩展名更改为.f90,但应为.F90)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值