[REBOL] Re: Shamless request for improving function speed.
From: joel:neely:fedex at: 28-Mar-2002 13:31
Hi, Alan,
alan parman wrote:
> Re: Improving function speed (no code)
>
...
> I still can't get rid of one 'append though ...
> ...
> s: j: i: 0
> state: make block! 256
> loop 256 [append state s s: s + 1]
> ...
>
It *can* be sped up slightly (saving a millisecond a month
somewhere ;-)
b: make block! n i: 0 t0a: now/time/precise
loop n [append b i i: i + 1] t0b: now/time/precise
b: make block! n i: -1 t1a: now/time/precise
loop n [append b i: i + 1] t1b: now/time/precise
b: make block! n i: -1 t2a: now/time/precise
loop n [insert tail b i: i + 1] t2b: now/time/precise
print [t0b - t0a t1b - t1a t2b - t2a]
The first version is similar to yours, the second eliminates
the doubled use of the counter, and the third uses the well-
known APPEND ==> INSERT TAIL optimization. Timing the above
five times for N of one million yields these results:
0:00:04.687 0:00:04.507 0:00:02.113
0:00:04.707 0:00:04.547 0:00:02.143
0:00:04.677 0:00:04.526 0:00:02.113
0:00:04.687 0:00:04.536 0:00:02.113
0:00:04.656 0:00:04.586 0:00:02.113
Most of the savings, as expected, results from the second
optimization, but avoiding the "double-dipping" does have
a measurable value.
-jn-