Ahoju
Mám ve fortranu OMP cyklus
!$OMP DO
do i=1,n
call function1(...)
...
end do
Jde o numerickou integraci, tedy nic programově složitého, ale každá z iterací je numericky náročná, navíc každá jinak. Například, n=1000, rozsahy i=1...500 jsou jednodušší než i=501...1000.
Co jsem ale vypozoroval, program si již na začátku rozdělí kroky mezi jednotlivá vlákna, například pro dvě vlákna budou nultému přisouzeny úseky i=1...500, prvnímu i=501...1000. Zde vyvstává problém, neboť po skončení nultého vlákna se čeká na první; tomuto prvnímu se nepřiřadí automaticky nedokončené věci z druhého úseku. Během tohoto dokončování běží program reálně jednovláknově.
Nedokázal byste mi někdo poradit, zda lze kroky v cyklu přiřazovat operativně a po skončení jednoho úseku se volné vlákno automaticky věnovalo iteracím původně vyčleněným pro vlákno jiné?