Cleaned the library to remove redundant function argument and interface
[charm.git] / src / libs / ck-libs / ckloop / CkLoopAPI.h
1 #ifndef _CKLOOPAPI_H
2 #define _CKLOOPAPI_H
3
4 #include "CkLoop.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     CKLOOP_NONE=0,
11     CKLOOP_INT_SUM,
12     CKLOOP_FLOAT_SUM,
13     CKLOOP_DOUBLE_SUM
14 } REDUCTION_TYPE;
15
16 class CProxy_FuncCkLoop;
17 /*
18  * "numThreads" argument is intended to be used in non-SMP mode to specify
19  * the number of pthreads to be spawned. In SMP mode, this argument is
20  * ignored. This function should be called only on one PE, say PE 0.
21  **/
22 extern CProxy_FuncCkLoop CkLoop_Init(int numThreads=0);
23
24 /* used to free resources if using the library in non-SMP mode. It should be called on just one PE, say PE 0 */
25 extern void CkLoop_Exit(CProxy_FuncCkLoop ckLoop); 
26
27 extern void CkLoop_Parallelize(
28     HelperFn func, /* the function that finishes a partial work on another thread */
29     int paramNum, void * param, /* the input parameters for the above func */
30     int numChunks, /* number of chunks to be partitioned */
31     int lowerRange, int upperRange, /* the loop-like parallelization happens in [lowerRange, upperRange] */
32     int sync=1, /* whether the flow will continue unless all chunks have finished */
33     void *redResult=NULL, REDUCTION_TYPE type=CKLOOP_NONE /* the reduction result, ONLY SUPPORT SINGLE VAR of TYPE int/float/double */
34 );
35 #endif