1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
/* ---------------------------------------------------------------- */
#include "Python.h"
#include "mpi.h"
/* Hack for DeinoMPI */
#if defined(DEINO_MPI)
#undef MPICH2
#endif
/* XXX describe */
#if defined(PyMPI_HAVE_CONFIG_H)
#include "config.h"
#elif defined(MPICH2)
#include "config/mpich2.h"
#elif defined(OPEN_MPI)
#include "config/openmpi.h"
#elif defined(DEINO_MPI)
#include "config/deinompi.h"
#elif defined(MPICH_NAME) && MPICH_NAME==1
#include "config/mpich1.h"
#elif defined(LAM_MPI)
#include "config/lammpi.h"
#elif defined(SGI_MPI)
#include "config/sgimpi.h"
#endif
/* XXX describe */
#include "missing.h"
/* XXX describe */
#include "compat/anympi.h"
/* XXX describe */
#if defined(MPICH2)
#include "compat/mpich2.h"
#elif defined(OPEN_MPI)
#include "compat/openmpi.h"
#elif defined(DEINO_MPI)
#include "compat/deinompi.h"
#elif defined(MPICH_NAME) && MPICH_NAME==1
#include "compat/mpich1.h"
#elif defined(LAM_MPI)
#include "compat/lammpi.h"
#elif defined(SGI_MPI)
#include "compat/sgimpi.h"
#endif
/* ---------------------------------------------------------------- */
static int PyMPI_KEYVAL_ATEXIT_MPI = MPI_KEYVAL_INVALID;
/* ---------------------------------------------------------------- */
#if PY_MAJOR_VERSION >= 3
static PyObject * PyBuffer_FromReadWriteMemory(void *p, Py_ssize_t n)
{
Py_buffer info;
if (PyBuffer_FillInfo(&info, NULL, p, n, 0,
PyBUF_ND | PyBUF_STRIDES) < 0)
return NULL;
return PyMemoryView_FromBuffer(&info);
}
#endif
/* ---------------------------------------------------------------- */
#if PY_MAJOR_VERSION >= 3
static PyObject *
PyMPIString_AsStringAndSize(PyObject *ob,
const char **s,
Py_ssize_t *n)
{
PyObject *b = PyUnicode_AsASCIIString(ob);
if (b != NULL &&
PyBytes_AsStringAndSize(b, (char **)s, n) < 0) {
Py_DECREF(b);
b = NULL;
}
return b;
}
#define PyMPIString_FromString PyUnicode_FromString
#define PyMPIString_FromStringAndSize PyUnicode_FromStringAndSize
#else
static PyObject *
PyMPIString_AsStringAndSize(PyObject *ob,
const char **s,
Py_ssize_t *n)
{
if (PyString_AsStringAndSize(ob, (char **)s, n) < 0) return NULL;
Py_INCREF(ob);
return ob;
}
#define PyMPIString_FromString PyString_FromString
#define PyMPIString_FromStringAndSize PyString_FromStringAndSize
#endif
/* ---------------------------------------------------------------- */
#if PY_MAJOR_VERSION >= 3
#define PyMPIBytes_AsString PyBytes_AsString
#define PyMPIBytes_Size PyBytes_Size
#define PyMPIBytes_FromStringAndSize PyBytes_FromStringAndSize
#else
#define PyMPIBytes_AsString PyString_AsString
#define PyMPIBytes_Size PyString_Size
#define PyMPIBytes_FromStringAndSize PyString_FromStringAndSize
#endif
/* ---------------------------------------------------------------- */
/* Really VILE HACK for Python < 2.4.2 !!
Ensure in advance that the GIL was created */
#if PY_VERSION_HEX < 0x02040200 && defined(WITH_THREAD)
#define PyImport_AddModule(module) \
(PyEval_InitThreads(), PyImport_AddModule(module))
#endif
/* Enable the block below if for any
reason you want to disable threads */
#if 0
#if defined(PyImport_AddModule)
#undef PyImport_AddModule
#endif
#define PyGILState_Ensure() (PyGILState_STATE)0)
#define PyGILState_Release(state) (state)=(PyGILState_STATE)0)
#undef Py_BLOCK_THREADS
#define Py_BLOCK_THREADS (_save)=(PyThreadState*)0;
#undef Py_UNBLOCK_THREADS
#define Py_UNBLOCK_THREADS (_save)=(PyThreadState*)0;
#endif
/* ---------------------------------------------------------------- */
|