[erlang-questions] Clarify: HiPE auto-spawning?

Kostis Sagonas <>
Fri Nov 16 13:18:02 CET 2007


Philip Robinson wrote:
> Does HiPE automatically spread (spawn) a program across multiple cores?
> 
> For example, if I have a function:
> 
> test(A, B) ->
>     {A + B, A * B}.
> 
> Will HiPE convert it into something like the following?
> 
> test(A, B) ->
>     PidThis = self(),
>     Pid1 = spawn(fun() -> PidThis ! {self(), A + B} end),
>     Pid2 = spawn(fun() -> PidThis ! {self(), A * B} end),
>     Tmp1 = receive {Pid1, Result1} -> Result1 end,
>     Tmp2 = receive {Pid2, Result2} -> Result2 end,
>     {Tmp1, Tmp2}.
> 
> I suspect not, but I cannot find any confirmation.

Of course not.  HiPE is a native code compiler, not a parallelizing 
compiler. (Not to mention the fact that the transformation is a 
pessimization rather than an optimization in the above program.)

More generally, HiPE is not allowed to alter the observable behaviour of 
your program -- or at least it tries to.  For example, suppose you have 
an observer process that counts the number of processes a program 
spawns.  The result of that program would change based on whether HiPE 
compilation was used or not, if HiPE (automatically) did what you 
suggested and the BEAM compiler did not.

Kostis



More information about the erlang-questions mailing list