On Wed, Jul 24, 2019 at 05:25:56PM +0900, 김규래 wrote:
> > Generally, we don't want to have code commented out like this in the final
> > patch submission.  For this WIP, I think it is acceptable, as I think in the
> > end you don't want to use the team's queue, but actually either
> > children_queue (renamed), but only use it on the implicit tasks, or during
>  
> Can you elaborate?
> What do you mean by "children_queue (renamed)"?

I meant use a queue structure member in the same location as current
children_queue, just rename it to something more sensible (just task_queue
etc.), because it will not be really a queue of task children anymore.

> > team creation allocate together with the team structure also memory that
> > would be used as a trailing array for an array of the implicit queues next
> > to the array of implicit tasks. 
>  
> Do you mean to make two trailing arrays in gomp_team?

Yes.  Of course, in C you can't have two flexible array members after each
other, and we certainly don't want to use the GNU C extension of variable
length structures, but it would be something like struct gomp_team have
a struct priority_queue *task_queues; where the struct gomp_team
initialization would set team->task_queues to (struct priority_queue *)
&team->implicit_task[team->nthreads].

> Also, this is a personal question, why do gcc prefer trailing arrays over 
> dynamically allocated pointers?

Because malloc is fairly expensive and lots of benchmarks etc. care about
#pragma omp parallel latency (when the threads are already around, of course
the first one that needs to pthread_create is much more expensive).  So it
makes quite noticeable difference if you allocate one allocation or 3 or
more.

        Jakub

Reply via email to