This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [gomp4 01/14] nvptx: emit kernels for 'omp target entrypoint' only for OpenACC
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Alexander Monakov <amonakov at ispras dot ru>
- Cc: gcc-patches at gcc dot gnu dot org, Dmitry Melnik <dm at ispras dot ru>
- Date: Wed, 21 Oct 2015 10:11:05 +0200
- Subject: Re: [gomp4 01/14] nvptx: emit kernels for 'omp target entrypoint' only for OpenACC
- Authentication-results: sourceware.org; auth=none
- References: <1445366076-16082-1-git-send-email-amonakov at ispras dot ru> <1445366076-16082-2-git-send-email-amonakov at ispras dot ru>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Tue, Oct 20, 2015 at 09:34:23PM +0300, Alexander Monakov wrote:
> The NVPTX backend emits each functions either as .func (callable only from the
> device code) or as .kernel (entry point for a parallel region). OpenMP
> lowering adds "omp target entrypoint" attribute to functions outlined from
> target regions. Unlike OpenACC offloading, OpenMP offloading does not invoke
> such outlined functions directly, but instead passes their address to
> 'gomp_nvptx_main'. Restrict the special attribute treatment to OpenACC only.
>
> * config/nvptx/nvptx.c (write_as_kernel): Additionally test
> flag_openacc for "omp_target_entrypoint".
> ---
> gcc/config/nvptx/nvptx.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/config/nvptx/nvptx.c b/gcc/config/nvptx/nvptx.c
> index 21c59ef..df7b61f 100644
> --- a/gcc/config/nvptx/nvptx.c
> +++ b/gcc/config/nvptx/nvptx.c
> @@ -401,8 +401,10 @@ write_one_arg (std::stringstream &s, tree type, int i, machine_mode mode,
> static bool
> write_as_kernel (tree attrs)
> {
> - return (lookup_attribute ("kernel", attrs) != NULL_TREE
> - || lookup_attribute ("omp target entrypoint", attrs) != NULL_TREE);
> + if (flag_openacc
> + && lookup_attribute ("omp target entrypoint", attrs) != NULL_TREE)
> + return true;
> + return lookup_attribute ("kernel", attrs) != NULL_TREE;
> }
>
> /* Write a function decl for DECL to S, where NAME is the name to be used.
This is certainly wrong. People can use -fopenmp -fopenacc, whether
flag_openacc is set does not mean whether the particular function is
outlined openacc or openmp region.
The question is, is .kernel actually harmful, even when you invoke it
through a stub wrapper? Like, does it not work at all, or is slower than it
could be? If it is harmful, you should use a different attribute for
OpenMP and OpenACC target entrypoints, so perhaps
"omp target entrypoint" for OpenMP ones and "acc target entrypoint" for
OpenACC ones? create_omp_child_function that adds the attribute should
have the stmt for which it is created in ctx->stmt, so you could e.g. use
is_gimple_omp_oacc for that.
Jakub