Açık kodlu kodumu paralelleştirirken Fortran 90'daki dizilerde bazı öğe-temelli hesaplama yapmak istiyorum. Şimdi aşağıdaki kodu vardır: Ben diziler x ve ayrılabilir diziler r statik yerine şimdi istiyorumAllocatable dizi için Openmp paralel iş akışı
program test
implicit none
integer,parameter :: n=50
integer :: i
integer(8) :: t1,t2,freq
real(8) :: seq(n),r(n,n,n,n)
real(8),dimension(n,n,n,n) :: x
call system_clock(COUNT_RATE=freq)
seq=[(i,i=1,n)]
x=spread(spread(spread(seq,2,n),3,n),4,n)
call system_clock(t1)
!$omp parallel workshare
! do some array calculation
r=atan(exp(-x))
!$omp end parallel workshare
call system_clock(t2)
print*, sum(r)
print '(f6.3)',(t2-t1)/real(freq)
end program test
, bu yüzden yazın:
real(8),dimension(:,:,:,:),allocatable :: x,r
allocate(x(n,n,n,n))
allocate(r(n,n,n,n))
ancak hatasız seri program çalıştırmak olduğunu ve derleyici "! $ omp parallel workshare" satırını dikkate almaz.
Bu durumda paralelleştirmek için hangi seçenekleri kullanmalıyım? omp parallel do
ile döngüleri denedim ama çok daha yavaş.
ben pencerelerde gfortran 5.1.0 ile benim kod derleme ediyorum:
gfortran -ffree-form test.f -o main.exe -O3 -fopenmp -fno-automatic
* "Fakat öyle görünüyor ki! $ Omp parallel workhare allocatable dizi için çalışmıyor." * Neden? * "Göründü" * ne demektir? * * Işe yaramaz * ne demektir? Hiçbir şey ifade etmeyen bu ifadeyi kullanmayın. Neyi denediniz ve hangi hatalarla karşılaştığınızı söyleyin. BTW, 'gerçek (8)' çirkin: http://stackoverflow.com/questions/838310/fortran-90-kind-parameter/856243#856243 http://stackoverflow.com/questions/3170239/fortran-integer4- vs-integer4-vs-integerkind-4/3170438 # 3170438 –
Programın seri olarak hatasız çalıştığı ve derleyicinin "! $ omp parallel workshare" satırını dikkate almadığı anlamına gelir. – x1hgg1x
İlgili: https://stackoverflow.com/questions/17812003/parallelization-of-elementwise-matrix-multiplication/17832699#17832699 –