n should be a global const or a function parameter, so that you are testing array performance rather than global variable performance, before drawing any conclusions
On Thu, Jun 5, 2014 at 4:36 AM, Magnus Lie Hetland <[email protected]> wrote: > On Thursday, June 5, 2014 7:11:11 AM UTC+2, John Myles White wrote: > >> I think your loop might be more performant if you were looping over Uint >> values rather than Int values. >> > > Sure. I tried using an Int array, which helped a little, but I've also > tried pushing Uints now. (The motivation for that in my case would be > pushing object_id returns.) > > My benchmark setup is here: > https://gist.github.com/mlhetland/47bb6a624af3432118bb > > My results: > > | Row # | Function | Average | Relative | Replications | > > | 1 | "push_int_any" | 0.0219446 | 1.0 | 100 | > > | 2 | "asgn_int_any" | 0.0293365 | 1.33684 | 100 | > > | 3 | "asgn_check_int_any" | 0.0342796 | 1.56209 | 100 | > > | 4 | "asgn_check_id_uint" | 0.0306131 | 1.39501 | 100 | > > | 5 | "push_id_uint" | 0.0263455 | 1.20055 | 100 | > > | 6 | "push_int_uint" | 0.0276287 | 1.25902 | 100 | > > | 7 | "push_entry_any" | 0.0223655 | 1.01918 | 100 | > > | 8 | "push_enryid_uint" | 0.0243882 | 1.11135 | 100 | > > | 9 | "push_int_int" | 0.0231472 | 1.0548 | 100 | > > | 10 | "push_uint_uint" | 0.0227038 | 1.03459 | 100 | > > I tried adding @inbounds for the assignments, but that didn't seem to help > much. > > Pushing Int to Int and Uint to Uint seem pretty close to pushing Int to > Any. I guess the differences could even be timing artefacts (due to > ordering or the like). Dunno. > > But form what I can see, the simple, straightforward approach of simply > using a cell array with push! and resize! does not entail any overhead? I > guess there would be no difference for simple assignments such as swapping > entries either? > > -- John >> >
