Я пишу некоторый параллельный код 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, чтобы он мог обрабатывать больше итераций цикла?