w10prs
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [more] Да, gfortran. Сегментацию победил. В нете пишут, что нужно массивы выделять в куче, дабы это не было в стеке. Это сработало. Но с временем выигрыш получился лишь 17%. В варианте компиляции с включенным OpenMP грузятся оба ядра, в варианте без OpenMP одно. Или надо много ядер, что бы начало работать хорошо, или не учтено что-либо еще. Или в самом деле компилятор нужен intel, хотя, как уж сказал, грузятся оба ядра. Испытуемый код: Код: program omp_par_do implicit none integer (8) :: n real (8), allocatable :: dat ( : ), result ( : ) integer (8) :: i, k real :: t1, t2, t3 n=100000000 allocate (dat(n)) allocate (result(n)) call random_number(dat) call cpu_time(t1) !$OMP PARALLEL DO do i = 1, n result(i) = (log10 (log (sqrt (tan (cos (sin (dat(i)**2)-5.0))))))**3 end do !$OMP END PARALLEL DO call cpu_time(t2) t3 = t2 - t1 print*, " time = ", t3 deallocate (dat) deallocate (result) end program omp_par_do | | Всего записей: 15 | Зарегистр. 02-06-2018 | Отправлено: 14:57 04-06-2018 | Исправлено: w10prs, 15:38 04-06-2018 |
|