[erlang-questions] clarify: why bit syntax so slow + benchmark code

Per Gustafsson per.gustafsson@REDACTED
Sat Nov 17 11:22:57 CET 2007


Mateusz Berezecki wrote:
>
> On Nov 16, 2007, at 4:09 PM, Per Gustafsson wrote:
>
>>>
>>
>> It is slow because for each iteration a two sub-binary structure 
>> (about 5 words) is allocated. This will be optimized in the next 
>> release of Erlang/OTP, but your code is sub optimal anyway, if you 
>> want good performance you should write:
>>
>> test1(<<>>) -> done;
>> test1(<<_A, Rest/binary>>) ->
>>       test1(Rest).
>>
>> That is, you should not first pattern match and create a sub-binary 
>> and then match against that one.
>
> It was written that way to show that some calculations are done on that
> matched value later.  Generally speaking
> I'm having a trouble parsing a stream of data
> where each control frame is single byte and I have no knowledge of
> the stream unless I parse that single byte (i.e. and ~3-4 bytes after 
> it - they vary depending
> on that first single byte).
>
> I'm curious, can erlang achieve good performance with that kind of 
> stream data filtering?
>
>
> Mateusz Berezecki
>
The way to write that would be:


parse_stream(<<1,some parsing pattern,Rest/binary>>) ->
  ...
  parse_stream(Rest);
parse_stream(<<2,some other parsing pattern,Rest/binary>>) ->
  ...
  parse_stream(Rest);
...
parse_stream(<<>>) -> ok.

This will minimize he construction of unnecessary sub-binaries and in 
R12B you should be able to get good performance for this kind of 
approach (It still wouldn't be as fast as C, but a lot closer).

If you want some more information about the implementation of the bit 
syntax you should read the paper I presented at this years EUC:

http://www.erlang.se/euc/07/papers/1700Gustafsson.pdf

Per







More information about the erlang-questions mailing list