Writing Efficient Code in Dyalog
Roger Hui
Abstract
Part I. Performance Tips
A review of performance tips and rules of thumb useful for writing efficient code.
Part II. Special Code
Many primitives contain special code for certain arguments
to effect time and/or space savings not available to general arguments;
moreover, some phrases are “recognized” and are supported by special code.
(These are in addition to idioms.)
We explore special codes with emphasis on the newer constructs.
Part I. Performance Tips
| cmpx and wsreq |
| cmpx ⍵ compares expression timings |
| 1 1 cmpx ⍵ gets actual times |
| wsreq ⍵ workspace required |
|
| work on big chunks of data |
| amortize fixed costs over more data |
|
| keep data together |
| arrays are stored in row-major (ravelled) order |
| cache misses are expensive |
|
| order of complexity |
| know the order of complexity of primitives |
| avoid O(n*2) operations |
|
| sorting and searching |
| sorting is faster than grading |
| exploit small range integers |
| x⍳x is useful (and optimized) |
| use ⎕ct←0 if possible |
| beware of O(n*2) cases |
|
| utilities |
| utilities create centers of gravity |
| dfns are faster than tradfns |
| imitate primitives from other languages |
Part II. Special Codes
| within a primitive |
| datatype |
| boolean data |
| special but common cases |
|
| Idioms |
|
| operators |
| ⍤ |
| ⌸ |
|
| trains |
| f¨ ⊂ |
| 1 ⍳⍨ comp |
| ≢∪ |
References
[0] |
Hui, Roger,
Performance
Tips, Dyalog ’12, Elsinore, Denmark, 2012-10-14.
|
[1] |
Hui, Roger,
Exploring
Index-Of, Dyalog ’14, Eastbourne, UK, 2014-09-21.
|
[2] |
Hui, Roger,
A Speed-Up Story,
Dyalog Blog post, 2014-11-05.
|
[3] |
Hui, Roger,
Exploring Key,
Dyalog Blog post, 2015-04-13.
|
[4] |
Hui, Roger,
A Dialog on APL,
Dyalog Blog post 2015-05-18.
|
Presented at Dyalog ’15, 2015-09-10.
created: | 2015-05-24 22:25 |
updated: | 2015-08-04 19:05 |
|