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