Hi,

don'tforget to weight in your time too.

The ease to develop AND evolve a program is an important aspect that
the benchmarks don't show.

Nowdays, developer time count often more than processing time because
you may easily spent days on a nasty bug or an unplanned evolution.

have a nice day

nicolas

On Mon, 2022-01-10 at 14:05 -0600, Jimmie Houchin wrote:
> Some experiments and discoveries.
> I am running my full language test every time. It is the only way I
> can compare results. It is also what fully stresses the language.
> The reason I wrote the test as I did is because I wanted to know a
> couple of things. Is the language sufficiently performant on basic
> maths. I am not doing any high PolyMath level math. Simple things
> like moving averages over portions of arrays.
> The other is efficiency of array iteration and access. This why #sum
> is the best test of this attribute. #sum iterates and accesses every
> element of the array. It will reveal if there are any problems.
> The default test  Julia 1m15s, Python 24.5 minutes, Pharo 2hour
> 4minutes.
> When I comment out the #sum and #average calls, Pharo completes the
> test in 3.5 seconds. So almost all the time is spent in those two
> calls.
> So most of this conversation has focused on why #sum is as slow as it
> is or how to improve the performance of #sum with other
> implementations.
> 
>  
> So I decided to breakdown the #sum and try some things.
> Starting with the initial implementation and SequenceableCollection's
> default #sum  time of 02:04:03
> 
> "This implementation does no work. Only iterates through the array.
> It completed in 00:10:08"
>  sum
>      | sum |
>       sum := 1.
>      1 to: self size do: [ :each | ]. 
>      ^ sum
>  
>  
>  "This implementation does no work, but adds to iteration, accessing
> the value of the array.
> It completed in 00:32:32.
> Quite a bit of time for simply iterating and accessing."
>  sum
>      | sum |
>      sum := 1.
>      1 to: self size do: [ :each | self at: each ].
>      ^ sum
>  
>  
>  "This implementation I had in my initial email as an experiment and
> also several other did the same in theirs.
> A naive simple implementation.
> It completed in 01:00:53.  Half the time of the original."
>  sum
>     | sum |
>      sum := 0.
>      1 to: self size do: [ :each |
>          sum := sum + (self at: each) ].
>      ^ sum
>  
>  
>  
>  "This implementation I also had in my initial email as an experiment
> I had done.
> It completed in 00:50:18.
> It reduces the iterations and increases the accesses per iteration.
> It is the fastest implementation so far."
>  sum
>      | sum |
>      sum := 0.
>      1 to: ((self size quo: 10) * 10) by: 10 do: [ :i |
>          sum := sum + (self at: i) + (self at: (i + 1)) + (self at:
> (i + 2)) + (self at: (i + 3)) + (self at: (i + 4))              +
> (self at: (i + 5)) + (self at: (i + 6)) + (self at: (i + 7)) + (self
> at: (i + 8)) + (self at: (i + 9))].
>  
>      ((self size quo: 10) * 10 + 1) to: self size do: [ :i |
>          sum := sum + (self at: i)].
>        ^ sum
>  
> Summary
> For whatever reason iterating and accessing on an Array is expensive.
> That alone took longer than Python to complete the entire test.
>  
>  I had allowed this knowledge of how much slower Pharo was to stop me
> from using Pharo. Encouraged me to explore other options.
>  
>  I have the option to use any language I want. I like Pharo. I do not
> like Python at all. Julia is unexciting to me. I don't like their
> anti-OO approach.
>  
>  At one point I had a fairly complete Pharo implementation, which is
> where I got frustrated with backtesting taking days.
>  
>  That implementation is gone. I had not switched to Iceberg. I had a
> problem with my hard drive. So I am starting over.
> I am not a computer scientist, language expert, vm expert or anyone
> with the skills to discover and optimize arrays. So I will end my
> tilting at windmills here.
> I value all the other things that Pharo brings, that I miss when I am
> using Julia or Python or Crystal, etc. Those languages do not have
> the vision to do what Pharo (or any Smalltalk) does.
> Pharo may not optimize my app as much as x,y or z. But Pharo
> optimized me.
> That said, I have made the decision to go all in with Pharo. Set
> aside all else.
>  In that regard I went ahead and put my money in with my decision and
> joined the Pharo Association last week.
> Thanks for all of your help in exploring the problem.
> 
> Jimmie Houchin
>  

Reply via email to