[Lazarus] Non trivial fcl-web demos?

Frank Church vfclists at gmail.com
Mon Sep 20 21:15:39 CEST 2010


Zitat von Dariusz Mazur <darekm at emadar.com>:

> [...]
>> Before using multi threading, try to use a better single threaded
>> algorithm. And when comparing multi with single threading speed, you
>> must not compare a multi threaded algorithm running single threaded, but
>> a multi threaded algorithm with a good single threaded algorithm.
> I don;t talk about best solution of fibbonaci computing. But about  
> possibility do deal with some class of task using multithreading.
> Its easy imagine task, which is hard to resolve with loops.

Of course.
I think, we both agree that CILK is a nice approach.
I just said, that there are not many multi threading examples that are  
easy to read and are practical at the same time. Computing Fibonacci  
numbers does not need multi threading.


>>> Its simple example to show, that CILK can play with recurrence (even
>>> with one invoke).
>> Yes.
>> BTW: Same for parallel loops. You can write the above as parallel loop:
>>
>> ...
>>   for i:=0 to 1 paralleldo begin
>>     if i=0 then x := fib (n-1)
>>     else y := fib (n-2);
>>   end;
>>   exit(x+y);
>> ...
>>
> I doubt this run. Very soon you receive lack of threads. Second this  
> two iteration has very different time of computing.
> I don;t know approach, that balance this.

Even the mtprocs does that.
http://wiki.lazarus.freepascal.org/Parallel_procedures#Features

Of course mtprocs has some disadvantages, e.g. it uses slow critical  
sections and task size must be tuned by the programmer.

> Third: readability is poor.

Compare this to OpenMP programs. ;)


> [...]
>>> CILK has different attempt to task scheduling., its fullfil
>>> Work-requesting idea from
>>> http://groups.google.com/group/lock-free/browse_frm/thread/18f90bdd8c721880
>> That's an implementation detail.
> This is not detail, but quite different attempt.
>
>> Parallel loops implementations can use
>> this too. There are for example plugins for OpenMP using work stealing.
>> Probably some use some form of work requesting too.
> OpenMP is heavy framework, not suitable to all area. Some need  
> something light. But as You notice, work stealing is not useless. Am  
> best with strong integration with FPC.

Yes, that would be nice.


>>> More on CILK documentation, I;m to weak in english.
>>>
>>>>> Second: we not initialize thread on SPAWN (with
>>>>> loops threads are initializing on start loop), Workers wait  for task on
>>>>> idle. Push and pop task from queue can be very fast. Of course this
>>>>> depend on implementation (for example each worker should deal with own
>>>>> queue, but should be possibility to draw task form other queue, this
>>>>> approach is faster than single MPMC FIFO queue)
>>>> Ehm, you know that parallel loops normally use thread pools, do you?
>>> Thats resolved only one problem.
>>> Thread switching is done slowly (less than 100Hz) and rather expensive,
>>> thus we cant start  one thread per iteration. We should a priori pass
>>> iteration to threads.
>> Of course. I don't know any parallel loop implementation starting one
>> thread per iteration (only in extreme cases).
> But CILK can effective play with this.

I doubt that. For example:

for i:=1 to 100000000 do
   spawn DoSomething(i);

It will work (unless run out of mem), but it obviously needs some tuning.

Mattias







More information about the Lazarus mailing list