This directory contains the "second" level communication routines.
These define sends/receives that allow non-contiguous data to be sent to
multiple processors.  These routine accepts a "control program" that
describes the data to send, containing:
    type (block or vector)

    block (pointer, type, size)

    vector( pointer, type, ndims, strides, sizes )

These are designed so that an OS can quickly check that all of the references
will be within the user's address space.


A more general structure may be built out of blocks like:
typedef struct {
    void *p;
    int  len, dtype;
    } COMM_WBLOCK;

typedef struct {
    int len, stride;
    } COMM_BDIM;

typedef struct {
    void *p;
    int  dtype, ndim;
    COMM_BDIM dims[1];
    } COMM_VBLOCK;
   
typedef struct {
    int  nblock;
    union  {};
    } VBLOCK;
