1 #ifndef _GLOBALP_H_
2 #define _GLOBALP_H_
3 
4 #include <stdio.h>
5 
6 #include "gaconfig.h"
7 
8 #ifdef __crayx1
9 #undef CRAY
10 #endif
11 
12 #if HAVE_WINDOWS_H
13 #   include <windows.h>
14 #   define sleep(x) Sleep(1000*(x))
15 #endif
16 
17 #ifdef FALSE
18 #undef FALSE
19 #endif
20 #ifdef TRUE
21 #undef TRUE
22 #endif
23 #define FALSE (logical) 0
24 #define TRUE  (logical) 1
25 
26 #include "macdecls.h"
27 
28 #define GA_OFFSET   1000           /* offset for handle numbering */
29 
30 /* types/tags of messages used internally by GA */
31 #define     GA_TYPE_SYN   GA_MSG_OFFSET + 1
32 #define     GA_TYPE_GSM   GA_MSG_OFFSET + 5
33 #define     GA_TYPE_GOP   GA_MSG_OFFSET + 15
34 #define     GA_TYPE_BRD   GA_MSG_OFFSET + 16
35 
36 /* GA operation ids */
37 #define     GA_OP_GET 1          /* Get                         */
38 #define     GA_OP_END 2          /* Terminate                   */
39 #define     GA_OP_CRE 3          /* Create                      */
40 #define     GA_OP_PUT 4          /* Put                         */
41 #define     GA_OP_ACC 5          /* Accumulate                  */
42 #define     GA_OP_DES 6          /* Destroy                     */
43 #define     GA_OP_DUP 7          /* Duplicate                   */
44 #define     GA_OP_ZER 8          /* Zero                        */
45 #define     GA_OP_DDT 9          /* dot product                 */
46 #define     GA_OP_SCT 10         /* scatter                     */
47 #define     GA_OP_GAT 11         /* gather                      */
48 #define     GA_OP_RDI 15         /* Integer read and increment  */
49 #define     GA_OP_ACK 16         /* acknowledgment              */
50 #define     GA_OP_LCK 17         /* acquire lock                */
51 #define     GA_OP_UNL 18         /* release lock                */
52 
53 
54 #ifdef ENABLE_TRACE
55   static Integer     op_code;
56 #endif
57 
58 
59 #define GA_MAX(a,b) (((a) >= (b)) ? (a) : (b))
60 #define GA_MIN(a,b) (((a) <= (b)) ? (a) : (b))
61 #define GA_ABS(a)   (((a) >= 0) ? (a) : (-(a)))
62 
63 typedef struct ga_typeinfo_t {
64   int active;
65   size_t size;
66 } ga_typeinfo_t;
67 
68 extern ga_typeinfo_t ga_types[];
69 
70 #define GA_TYPES_MAX 256
71 #define GA_TYPES_RESERVED 17 /**Should match num lines initialized in ga_types struct*/
72 
73 #define GAtypebuiltinM(_type) ((_type)>=MT_BASE && (_type)<(MT_BASE+GA_TYPES_RESERVED))
74 #define GAsizeofM(_type)   ga_types[(_type)-MT_BASE].size
75 #define GAvalidtypeM(_type) ((_type)>=MT_BASE && (_type)<(MT_BASE+GA_TYPES_MAX) && ga_types[(_type)-MT_BASE].active!=0)
76 
77 #define NAME_STACK_LEN 10
78 #define PAGE_SIZE  4096
79 
80 struct ga_stat_t {
81          long   numcre;
82          long   numdes;
83          long   numget;
84          long   numput;
85          long   numacc;
86          long   numsca;
87          long   numgat;
88          long   numrdi;
89          long   numser;
90          long   curmem;
91          long   maxmem;
92          long   numget_procs;
93          long   numput_procs;
94          long   numacc_procs;
95          long   numsca_procs;
96          long   numgat_procs;
97 };
98 
99 struct ga_bytes_t{
100          double acctot;
101          double accloc;
102          double gettot;
103          double getloc;
104          double puttot;
105          double putloc;
106          double rditot;
107          double rdiloc;
108          double gattot;
109          double gatloc;
110          double scatot;
111          double scaloc;
112 };
113 
114 #define STAT_AR_SZ sizeof(ga_stat_t)/sizeof(long)
115 
116 extern long *GAstat_arr;
117 extern struct ga_stat_t GAstat;
118 extern struct ga_bytes_t GAbytes;
119 extern int _ga_sync_begin;
120 extern int _ga_sync_end;
121 extern int *_ga_argc;
122 extern char ***_ga_argv;
123 
124 
125 /* periodic operations */
126 #define PERIODIC_GET 1
127 #define PERIODIC_PUT 2
128 #define PERIODIC_ACC 3
129 
130 #define FLUSH_CACHE
131 #ifdef  CRAY_T3D
132 #       define ALLIGN_SIZE      32
133 #else
134 #       define ALLIGN_SIZE      128
135 #endif
136 
137 #define allign__(n, SIZE) (((n)%SIZE) ? (n)+SIZE - (n)%SIZE: (n))
138 #define allign_size(n) allign__((long)(n), ALLIGN_SIZE)
139 #define allign_page(n) allign__((long)(n), PAGE_SIZE)
140 
141 extern void    ga_free(void *ptr);
142 extern void*   ga_malloc(Integer nelem, int type, char *name);
143 extern void    gai_init_onesided();
144 extern void    gai_finalize_onesided();
145 extern void    gai_print_subscript(char *pre,int ndim, Integer subscript[], char* post);
146 extern Integer GAsizeof(Integer type);
147 extern void    ga_sort_gath(Integer *pn, Integer *i, Integer *j, Integer *base);
148 extern void    ga_sort_permutation(Integer *pn, Integer *index, Integer *base);
149 extern void    ga_sort_scat(Integer *pn, void *v, Integer *i, Integer *j, Integer *base, Integer type);
150 extern void    gai_hsort(Integer *list, int num);
151 extern void    ga_init_nbhandle(Integer *nbhandle);
152 extern int     nga_test_internal(Integer *nbhandle);
153 extern int     nga_wait_internal(Integer *nbhandle);
154 extern void    gai_nb_init();
155 extern int     ga_icheckpoint_init(Integer *gas, int num);
156 extern int     ga_icheckpoint(Integer *gas, int num);
157 extern int     ga_irecover(int rid);
158 extern int     ga_icheckpoint_finalize(int g_a);
159 extern void    ga_checkpoint_arrays(Integer *gas,int num);
160 extern int     ga_recover_arrays(Integer *gas, int num);
161 extern void    set_ga_group_is_for_ft(int val);
162 extern void    ga_set_spare_procs(int *spare);
163 
164 #endif /* _GLOBALP_H_ */
165