Skip to content

Commit a2c0fee

Browse files
committed
Add OpenMP parallelization
1 parent 69ff238 commit a2c0fee

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

fortran/solver/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,23 @@ project(solver
44
VERSION 0.0.0
55
LANGUAGES Fortran)
66

7+
option(ENABLE_OPENMP "Enable OpenMP parallelization" OFF)
8+
79
include(CheckIPOSupported)
810

911
set(PN ${PROJECT_NAME})
1012

1113
check_ipo_supported(RESULT IPO_AVAILABLE)
14+
if(ENABLE_OPENMP)
15+
find_package(OpenMP 3.0 REQUIRED)
16+
endif()
1217

1318
add_subdirectory(src)
1419

1520
add_executable(${PN} ${SOURCES})
21+
if(ENABLE_OPENMP)
22+
target_link_libraries(${PN} PUBLIC OpenMP::OpenMP_Fortran)
23+
endif()
1624
if(IPO_AVAILABLE)
1725
set_target_properties(${PN} PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE)
1826
endif()

fortran/solver/src/solver.f90

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,19 @@ subroutine solve(solver)
6969
end do
7070
do iter = 1, 3 * 9 * size(solver%library%rooms)
7171
max_length = 0
72+
!$omp parallel do default(none) &
73+
!$omp reduction(max:max_length) &
74+
!$omp private(guess_id) &
75+
!$omp shared(solver, guess, corr_id)
7276
do guess_id = 1, N_guess
7377
call guess(guess_id)%eval()
7478
call guess(guess_id)%next()
7579
max_length = max(max_length, guess(guess_id)%max_length)
7680
if (max_length == size(solver%library%plans(1)%steps)) then
7781
corr_id = guess_id
78-
exit infinity
7982
end if
8083
end do
84+
if (corr_id /= -1) exit infinity
8185
print '("iter: ",I4," ML:",I4)', iter, max_length
8286
end do
8387
end do infinity

0 commit comments

Comments
 (0)