MulticoreBSP for C  Version 2.0.4
Macros | Typedefs | Functions
bsp.h File Reference
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
Include dependency graph for bsp.h:
This graph shows which files directly or indirectly include this file:

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...
 

Detailed Description

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:

Macro Definition Documentation

#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 Documentation

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.

Function Documentation

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 
)