In week 5 of the Dyalog ’19 videos, Francesco Garue tells how, after APL Italiana was acquired by SimCorp and became SimCorp Italiana, the two development teams got to know each other by sharing some code. At the time, APL Italiana’s SOFIA product contained a “Rebalancer”, a central component of Asset and Liability Management systems, capable of adjusting the contents of portfolios of financial instruments to bring them into alignment with investment rules or limits. The rebalancer had functionality which could be useful to add to SimCorp Dimension. Francesco tells the story of how a team of Danes, Ukrainians and Italians worked to extract and refactor the components so that it could be shared by the two products.
The two Dyalog talks this week are both about improving performance. Geoff Streeter explains the ideas behind a new way to save workspaces in a format known as a shared code file. Shared code files can be memory mapped, making the contents immediately available to the application, even though only a small part of the file is actually loaded. Functions in a shared code file are only loaded from file if/when they are used. For applications that have a large body of code, only a fraction of which is used in any particular user session, this can mean a huge reduction in application start-up time. If several processes run the same application on a machine, then process starts after the first one run faster still, because the most frequently-used code is already loaded into memory. As code is shared between the processes, there is a reduced memory footprint in addition to the increased performance.
One of the most widely used mechanisms for iteration in APL is the reduction operator, which injects its operand function between elements of an array. For example,
(+/1 2 3 4) is the “plus reduction” of the first four positive integer, computed as
1+2+3+4. In his talk on “Implementing Reduction”, Marshall Lochbaum explains how, for many of the most commonly used reductions using functions like
+ - × ⌈ and
⌊ on integers and doubles, and a much larger set of functions on Boolean arrays, he has worked to make the reductions run as fast as possible. To Marshall, that ideally means “as fast as the arguments can be loaded from memory”.
Summary of this week’s videos: