User Tools

Site Tools


howtos:toolcoding:performance_tuning

This is an old revision of the document!


Tune your TOOL code for memory and/or runtime constraints

Background Info

TOOL was originally built when memory was scarce and processors were slow. Each tool was optimized for performance in that world, which meant fixed positions for dimensions. Usually the key dimension a single input tool operated on would have to be on the far right and for binary tools (operating on 2 inputs) would require matching dimensions in specific locations. Reorders were scattered through out the code to accommodate these requirements.

Over the years processors and memory improved and the more commonly used tools which operate on one key dimension have been improved to take advantage of the better machines by allowing the key dimension to be anywhere. This reduces the need for reorders and makes the tool code much easier to read and to write.

Recently the “binary” type tools which operate with 2 inputs that interact with each other have been improved too so the order of dimensions does not have to be matching in any way. This has really improved code readability but at a cost of memory.

Today TOOL code is much easier to read and write which is ideal and as long as your objects have a “reasonable” number of elements (say 100M or less) you don't need to think about TOOL memory efficiency. If you have more elements or you are running with a memory strapped machine you do have to concern yourself with efficiency, read on.

General Performance Tuning Info

Facts for a 32bit machine:

  • The actual size of a TOOL object is usually 8 * number of elements since 8 bytes are required for each double.
    • To bring a whole TOOL object into memory to cover that size (we don't always bring the full thing into memory though!)
    • A TOOL object always refers to a file which is the compressed size of the TOOL object (compression depends on the #0's in the object)
  • The maximum signed integer is 2^31 = 2147483648
  • In some cases the max file size on the server is also 2^31 = 2147483648 and each tool object will be saved as a file.

These are the limitations we have until we move to 64bit machines and optimize the TOOL language to use it.

Specificl TOOL Performance Tuning

map, mapcat, sum, (single input tools with key dimension)

multiply, divide, add, subtract, (2 input tools)

insert, reorder

These tools q

howtos/toolcoding/performance_tuning.1270134195.txt.gz · Last modified: 2010/04/01 15:03 by shona.weldon