Skip to content
Snippets Groups Projects
  • Jakub Jelinek's avatar
    aea72386
    openmp: Add support for thread_limit clause on target · aea72386
    Jakub Jelinek authored
    OpenMP 5.1 says that thread_limit clause can also appear on target,
    and similarly to teams should affect the thread-limit-var ICV.
    On combined target teams, the clause goes to both.
    
    We actually passed thread_limit internally on target already before,
    but only used it for gcn/ptx offloading to hint how many threads should be
    created and for ptx didn't set thread_limit_var in that case.
    Similarly for host fallback.
    Also, I found that we weren't copying the args array that contains encoded
    thread_limit and num_teams clause for target (etc.) for async target.
    
    2021-11-15  Jakub Jelinek  <jakub@redhat.com>
    
    gcc/
    	* gimplify.c (optimize_target_teams): Only add OMP_CLAUSE_THREAD_LIMIT
    	to OMP_TARGET_CLAUSES if it isn't there already.
    gcc/c-family/
    	* c-omp.c (c_omp_split_clauses) <case OMP_CLAUSE_THREAD_LIMIT>:
    	Duplicate to both OMP_TARGET and OMP_TEAMS.
    gcc/c/
    	* c-parser.c (OMP_TARGET_CLAUSE_MASK): Add
    	PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
    gcc/cp/
    	* parser.c (OMP_TARGET_CLAUSE_MASK): Add
    	PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
    libgomp/
    	* task.c (gomp_create_target_task): Copy args array as well.
    	* target.c (gomp_target_fallback): Add args argument.
    	Set gomp_icv (true)->thread_limit_var if thread_limit is present.
    	(GOMP_target): Adjust gomp_target_fallback caller.
    	(GOMP_target_ext): Likewise.
    	(gomp_target_task_fn): Likewise.
    	* config/nvptx/team.c (gomp_nvptx_main): Set
    	gomp_global_icv.thread_limit_var.
    	* testsuite/libgomp.c-c++-common/thread-limit-1.c: New test.
    aea72386
    History
    openmp: Add support for thread_limit clause on target
    Jakub Jelinek authored
    OpenMP 5.1 says that thread_limit clause can also appear on target,
    and similarly to teams should affect the thread-limit-var ICV.
    On combined target teams, the clause goes to both.
    
    We actually passed thread_limit internally on target already before,
    but only used it for gcn/ptx offloading to hint how many threads should be
    created and for ptx didn't set thread_limit_var in that case.
    Similarly for host fallback.
    Also, I found that we weren't copying the args array that contains encoded
    thread_limit and num_teams clause for target (etc.) for async target.
    
    2021-11-15  Jakub Jelinek  <jakub@redhat.com>
    
    gcc/
    	* gimplify.c (optimize_target_teams): Only add OMP_CLAUSE_THREAD_LIMIT
    	to OMP_TARGET_CLAUSES if it isn't there already.
    gcc/c-family/
    	* c-omp.c (c_omp_split_clauses) <case OMP_CLAUSE_THREAD_LIMIT>:
    	Duplicate to both OMP_TARGET and OMP_TEAMS.
    gcc/c/
    	* c-parser.c (OMP_TARGET_CLAUSE_MASK): Add
    	PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
    gcc/cp/
    	* parser.c (OMP_TARGET_CLAUSE_MASK): Add
    	PRAGMA_OMP_CLAUSE_THREAD_LIMIT.
    libgomp/
    	* task.c (gomp_create_target_task): Copy args array as well.
    	* target.c (gomp_target_fallback): Add args argument.
    	Set gomp_icv (true)->thread_limit_var if thread_limit is present.
    	(GOMP_target): Adjust gomp_target_fallback caller.
    	(GOMP_target_ext): Likewise.
    	(gomp_target_task_fn): Likewise.
    	* config/nvptx/team.c (gomp_nvptx_main): Set
    	gomp_global_icv.thread_limit_var.
    	* testsuite/libgomp.c-c++-common/thread-limit-1.c: New test.