816f54048383fb91a2cd687ba0ccfccc20d2b985
[charm.git] / src / libs / ck-libs / tcharm / tcharmc.h
1 /*
2 User-callable C API for TCHARM library
3 Orion Sky Lawlor, olawlor@acm.org, 11/20/2001
4 */
5 #ifndef __TCHARM_H
6 #define __TCHARM_H
7
8 #include "pup_c.h"
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14
15 /*User callbacks: you define these functions*/
16 void TCHARM_User_node_setup(void);
17 void TCHARM_User_setup(void);
18
19
20 /**** Routines you can call from UserNodeSetup: ****/
21
22 /*Register readonly global variables-- these will be broadcast
23 after init and available in driver.*/
24 typedef void (*TCpupReadonlyGlobal)(pup_er p);
25 void TCHARM_Readonly_globals(TCpupReadonlyGlobal fn);
26
27 /**** Routines you can call from UserSetup: ****/
28
29 /*Set the size of the thread stack*/
30 void TCHARM_Set_stack_size(int newStackSize);
31
32 /*Create a new array of threads, which will be bound to by subsequent libraries*/
33 typedef void (*TCHARM_Thread_start_fn)(void);
34 void TCHARM_Create(int nThreads,TCHARM_Thread_start_fn threadFn);
35
36 /*As above, but pass along (arbitrary) data to thread*/
37 typedef void (*TCHARM_Thread_data_start_fn)(void *threadData);
38 void TCHARM_Create_data(int nThreads,TCHARM_Thread_data_start_fn threadFn,
39                   void *threadData,int threadDataLen);
40
41 /*Get the number of chunks we expect based on the command line*/
42 int TCHARM_Get_num_chunks(void);
43
44
45 /**** Routines you can call from the thread (driver) ****/
46 int TCHARM_Element(void);
47 int TCHARM_Num_elements(void);
48 void TCHARM_Barrier(void);
49 void TCHARM_Migrate(void);
50 void TCHARM_Migrate_to(int destPE);
51 void TCHARM_Done(void);
52 void TCHARM_Yield(void);
53
54 /* Set/get thread-private ("thread global") data. */
55 typedef void (*TCHARM_Pup_fn)(pup_er p,void *data);
56 int TCHARM_Register(void *data,TCHARM_Pup_fn pfn);
57 void *TCHARM_Get_userdata(int id);
58
59 /* Alternate API for Set/get thread-private ("thread global") data. */
60 typedef void (*TCHARM_Pup_global_fn)(pup_er p);
61 void TCHARM_Set_global(int globalID,void *new_value,TCHARM_Pup_global_fn pup_or_NULL);
62 void *TCHARM_Get_global(int globalID);
63
64
65 /*Get the local wall clock.  Unlike CkWalltimer, is
66   monotonically increasing, even with migration and 
67   unsynchronized clocks. */
68 double TCHARM_Wall_timer(void);
69
70
71 /*Standalone startup routine*/
72 void TCHARM_Init(int *argc,char ***argv);
73
74 /*Internal library routine*/
75 void TCHARM_In_user_setup(void);
76
77 #ifdef __cplusplus
78 };
79 #endif
80 #endif /*def(thisHeader)*/
81