From efd2eda83ac63fc9b0b9696adae727c239a86f7a Mon Sep 17 00:00:00 2001 From: Pedro Gonnet <pedro.gonnet@durham.ac.uk> Date: Wed, 5 Jun 2013 08:34:50 +0000 Subject: [PATCH] don't trust openmp to get the dynamic scheduling right. Former-commit-id: 552defa8304bc560e60c8b4a94087abc26bb663b --- src/space.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/src/space.c b/src/space.c index ba49a64c95..e2f1760454 100644 --- a/src/space.c +++ b/src/space.c @@ -697,7 +697,7 @@ void space_map_mkghosts ( struct cell *c , void *data ) { void space_map_parts ( struct space *s , void (*fun)( struct part *p , struct cell *c , void *data ) , void *data ) { - int i; + int i, cid = 0; void rec_map ( struct cell *c ) { @@ -717,9 +717,18 @@ void space_map_parts ( struct space *s , void (*fun)( struct part *p , struct ce } /* Call the recursive function on all higher-level cells. */ - #pragma omp parallel for schedule(dynamic,1) - for ( i = 0 ; i < s->nr_cells ; i++ ) - rec_map( &s->cells[i] ); + #pragma omp parallel shared(cid) + { + int mycid; + while ( 1 ) { + #pragma omp critical + mycid = cid++; + if ( mycid < s->nr_cells ) + rec_map( &s->cells[i] ); + else + break; + } + } } @@ -735,7 +744,7 @@ void space_map_parts ( struct space *s , void (*fun)( struct part *p , struct ce void space_map_cells_post ( struct space *s , int full , void (*fun)( struct cell *c , void *data ) , void *data ) { - int i; + int i, cid; void rec_map ( struct cell *c ) { @@ -754,9 +763,18 @@ void space_map_cells_post ( struct space *s , int full , void (*fun)( struct cel } /* Call the recursive function on all higher-level cells. */ - #pragma omp parallel for schedule(dynamic,1) - for ( i = 0 ; i < s->nr_cells ; i++ ) - rec_map( &s->cells[i] ); + #pragma omp parallel shared(cid) + { + int mycid; + while ( 1 ) { + #pragma omp critical + mycid = cid++; + if ( mycid < s->nr_cells ) + rec_map( &s->cells[i] ); + else + break; + } + } } -- GitLab