I wanted to profile the performance of a while loop vs a recursive
function, so I wrote two functions, Iter() and Rec(), computing the
same value (full code at the end of the message).
The execution took ~4s, but Rec()'s measured times were (full profile
at the end of the message):
FUNCTION Rec()
Called 319100 times
Total time: 55.655449
Self time: 0.100880
count total (s) self (s)
319100 1.070460 return etc...
So, the total time looks wildly wrong. Am I missing something?
Thanks,
Life.
""" START CODE
fun! Iter(n)
let l:res = a:n
let l:i = 0
while (l:res > 2)
let l:i += 1
if l:res % 2 == 0
let l:res = l:res / 2
else
let l:res = 3 * l:res + 1
endif
endwhile
return l:i
endf
fun! Rec(n, i)
return (a:n > 2)
\ ? (a:n % 2 == 0 ? Rec(a:n / 2, a:i + 1) : Rec(3 * a:n + 1,
a:i + 1))
\ : a:i
endf
for i in range(1,100)
for j in range(3,102)
call Iter(j)
endfor
endfor
set maxfuncdepth=200
for i in range(1,100)
for j in range(3,102)
call Rec(j,0)
endfor
endfor
""" END CODE
SCRIPT recursive.vim
Sourced 1 time
Total time: 3.877530
Self time: 0.098649
count total (s) self (s)
1 0.10 fun! Iter(n)
let l:res = a:n
let l:i = 0
while (l:res > 2)
let l:i += 1
if l:res % 2 == 0
let l:res = l:res / 2
else
let l:res = 3 * l:res + 1
endif
endwhile
return l:i
endf
1 0.04 fun! Rec(n, i)
return (a:n > 2)
\ ? (a:n % 2 == 0 ? Rec(a:n / 2,
a:i + 1) : Rec(3 * a:n + 1, a:i + 1))
\ : a:i
endf
101 0.000135 for i in range(1,100)
10100 0.008887 for j in range(3,102)
1 2.205133 0.027498 call Iter(j)
1 0.007991 endfor
100 0.60 endfor
1 0.07 set maxfuncdepth=200
101 0.000126 for i in range(1,100)
10100 0.010572 for j in range(3,102)
1 1.628922 0.027676 call Rec(j,0)
1 0.010928 endfor
100 0.65 endfor
FUNCTION Iter()
Called 1 times
Total time: 2.176493
Self time: 2.176493
count total (s) self (s)
1 0.011883 let l:res = a:n
1 0.008844 let l:i = 0
319100 0.304749 while (l:res > 2)
309100 0.260323 let l:i += 1
309100 0.256933 if l:res % 2 == 0
207200 0.221210 let l:res = l:res / 2
207200 0.097171 else
101900 0.140026 let l:res = 3 * l:res + 1
101900 0.057105 endif
309100 0.202117 endwhile
1 0.008519 return l:i
FUNCTION Rec()
Called 319100 times
Total time: 55.655449
Self time: 0.100880
count total (s) self (s)
319100 1.070460 return (a:n > 2) ? (a:n % 2 == 0 ?
Rec(a:n / 2, a:i + 1) : Rec(3 * a:n + 1, a:i + 1)) : a:i
FUNCTIONS SORTED ON TOTAL TIME
count total (s) self (s) function
319100 55.655449 0.100880 Rec()
1 2.176493 Iter()
FUNCTIONS SORTED ON SELF TIME
count total (s) self (s) function
1 2.176493 Iter()
319100 55.655449 0.100880 Rec()
--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to vim_use+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.