Changes between Version 1 and Version 2 of Public/User_Guide/SIONlib


Ignore:
Timestamp:
Mar 28, 2019, 2:46:34 PM (5 years ago)
Author:
Benedikt Steinbusch
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Public/User_Guide/SIONlib

    v1 v2  
    33== Modules ==
    44
    5 == Links to SIONlib documentation ==
     5Recent versions of SIONlib are available on the DEEP-EST SDV through the new software stack as modules:
    66
    7 == Mechanisms specific to modular systems ==
     7{{{
     8
     9}}}
     10
     11== SIONlib documentation ==
     12
     13Documentation for SIONlib can be found on the web at https://apps.fz-juelich.de/jsc/sionlib/docu/index.html
     14
     15== MSA aware collective I/O ==
     16
     17Recent versions of SIONlib contain mechanisms to perform I/O operations collectively, i.e. all processes of a parallel computation partake in these operations.
     18This enables an exchange of I/O data between the processes, allowing a subset of all processes, the ''collector'' processes, to perform the actual transfer of data to the storage on behalf of other processes.
     19Collector processes should typically be those processes that are placed on parts of the MSA with a high bandwidth connection to the parallel file system.
     20The mechanism has been extended with a new MSA-aware algorithm for the selection of collector processes.
     21The algorithm is portable and relies on platform specific plug-ins to identify processes which run on parts of the system that are well suited for the role of I/O collector.
     22So far, a specific plug-in for the DEEP-EST SDV has been implemented as well as a test plug-in.
     23In the future, further plug-ins for new systems of the MSA type can be added.
     24
     25In order to use the MSA aware collective I/O operations, a platform specific plug-in has to be selected when installing SIONlib during the configure step.
     26
     27{{{#!sh
     28./configure --msa=deep-est-sdv # ... more configure arguments
     29}}}
     30
     31When opening a SIONlib file for access from several MPI processes in parallel, the user has to enable the MSA aware collective I/O mode.
     32This is done using the `file_mode` argument of the open function.
     33`file_mode` contains a string that consists of a comma separated list of keys and key value pairs.
     34The word `collmsa` must appear in that list to select MSA aware collective I/O.
     35
     36{{{#!c
     37sion_paropen_mpi("filename", "...,collmsa,...", ...);
     38}}}
     39
     40Additionally, as is the case when using regular collective I/O, the size of collector groups has to be secified, either through the `file_mode` argument of the `sion_paropen_mpi` function or via the environment variable `SION_COLLSIZE`.
     41
     42== SIONlib CUDA aware interface ==
     43
     44In order to match the programming interface offered by other libraries, such as ParaStation MPI, more closely, functions of SIONlib have been made CUDA-aware.
     45This means that applications are allowed to pass device pointers pointing to on device memory to the various read and write functions of SIONlib without needing to manually copy their contents to the host memory.
     46
     47Like the MSA aware collective I/O operations, the CUDA aware interface has to be enabled when installing SIONlib.
     48This is done by invoking the `configure` script with the argument `--enable-cuda` which optionally allows to specify the path to a CUDA installation.
     49
     50{{{#!sh
     51./configure --enable-cuda=/path/to/cuda/installation # ... more configure arguments
     52}}}
     53
     54When SIONlib has been installed with the CUDA aware interface enabled, the user may pass device pointers as the `data` argument to SIONlib's
     55
     56* task-local
     57* key/value
     58* collective
     59
     60read and write functions.
     61
     62{{{#!c
     63size_t sion_fwrite(const void *data, size_t size, size_t nitems, int sid);
     64size_t sion_fread(void *data, size_t size, size_t nitems, int sid);
     65size_t sion_fwrite_key(const void *data, uint64_t key, size_t size, size_t nitems, int sid);
     66size_t sion_fread_key(void *data, uint64_t key, size_t size, size_t nitems, int sid);
     67size_t sion_coll_fwrite(const void *data, size_t size, size_t nitems, int sid);
     68size_t sion_coll_fread(void *data, size_t size, size_t nitems, int sid);
     69}}}
     70
     71SIONlib inspects the pointer and if it points to an on-device buffer performs a block-wise copy of the data into host memory before writing to disk or into device memory after reading from disk.