HiPE compilation gives NINE times speed increase!

Peter-Henry Mander erlang@REDACTED
Sat Jan 15 18:19:27 CET 2005


Hi Gurus,

I've made an interesting discovery, I think, and I would like to solicit
your opinions why this code happens to run over NINE TIMES faster when
compiled natively compared to virtual machine BEAM code. The results
below are from a system with a VIA M10000 EPIA motherboard. Not a speedy
machine by modern standards (which is an incentive to write code that
runs fast :-). Can you all please try this code on other platforms to
see if the result is consistent on every one?

My guess is the combined use of the recently updated try-catch statement
and binaries allows for some of the HiPE team's work to really shine in
this example. I found this out by chance, and I would be very interested
if members of the HiPE team can offer programming guidelines to maximise
optimisation in other situations.

Dr. Joe (hi Joe) has stated recently "[...] write your code as
beautifully as possible - and measure - if it's not fast enough then
measure and then optimise." Although I would not claim that the attached
code is anywhere near beautiful, I don't think it's too ugly either. The
last 30 lines or so of prefix.erl are the core of the tokeniser
(extracted from a SIP stack I'm *still* working on. Hi Fredrik :-). All
the rest is just a test cradle with chronometric knobs on.

Pete.


4> test:test().
TimeScan 13027457  TimeParse 240057  Size 4063232
TimeScan 12616897  TimeParse 238838  Size 4063232
TimeScan 12615948  TimeParse 239121  Size 4063232
TimeScan 12606858  TimeParse 239751  Size 4063232
TimeScan 12614551  TimeParse 239600  Size 4063232
List=[{token,13027457,240057,4063232},
      {token,12616897,238838,4063232},
      {token,12615948,239121,4063232},
      {token,12606858,239751,4063232},
      {token,12614551,239600,4063232}]
          token:   12696342 (  1% Std DV8) ScanTime      239473 (  0% Std DV8) ParseTime    12935815 TotalTime
TimeScan 1332222  TimeParse 229074  Size 4063232
TimeScan 1329588  TimeParse 223404  Size 4063232
TimeScan 1330333  TimeParse 222985  Size 4063232
TimeScan 1329658  TimeParse 223437  Size 4063232
TimeScan 1327399  TimeParse 222689  Size 4063232
List=[{token,1332222,229074,4063232},
      {token,1329588,223404,4063232},
      {token,1330333,222985,4063232},
      {token,1329658,223437,4063232},
      {token,1327399,222689,4063232}]
          token:    1329840 (  0% Std DV8) ScanTime      224317 (  1% Std DV8) ParseTime     1554157 TotalTime
          token:    9.54727 ScanTimeMult     1.06757 ParseTimeMult
[{token,9.54727,1.06757}]


-- 
"The Tao of Programming
 flows far away 
 and returns 
 on the wind of morning."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: prefix.erl
Type: application/octet-stream
Size: 2734 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20050115/e32c5843/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.erl
Type: application/octet-stream
Size: 3123 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20050115/e32c5843/attachment-0001.obj>


More information about the erlang-questions mailing list