[fpc-pascal] Common OpenMP syntax?

Alexandre Leclerc alexandre.leclerc at gmail.com
Thu Jul 27 14:53:21 CEST 2006


2006/7/27, Vinzent Hoefler <JeLlyFish.software at gmx.net>:
> On Wednesday 26 July 2006 10:05, Andreas Berger wrote:
> > Steve Williams wrote:
> > > Michael Van Canneyt wrote:
> > >> Which is why I think that it's better to have them as local
> > >> functions, instead of having to introduce a lot of new functions.
> > >>
> > >> Local functions are very pascal-ish. C doesn't have it, which is
> > >> why they can't use it.
> > >> Let's use the language features to their full extent.
> > >
> > >    *procedure* SubTask(*var* x : *array of* Float);
> > >    *var*
> > >      /// Variables declared here have /|*private*|/ context./
> > >      iam     : Integer;
> > >      nt      : Integer;
> > >      ipoints : Integer;
> > >    *parallel*
> > >      iam := OMP.Get_Thread_Num;  /// OMP library calls./
> > >      nt  := OMP.Get_Num_Threads;
> > >             ipoints := Length (x) *div* nt; /// size of partition/
> > >      istart  := iam * ipoints;     /// starting array index/
> > >             *if* iam = Pred (nt) *then*
> > >        ipoints := Length (x) - istart; /// last thread may do more/
> > >             SubDomain (x, istart, ipoints);
> > >    *end*;
> >
> > Wouldn't it be better to write it like this:
> >     procedure SubTask(var x: array of Float); *parallel*;
> >     var
> >        ...
> >     begin
> >        ...
> >     end;
>
> Actually no. I thought about it, but I didn't get through all that stuff
> yesterday evening or else I would have updated the WiKi already. The
> problem I see is that the parallel directive has more meanings
> (basically it is the main directive). For that reason, I wouldn't want
> to put in on the callee, but rather on the caller.
>
> I think it would also be easier for the compiler then to detect alls
> those parallel regions.
>
> Let's see. Anyway, there was already more response I would have expected
> after the days of silence. :)

What about the same approach as the class procedures?

Actually we have in a class the possibility to:
class procedure MyProc;
class function MyFunc: Integer;

Then we could very simply have:
parallel procedure ParallelBlock;
parallel function ParallelFunction; //if this can happen...


Also, I read that in example 1: "Variables declared here should have
shared context." In fact by default they have private context and to
me it looks like more normal. Maybe we should have a way to do the
contrary: specify that a variable has shared context... What others
think?

-- 
Alexandre Leclerc



More information about the fpc-pascal mailing list