Matthijs van Duin wrote:

Which system is likely to run faster on parrot?


I would propose, estimate the ops you need and test it :)

E.g. call a continuation 1e6 times and communicate state with one global (a lexical is probably the same speed, i.e. a hash lookup)

$ cat a.pasm
    new P5, .PerlInt
    set P5, 1000000
    store_global "foo", P5
    new P0, .Continuation
    set_addr I0, endcont
    set P0, I0
endcont:
    find_global P4, "foo"
    unless P4, done
    dec P4
    # store_global "foo", P4 --no need to store, P4 is a reflike thingy
    invoke
done:
    print "done\n"
    end

$ time imcc -P a.pasm
done

real 0m0.881s


$ imcc -p a.pasm done OPERATION PROFILE

  CODE   OP FULL NAME            CALLS  TOTAL TIME    AVG TIME
  -----  -----------------     -------  ----------  ----------
      0  end                         1    0.000001    0.000001
     40  set_addr_i_ic               1    0.000001    0.000001
     66  set_p_i                     1    0.000001    0.000001
     67  set_p_ic                    1    0.000004    0.000004
    226  unless_p_ic           1000001    0.595025    0.000001
    276  dec_p                 1000000    0.599946    0.000001
    758  store_global_sc_p           1    0.000006    0.000006
    760  find_global_p_sc      1000001    1.037922    0.000001
    786  new_p_ic                    2    0.000011    0.000005
    819  invoke                1000000    0.914063    0.000001
    883  print_sc                    1    0.005299    0.005299
  -----  -----------------     -------  ----------  ----------
     11                        4000010    3.152280    0.000001


So you can estimate that the more "heavy" opcodes take about 1us, more "light" vtable functions are ~double that speed with the slow, profiling core. CGP (or JIT) is 3 - 4 times faster.


-O3 compiled parrot, Athlon 800, i386/linux

leo



Reply via email to