On Sat, Apr 09, 2022 at 12:38:11AM +0200, Ahmed Sayed Mousse wrote:
> Sorry for the late reply.
> I did check gomp_thread_self but I'm still not sure about what I should do,
> maybe because I lack experience/knowledge.
> Here is where my thinking is going right now and I hope you tell me if I'm
> wrong.

Sorry for the delay, I've been busy with GCC 12.

> in gomp_thread_to_pthread_t there are 4 possible outputs
> 1 - if LIBGOMP_USE_PTHREADS is enabled
>  {
>     first  pthread_self() if the thread calling is the same thread as the
> function input.
>     or  gomp_thread->handle in case GOMP_NEEDS_THREAD_HANDLE is enabled.
>     or  pthread_self () + ((uintptr_t) input_thread - (uintptr_t)
> calling_thread)
> }

ompd_get_thread_id is for mapping of the OMPD thread id to the native
thread id.  If LIBGOMP_USE_PTHREADS, we are using POSIX threads, so
OMPD_THREAD_ID_PTHREAD is what we want to provide.
If GOMP_NEEDS_THREAD_HANDLE, then we want to read the handle member for
it and return it.  Otherwise as the comment says, we optimize and
because we know that in the initial-exec TLS model &gomp_tls_data - 
pthread_self ()
is the same for each thread, we don't store the handle at all, so
ompd_get_thread_id instead needs to compute the bias.
If it is too hard to do it in libgompd.so alone, perhaps during
gompd_load libgomp.so.1 could compute it and store in some variable
that libgompd.so can then read.

> 2 -if LIBGOMP_USE_PTHREADS not enabled
>         - empty struct casted to a pthread_t
> currently think i should check for the GOMP_NEED_THREAD_HANDLE, if it's
> enabled i extract the pthread_t  from the gomp_thread handle given in the
> function and return that.
> If it's not enabled then I return an empty struct or an rc_unspported
> return code.
> Note:
>     The openmp specification doesn't really tell me how things should be
> done so I get confused a lot and I think I have a misunderstanding of the
> function.
>      I would appreciate it a lot if I get any directions to where I can
> increase my knowledge around this part.

If LIBGOMP_USE_PTHREADS is not enabled, then it is libgomp.a built for one
of the offloading targets, either NVPTX or GCN.  We then can't return
OMPD_THREAD_ID_PTHREAD, threads are numbered differently there, they are
either the CUDA threads or GCN threads.  But I think at least initially
we only build libgompd.so for the host so how exactly we OMPD offloading
should be postponed until after the host handling works.

        Jakub

Reply via email to