Skip to content
Snippets Groups Projects
  1. Jan 02, 2025
  2. Jan 03, 2024
  3. Jan 16, 2023
  4. Jan 03, 2022
  5. Jan 16, 2021
    • Kwok Cheung Yeung's avatar
      openmp: Add support for the OpenMP 5.0 task detach clause · a6d22fb2
      Kwok Cheung Yeung authored
      2021-01-16  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* builtin-types.def
      	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT): Rename
      	to...
      	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR):
      	...this.  Add extra argument.
      	* gimplify.c (omp_default_clause): Ensure that event handle is
      	firstprivate in a task region.
      	(gimplify_scan_omp_clauses): Handle OMP_CLAUSE_DETACH.
      	(gimplify_adjust_omp_clauses): Likewise.
      	* omp-builtins.def (BUILT_IN_GOMP_TASK): Change function type to
      	BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR.
      	* omp-expand.c (expand_task_call): Add GOMP_TASK_FLAG_DETACH to flags
      	if detach clause specified.  Add detach argument when generating
      	call to	GOMP_task.
      	* omp-low.c (scan_sharing_clauses): Setup data environment for detach
      	clause.
      	(finish_taskreg_scan): Move field for variable containing the event
      	handle to the front of the struct.
      	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DETACH.  Fix
      	ordering.
      	* tree-nested.c (convert_nonlocal_omp_clauses): Handle
      	OMP_CLAUSE_DETACH clause.
      	(convert_local_omp_clauses): Handle OMP_CLAUSE_DETACH clause.
      	* tree-pretty-print.c (dump_omp_clause): Handle OMP_CLAUSE_DETACH.
      	* tree.c (omp_clause_num_ops): Add entry for OMP_CLAUSE_DETACH.
      	Fix ordering.
      	(omp_clause_code_name): Add entry for OMP_CLAUSE_DETACH.  Fix
      	ordering.
      	(walk_tree_1): Handle OMP_CLAUSE_DETACH.
      
      	gcc/c-family/
      	* c-pragma.h (pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_DETACH.
      	Redefine PRAGMA_OACC_CLAUSE_DETACH.
      
      	gcc/c/
      	* c-parser.c (c_parser_omp_clause_detach): New.
      	(c_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_DETACH clause.
      	(OMP_TASK_CLAUSE_MASK): Add mask for PRAGMA_OMP_CLAUSE_DETACH.
      	* c-typeck.c (c_finish_omp_clauses): Handle PRAGMA_OMP_CLAUSE_DETACH
      	clause.  Prevent use of detach with mergeable and overriding the
      	data sharing mode of the event handle.
      
      	gcc/cp/
      	* parser.c (cp_parser_omp_clause_detach): New.
      	(cp_parser_omp_all_clauses): Handle PRAGMA_OMP_CLAUSE_DETACH.
      	(OMP_TASK_CLAUSE_MASK): Add mask for PRAGMA_OMP_CLAUSE_DETACH.
      	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_DETACH clause.
      	* semantics.c (finish_omp_clauses): Handle OMP_CLAUSE_DETACH clause.
      	Prevent use of detach with mergeable and overriding the	data sharing
      	mode of the event handle.
      
      	gcc/fortran/
      	* dump-parse-tree.c (show_omp_clauses): Handle detach clause.
      	* frontend-passes.c (gfc_code_walker): Walk detach expression.
      	* gfortran.h (struct gfc_omp_clauses): Add detach field.
      	(gfc_c_intptr_kind): New.
      	* openmp.c (gfc_free_omp_clauses): Free detach clause.
      	(gfc_match_omp_detach): New.
      	(enum omp_mask1): Add OMP_CLAUSE_DETACH.
      	(enum omp_mask2): Remove OMP_CLAUSE_DETACH.
      	(gfc_match_omp_clauses): Handle OMP_CLAUSE_DETACH for OpenMP.
      	(OMP_TASK_CLAUSES): Add OMP_CLAUSE_DETACH.
      	(resolve_omp_clauses): Prevent use of detach with mergeable and
      	overriding the data sharing mode of the event handle.
      	* trans-openmp.c (gfc_trans_omp_clauses): Handle detach clause.
      	* trans-types.c (gfc_c_intptr_kind): New.
      	(gfc_init_kinds): Initialize gfc_c_intptr_kind.
      	* types.def
      	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT): Rename
      	to...
      	(BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT_PTR):
      	...this.  Add extra argument.
      
      	gcc/testsuite/
      	* c-c++-common/gomp/task-detach-1.c: New.
      	* g++.dg/gomp/task-detach-1.C: New.
      	* gcc.dg/gomp/task-detach-1.c: New.
      	* gfortran.dg/gomp/task-detach-1.f90: New.
      
      	include/
      	* gomp-constants.h (GOMP_TASK_FLAG_DETACH): New.
      
      	libgomp/
      	* fortran.c (omp_fulfill_event_): New.
      	* libgomp.h (struct gomp_task): Add detach and completion_sem fields.
      	(struct gomp_team): Add task_detach_queue and task_detach_count
      	fields.
      	* libgomp.map (OMP_5.0.1): Add omp_fulfill_event and omp_fulfill_event_.
      	* libgomp_g.h (GOMP_task): Add extra argument.
      	* omp.h.in (enum omp_event_handle_t): New.
      	(omp_fulfill_event): New.
      	* omp_lib.f90.in (omp_event_handle_kind): New.
      	(omp_fulfill_event): New.
      	* omp_lib.h.in (omp_event_handle_kind): New.
      	(omp_fulfill_event): Declare.
      	* priority_queue.c (priority_tree_find): New.
      	(priority_list_find): New.
      	(priority_queue_find): New.
      	* priority_queue.h (priority_queue_predicate): New.
      	(priority_queue_find): New.
      	* task.c (gomp_init_task): Initialize detach field.
      	(task_fulfilled_p): New.
      	(GOMP_task): Add detach argument.  Ignore detach argument if
      	GOMP_TASK_FLAG_DETACH not set in flags.  Initialize completion_sem
      	field.	Copy address of completion_sem into detach argument and
      	into the start of the data record.  Wait for detach event if task
      	not deferred.
      	(gomp_barrier_handle_tasks): Queue tasks with unfulfilled events.
      	Remove completed tasks and requeue dependent tasks.
      	(omp_fulfill_event): New.
      	* team.c (gomp_new_team): Initialize task_detach_queue and
      	task_detach_count fields.
      	(free_team): Free task_detach_queue field.
      	* testsuite/libgomp.c-c++-common/task-detach-1.c: New testcase.
      	* testsuite/libgomp.c-c++-common/task-detach-2.c: New testcase.
      	* testsuite/libgomp.c-c++-common/task-detach-3.c: New testcase.
      	* testsuite/libgomp.c-c++-common/task-detach-4.c: New testcase.
      	* testsuite/libgomp.c-c++-common/task-detach-5.c: New testcase.
      	* testsuite/libgomp.c-c++-common/task-detach-6.c: New testcase.
      	* testsuite/libgomp.fortran/task-detach-1.f90: New testcase.
      	* testsuite/libgomp.fortran/task-detach-2.f90: New testcase.
      	* testsuite/libgomp.fortran/task-detach-3.f90: New testcase.
      	* testsuite/libgomp.fortran/task-detach-4.f90: New testcase.
      	* testsuite/libgomp.fortran/task-detach-5.f90: New testcase.
      	* testsuite/libgomp.fortran/task-detach-6.f90: New testcase.
      a6d22fb2
  6. Jan 04, 2021
  7. Jan 01, 2020
  8. Jan 01, 2019
  9. Jan 03, 2018
  10. Jan 01, 2017
  11. Jan 04, 2016
  12. Nov 14, 2015
    • Jakub Jelinek's avatar
      omp-low.c (lower_omp_ordered): Add argument to GOMP_SMD_ORDERED_* internal calls - 0 if... · e4606348
      Jakub Jelinek authored
      gcc/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* omp-low.c (lower_omp_ordered): Add argument to GOMP_SMD_ORDERED_*
      	internal calls - 0 if ordered simd and 1 for ordered threads simd.
      	* tree-vectorizer.c (adjust_simduid_builtins): If GOMP_SIMD_ORDERED_*
      	argument is 1, replace it with GOMP_ordered_* call instead of removing
      	it.
      gcc/c/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* c-typeck.c (c_finish_omp_clauses): Don't mark
      	GOMP_MAP_FIRSTPRIVATE_POINTER decls addressable.
      gcc/cp/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      
      	* semantics.c (finish_omp_clauses): Don't mark
      	GOMP_MAP_FIRSTPRIVATE_POINTER decls addressable.
      libgomp/
      2015-11-14  Jakub Jelinek  <jakub@redhat.com>
      	    Aldy Hernandez  <aldyh@redhat.com>
      	    Ilya Verbin  <ilya.verbin@intel.com>
      
      	* ordered.c (gomp_doacross_init, GOMP_doacross_post,
      	GOMP_doacross_wait, gomp_doacross_ull_init, GOMP_doacross_ull_post,
      	GOMP_doacross_ull_wait): For GFS_GUIDED don't divide number of
      	iterators or IV by chunk size.
      	* parallel.c (gomp_resolve_num_threads): Don't assume that
      	if thr->ts.team is non-NULL, then pool must be non-NULL.
      	* libgomp-plugin.h (GOMP_PLUGIN_target_task_completion): Declare.
      	* libgomp.map (GOMP_PLUGIN_1.1): New symbol version, export
      	GOMP_PLUGIN_target_task_completion.
      	* Makefile.am (libgomp_la_SOURCES): Add priority_queue.c.
      	* Makefile.in: Regenerate.
      	* libgomp.h: Shuffle prototypes and forward definitions around so
      	priority queues can be defined.
      	(enum gomp_task_kind): Add GOMP_TASK_ASYNC_RUNNING.
      	(enum gomp_target_task_state): New enum.
      	(struct gomp_target_task): Add state, tgt, task and team fields.
      	(gomp_create_target_task): Change return type to bool, add
      	state argument.
      	(gomp_target_task_fn): Change return type to bool.
      	(struct gomp_device_descr): Add async_run_func.
      	(struct gomp_task): Remove children, next_child, prev_child,
      	next_queue, prev_queue, next_taskgroup, prev_taskgroup.
      	Add pnode field.
      	(struct gomp_taskgroup): Remove children.
      	Add taskgroup_queue.
      	(struct gomp_team): Change task_queue type to a priority queue.
      	(splay_compare): Define inline.
      	(priority_queue_offset): New.
      	(priority_node_to_task): New.
      	(task_to_priority_node): New.
      	* oacc-mem.c: Do not include splay-tree.h.
      	* priority_queue.c: New file.
      	* priority_queue.h: New file.
      	* splay-tree.c: Do not include splay-tree.h.
      	(splay_tree_foreach_internal): New.
      	(splay_tree_foreach): New.
      	* splay-tree.h: Become re-entrant if splay_tree_prefix is defined.
      	(splay_tree_callback): Define typedef.
      	* target.c (splay_compare): Move to libgomp.h.
      	(GOMP_target): Don't adjust *thr in any way around running offloaded
      	task.
      	(GOMP_target_ext): Likewise.  Handle target nowait.
      	(GOMP_target_update_ext, GOMP_target_enter_exit_data): Check
      	return value from gomp_create_target_task, if false, fallthrough
      	as if no dependencies exist.
      	(gomp_target_task_fn): Change return type to bool, return true
      	if the task should have another part scheduled later.  Handle
      	target nowait.
      	(gomp_load_plugin_for_device): Initialize async_run.
      	* task.c (gomp_init_task): Initialize children_queue.
      	(gomp_clear_parent_in_list): New.
      	(gomp_clear_parent_in_tree): New.
      	(gomp_clear_parent): Handle priorities.
      	(GOMP_task): Likewise.
      	(priority_queue_move_task_first,
      	gomp_target_task_completion, GOMP_PLUGIN_target_task_completion):
      	New functions.
      	(gomp_create_target_task): Use priority queues.  Change return type
      	to bool, add state argument, return false if for async
      	{{enter,exit} data,update} constructs no dependencies need to be
      	waited for, handle target nowait.  Set task->fn to NULL instead of
      	gomp_target_task_fn.
      	(verify_children_queue): Remove.
      	(priority_list_upgrade_task): New.
      	(priority_queue_upgrade_task): New.
      	(verify_task_queue): Remove.
      	(priority_list_downgrade_task): New.
      	(priority_queue_downgrade_task): New.
      	(gomp_task_run_pre): Use priority queues.
      	Abstract code out to priority_queue_downgrade_task.
      	(gomp_task_run_post_handle_dependers): Use priority queues.
      	(gomp_task_run_post_remove_parent): Likewise.
      	(gomp_task_run_post_remove_taskgroup): Likewise.
      	(gomp_barrier_handle_tasks): Likewise.  Handle target nowait target
      	tasks specially.
      	(GOMP_taskwait): Likewise.
      	(gomp_task_maybe_wait_for_dependencies): Likewise.  Abstract code to
      	priority-queue_upgrade_task.
      	(GOMP_taskgroup_start): Use priority queues.
      	(GOMP_taskgroup_end): Likewise.  Handle target nowait target tasks
      	specially.  If taskgroup is NULL, and thr->ts.level is 0, act as a
      	barrier.
      	* taskloop.c (GOMP_taskloop): Handle priorities.
      	* team.c (gomp_new_team): Call priority_queue_init.
      	(free_team): Call priority_queue_free.
      	(gomp_free_thread): Call gomp_team_end if thr->ts.team is artificial
      	team created for target nowait in implicit parallel region.
      	(gomp_team_start): For nested check, test thr->ts.level instead of
      	thr->ts.team != NULL.
      	* testsuite/libgomp.c/doacross-3.c: New test.
      	* testsuite/libgomp.c/ordered-5.c: New test.
      	* testsuite/libgomp.c/priority.c: New test.
      	* testsuite/libgomp.c/target-31.c: New test.
      	* testsuite/libgomp.c/target-32.c: New test.
      	* testsuite/libgomp.c/target-33.c: New test.
      	* testsuite/libgomp.c/target-34.c: New test.
      liboffloadmic/
      2015-11-14  Ilya Verbin  <ilya.verbin@intel.com>
      
      	* runtime/offload_host.cpp (task_completion_callback): New
      	variable.
      	(offload_proxy_task_completed_ooo): Call task_completion_callback.
      	(__offload_register_task_callback): New function.
      	* runtime/offload_host.h (__offload_register_task_callback): New
      	declaration.
      	* plugin/libgomp-plugin-intelmic.cpp (offload): Add async_data
      	argument, handle async offloading.
      	(register_main_image): Call register_main_image.
      	(GOMP_OFFLOAD_init_device, get_target_table, GOMP_OFFLOAD_alloc,
      	GOMP_OFFLOAD_free, GOMP_OFFLOAD_host2dev, GOMP_OFFLOAD_dev2host,
      	GOMP_OFFLOAD_dev2dev) Adjust offload callers.
      	(GOMP_OFFLOAD_async_run): New function.
      	(GOMP_OFFLOAD_run): Implement using GOMP_OFFLOAD_async_run.
      
      From-SVN: r230381
      e4606348
Loading