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