Getting Started

Lima2 is based on Message Passing Interface (MPI), a framework to develop parallel application on distributed memory systems. Lima2 is a so called multiple programs, multiple data (MPMD) application where the programs have different responsibilities:

  • control (1 process)

  • acquisition (n processes)

  • processing (n processes)

MPI defines a standardized API that is implemented by multiple projects such OpenMPI, MPICH or MVAPICH.

Running an application requires to install an MPI library on all the node of the clusters. The conda packages are build against the following distributions:

  • MPICH on Linux

  • MS-MPI on Windows

Tango Device Servers

Lima2 comes with a tango device server lima2_tango executable that can be used to control a camera (Control class) and receive the data (Receiver class). The implementation is camera specific and is provided by a plugin (a shared library) that is discovered and loaded at runtime.

The plugin folder is specified with the LIMA2_PLUGIN_FOLDER environment variable, and is usually set to $CONDA_PREFIX/lib/plugins when deploying in a Conda environment.

Running the MPI application

MPI provides the mpirun command which arguments are the executables to run. To keep things simple, running one control process, one acquisition process would look like this:

TANGO_HOST="l-cb184-1:20000" LIMA2_PLUGIN_FOLDER=$CONDA_PREFIX/lib/plugins mpirun -n 1 lima2_tango id00_eiger2 --log-level=info : -n 1 --map-by numa:PE=0 lima2_tango id00_eiger2 -v4 --log-level=info

The placement of the process in terms of computer, CPU core and affinity can be controlled with mpirun parameters.

The lima2_tango executable is designed to support multiple cameras, hence the first (positional) parameter is the camera name.

$ lima2_tango --help
Log level set to warning
Usage: lima2_tango <INSTANCE> [options]
Allowed options:
  --help                     Produce help message
  --debug                    Stop the server at the beginning to attach
  --plugin-folder arg (=.)   Plugin folder
  --log-level arg (=warning) Logging level [trace=0, debug, info, warning,
                             error, fatal=5]
  --log-domain arg (=all)    Logging domain [core, ctl, acq,proc, io...]