Erlang en CPU multinúcleo

Estoy aprendiendo erlang y estoy bastante impresionado de lo fácil que es paralelizar el trabajo. Para practicar un poco, desenterré la buena secuencia de Fibanocci. En el siguiente código, trato de aprovechar la paralelización calculando los productos caros de tres en tres.

-module (fib4).
-export ( [main/1] ).

main (N) ->
    fib (list_to_integer (atom_to_list (hd (N) ) ) ),
    halt (0).

path (1, Acc) -> Acc;
path (N, Acc) when N rem 2 =:= 0 ->
    path (N - 1, [step | Acc] );
path (N, Acc) ->
    path ( (N - 1) div 2, [jump | Acc] ).

fib (N) -> fib (1, 1, path (N, [] ) ).

fib (N, Nplus1, [Last] ) ->
    case Last of
        step -> Nplus1;
        jump -> N * N + Nplus1 * Nplus1
    end;

fib (N, Nplus1, [jump | T] ) ->
    Pid = self (),
    spawn (fun () -> Pid ! {n1sq, Nplus1 * Nplus1} end),
    spawn (fun () -> Pid ! {mul, 2 * N * Nplus1} end),
    spawn (fun () -> Pid ! {nsq, N * N} end),
    {Nsq, N1sq, Mul} = loop (0, 0, 0),
    fib (Nsq + N1sq, N1sq + Mul, T);

fib (N, Nplus1, [step | T] ) ->
    fib (Nplus1, N + Nplus1, T).

loop (Nsq, N1sq, Mul) ->
    receive
        {nsq, Val} ->
            if
                N1sq > 0 andalso Mul > 0 -> {Val, N1sq, Mul};
                true -> loop (Val, N1sq, Mul)
            end;
        {n1sq, Val} ->
            if
                Mul > 0 andalso Nsq > 0 -> {Nsq, Val, Mul};
                true -> loop (Nsq, Val, Mul)
            end;
        {mul, Val} ->
            if
                N1sq > 0 andalso Nsq > 0 -> {Nsq, N1sq, Val};
                true -> loop (Nsq, N1sq, Val)
            end
    end.

Estoy ejecutando este código en un Phenom X4 y durante el minuto que tarda mi máquina en calcular fib (10000000) solo funcionan uno o dos núcleos y los demás están inactivos.

Mis preguntas son:

¿Quién decide cuántos núcleos se distribuyen los hilos de trabajo? ¿El nodo erlang o mi sistema operativo (ubuntu con 2.6.38 en mi caso)?Pierdo velocidad debido al hecho de que dos o tres núcleos están inactivos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta