MulticoreBSP for C
Version 2.0.4
|
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
Go to the source code of this file.
Macros | |
#define | MCBSP_ENABLE_HP_DIRECTIVES |
#define | MCBSP_MODE 1 |
Defines the run-time mode of MulticoreBSP for C. More... | |
#define | MCBSP_FUNCTION_PREFIX(n) mcbsp_perf_##n |
#define | mcbsp_begin mcbsp_perf_begin |
#define | mcbsp_end mcbsp_perf_end |
#define | mcbsp_init mcbsp_perf_init |
#define | mcbsp_abort mcbsp_perf_abort |
#define | mcbsp_vabort mcbsp_perf_vabort |
#define | mcbsp_nprocs mcbsp_perf_nprocs |
#define | mcbsp_pid mcbsp_perf_pid |
#define | mcbsp_time mcbsp_perf_time |
#define | mcbsp_sync mcbsp_perf_sync |
#define | mcbsp_push_reg mcbsp_perf_push_reg |
#define | mcbsp_pop_reg mcbsp_perf_pop_reg |
#define | mcbsp_put mcbsp_perf_put |
#define | mcbsp_get mcbsp_perf_get |
#define | mcbsp_send mcbsp_perf_send |
#define | mcbsp_qsize mcbsp_perf_qsize |
#define | mcbsp_get_tag mcbsp_perf_get_tag |
#define | mcbsp_move mcbsp_perf_move |
#define | mcbsp_hpmove mcbsp_perf_hpmove |
#define | mcbsp_hpput mcbsp_perf_hpput |
#define | mcbsp_hpget mcbsp_perf_hpget |
#define | mcbsp_set_tagsize mcbsp_perf_set_tagsize |
#define | mcbsp_hpsend mcbsp_perf_hpsend |
#define | mcbsp_direct_get mcbsp_perf_direct_get |
Typedefs | |
typedef unsigned int | bsp_pid_t |
Data type used for thread IDs. More... | |
typedef unsigned int | bsp_nprocs_t |
Data type used to count the number of BSMP messages waiting in queue. More... | |
typedef size_t | bsp_size_t |
Data type used to refer to memory region sizes. More... | |
Functions | |
void MCBSP_FUNCTION_PREFIX() | begin (const bsp_pid_t P) |
void MCBSP_FUNCTION_PREFIX() | end (void) |
void MCBSP_FUNCTION_PREFIX() | init (void(*spmd)(void), int argc, char **argv) |
void MCBSP_FUNCTION_PREFIX() | abort (const char *const error_message,...) |
void MCBSP_FUNCTION_PREFIX() | vabort (const char *const error_message, va_list args) |
bsp_pid_t MCBSP_FUNCTION_PREFIX() | nprocs (void) |
bsp_pid_t MCBSP_FUNCTION_PREFIX() | pid (void) |
double MCBSP_FUNCTION_PREFIX() | time (void) |
void MCBSP_FUNCTION_PREFIX() | sync (void) |
void MCBSP_FUNCTION_PREFIX() | push_reg (void *const address, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | pop_reg (void *const address) |
void MCBSP_FUNCTION_PREFIX() | put (const bsp_pid_t pid, const void *const source, const void *const destination, const bsp_size_t offset, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | get (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | direct_get (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | set_tagsize (bsp_size_t *const size) |
void MCBSP_FUNCTION_PREFIX() | send (const bsp_pid_t pid, const void *const tag, const void *const payload, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | qsize (bsp_nprocs_t *const packets, bsp_size_t *const accumulated_size) |
void MCBSP_FUNCTION_PREFIX() | get_tag (bsp_size_t *const status, void *const tag) |
void MCBSP_FUNCTION_PREFIX() | move (void *const payload, const bsp_size_t max_copy_size) |
bsp_size_t MCBSP_FUNCTION_PREFIX() | hpmove (void **const p_tag, void **const p_payload) |
void MCBSP_FUNCTION_PREFIX() | hpput (const bsp_pid_t pid, const void *const source, const void *const destination, const bsp_size_t offset, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | hpget (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
void MCBSP_FUNCTION_PREFIX() | hpsend (const bsp_pid_t pid, const void *const tag, const void *const payload, const bsp_size_t size) |
static void | bsp_begin (const bsp_pid_t P) |
The first statement in an SPMD program. More... | |
static void | bsp_end (void) |
Terminates an SPMD program. More... | |
static void | bsp_init (void(*spmd)(void), int argc, char **argv) |
Prepares for parallel SPMD execution of a given program. More... | |
static void | bsp_abort (const char *const error_message,...) |
Aborts an SPMD program. More... | |
static void | bsp_vabort (const char *const error_message, va_list args) |
Alternative bsp_abort call. More... | |
static bsp_pid_t | bsp_nprocs (void) |
Returns the number of available processors or processes, depending on whether we are inside or outside an BSP SPMD section. More... | |
static bsp_pid_t | bsp_pid (void) |
Returns a unique BSP process identifier. More... | |
static double | bsp_time (void) |
Indicates the elapsed time in this SPMD run. More... | |
static void | bsp_sync (void) |
Signals the end of a superstep and starts global synchronisation. More... | |
static void | bsp_push_reg (void *const address, const bsp_size_t size) |
Registers a memory area for communication. More... | |
static void | bsp_pop_reg (void *const address) |
De-registers a pushed registration. More... | |
static void | bsp_put (const bsp_pid_t pid, const void *const source, const void *const destination, const bsp_size_t offset, const bsp_size_t size) |
Put data in a remote memory location. More... | |
static void | bsp_get (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
Get data from a remote memory location. More... | |
static void | bsp_direct_get (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
Get data from a remote memory location. More... | |
static void | bsp_set_tagsize (bsp_size_t *const size) |
Sets the tag size of inter-thread messages. More... | |
static void | bsp_send (const bsp_pid_t pid, const void *const tag, const void *const payload, const bsp_size_t size) |
Sends a message to a remote thread. More... | |
static void | bsp_hpsend (const bsp_pid_t pid, const void *const tag, const void *const payload, const bsp_size_t size) |
This is a non-buffering and non-blocking send request. More... | |
static void | bsp_qsize (bsp_nprocs_t *const packets, bsp_size_t *const accumulated_size) |
Queries the size of the incoming BSMP queue. More... | |
static void | bsp_get_tag (bsp_size_t *const status, void *const tag) |
Retrieves the tag of the first message in the queue of incoming messages. More... | |
static void | bsp_move (void *const payload, const bsp_size_t max_copy_size) |
Retrieves the payload from the first message in the queue of incoming messages, and removes that message. More... | |
static bsp_size_t | bsp_hpmove (void **const p_tag, void **const p_payload) |
Unbuffered retrieval of the payload of the first message in the incoming message queue. More... | |
static void | bsp_hpput (const bsp_pid_t pid, const void *const source, const void *const destination, const bsp_size_t offset, const bsp_size_t size) |
Put data in a remote memory location. More... | |
static void | bsp_hpget (const bsp_pid_t pid, const void *const source, const bsp_size_t offset, void *const destination, const bsp_size_t size) |
Get data from a remote memory location. More... | |
Defines the MulticoreBSP primitives and includes the necessary standard headers. The linkage is defined by the various macros that can be set before including this header:
Enabled by default are MCBSP_ENABLE_HP_DIRECTIVES and MCBSP_ALLOW_MULTIPLE_REGS. Note that:
#define mcbsp_abort mcbsp_perf_abort |
#define mcbsp_begin mcbsp_perf_begin |
Referenced by bsp_begin().
#define mcbsp_direct_get mcbsp_perf_direct_get |
Referenced by bsp_direct_get().
#define MCBSP_ENABLE_HP_DIRECTIVES |
#define mcbsp_end mcbsp_perf_end |
Referenced by bsp_end().
#define MCBSP_FUNCTION_PREFIX | ( | n | ) | mcbsp_perf_##n |
#define mcbsp_get mcbsp_perf_get |
Referenced by bsp_get().
#define mcbsp_get_tag mcbsp_perf_get_tag |
Referenced by bsp_get_tag().
#define mcbsp_hpget mcbsp_perf_hpget |
Referenced by bsp_hpget().
#define mcbsp_hpmove mcbsp_perf_hpmove |
Referenced by bsp_hpmove().
#define mcbsp_hpput mcbsp_perf_hpput |
Referenced by bsp_hpput().
#define mcbsp_hpsend mcbsp_perf_hpsend |
Referenced by bsp_hpsend().
#define mcbsp_init mcbsp_perf_init |
Referenced by bsp_init().
#define MCBSP_MODE 1 |
Defines the run-time mode of MulticoreBSP for C.
Not compiling in the default performance mode (MCBSP_MODE == 1) will print warning messages at compile time. The debug mode (2) makes MulticoreBSP perform more internal checking and more user argument sanity checking. It will also make MulticoreBSP use POSIX Threads barriers for synchronisation (instead of the default spinlocks) so to induce better behaviour on debuggers such as Valgrind, which rely on a serialised execution of SPMD programs. The profile mode collects various statistics at run-time and reports them when the SPMD program collectively enters the bsp_end.
1: performance mode (default). 2: debug mode. 3: profile mode.
#define mcbsp_move mcbsp_perf_move |
Referenced by bsp_move().
#define mcbsp_nprocs mcbsp_perf_nprocs |
Referenced by bsp_nprocs().
#define mcbsp_pid mcbsp_perf_pid |
Referenced by bsp_pid().
#define mcbsp_pop_reg mcbsp_perf_pop_reg |
Referenced by bsp_pop_reg().
#define mcbsp_push_reg mcbsp_perf_push_reg |
Referenced by bsp_push_reg().
#define mcbsp_put mcbsp_perf_put |
Referenced by bsp_put().
#define mcbsp_qsize mcbsp_perf_qsize |
Referenced by bsp_qsize().
#define mcbsp_send mcbsp_perf_send |
Referenced by bsp_send().
#define mcbsp_set_tagsize mcbsp_perf_set_tagsize |
Referenced by bsp_set_tagsize().
#define mcbsp_sync mcbsp_perf_sync |
Referenced by bsp_sync().
#define mcbsp_time mcbsp_perf_time |
Referenced by bsp_time().
#define mcbsp_vabort mcbsp_perf_vabort |
Referenced by bsp_abort(), and bsp_vabort().
typedef unsigned int bsp_nprocs_t |
Data type used to count the number of BSMP messages waiting in queue.
typedef unsigned int bsp_pid_t |
Data type used for thread IDs.
typedef size_t bsp_size_t |
Data type used to refer to memory region sizes.
void MCBSP_FUNCTION_PREFIX() abort | ( | const char *const | error_message, |
... | |||
) |
void MCBSP_FUNCTION_PREFIX() begin | ( | const bsp_pid_t | P | ) |
void MCBSP_FUNCTION_PREFIX() direct_get | ( | const bsp_pid_t | pid, |
const void *const | source, | ||
const bsp_size_t | offset, | ||
void *const | destination, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() end | ( | void | ) |
void MCBSP_FUNCTION_PREFIX() get | ( | const bsp_pid_t | pid, |
const void *const | source, | ||
const bsp_size_t | offset, | ||
void *const | destination, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() get_tag | ( | bsp_size_t *const | status, |
void *const | tag | ||
) |
void MCBSP_FUNCTION_PREFIX() hpget | ( | const bsp_pid_t | pid, |
const void *const | source, | ||
const bsp_size_t | offset, | ||
void *const | destination, | ||
const bsp_size_t | size | ||
) |
bsp_size_t MCBSP_FUNCTION_PREFIX() hpmove | ( | void **const | p_tag, |
void **const | p_payload | ||
) |
void MCBSP_FUNCTION_PREFIX() hpput | ( | const bsp_pid_t | pid, |
const void *const | source, | ||
const void *const | destination, | ||
const bsp_size_t | offset, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() hpsend | ( | const bsp_pid_t | pid, |
const void *const | tag, | ||
const void *const | payload, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() init | ( | void(*)(void) | spmd, |
int | argc, | ||
char ** | argv | ||
) |
void MCBSP_FUNCTION_PREFIX() move | ( | void *const | payload, |
const bsp_size_t | max_copy_size | ||
) |
bsp_pid_t MCBSP_FUNCTION_PREFIX() nprocs | ( | void | ) |
bsp_pid_t MCBSP_FUNCTION_PREFIX() pid | ( | void | ) |
void MCBSP_FUNCTION_PREFIX() pop_reg | ( | void *const | address | ) |
void MCBSP_FUNCTION_PREFIX() push_reg | ( | void *const | address, |
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() put | ( | const bsp_pid_t | pid, |
const void *const | source, | ||
const void *const | destination, | ||
const bsp_size_t | offset, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() qsize | ( | bsp_nprocs_t *const | packets, |
bsp_size_t *const | accumulated_size | ||
) |
void MCBSP_FUNCTION_PREFIX() send | ( | const bsp_pid_t | pid, |
const void *const | tag, | ||
const void *const | payload, | ||
const bsp_size_t | size | ||
) |
void MCBSP_FUNCTION_PREFIX() set_tagsize | ( | bsp_size_t *const | size | ) |
void MCBSP_FUNCTION_PREFIX() sync | ( | void | ) |
double MCBSP_FUNCTION_PREFIX() time | ( | void | ) |
void MCBSP_FUNCTION_PREFIX() vabort | ( | const char *const | error_message, |
va_list | args | ||
) |