Drastic simplification of TCharm's startup sequence:
[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 void TCHARM_Call_fallback_setup(void);
20
21 /**** Routines you can call from UserNodeSetup: ****/
22
23 /*Register readonly global variables-- these will be broadcast
24 after init and available in driver.*/
25 typedef void (*TCpupReadonlyGlobal)(pup_er p);
26 void TCHARM_Readonly_globals(TCpupReadonlyGlobal fn);
27
28 /**** Routines you can call from UserSetup: ****/
29
30 /*Set the size of the thread stack*/
31 void TCHARM_Set_stack_size(int newStackSize);
32
33 /*Exit the program when these threads are finished. */
34 void TCHARM_Set_exit(void);
35
36 /*Create a new array of threads, which will be bound to by subsequent libraries*/
37 typedef void (*TCHARM_Thread_start_fn)(void);
38 void TCHARM_Create(int nThreads,TCHARM_Thread_start_fn threadFn);
39
40 /*As above, but pass along (arbitrary) data to thread*/
41 typedef void (*TCHARM_Thread_data_start_fn)(void *threadData);
42 void TCHARM_Create_data(int nThreads,TCHARM_Thread_data_start_fn threadFn,
43                   void *threadData,int threadDataLen);
44
45 /*Get the number of chunks we expect based on the command line*/
46 int TCHARM_Get_num_chunks(void);
47
48
49 /**** Routines you can call from the thread (driver) ****/
50 int TCHARM_Element(void);
51 int TCHARM_Num_elements(void);
52 void TCHARM_Barrier(void);
53 void TCHARM_Migrate(void);
54 void TCHARM_Migrate_to(int destPE);
55 void TCHARM_Done(void);
56 void TCHARM_Yield(void);
57
58 /* Set/get thread-private ("thread global") data. */
59 typedef void (*TCHARM_Pup_fn)(pup_er p,void *data);
60 int TCHARM_Register(void *data,TCHARM_Pup_fn pfn);
61 void *TCHARM_Get_userdata(int id);
62
63 /* Alternate API for Set/get thread-private ("thread global") data. */
64 typedef void (*TCHARM_Pup_global_fn)(pup_er p);
65 void TCHARM_Set_global(int globalID,void *new_value,TCHARM_Pup_global_fn pup_or_NULL);
66 void *TCHARM_Get_global(int globalID);
67
68
69 /*Get the local wall clock.  Unlike CkWalltimer, is
70   monotonically increasing, even with migration and 
71   unsynchronized clocks. */
72 double TCHARM_Wall_timer(void);
73
74
75 /*Standalone startup routine*/
76 void TCHARM_Init(int *argc,char ***argv);
77
78 /*Internal library routine*/
79 void TCHARM_In_user_setup(void);
80
81 #ifdef __cplusplus
82 };
83 #endif
84 #endif /*def(thisHeader)*/
85