FORM 4.3
|
Go to the source code of this file.
Data Structures | |
struct | NoDe |
struct | dollar_buf |
struct | bufIPstruct |
Macros | |
#define | PRINTFBUF(TEXT, TERM, SIZE) {} |
#define | SWAP(x, y) |
#define | PACK_LONG(p, n) |
#define | UNPACK_LONG(p, n) |
#define | CHECK(condition) _CHECK(condition, __FILE__, __LINE__) |
#define | _CHECK(condition, file, line) __CHECK(condition, file, line) |
#define | __CHECK(condition, file, line) |
#define | DBGOUT(lv1, lv2, a) do { if ( lv1 >= lv2 ) { printf a; fflush(stdout); } } while (0) |
#define | DBGOUT_NINTERMS(lv, a) |
#define | PF_STATS_SIZE 5 |
#define | PF_SNDFILEBUFSIZE 4096 |
#define | recvBuffer logBuffer /* (master) The buffer for receiving messages. */ |
Typedefs | |
typedef struct NoDe | NODE |
typedef struct bufIPstruct | bufIPstruct_t |
Functions | |
LONG | PF_RealTime (int) |
int | PF_LibInit (int *, char ***) |
int | PF_LibTerminate (int) |
int | PF_Probe (int *) |
int | PF_RecvWbuf (WORD *, LONG *, int *) |
int | PF_IRecvRbuf (PF_BUFFER *, int, int) |
int | PF_WaitRbuf (PF_BUFFER *, int, LONG *) |
int | PF_RawSend (int dest, void *buf, LONG l, int tag) |
LONG | PF_RawRecv (int *src, void *buf, LONG thesize, int *tag) |
int | PF_RawProbe (int *src, int *tag, int *bytesize) |
int | PF_EndSort (void) |
WORD | PF_Deferred (WORD *term, WORD level) |
int | PF_Processor (EXPRESSIONS e, WORD i, WORD LastExpression) |
int | PF_Init (int *argc, char ***argv) |
int | PF_Terminate (int errorcode) |
LONG | PF_GetSlaveTimes (void) |
LONG | PF_BroadcastNumber (LONG x) |
void | PF_BroadcastBuffer (WORD **buffer, LONG *length) |
int | PF_BroadcastString (UBYTE *str) |
int | PF_BroadcastPreDollar (WORD **dbuffer, LONG *newsize, int *numterms) |
int | PF_CollectModifiedDollars (void) |
int | PF_BroadcastModifiedDollars (void) |
int | PF_BroadcastRedefinedPreVars (void) |
int | PF_StoreInsideInfo (void) |
int | PF_RestoreInsideInfo (void) |
int | PF_BroadcastCBuf (int bufnum) |
int | PF_BroadcastExpFlags (void) |
int | PF_BroadcastExpr (EXPRESSIONS e, FILEHANDLE *file) |
int | PF_BroadcastRHS (void) |
int | PF_InParallelProcessor (void) |
int | PF_SendFile (int to, FILE *fd) |
int | PF_RecvFile (int from, FILE *fd) |
void | PF_MLock (void) |
void | PF_MUnlock (void) |
LONG | PF_WriteFileToFile (int handle, UBYTE *buffer, LONG size) |
void | PF_FlushStdOutBuffer (void) |
void | PF_FreeErrorMessageBuffers (void) |
Variables | |
PARALLELVARS | PF |
Message passing library independent functions of parform
This file contains functions needed for the parallel version of form3 these functions need no real link to the message passing libraries, they only need some interface dependent preprocessor definitions (check parallel.h). So there still need two different objectfiles to be compiled for mpi and pvm!
Definition in file parallel.c.
#define PRINTFBUF | ( | TEXT, | |
TERM, | |||
SIZE ) {} |
Definition at line 117 of file parallel.c.
#define SWAP | ( | x, | |
y ) |
Swaps the variables x and y. If sizeof(x) != sizeof(y) then a compilation error will occur. A set of memcpy calls with constant sizes is expected to be inlined by the optimisation.
Definition at line 124 of file parallel.c.
Referenced by PF_Processor().
#define PACK_LONG | ( | p, | |
n ) |
Packs a LONG value n to a WORD buffer p.
Definition at line 135 of file parallel.c.
Referenced by PF_Processor().
#define UNPACK_LONG | ( | p, | |
n ) |
Unpacks a LONG value n from a WORD buffer p.
Definition at line 144 of file parallel.c.
#define CHECK | ( | condition | ) | _CHECK(condition, __FILE__, __LINE__) |
A simple check for unrecoverable errors.
Definition at line 153 of file parallel.c.
#define _CHECK | ( | condition, | |
file, | |||
line ) __CHECK(condition, file, line) |
Definition at line 154 of file parallel.c.
#define __CHECK | ( | condition, | |
file, | |||
line ) |
Definition at line 155 of file parallel.c.
#define DBGOUT | ( | lv1, | |
lv2, | |||
a ) do { if ( lv1 >= lv2 ) { printf a; fflush(stdout); } } while (0) |
Definition at line 166 of file parallel.c.
#define DBGOUT_NINTERMS | ( | lv, | |
a ) |
Definition at line 169 of file parallel.c.
#define PF_STATS_SIZE 5 |
Definition at line 178 of file parallel.c.
#define PF_SNDFILEBUFSIZE 4096 |
Definition at line 4198 of file parallel.c.
#define recvBuffer logBuffer /* (master) The buffer for receiving messages. */ |
Definition at line 4306 of file parallel.c.
LONG PF_RealTime | ( | int | i | ) |
int PF_LibInit | ( | int * | argcp, |
char *** | argvp ) |
int PF_LibTerminate | ( | int | error | ) |
Exits mpi, when there is an error either indicated or happening, returnvalue is 1, else returnvalue is 0.
error | an error code. |
Definition at line 209 of file mpi.c.
Referenced by PF_Terminate().
int PF_Probe | ( | int * | src | ) |
Probes the next incoming message. If src == PF_ANY_SOURCE this operation is blocking, otherwise nonbloking.
[in,out] | src | the source process number. In output, the process number of actual found source. |
int PF_RecvWbuf | ( | WORD * | b, |
LONG * | s, | ||
int * | src ) |
Blocking receive of a WORD
buffer.
[out] | b | the buffer to store the received data. |
[in,out] | s | the size of the buffer. The output value is the actual size of the received data. |
[in,out] | src | the source process number. The output value is the process number of actual source. |
int PF_IRecvRbuf | ( | PF_BUFFER * | r, |
int | bn, | ||
int | from ) |
int PF_WaitRbuf | ( | PF_BUFFER * | r, |
int | bn, | ||
LONG * | size ) |
Waits for the buffer bn to finish a pending nonblocking receive. It returns the received tag and in *size
the number of field received. If the receive is already finished, just return the flag and size, else wait for it to finish, but also check for other pending receives.
r | the PF_BUFFER struct for the pending nonblocking receive. | |
bn | the index of the cyclic buffer. | |
[out] | size | the actual size of received data. |
int PF_RawSend | ( | int | dest, |
void * | buf, | ||
LONG | l, | ||
int | tag ) |
Sends l bytes from buf to dest. Returns 0 on success, or -1.
dest | the destination process number. |
buf | the send buffer. |
l | the size of data in the send buffer in bytes. |
tag | the message tag. |
Definition at line 463 of file mpi.c.
Referenced by PF_MUnlock(), and PF_SendFile().
LONG PF_RawRecv | ( | int * | src, |
void * | buf, | ||
LONG | thesize, | ||
int * | tag ) |
Receives not more than thesize bytes from src, returns the actual number of received bytes, or -1 on failure.
[in,out] | src | the source process number. In output, that of the actual received message. |
[out] | buf | the receive buffer. |
thesize | the size of the receive buffer in bytes. | |
[out] | tag | the message tag of the actual received message. |
Definition at line 484 of file mpi.c.
Referenced by PF_RecvFile().
int PF_RawProbe | ( | int * | src, |
int * | tag, | ||
int * | bytesize ) |
Probes an incoming message.
[in,out] | src | the source process number. In output, that of the actual received message. |
[in,out] | tag | the message tag. In output, that of the actual received message. |
[out] | bytesize | the size of incoming data in bytes. |
int PF_EndSort | ( | void | ) |
Finishes a master sorting with collecting terms from slaves. Called by EndSort().
If this is not the masterprocess, just initialize the sendbuffers and return 0, else PF_EndSort() sends the rest of the terms in the sendbuffer to the next slave and a dummy message to all slaves with tag PF_ENDSORT_MSGTAG. Then it receives the sorted terms, sorts them using a recursive 'tree of losers' (PF_GetLoser()) and writes them to the outputfile.
Definition at line 864 of file parallel.c.
References FlushOut(), and PutOut().
Referenced by EndSort().
WORD PF_Deferred | ( | WORD * | term, |
WORD | level ) |
Replaces Deferred() on the slaves.
term | the term that must be multiplied by the contents of the current bracket. |
level | the compiler level. |
Definition at line 1208 of file parallel.c.
References Generator(), and InsertTerm().
Referenced by Generator().
int PF_Processor | ( | EXPRESSIONS | e, |
WORD | i, | ||
WORD | LastExpression ) |
Replaces parts of Processor() on the masters and slaves. On the master PF_Processor() is responsible for proper distribution of terms from the input file to the slaves. On the slaves it calls Generator() for all the terms that this process gets, but PF_GetTerm() gets terms from the master (not directly from infile).
e | The pointer to the current expression. |
i | The index for the current expression. |
LastExpression | The flag indicating whether it is the last expression. |
Definition at line 1540 of file parallel.c.
References EndSort(), Generator(), LowerSortLevel(), NewSort(), PACK_LONG, PF_ISendSbuf(), PF_LongSinglePack(), PF_LongSingleReceive(), PF_LongSingleSend(), PF_LongSingleUnpack(), PF_PrepareLongSinglePack(), poly_factorize_expression(), poly_unfactorize_expression(), PutOut(), StoreTerm(), SWAP, TimeCPU(), and WriteStats().
Referenced by Processor().
int PF_Init | ( | int * | argc, |
char *** | argv ) |
All the library independent stuff. PF_LibInit() should do all library dependent initializations.
argc | pointer to the number of arguments. |
argv | pointer to the arguments. |
Definition at line 1953 of file parallel.c.
References PF_Broadcast(), PF_LibInit(), PF_Pack(), PF_PreparePack(), PF_RealTime(), and PF_Unpack().
int PF_Terminate | ( | int | errorcode | ) |
Performs the finalization of ParFORM. To be called by Terminate().
error | an error code. |
Definition at line 2047 of file parallel.c.
References PF_LibTerminate().
LONG PF_GetSlaveTimes | ( | void | ) |
Returns the total CPU time of all slaves together. This function must be called on the master and all slaves.
Definition at line 2063 of file parallel.c.
References TimeCPU().
LONG PF_BroadcastNumber | ( | LONG | x | ) |
Broadcasts a LONG value from the master to the all slaves.
x | the number to be broadcast (set on the master). |
Definition at line 2083 of file parallel.c.
References PF_Bcast().
Referenced by DoCheckpoint(), PF_BroadcastBuffer(), and StartVariables().
void PF_BroadcastBuffer | ( | WORD ** | buffer, |
LONG * | length ) |
Broadcasts a buffer from the master to all the slaves.
[in,out] | buffer | on the master, the buffer to be broadcast. On the slaves, the buffer will be allocated if the length is greater than 0. The caller must free it. |
[in,out] | length | on the master, the length of the buffer to be broadcast. On the slaves, it receives the length of transfered buffer. The actual transfer occurs only if the length is greater than 0. |
Definition at line 2110 of file parallel.c.
References PF_Bcast(), and PF_BroadcastNumber().
int PF_BroadcastString | ( | UBYTE * | str | ) |
Broadcasts a string from the master to all slaves.
[in,out] | str | The pointer to a null-terminated string. |
Definition at line 2152 of file parallel.c.
References PF_Broadcast(), PF_PackString(), PF_PreparePack(), and PF_UnpackString().
int PF_BroadcastPreDollar | ( | WORD ** | dbuffer, |
LONG * | newsize, | ||
int * | numterms ) |
Broadcasts dollar variables set as a preprocessor variables. Only the master is able to make an assignment like #$a=g; where g is an expression: only the master has an access to the expression. So, the master broadcasts the result to slaves.
The result is in *dbuffer of the size is *newsize (in number of WORDs), +1 for trailing zero. For slave newsize and numterms are output parameters.
[in,out] | dbuffer | the buffer for a dollar variable. |
[in,out] | newsize | the size of the dollar variable in WORDs. |
[in,out] | numterms | the number of terms in the dollar variable. |
Definition at line 2207 of file parallel.c.
References PF_Broadcast(), PF_Pack(), PF_PreparePack(), and PF_Unpack().
int PF_CollectModifiedDollars | ( | void | ) |
Combines modified dollar variables on the all slaves, and store them into those on the master.
The potentially modified dollar variables are given in PotModdollars, and the number of them is given by NumPotModdollars.
The current module could be executed in parallel only if all potentially modified variables are listed in ModOptdollars, otherwise the module was switched to the sequential mode.
Definition at line 2495 of file parallel.c.
References EndSort(), Generator(), LowerSortLevel(), NewSort(), PF_LongSinglePack(), PF_LongSingleReceive(), PF_LongSingleSend(), PF_LongSingleUnpack(), PF_PrepareLongSinglePack(), VectorInit, VectorPtr, VectorReserve, and VectorSize.
int PF_BroadcastModifiedDollars | ( | void | ) |
Broadcasts modified dollar variables on the master to the all slaves.
The potentially modified dollar variables are given in PotModdollars, and the number of them is given by NumPotModdollars.
The current module could be executed in parallel only if all potentially modified variables are listed in ModOptdollars, otherwise the module was switched to the sequential mode. In either cases, we need to broadcast them.
Definition at line 2774 of file parallel.c.
References PF_LongMultiBroadcast(), and PF_PrepareLongMultiPack().
int PF_BroadcastRedefinedPreVars | ( | void | ) |
Broadcasts preprocessor variables, which were changed by the Redefine statements in the current module, from the master to the all slaves.
The potentially redefined preprocessor variables are given in AC.pfirstnum, and the number of them is given by AC.numpfirstnum. For an actually redefined variable, the corresponding value in AC.inputnumbers is non-negative.
Definition at line 2991 of file parallel.c.
References PF_LongMultiBroadcast(), PF_PrepareLongMultiPack(), PutPreVar(), VectorPtr, and VectorReserve.
int PF_StoreInsideInfo | ( | void | ) |
Definition at line 3081 of file parallel.c.
int PF_RestoreInsideInfo | ( | void | ) |
Definition at line 3107 of file parallel.c.
int PF_BroadcastCBuf | ( | int | bufnum | ) |
Broadcasts a compiler buffer specified by bufnum from the master to the all slaves.
bufnum | The index of the compiler buffer to be broadcast. |
Definition at line 3133 of file parallel.c.
References CbUf::boomlijst, CbUf::Buffer, CbUf::BufferSize, CbUf::CanCommu, CbUf::dimension, finishcbuf(), CbUf::lhs, CbUf::numdum, CbUf::NumTerms, PF_LongMultiBroadcast(), PF_PrepareLongMultiPack(), CbUf::Pointer, CbUf::rhs, and CbUf::Top.
int PF_BroadcastExpFlags | ( | void | ) |
Broadcasts AR.expflags and several properties of each expression, e.g., e->vflags, from the master to all slaves.
Definition at line 3244 of file parallel.c.
References PF_LongMultiBroadcast(), and PF_PrepareLongMultiPack().
int PF_BroadcastExpr | ( | EXPRESSIONS | e, |
FILEHANDLE * | file ) |
Broadcasts an expression from the master to the all slaves.
e | The expression to be broadcast. |
file | The file in which the expression is sitting. |
Definition at line 3536 of file parallel.c.
Referenced by PF_BroadcastRHS().
int PF_BroadcastRHS | ( | void | ) |
Broadcasts expressions appearing in the right-hand side from the master to the all slaves.
Definition at line 3564 of file parallel.c.
References PF_BroadcastExpr().
Referenced by Processor().
int PF_InParallelProcessor | ( | void | ) |
Processes expressions in the InParallel mode, i.e., dividing expressions marked by partodo over the slaves.
Definition at line 3611 of file parallel.c.
Referenced by Processor().
int PF_SendFile | ( | int | to, |
FILE * | fd ) |
Sends a file to the process specified by to.
to | the destination process number. |
fd | the file to be sent. |
Definition at line 4207 of file parallel.c.
References PF_RawSend().
Referenced by DoCheckpoint().
int PF_RecvFile | ( | int | from, |
FILE * | fd ) |
Receives a file from the process specified by from.
from | the source process number. |
fd | the file to save the received data. |
Definition at line 4245 of file parallel.c.
References PF_RawRecv().
Referenced by DoCheckpoint().
void PF_MLock | ( | void | ) |
A function called by MLOCK(ErrorMessageLock) for slaves.
Definition at line 4326 of file parallel.c.
References VectorClear.
void PF_MUnlock | ( | void | ) |
A function called by MUNLOCK(ErrorMessageLock) for slaves.
Definition at line 4342 of file parallel.c.
References PF_RawSend(), VectorEmpty, VectorPtr, and VectorSize.
LONG PF_WriteFileToFile | ( | int | handle, |
UBYTE * | buffer, | ||
LONG | size ) |
Replaces WriteFileToFile() on the master and slaves.
It copies the given buffer into internal buffers if called between MLOCK(ErrorMessageLock) and MUNLOCK(ErrorMessageLock) for slaves and handle is StdOut or LogHandle, otherwise calls WriteFileToFile().
handle | a file handle that specifies the output. |
buffer | a pointer to the source buffer containing the data to be written. |
size | the size of data to be written in bytes. |
Definition at line 4371 of file parallel.c.
References VectorClear, VectorPtr, VectorPushBacks, and VectorSize.
void PF_FlushStdOutBuffer | ( | void | ) |
Explicitly Flushes the buffer for the standard output on the master, which is used if PF_ENABLE_STDOUT_BUFFERING is defined.
Definition at line 4465 of file parallel.c.
References VectorClear, VectorPtr, and VectorSize.
void PF_FreeErrorMessageBuffers | ( | void | ) |
Frees the buffers allocated for the synchronized output.
Currently, not used anywhere, but could be used in PF_Terminate().
Definition at line 4601 of file parallel.c.
References VectorFree.
PARALLELVARS PF |
Definition at line 90 of file parallel.c.