[fpc-pascal] Common OpenMP syntax?
Vinzent Hoefler
JeLlyFish.software at gmx.net
Thu Jul 27 11:27:36 CEST 2006
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. :)
Vinzent.
More information about the fpc-pascal
mailing list