TclMPI 1.2
Tcl Bindings for MPI
_tclmpi.c File Reference

This file contains the C code with the Tcl MPI wrappers. More...

#include <mpi.h>
#include <tcl.h>
#include <stdio.h>
#include <string.h>
Include dependency graph for _tclmpi.c:

Data Structures

struct  tclmpi_comm
 
struct  tclmpi_dblint
 
struct  tclmpi_intint
 
struct  tclmpi_req
 

Macros

#define TCLMPI_LABEL_SIZE   32
 
#define TCLMPI_TOZERO   -4
 
#define TCLMPI_ABORT   -3
 
#define TCLMPI_ERROR   -2
 
#define TCLMPI_INVALID   -1
 
#define TCLMPI_NONE   0
 
#define TCLMPI_AUTO   1
 
#define TCLMPI_INT   2
 
#define TCLMPI_INT_INT   3
 
#define TCLMPI_DOUBLE   4
 
#define TCLMPI_DOUBLE_INT   5
 
#define TCLMPI_CONV_CHECK(type, in, out, assign)
 

Typedefs

typedef struct tclmpi_comm tclmpi_comm_t
 
typedef struct tclmpi_dblint tclmpi_dblint_t
 
typedef struct tclmpi_intint tclmpi_intint_t
 
typedef struct tclmpi_req tclmpi_req_t
 

Functions

static const char * mpi2tcl_comm (MPI_Comm comm)
 
static MPI_Comm tcl2mpi_comm (const char *label)
 
static const char * tclmpi_add_comm (MPI_Comm comm)
 
static int tclmpi_del_comm (const char *label)
 
static int tclmpi_get_op (const char *opstr, MPI_Op *op)
 
static const char * tclmpi_add_req ()
 
static tclmpi_req_ttclmpi_find_req (const char *label)
 
static int tclmpi_del_req (tclmpi_req_t *req)
 
static int tclmpi_datatype (const char *type)
 
static int tclmpi_errcheck (Tcl_Interp *interp, int ierr, Tcl_Obj *obj)
 
static int tclmpi_commcheck (Tcl_Interp *interp, MPI_Comm comm, Tcl_Obj *obj0, Tcl_Obj *obj1)
 
static int tclmpi_typecheck (Tcl_Interp *interp, int type, Tcl_Obj *obj0, Tcl_Obj *obj1)
 
int TclMPI_Initialized (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Finalized (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Init (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Conv_set (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Conv_get (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Finalize (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Abort (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Comm_size (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Comm_rank (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Comm_split (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Comm_free (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Barrier (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Bcast (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Scatter (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Allgather (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Gather (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Allreduce (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Reduce (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Send (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Isend (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Recv (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Irecv (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Probe (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Iprobe (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
int TclMPI_Wait (ClientData nodata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
 
static void tclmpi_init_api (Tcl_Interp *interp)
 
int _tclmpi_Init (Tcl_Interp *interp)
 

Variables

static tclmpi_comm_tfirst_comm = NULL
 
static tclmpi_comm_tlast_comm = NULL
 
static int tclmpi_comm_cntr = 0
 
static MPI_Comm MPI_COMM_INVALID
 
static tclmpi_req_tfirst_req = NULL
 
static int tclmpi_req_cntr = 0
 
static int tclmpi_conv_handler = TCLMPI_ERROR
 
static char tclmpi_errmsg [MPI_MAX_ERROR_STRING]
 

Detailed Description

This file contains the C code with the Tcl MPI wrappers.

Function Documentation

◆ _tclmpi_Init()

int _tclmpi_Init ( Tcl_Interp *  interp)

register the package as a plugin with the Tcl interpreter

Parameters
interpcurrent Tcl interpreter
Returns
TCL_OK or TCL_ERROR

This function sets up the plugin to register the various MPI wrappers in this package with the Tcl interpreter.

Depending on the USE_TCL_STUBS define being active or not, this is done using the native dynamic loader interface or the Tcl stubs interface, which would allow to load the plugin into static executables and plugins from different Tcl versions.

In addition the linked list for translating MPI communicators is initialized for the predefined communicators tclmpi::comm_world, tclmpi::comm_self, and tclmpi::comm_null and its corresponding MPI counterparts.

◆ tclmpi_init_api()

static void tclmpi_init_api ( Tcl_Interp *  interp)
static

initialize TclMPI extensions and do one time init

Parameters
interppointer to current Tcl interpreter

This hooks up the commands provided by TclMPI into the provided interpreter and also initializes the predefined communicators tclmpi::comm_world, tclmpi::comm_self, and tclmpi::comm_null and its corresponding MPI counterparts.