Performance Tuning
Some operations in Argyll can be particularly slow, so it is worth
examining ways of improving performance, or trading memory
consumption
for performance.
Creating Device Links and Profiles
In creating device links or the B2A tables of profiles, the
execution
time is often dominated by the inversion of forward
color lookup values. An in-memory cache is employed to speed up this
operation, by keeping computed values in case they can be used more
than once. The amount of memory used for caching these values is
pre-set within the inversion code, and by default is set to use half
of
the available RAM on the system, with a minimum of 50 Mbytes.
The reverse cache size can be changed by setting an environment
variable
ARGYLL_REV_CACHE_MULT to a
number greater or less than than 1.0 This will multiply the size of
the
cache by that number (i.e. 1.5 would increase the cache size by 50%,
0.5 would halve it).
If you find that colprof
or collink
are working very slowly, but that your CPU's are nearly idle, then
this
is a sign of disk swapping, and that too much memory is being
requested. This can be because other applications are also
using
memory, or Argyll's default setting tries to use more memory than is
actually available. You can try shutting down other applications
when
this happens, or you can lower
the amount of memory Argyll uses by setting ARGYLL_REV_CACHE_MULT to a value
less than 1.0 (ie. try 0.5).
If you have a lot of memory available, you can try increasing the
cache size to use more of the available RAM (particularly if you get
a
"Warning - Reverse Cell Cache exhausted,
processing in chunks" message during processing), but if you set it
to
a value too near 2.0 you risk disk swapping, which can slow progress
to
a crawl.
If you have a lot of memory available, then a second adjustment that
can make a great difference to the time taken
in creating B2A tables is the resolution of the inverse lookup
acceleration grid. The finer the grid, the less searching is needed
to
locate the input colorspace values that
correspond to a target output color value, but the greater the
memory
used in this
structure, and the greater the setup time needed to initialize the
acceleration grid. The ARGYLL_REV_ACC_GRID_RES_MULT
environment variable can alter the default resolution by a scale
factor. A value of 0.5 for instance, would halve the resolution
(typically meaning 1/8 th. the total number of grid entries and
memory), while a value of 2.0 would double it, typically resulting
in 8
times the memory usage. Increasing the resolution too much will
reduce
the available memory for the reverse cache, and greatly increase
setup
time.
Setting an environment variable:
To set an environment variable an MSWindows DOS shell, either use
set,
e.g.;
set ARGYLL_REV_CACHE_MULT=1.5
which will set the value for that session, or set it in
Control Panel->System->Advanced->Environment Variables..
in either user or system variables.
You can examine individual variables using
echo %VARIABLE_NAME%
or see all of them using
set
For OS X or Linux, the exact procedure will depend on the shell you
are
running, but
is usually something like:
export ARGYLL_REV_CACHE_MULT=1.5
or
set ARGYLL_REV_CACHE_MULT=1.5
or
ARGYLL_REV_CACHE_MULT=1.5
and may need separately exporting, something like:
export ARGYLL_REV_CACHE_MULT
Generally it should be configured in the shell start-up
script,
if you
want the setting to be used
for every session.
You can examine individual variables using
echo $VARIABLE_NAME
or see all of them using
set