mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-18 04:00:24 +08:00
libgomp: Add omp_in_explicit_task support
This is pretty straightforward, if gomp_thread ()->task is NULL, it can't be explicit task, otherwise if gomp_thread ()->task->kind == GOMP_TASK_IMPLICIT, it is an implicit task, otherwise explicit task. 2022-10-12 Jakub Jelinek <jakub@redhat.com> * omp.h.in (omp_in_explicit_task): Declare. * omp_lib.h.in (omp_in_explicit_task): Likewise. * omp_lib.f90.in (omp_in_explicit_task): New interface. * libgomp.map (OMP_5.2): New symbol version, export omp_in_explicit_task and omp_in_explicit_task_. * task.c (omp_in_explicit_task): New function. * fortran.c (omp_in_explicit_task): Add ialias_redirect. (omp_in_explicit_task_): New function. * libgomp.texi (OpenMP 5.2): Mark omp_in_explicit_task as implemented. * testsuite/libgomp.c-c++-common/task-in-explicit-1.c: New test. * testsuite/libgomp.c-c++-common/task-in-explicit-2.c: New test. * testsuite/libgomp.c-c++-common/task-in-explicit-3.c: New test.
This commit is contained in:
parent
a58a965eb7
commit
0ec4e93fb9
libgomp
@ -76,6 +76,7 @@ ialias_redirect (omp_get_ancestor_thread_num)
|
||||
ialias_redirect (omp_get_team_size)
|
||||
ialias_redirect (omp_get_active_level)
|
||||
ialias_redirect (omp_in_final)
|
||||
ialias_redirect (omp_in_explicit_task)
|
||||
ialias_redirect (omp_get_cancellation)
|
||||
ialias_redirect (omp_get_proc_bind)
|
||||
ialias_redirect (omp_get_num_places)
|
||||
@ -482,6 +483,12 @@ omp_in_final_ (void)
|
||||
return omp_in_final ();
|
||||
}
|
||||
|
||||
int32_t
|
||||
omp_in_explicit_task_ (void)
|
||||
{
|
||||
return omp_in_explicit_task ();
|
||||
}
|
||||
|
||||
void
|
||||
omp_set_num_teams_ (const int32_t *num_teams)
|
||||
{
|
||||
|
@ -234,6 +234,12 @@ OMP_5.1.1 {
|
||||
omp_target_memcpy_rect_async;
|
||||
} OMP_5.1;
|
||||
|
||||
OMP_5.2 {
|
||||
global:
|
||||
omp_in_explicit_task;
|
||||
omp_in_explicit_task_;
|
||||
} OMP_5.1.1;
|
||||
|
||||
GOMP_1.0 {
|
||||
global:
|
||||
GOMP_atomic_end;
|
||||
|
@ -360,8 +360,8 @@ to address of matching mapped list item per 5.1, Sect. 2.21.7.2 @tab N @tab
|
||||
|
||||
@multitable @columnfractions .60 .10 .25
|
||||
@headitem Description @tab Status @tab Comments
|
||||
@item @code{omp_in_explicit_task} routine and @emph{implicit-task-var} ICV
|
||||
@tab N @tab
|
||||
@item @code{omp_in_explicit_task} routine and @emph{explicit-task-var} ICV
|
||||
@tab Y @tab
|
||||
@item @code{omp}/@code{ompx}/@code{omx} sentinels and @code{omp_}/@code{ompx_}
|
||||
namespaces @tab N/A
|
||||
@tab warning for @code{ompx/omx} sentinels@footnote{The @code{ompx}
|
||||
|
@ -244,6 +244,7 @@ extern int omp_get_team_size (int) __GOMP_NOTHROW;
|
||||
extern int omp_get_active_level (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_in_final (void) __GOMP_NOTHROW;
|
||||
extern int omp_in_explicit_task (void) __GOMP_NOTHROW;
|
||||
|
||||
extern int omp_get_cancellation (void) __GOMP_NOTHROW;
|
||||
extern omp_proc_bind_t omp_get_proc_bind (void) __GOMP_NOTHROW;
|
||||
|
@ -444,6 +444,12 @@
|
||||
end function omp_in_final
|
||||
end interface
|
||||
|
||||
interface
|
||||
function omp_in_explicit_task ()
|
||||
logical (4) :: omp_in_explicit_task
|
||||
end function omp_in_explicit_task
|
||||
end interface
|
||||
|
||||
interface
|
||||
function omp_get_cancellation ()
|
||||
logical (4) :: omp_get_cancellation
|
||||
|
@ -220,6 +220,8 @@
|
||||
|
||||
external omp_in_final
|
||||
logical(4) omp_in_final
|
||||
external omp_in_explicit_task
|
||||
logical(4) omp_in_explicit_task
|
||||
|
||||
external omp_get_cancellation
|
||||
logical(4) omp_get_cancellation
|
||||
|
@ -2687,6 +2687,16 @@ omp_in_final (void)
|
||||
|
||||
ialias (omp_in_final)
|
||||
|
||||
int
|
||||
omp_in_explicit_task (void)
|
||||
{
|
||||
struct gomp_thread *thr = gomp_thread ();
|
||||
struct gomp_task *task = thr->task;
|
||||
return task && task->kind != GOMP_TASK_IMPLICIT;
|
||||
}
|
||||
|
||||
ialias (omp_in_explicit_task)
|
||||
|
||||
void
|
||||
omp_fulfill_event (omp_event_handle_t event)
|
||||
{
|
||||
|
106
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
Normal file
106
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-1.c
Normal file
@ -0,0 +1,106 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task final (1)
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
#pragma omp parallel
|
||||
{
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task if (0)
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task if (0)
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
#pragma omp task final (1)
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp barrier
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp taskloop num_tasks (24)
|
||||
for (int i = 0; i < 32; ++i)
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp masked
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp barrier
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
#pragma omp target
|
||||
{
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task if (0)
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
#pragma omp target teams
|
||||
{
|
||||
#pragma omp distribute
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
else
|
||||
{
|
||||
#pragma omp parallel
|
||||
{
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp barrier
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma omp teams
|
||||
{
|
||||
#pragma omp distribute
|
||||
for (int i = 0; i < 4; ++i)
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
else
|
||||
{
|
||||
#pragma omp parallel
|
||||
{
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp barrier
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
26
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-2.c
Normal file
26
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-2.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#pragma omp task
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp target nowait
|
||||
if (omp_in_explicit_task ())
|
||||
abort ();
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp taskwait
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
36
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-3.c
Normal file
36
libgomp/testsuite/libgomp.c-c++-common/task-in-explicit-3.c
Normal file
@ -0,0 +1,36 @@
|
||||
/* { dg-do run } */
|
||||
|
||||
#include <omp.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int a;
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
#pragma omp task
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp taskgroup task_reduction (+: a)
|
||||
{
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp task in_reduction (+: a)
|
||||
{
|
||||
++a;
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
if (!omp_in_explicit_task ())
|
||||
abort ();
|
||||
#pragma omp taskwait
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user