execution times of functions
5 posts
• Page 1 of 1
execution times of functions
Is there a simple way to determine the execution time of a function? I found something called "cmpx" on the Web, but it looks quite complicated and I'm not sure it's what I want.
- Stu
- Posts: 97
- Joined: Thu Dec 31, 2015 1:30 am
Re: execution times of functions
Hi Stu: operator time from dfns.dws displays the time to apply a function, with a resolution of around a hundredth of a second:
cmpx: http://dfns.dyalog.com/n_cmpx.htm
)copy dfns timeFunction cmpx compares the execution times of a number of (typically small) expressions to a high resolution. Here is a comparison of some expressions for the first item of a vector. Their timings vary but each takes 0.2-0.3 microseconds on my machine.
... saved ...
2 + thisfn × 3 thatfn 4 ⍝ monadic and dyadic function calls
42
2 + thisfn time × 3 thatfn time 4 ⍝ same again with time in seconds
0.03
0.45
42
)copy dfns cmpxtime: http://dfns.dyalog.com/n_time.htm
... saved ...
cmpx'⍬⍴3 2' '3 2[1]' '⊣/3 2'
⍬⍴3 2 → 2.2E¯7 | 0% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
3 2[1] → 3.3E¯7 | +49% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
⊣/3 2 → 2.1E¯7 | -7% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
cmpx: http://dfns.dyalog.com/n_cmpx.htm
- JohnS|Dyalog
Re: execution times of functions
I like to use this dfn that is a variation of time:
The expression to evaluate is put between quotes and it need to be assigned to a variable. For example:
The expression was evaluated 500 times and the average is 0.03 seconds.
- Code: Select all
∆profile←{
⍝ James L. Ryan
⍝ Taliesin
⍝ 73 Thomas Road, P.O. Box 151
⍝ Alloway, New Jersey 08001
⍝ USA
⍝ This function provides the means for obtaining a reasonably accurate
⍝ processor time figure for all but the most trivial of APL expressions.
⍝ The function is called by giving the expression to be tested as a
⍝ character vector argument which will be executed in the calling namespace.
⍝ The expression will be executed repeatedly until either a thousand
⍝ iterations have occurred or until the total accumulated time exceeds
⍝ a full second. The expression given in the argument must return a
⍝ value. The result is a two element vector, the first element stating
⍝ how many times the test expression was executed and the second element
⍝ stating the average time per execution.
⍺←0 0 ⍝ initial iterations and total
i t←⍺ ⍝ current iterations and total
i+←1 ⍝ increment iterations
b←⎕AI ⋄ x←(⎕IO⊃⎕NSI)⍎⍵ ⋄ e←⎕AI ⍝ time the test expression
t+←⊃-/1↑¨1↓¨e b ⍝ total accumulated time
(t>1000)∨i=500:i(t÷i) ⍝ report if total>1000 or iterations=500
(i t)∇ ⍵ ⍝ keep going
}
time←{ ⍝ Time function application. http://dfns.dyalog.com/n_time.htm
tfmt←{ ⍝ elapsed time format hh:mm:ss.cc
csec←{⌊0.5+0.1×⍵-⍺} ⍝ elapsed centi-seconds.
tvec←{0 60 60 100⊤⍵} ⍝ time vector: hours mins secs centi.
pair←{(-2⌈⍴⍵)↑'0',⍵}∘⍕ ⍝ 2-digit time unit.
sepr←{1↓↑,/':::.',¨⍵} ⍝ ':' or '.' separated pairs.
trim←{(~{⌽∨\⌽⍵}¯2⌽'00:'⍷⍵)/⍵} ⍝ leading 00:s removed.
trim sepr pair¨tvec ⍺ csec ⍵ ⍝ hh:mm:ss.cc
}
0::(,↑⍬⍴⎕DM)⎕SIGNAL ⎕EN ⍝ catchall: pass back error.
fm←⍬⍴2↓⎕AI ⍝ start time.
6::{}⎕←fm tfmt ⍬⍴2↓⎕AI ⍝ value error: fn didn't return result.
⍺←⊢ ⋄ rslt←⍺ ⍺⍺ ⍵ ⍝ apply function.
⎕←fm tfmt ⍬⍴2↓⎕AI ⍝ display elapsed time.
1:shy←rslt ⍝ pass on shy result.
}
The expression to evaluate is put between quotes and it need to be assigned to a variable. For example:
∆profile 'a←⍳1000'
500 0.03
The expression was evaluated 500 times and the average is 0.03 seconds.
-
PGilbert - Posts: 436
- Joined: Sun Dec 13, 2009 8:46 pm
- Location: Montréal, Québec, Canada
Re: execution times of functions
The cmpx function has been embedded into a user command, so it is always available:
You can also compare several expressions:
See ]?runtime for more details.
- Code: Select all
]runtime "1E7?1E7"
* Benchmarking "1E7?1E7"
Exp
CPU (avg): 813
Elapsed: 825
You can also compare several expressions:
- Code: Select all
]runtime "1E6?1E6" "1E7?1E7" -compare
1E6?1E6 → 3.5E¯2 | 0% ⎕⎕
* 1E7?1E7 → 7.0E¯1 | +1915% ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
See ]?runtime for more details.
-
Morten|Dyalog - Posts: 453
- Joined: Tue Sep 09, 2008 3:52 pm
Re: execution times of functions
Both time and cmpx turn out to be very useful. Thanks guys!
- Stu
- Posts: 97
- Joined: Thu Dec 31, 2015 1:30 am
5 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 1 guest
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group