Максимальное количество элементов в Фортране в Linux и Windows - PullRequest
0 голосов
/ 28 ноября 2018

Я пишу некоторый параллельный код Fortran90 / 95, и я только что натолкнулся на кое-что, чего я не могу понять.

Я работаю на ноутбуке Toshiba с 6Go RAM.

  • В Windows 10 я использую code :: blocks.Я импортировал gfortran из MinGW в качестве компилятора и скомпилировал свой код с флагом -fopenmp.
  • У меня Ubuntu 18.04 внутри VirtualBox.Я позволил ему использовать половину моего оперативной памяти, то есть 3Go.Я скомпилировал свой код на этом также с помощью gfortran -fopenmp.

Минимальная версия обнаруженного кода, вызывающего проблему:

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.Для n примерно до 200.000 все хорошо.Выше я получил «Процесс возвращен -1073741571 (0xC00000FD)» *
  • Работая в Ubuntu, я могу подняться до 1.000.000 без проблем.Похоже, что барьер составляет около 2.000.000, после чего я получил segfault.

Мой вопрос заключается в том, как объяснить, что ubuntu, несмотря на то, что доступно гораздо меньше памяти, может обрабатывать в 10 раз больше итераций?

Могу ли я что-нибудь сделать с размером Windows, чтобы он мог обрабатывать больше итераций цикла?

1 Ответ

0 голосов
/ 28 ноября 2018

Согласно комментарию Родриго Родригеса, я добавил еще один флаг в настройки своего компилятора:

-fmax-stack-var-size=65535

В документации указано, что по умолчанию установлено значение 32767, но я предполагаю, что в блоках кода и в родном gfortran для Ubuntu есть другие настройки.

...