瀏覽代碼

- fix omp master: in contrast to omp single, omp master does not have an implied barrier nor a nowait option

Olivier Aumage 11 年之前
父節點
當前提交
144cddb1c2

+ 1 - 1
include/starpu_openmp.h

@@ -56,7 +56,7 @@ extern void starpu_omp_task_region(const struct starpu_codelet * const _task_reg
 		void * const task_region_cl_arg,
 		int if_clause, int final_clause, int untied_clause, int mergeable_clause) __STARPU_OMP_NOTHROW;
 extern void starpu_omp_barrier(void) __STARPU_OMP_NOTHROW;
-extern void starpu_omp_master(void (*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW;
+extern void starpu_omp_master(void (*f)(void *arg), void *arg) __STARPU_OMP_NOTHROW;
 extern void starpu_omp_single(void (*f)(void *arg), void *arg, int nowait) __STARPU_OMP_NOTHROW;
 extern void starpu_omp_critical(void (*f)(void *arg), void *arg, const char *name) __STARPU_OMP_NOTHROW;
 extern void starpu_omp_taskwait(void) __STARPU_OMP_NOTHROW;

+ 1 - 6
src/util/openmp_runtime_support.c

@@ -833,7 +833,7 @@ void starpu_omp_barrier(void)
 	}
 }
 
-void starpu_omp_master(void (*f)(void *arg), void *arg, int nowait)
+void starpu_omp_master(void (*f)(void *arg), void *arg)
 {
 	struct starpu_omp_task *task = STARPU_PTHREAD_GETSPECIFIC(omp_task_key);
 	struct starpu_omp_thread *thread = STARPU_PTHREAD_GETSPECIFIC(omp_thread_key);
@@ -845,11 +845,6 @@ void starpu_omp_master(void (*f)(void *arg), void *arg, int nowait)
 	{
 		f(arg);
 	}
-
-	if (!nowait)
-	{
-		starpu_omp_barrier();
-	}
 }
 
 void starpu_omp_single(void (*f)(void *arg), void *arg, int nowait)

+ 3 - 7
tests/Makefile.am

@@ -225,8 +225,7 @@ noinst_PROGRAMS =				\
 	openmp/parallel_01			\
 	openmp/parallel_02			\
 	openmp/parallel_barrier_01		\
-	openmp/parallel_master_wait_01		\
-	openmp/parallel_master_nowait_01	\
+	openmp/parallel_master_01		\
 	openmp/parallel_single_wait_01		\
 	openmp/parallel_single_nowait_01	\
 	openmp/parallel_critical_01		\
@@ -463,11 +462,8 @@ openmp_parallel_02_SOURCES = 	\
 openmp_parallel_barrier_01_SOURCES = 	\
 	openmp/parallel_barrier_01.c
 
-openmp_parallel_master_wait_01_SOURCES = 	\
-	openmp/parallel_master_wait_01.c
-
-openmp_parallel_master_nowait_01_SOURCES = 	\
-	openmp/parallel_master_nowait_01.c
+openmp_parallel_master_01_SOURCES = 	\
+	openmp/parallel_master_01.c
 
 openmp_parallel_single_wait_01_SOURCES = 	\
 	openmp/parallel_single_wait_01.c

+ 4 - 4
tests/openmp/parallel_master_wait_01.c

@@ -57,10 +57,10 @@ void parallel_region_f(void *buffers[], void *args)
 	tid = pthread_self();
 	worker_id = starpu_worker_get_id();
 	printf("[tid %p] task thread = %d -- parallel -->\n", (void *)tid, worker_id);
-	starpu_omp_master(master_g, NULL, 0);
-	starpu_omp_master(master_g, NULL, 0);
-	starpu_omp_master(master_g, NULL, 0);
-	starpu_omp_master(master_g, NULL, 0);
+	starpu_omp_master(master_g, NULL);
+	starpu_omp_master(master_g, NULL);
+	starpu_omp_master(master_g, NULL);
+	starpu_omp_master(master_g, NULL);
 	printf("[tid %p] task thread = %d -- parallel <--\n", (void *)tid, worker_id);
 }
 

+ 0 - 86
tests/openmp/parallel_master_nowait_01.c

@@ -1,86 +0,0 @@
-/* StarPU --- Runtime system for heterogeneous multicore architectures.
- *
- * Copyright (C) 2014  Inria
- *
- * StarPU is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or (at
- * your option) any later version.
- *
- * StarPU is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * See the GNU Lesser General Public License in COPYING.LGPL for more details.
- */
-
-#include <pthread.h>
-#include <starpu.h>
-#include "../helper.h"
-#include <stdio.h>
-
-#if !defined(STARPU_OPENMP)
-int main(int argc, char **argv)
-{
-	return STARPU_TEST_SKIPPED;
-}
-#else
-__attribute__((constructor))
-static void omp_constructor(void)
-{
-	int ret = starpu_omp_init();
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_omp_init");
-}
-
-__attribute__((destructor))
-static void omp_destructor(void)
-{
-	starpu_omp_shutdown();
-}
-
-void master_g(void *arg)
-{
-	(void) arg;
-	int worker_id;
-	pthread_t tid;
-	tid = pthread_self();
-	worker_id = starpu_worker_get_id();
-	printf("[tid %p] task thread = %d -- master nowait\n", (void *)tid, worker_id);
-}
-
-void parallel_region_f(void *buffers[], void *args)
-{
-	(void) buffers;
-	(void) args;
-	int worker_id;
-	pthread_t tid;
-	tid = pthread_self();
-	worker_id = starpu_worker_get_id();
-	printf("[tid %p] task thread = %d -- parallel -->\n", (void *)tid, worker_id);
-	starpu_omp_master(master_g, NULL, 1);
-	starpu_omp_master(master_g, NULL, 1);
-	starpu_omp_master(master_g, NULL, 1);
-	starpu_omp_master(master_g, NULL, 1);
-	printf("[tid %p] task thread = %d -- parallel <--\n", (void *)tid, worker_id);
-}
-
-static struct starpu_codelet parallel_region_cl =
-{
-	.cpu_funcs    = { parallel_region_f, NULL },
-	.where        = STARPU_CPU,
-	.nbuffers     = 0
-
-};
-
-int
-main (int argc, char *argv[]) {
-	pthread_t tid;
-	tid = pthread_self();
-	printf("<main>\n");
-	starpu_omp_parallel_region(&parallel_region_cl, NULL);
-	printf("<main>\n");
-	starpu_omp_parallel_region(&parallel_region_cl, NULL);
-	printf("<main>\n");
-	return 0;
-}
-#endif