| |
| Modern computer use multiple kinds of memory. |
| |
| There is CPU registers, CPU cash , intern memory and extern memory. |
| |
| If the CPU wants to read/write to memory. |
| It have to do it whit different speed to different kinds of memory. |
| |
| CPU registers are fast. |
| and extern memory is slowest. |
| |
| Data moves between this kinds of memory as blocks of data. |
| |
| Between CPU registers and CPU cash in 16,32 or 64 bit blocks. |
| |
| Between CPU cash and intern memory in 16,32 or 64 bit blocks. |
| |
| Between intern memory and extern memory in memory pages (4096 bytes) blocks. |
| |
| Given this a strategy for optimisation could be that we try to minimise |
| the number of times a block get moved from one kind of memory to another. |
| |
| To demonstrate and to test optimisers I have made the following 3 programs. |
| |
| The all solve the same problem but are using memory on 3 different ways. |
| So a good optimiser should make them all run equal fast. |
| |
| The problem is to take a big array of numbers and then accumulate 4 numbers |
| min, max, sum and product. |
| |
| testA is the fast version. |
| It accumulate all values in one parse. |
| |
| testB is slower |
| It accumulate all values in 4 parses. |
| |
| testC is slowest. |
| It also accumulate the values in 4 parses. |
| But it don't start at element 0 and go to element n-1 but it jumps around |
| in the array. |
| |