Hi Chung-Lin! On Fri, 14 Dec 2018 22:52:44 +0800, Chung-Lin Tang <chunglin_t...@mentor.com> wrote: > On 2018/12/14 10:17 PM, Thomas Schwinge wrote: > > On Tue, 25 Sep 2018 21:10:47 +0800, Chung-Lin Tang > > <chunglin_t...@mentor.com> wrote: > >> --- a/libgomp/oacc-async.c > >> +++ b/libgomp/oacc-async.c > > > >> +attribute_hidden struct goacc_asyncqueue * > >> +lookup_goacc_asyncqueue (struct goacc_thread *thr, bool create, int async) > >> +{ > >> + /* The special value acc_async_noval (-1) maps to the thread-specific > >> + default async stream. */ > >> + if (async == acc_async_noval) > >> + async = thr->default_async; > >> + > >> + if (async == acc_async_sync) > >> + return NULL; > >> + > >> + if (async < 0) > >> + gomp_fatal ("bad async %d", async); > > > > To make this "resolve" part more obvious, that is, the translation from > > the "async" argument to an "asyncqueue" array index: > > > >> + if (!create > >> + && (async >= dev->openacc.async.nasyncqueue > >> + || !dev->openacc.async.asyncqueue[async])) > >> + return NULL; > >> +[...] > > > > ..., I propose adding a "async2id" function for that, and then rename all > > "asyncqueue[async]" to "asyncqueue[id]". > > I don't think this is needed. This is the only place in the entire runtime > that > does asyncqueue indexing, adding more conceptual layers of re-directed > indexing > seems unneeded.
It makes the code better understandable? Or, curious, why do you think that the translation from an OpenACC async-argument to an internal asyncqueue ID should not be a separate function? > I do think the more descriptive comments are nice though. > > And, this also restores the current trunk behavior, so that > > "acc_async_noval" gets its own, separate "asyncqueue". > > Is there a reason we need to restore that behavior right now? Because otherwise that's a functional change ("regression") from the current GCC trunk behavior, which I wouldn't expect in a re-work. Grüße Thomas