mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
40 lines
863 B
C
40 lines
863 B
C
/*
|
|
* @@name: tasking.13c
|
|
* @@type: C
|
|
* @@compilable: yes
|
|
* @@linkable: no
|
|
* @@expect: success
|
|
*/
|
|
#include <string.h>
|
|
#include <omp.h>
|
|
#define LIMIT 3 /* arbitrary limit on recursion depth */
|
|
void check_solution(char *);
|
|
void bin_search (int pos, int n, char *state)
|
|
{
|
|
if ( pos == n ) {
|
|
check_solution(state);
|
|
return;
|
|
}
|
|
#pragma omp task final( pos > LIMIT ) mergeable
|
|
{
|
|
char new_state[n];
|
|
if (!omp_in_final() ) {
|
|
memcpy(new_state, state, pos );
|
|
state = new_state;
|
|
}
|
|
state[pos] = 0;
|
|
bin_search(pos+1, n, state );
|
|
}
|
|
#pragma omp task final( pos > LIMIT ) mergeable
|
|
{
|
|
char new_state[n];
|
|
if (! omp_in_final() ) {
|
|
memcpy(new_state, state, pos );
|
|
state = new_state;
|
|
}
|
|
state[pos] = 1;
|
|
bin_search(pos+1, n, state );
|
|
}
|
|
#pragma omp taskwait
|
|
}
|