Strange since andreas was mentioning that squeak thread swicthing costs far less than in VW.
Stef On Mar 23, 2009, at 4:49 AM, Michael van der Gulik wrote: > > > On Mon, Mar 23, 2009 at 2:21 PM, Michael van der Gulik <[email protected] > > wrote: > > > On Mon, Mar 23, 2009 at 12:34 PM, Igor Stasenko <[email protected]> > wrote: > > Now consider the overhead of creating a fork vs the actual useful code > which is running within a block. > I presume, this code will run 10x times slower on a single core > processor, comparing to one w/o forks. > So, you will need to have 10 cores to match the computation time with > single core processor. > > I think its not wise to introduce parallelism on such low levels (in > Concurrent.Collections.Array>>withIndexDo:). Its like hammering nails > with microscope :) > > That's why i'm saying its too good to be true. > Introducing parallelism at such low levels will be a waste. I leaning > toward island model. This is a middle point between no sharing, like > in Hydra and sharing everything, like in what you proposing. > > 10 times slower? Sounds like a made-up number to me... > > " Using 101 threads: " > c := ConcurrentArray new: 1000001. > Time millisecondsToRun: [c withIndexDo: [ :each :i | c at: i put: i > asString. ]]. > 5711 > 5626 > 6074 > > " Using 11 threads: " > c := ConcurrentArray new: 1000001. > Time millisecondsToRun: [c withIndexDo: [ :each :i | c at: i put: i > asString. ]]. > 3086 > 3406 > 3256 > > " Using 1 thread: " > d := Array new: 1000001. > Time millisecondsToRun: [d withIndexDo: [ :each :i | d at: i put: i > asString]]. > 2426 > 2610 > 2599 > > My implementation is 1/2 to 1/3 the speed of the single-threaded > Array. If the blocks did more work, then the overhead would be lower > and some benefit would be gained from using multiple cores. > > I don't have a good idea of where the overhead is going - maybe it's > being lost in the block copying that is needed to work around > Squeak's deficiencies? Or maybe it's waiting for the scheduler to do > its stuff? > > Implementation attached, MIT license if you're picky. > > > I just tried it on VisualWorks as well. I removed the block copying > and renamed the method to "keysDo:" (I never thought of an array > like that before... keys and values). > > d := Array new: 1000001. > Time millisecondsToRun: [d keysDo: [ :i | d at: i put: i > printString]]. > 1180 > 982 > 1008 > > " Using 101 threads " > c := ConcurrentArray new: 1000001. > Time millisecondsToRun: [c keysDo: [ :i | c at: i put: i > printString. ]]. > 1072 > 1120 > 962 > > At this stage, I'm suspicous about the results :-). > > Gulik. > > -- > http://gulik.pbwiki.com/ > _______________________________________________ > Pharo-project mailing list > [email protected] > http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project _______________________________________________ Pharo-project mailing list [email protected] http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
