首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在linux和windows中的fortran中要循环的最大元素

在linux和windows中的fortran中要循环的最大元素
EN

Stack Overflow用户
提问于 2018-11-28 08:37:06
回答 2查看 238关注 0票数 2

我正在编写一些并行的Fortran90/95代码,我只是遇到了一些我无法理解的事情。

我在一台东芝笔记本电脑上工作,里面有6GoRAM。

  • 在Windows 10中,我使用代码::块。我已经将gfortran从MinGW导入为编译器,并使用-fopenmp标志编译我的代码。
  • 我在VirtualBox里面有Ubuntu18.04。我让它用了我一半的公羊,那是3 3Go。我也用gfortran -fopenmp编译了我的代码。

遇到问题的代码的最低版本是:

代码语言:javascript
运行
复制
program main
  implicit none

  integer :: i
  integer, parameter :: n=500000
  real, dimension(n) :: A, B
  real :: som

  som=0

  do i =1, n
    A(i)= 1.0
    B(i)= 2.0
  end do

  do i=1, n
    som = som + A(i)*B(i)
  end do

  print *,"somme:", som
end program main

然后,让参数n的值发生变化。

  • 在Windows上运行。大约200.000美元,一切都很好。上面,我得到“进程返回-1073741571 (0xC00000FD)”。
  • 在Ubuntu上运行,我可以在没有问题的情况下提高到1.000.000。似乎屏障在2.000.000左右,在那之后,我得到了一个分段断层。

我的问题是如何解释这个ubuntu,尽管可用内存少得多,却可以处理10倍多的迭代?

对于Windows大小,我能做些什么使它能够处理更多的循环迭代吗?

EN

回答 2

Stack Overflow用户

发布于 2018-11-28 09:29:22

根据罗德里戈·罗德里格斯的评论,我在编译器设置中又添加了一个标志:

代码语言:javascript
运行
复制
-fmax-stack-var-size=65535

文档说默认值是32767,但我假设代码块和ubuntu的本地gfortran中有不同的设置。

票数 0
EN

Stack Overflow用户

发布于 2022-10-24 03:03:40

代码语言:javascript
运行
复制
program main

  implicit none
  real,allocatable :: A(:),B(:)
  real :: som
  integer :: i
  integer, parameter :: n=500000
  allocate(A(n))
  allocate(B(n))


  som=0

  do i =1, n
    A(i)= 1.0
    B(i)= 2.0
  end do

  do i=1, n
    som = som + A(i)*B(i)
  end do

  print *,"somme:", som
end program main

顶替

代码语言:javascript
运行
复制
real, dimension(n) :: A, B

使用

代码语言:javascript
运行
复制
real,allocatable :: A(:),B(:)
allocate(A(n))
allocate(B(n))

问题解决了,请检查一下。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53515227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档