00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef _ARMCI_H
00013 #define _ARMCI_H
00014
00015 #include "conv-config.h"
00016 #include "tcharmc.h"
00017
00018 #ifdef __cplusplus
00019 extern "C" {
00020 #endif
00021
00022
00023
00024
00025
00026 #define main ARMCI_Main_cpp
00027 int ARMCI_Main_cpp(int argc,char **argv);
00028
00029
00030 #define ARMCI_ACC_INT 1
00031 #define ARMCI_ACC_LNG 2
00032 #define ARMCI_ACC_FLT 3
00033 #define ARMCI_ACC_DBL 4
00034 #define ARMCI_ACC_CPL 5
00035 #define ARMCI_ACC_DCPL 6
00036
00037 #define ARMCI_MAX_STRIDE_LEVEL 8
00038
00039
00040 #define ARMCI_FETCH_AND_ADD 1
00041 #define ARMCI_FETCH_AND_ADD_LONG 2
00042 #define ARMCI_SWAP 3
00043 #define ARMCI_SWAP_LONG 4
00044
00045
00046 #define ARMCI_NUM_DATATYPES 5
00047 #define ARMCI_INT 0
00048 #define ARMCI_LONG 1
00049 #define ARMCI_FLOAT 2
00050 #define ARMCI_DOUBLE 3
00051 #define ARMCI_LONG_LONG 4
00052
00053
00054 #define armci_me TCHARM_Element()
00055 #define armci_master 0
00056 extern int armci_nproc;
00057
00058
00059 typedef struct {
00060 void **src_ptr_array;
00061 void **dst_ptr_array;
00062 int ptr_array_len;
00063 int bytes;
00064 } armci_giov_t;
00065
00066 typedef int armci_hdl_t;
00067 typedef int armci_size_t;
00068 typedef int armci_domain_t;
00069
00070 #define ARMCI_DOMAIN_SMP 0
00071
00072
00073
00074
00075
00076
00077 int ARMCI_Init(void);
00078
00079 int ARMCI_Finalize(void);
00080 void ARMCI_Error(char *msg, int code);
00081 void ARMCI_Cleanup(void);
00082
00083
00084 int ARMCI_Procs(int *procs);
00085
00086 int ARMCI_Myid(int *myid);
00087
00088
00089
00090 int ARMCI_GetV(
00091 armci_giov_t darr[],
00092 int len,
00093 int proc
00094 );
00095
00096 int ARMCI_NbGetV(
00097 armci_giov_t *dsrc_arr,
00098 int arr_len,
00099 int proc,
00100 armci_hdl_t* handle
00101 );
00102
00103 int ARMCI_PutV(
00104 armci_giov_t darr[],
00105 int len,
00106 int proc
00107 );
00108
00109 int ARMCI_NbPutV(
00110 armci_giov_t *dsrc_arr,
00111 int arr_len,
00112 int proc,
00113 armci_hdl_t* handle
00114 );
00115
00116 int ARMCI_AccV(
00117 int op,
00118 void *scale,
00119 armci_giov_t darr[],
00120 int len,
00121 int proc
00122 );
00123
00124 int ARMCI_NbAccV(
00125 int datatype,
00126 void *scale,
00127 armci_giov_t *dsrc_arr,
00128 int arr_len,
00129 int proc,
00130 armci_hdl_t* handle
00131 );
00132
00133
00134
00135
00136 int ARMCI_Put(void *src, void* dst, int bytes, int proc);
00137
00138 int ARMCI_NbPut(void *src, void* dst, int bytes, int proc,
00139 armci_hdl_t *handle);
00140
00141 int ARMCI_Get(void *src, void* dst, int bytes, int proc);
00142
00143 int ARMCI_NbGet(void *src, void* dst, int bytes, int proc,
00144 armci_hdl_t *handle);
00145
00146 int ARMCI_Acc(int datatype, void *scale, void* src, void* dst, int bytes, int proc);
00147 int ARMCI_NbAcc(int datatype, void *scale, void* src, void* dst, int bytes, int proc,
00148 armci_hdl_t* handle);
00149
00150
00151
00152
00153 int ARMCI_PutS(
00154 void *src_ptr,
00155 int src_stride_arr[],
00156 void* dst_ptr,
00157 int dst_stride_arr[],
00158 int count[],
00159
00160 int stride_levels,
00161 int proc
00162 );
00163
00164
00165 int ARMCI_NbPutS(
00166 void *src_ptr,
00167 int src_stride_arr[],
00168 void* dst_ptr,
00169 int dst_stride_arr[],
00170 int count[],
00171
00172 int stride_levels,
00173 int proc,
00174 armci_hdl_t *handle
00175
00176
00177
00178
00179
00180 );
00181
00182
00183 int ARMCI_GetS(
00184 void *src_ptr,
00185 int src_stride_arr[],
00186 void* dst_ptr,
00187 int dst_stride_arr[],
00188 int count[],
00189
00190 int stride_levels,
00191 int proc
00192 );
00193
00194
00195 int ARMCI_NbGetS(
00196 void *src_ptr,
00197 int src_stride_ar[],
00198 void* dst_ptr,
00199 int dst_stride_ar[],
00200 int count[],
00201 int stride_levels,
00202 int proc,
00203 armci_hdl_t* handle
00204 );
00205
00206 int ARMCI_AccS(
00207 int optype,
00208 void *scale,
00209 void *src_ptr,
00210 int src_stride_arr[],
00211 void* dst_ptr,
00212 int dst_stride_arr[],
00213 int count[],
00214
00215 int stride_levels,
00216 int proc
00217 );
00218
00219 int ARMCI_NbAccS(
00220 int datatype,
00221 void *scale,
00222 void* src_ptr,
00223 int src_stride_ar[],
00224 void* dst_ptr,
00225 int dst_stride_ar[],
00226 int count[],
00227 int stride_levels,
00228 int proc,
00229 armci_hdl_t* handle
00230 );
00231
00232
00233
00234 int ARMCI_PutValueLong(long src, void* dst, int proc);
00235 int ARMCI_PutValueInt(int src, void* dst, int proc);
00236 int ARMCI_PutValueFloat(float src, void* dst, int proc);
00237 int ARMCI_PutValueDouble(double src, void* dst, int proc);
00238 int ARMCI_NbPutValueLong(long src, void* dst, int proc, armci_hdl_t* handle);
00239 int ARMCI_NbPutValueInt(int src, void* dst, int proc, armci_hdl_t* handle);
00240 int ARMCI_NbPutValueFloat(float src, void* dst, int proc, armci_hdl_t* handle);
00241 int ARMCI_NbPutValueDouble(double src, void* dst, int proc, armci_hdl_t* handle);
00242 long ARMCI_GetValueLong(void *src, int proc);
00243 int ARMCI_GetValueInt(void *src, int proc);
00244 float ARMCI_GetValueFloat(void *src, int proc);
00245 double ARMCI_GetValueDouble(void *src, int proc);
00246 long ARMCI_NbGetValueLong(void *src, int proc, armci_hdl_t* handle);
00247 int ARMCI_NbGetValueInt(void *src, int proc, armci_hdl_t* handle);
00248 float ARMCI_NbGetValueFloat(void *src, int proc, armci_hdl_t* handle);
00249 double ARMCI_NbGetValueDouble(void *src, int proc, armci_hdl_t* handle);
00250
00251
00252
00253
00254 int ARMCI_Wait(armci_hdl_t *handle);
00255
00256 int ARMCI_WaitProc(int proc);
00257
00258 int ARMCI_WaitAll();
00259
00260 int ARMCI_Test(armci_hdl_t *handle);
00261
00262 int ARMCI_Barrier();
00263
00264
00265
00266
00267 int ARMCI_Fence(int proc);
00268
00269 int ARMCI_AllFence(void);
00270
00271
00272
00273
00274 int ARMCI_Malloc(void* ptr_arr[], int bytes);
00275
00276 int ARMCI_Free(void *ptr);
00277
00278 void *ARMCI_Malloc_local(int bytes);
00279
00280 int ARMCI_Free_local(void *ptr);
00281
00282
00283
00284 void ARMCI_SET_AGGREGATE_HANDLE (armci_hdl_t* handle);
00285 void ARMCI_UNSET_AGGREGATE_HANDLE (armci_hdl_t* handle);
00286
00287
00288
00289 int ARMCI_Rmw(int op, int *ploc, int *prem, int extra, int proc);
00290 int ARMCI_Create_mutexes(int num);
00291 int ARMCI_Destroy_mutexes(void);
00292 void ARMCI_Lock(int mutex, int proc);
00293 void ARMCI_Unlock(int mutex, int proc);
00294
00295
00296
00297
00298
00299 int armci_notify(int proc);
00300
00301 int armci_notify_wait(int proc, int *pval);
00302
00303
00304
00305 void ARMCI_Migrate(void);
00306 void ARMCI_Async_Migrate(void);
00307 void ARMCI_Checkpoint(char* dirname);
00308 void ARMCI_MemCheckpoint(void);
00309
00310
00311
00312 void armci_msg_brdcst(void *buffer, int len, int root);
00313 void armci_msg_bcast(void *buffer, int len, int root);
00314 void armci_msg_gop2(void *x, int n, int type, char *op);
00315 void armci_msg_igop(int *x, int n, char *op);
00316 void armci_msg_lgop(CMK_TYPEDEF_INT8 *x, int n, char *op);
00317 void armci_msg_fgop(float *x, int n, char *op);
00318 void armci_msg_dgop(double *x, int n, char *op);
00319 void armci_msg_barrier(void);
00320 void armci_msg_reduce(void *x, int n, char *op, int type);
00321
00322
00323
00324 int armci_domain_nprocs(armci_domain_t domain, int id);
00325 int armci_domain_count(armci_domain_t domain);
00326 int armci_domain_id(armci_domain_t domain, int glob_proc_id);
00327 int armci_domain_glob_proc_id(armci_domain_t domain, int id, int loc_proc_id);
00328 int armci_domain_my_id(armci_domain_t domain);
00329
00330 #ifdef __cplusplus
00331 }
00332 #endif
00333
00334 #define ARMCI_INIT_HANDLE(hdl)
00335
00336 #endif // _ARMCI_H