Added output to explain the mode of using this library.
[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 #define NODEHELPER_PTHREAD 0
10 #define NODEHELPER_DYNAMIC  1
11 #define NODEHELPER_STATIC 2
12
13 typedef enum REDUCTION_TYPE{
14     NODEHELPER_NONE=0,
15     NODEHELPER_INT_SUM,
16     NODEHELPER_FLOAT_SUM,
17     NODEHELPER_DOUBLE_SUM
18 }REDUCTION_TYPE;
19
20 class CProxy_FuncNodeHelper;
21 extern CProxy_FuncNodeHelper NodeHelper_Init(int mode, /* indicates the nodehelper running mode, pthread of non-SMP, dynamic/static of SMP */
22                                             int numThds /* only valid in non-SMP mode, indicating how many pthreads are going to be created*/);
23 extern void NodeHelper_Parallelize(
24                                                 CProxy_FuncNodeHelper nodeHelper, /* the proxy to the FuncNodeHelper instance */
25                                                 HelperFn func, /* the function that finishes a partial work on another thread */
26                         int paramNum, void * param, /* the input parameters for the above func */
27                         int msgPriority, /* the priority of the intra-node msg, and node-level msg */
28                         int numChunks, /* number of chunks to be partitioned */
29                         int lowerRange, int upperRange, /* the loop-like parallelization happens in [lowerRange, upperRange] */                        
30                         void *redResult=NULL, REDUCTION_TYPE type=NODEHELPER_NONE /* the reduction result, ONLY SUPPORT SINGLE VAR of TYPE int/float/double */
31                         );
32 #endif