Is there a way to completely stop all calculations on a thread?

Viewed 87

Explanation of code and approach:

There are various mathematical methods (fortran subroutines) to solve a variable y, each method is sequential and runs on a single thread. The speed of each methods solution is dependent on unknown conditions (i.e. it is a no free lunch situation and I do not know which method is fastest). Therefor, the approach is to run each method on a separate thread, and once a method has found the solution, calculations on the other threads should stop (as they are required for operations after the parallel sections region)

!$omp parallel sections lastprivate(x, y)
    !$omp section
        call method_1_for_solving_y(x)
        !$omp cancel sections
    !$omp section
        call method_2_for_solving_y(x)
        !$omp cancel sections
    . . .
    !$omp section
        call method_z_for_solving_y(x)
        !$omp cancel sections
!$omp end parallel sections

The question:

The !$omp cancel sections construct does not completely cancel all operations on the threads that have not found the solution yet, is there a way to completely stop calculations on those threads?

Any additional advice, or possible other approaches would be appreciated.

Regards.

0 Answers
Related