Clean up the codes so that only the best implementation is kept. The old
[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 class CProxy_FuncNodeHelper;
17 /* currently only thinking of SMP mode */
18 extern CProxy_FuncNodeHelper NodeHelper_Init();
19 extern void NodeHelper_Parallelize(
20                                                 CProxy_FuncNodeHelper nodeHelper, /* the proxy to the FuncNodeHelper instance */
21                                                 HelperFn func, /* the function that finishes a partial work on another thread */
22                         int paramNum, void * param, /* the input parameters for the above func */
23                         int msgPriority, /* the priority of the intra-node msg, and node-level msg */
24                         int numChunks, /* number of chunks to be partitioned */
25                         int lowerRange, int upperRange, /* the loop-like parallelization happens in [lowerRange, upperRange] */                        
26                         void *redResult=NULL, REDUCTION_TYPE type=NODEHELPER_NONE /* the reduction result, ONLY SUPPORT SINGLE VAR of TYPE int/float/double */
27                         );
28 #endif