Used astyle --style=kr formatted source codes.
[charm.git] / NodeHelperAPI.h
1 #ifndef _NODEHELPERAPI_H
2 #define _NODEHELPERAPI_H
3
4 #include "NodeHelper.decl.h"
5
6 /* "result" is the buffer for reduction result on a single simple-type variable */
7 typedef void (*HelperFn)(int first,int last, void *result, int paramNum, void *param);
8
9 typedef enum REDUCTION_TYPE {
10     NODEHELPER_NONE=0,
11     NODEHELPER_INT_SUM,
12     NODEHELPER_FLOAT_SUM,
13     NODEHELPER_DOUBLE_SUM
14 } REDUCTION_TYPE;
15
16 #define NODEHELPER_USECHARM 1
17 #define NODEHELPER_PTHREAD 2
18
19 class CProxy_FuncNodeHelper;
20 /*
21  * The default mode is intended to be used in SMP mode
22  * The next mode that uses pthread is intended to be used in a restricted mode where
23  * a node just have one charm PE!
24  **/
25 extern CProxy_FuncNodeHelper NodeHelper_Init(int mode=NODEHELPER_USECHARM, int numThreads=0);
26
27 extern void NodeHelper_Exit(CProxy_FuncNodeHelper nodeHelper); /* used to free resources if using pthread mode. It should be called on just one PE, say PE 0 */
28
29 extern void NodeHelper_Parallelize(
30     CProxy_FuncNodeHelper nodeHelper, /* the proxy to the FuncNodeHelper instance */
31     HelperFn func, /* the function that finishes a partial work on another thread */
32     int paramNum, void * param, /* the input parameters for the above func */
33     int numChunks, /* number of chunks to be partitioned */
34     int lowerRange, int upperRange, /* the loop-like parallelization happens in [lowerRange, upperRange] */
35     int sync=1, /* whether the flow will continue unless all chunks have finished */
36     void *redResult=NULL, REDUCTION_TYPE type=NODEHELPER_NONE /* the reduction result, ONLY SUPPORT SINGLE VAR of TYPE int/float/double */
37 );
38 extern void NodeHelper_Parallelize(
39     HelperFn func, /* the function that finishes a partial work on another thread */
40     int paramNum, void * param, /* the input parameters for the above func */
41     int numChunks, /* number of chunks to be partitioned */
42     int lowerRange, int upperRange, /* the loop-like parallelization happens in [lowerRange, upperRange] */
43     int sync=1, /* whether the flow will continue unless all chunks have finished */
44     void *redResult=NULL, REDUCTION_TYPE type=NODEHELPER_NONE /* the reduction result, ONLY SUPPORT SINGLE VAR of TYPE int/float/double */
45 );
46 #endif