libxmp/libxmpf in Omni Compiler  1.3.4
xmp_func_decl.h File Reference
#include <stddef.h>
Include dependency graph for xmp_func_decl.h:

Go to the source code of this file.

Functions

void _XMP_init_array_desc (void **array, void *template, int dim, int type, size_t type_size,...)
 
void _XMP_finalize_array_desc (void *array)
 
void _XMP_align_array_NOT_ALIGNED (void *array, int array_index)
 
void _XMP_align_array_DUPLICATION (void *array, int array_index, int template_index, long long align_subscript)
 
void _XMP_align_array_BLOCK (void *array, int array_index, int template_index, long long align_subscript, int *temp0)
 
void _XMP_align_array_CYCLIC (void *array, int array_index, int template_index, long long align_subscript, int *temp0)
 
void _XMP_align_array_BLOCK_CYCLIC (void *array, int array_index, int template_index, long long align_subscript, int *temp0)
 
void _XMP_align_array_GBLOCK (void *array, int array_index, int template_index, long long align_subscript, int *temp0)
 
void _XMP_alloc_array (void **array_addr, void *array_desc,...)
 
void _XMP_dealloc_array (void *array_desc)
 
void _XMP_alloc_array_EXTERN (void **array_addr, void *array_desc,...)
 
void _XMP_init_array_addr (void **array_addr, void *init_addr, void *array_desc,...)
 
void _XMP_init_array_comm (void *array,...)
 
void _XMP_init_array_nodes (void *array)
 
unsigned long long _XMP_get_array_total_elmts (void *array)
 
void _XMP_align_array_noalloc (void *a, int adim, int tdim, long long align_subscript, int *temp0, unsigned long long *acc0)
 
int _XMP_lidx_GBLOCK (void *a, int i_dim, int global_idx)
 
void _XMP_normalize_array_section (int *lower, int *upper, int *stride)
 
void _XMP_pack_array_BASIC (void *buffer, void *src, int array_type, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void _XMP_pack_array_GENERAL (void *buffer, void *src, size_t array_type_size, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void _XMP_unpack_array_BASIC (void *dst, void *buffer, int array_type, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void _XMP_unpack_array_GENERAL (void *dst, void *buffer, size_t array_type_size, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void _XMP_pack_array (void *buffer, void *src, int array_type, size_t array_type_size, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void _XMP_unpack_array (void *dst, void *buffer, int array_type, size_t array_type_size, int array_dim, int *l, int *u, int *s, unsigned long long *d)
 
void xmpc_init_async (int async_id)
 
void xmpc_start_async ()
 
void xmpc_end_async (int async_id)
 
void _XMP_barrier_NODES_ENTIRE (void *nodes)
 
void _XMP_barrier_EXEC (void)
 
void _XMP_bcast_NODES_ENTIRE_OMITTED (void *bcast_nodes, void *addr, int count, size_t datatype_size)
 
void _XMP_bcast_NODES_ENTIRE_GLOBAL (void *bcast_nodes, void *addr, int count, size_t datatype_size, int from_lower, int from_upper, int from_stride)
 
void _XMP_bcast_NODES_ENTIRE_NODES (void *bcast_nodes, void *addr, int count, size_t datatype_size, void *from_nodes,...)
 
void _XMP_bcast_acc_NODES_ENTIRE_OMITTED (void *bcast_nodes, void *addr, int count, size_t datatype_size)
 
void _XMP_bcast_acc_NODES_ENTIRE_GLOBAL (void *bcast_nodes, void *addr, int count, size_t datatype_size, int from_lower, int from_upper, int from_stride)
 
void _XMP_bcast_acc_NODES_ENTIRE_NODES (void *bcast_nodes, void *addr, int count, size_t datatype_size, void *from_nodes,...)
 
void _XMP_gasnet_not_contiguous_put ()
 
void _XMP_gasnet_contiguous_put ()
 
void _XMP_gasnet_not_contiguous_get ()
 
void _XMP_gasnet_contiguous_get ()
 
void _XMP_coarray_malloc_info_1 (const long, const size_t)
 Set 1-dim coarray information. More...
 
void _XMP_coarray_malloc_info_2 (const long, const long, const size_t)
 Set 2-dim coarray information. More...
 
void _XMP_coarray_malloc_info_3 (const long, const long, const long, const size_t)
 Set 3-dim coarray information. More...
 
void _XMP_coarray_malloc_info_4 (const long, const long, const long, const long, const size_t)
 Set 4-dim coarray information. More...
 
void _XMP_coarray_malloc_info_5 (const long, const long, const long, const long, const long, const size_t)
 Set 5-dim coarray information. More...
 
void _XMP_coarray_malloc_info_6 (const long, const long, const long, const long, const long, const long, const size_t)
 Set 6-dim coarray information. More...
 
void _XMP_coarray_malloc_info_7 (const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set 7-dim coarray information. More...
 
void _XMP_coarray_malloc_image_info_1 ()
 Set 1-dim image information. More...
 
void _XMP_coarray_malloc_image_info_2 (const int)
 Set 2-dim image information. More...
 
void _XMP_coarray_malloc_image_info_3 (const int, const int)
 Set 3-dim image information. More...
 
void _XMP_coarray_malloc_image_info_4 (const int, const int, const int)
 Set 4-dim image information. More...
 
void _XMP_coarray_malloc_image_info_5 (const int, const int, const int, const int)
 Set 5-dim image information. More...
 
void _XMP_coarray_malloc_image_info_6 (const int, const int, const int, const int, const int)
 Set 6-dim image information. More...
 
void _XMP_coarray_malloc_image_info_7 (const int, const int, const int, const int, const int, const int)
 
void _XMP_coarray_malloc (void **, void *)
 Create coarray object and allocate coarray. More...
 
void _XMP_coarray_regmem (void **, void *)
 Create coarray object but not allocate coarray. More...
 
void _XMP_coarray_attach (void **, void *, const size_t)
 
void _XMP_coarray_detach (void **)
 
void _XMP_coarray_lastly_deallocate ()
 Deallocate memory space and an object of the last coarray. More...
 
void _XMP_coarray_rdma_coarray_set_1 (const long, const long, const long)
 Set transfer 1-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_2 (const long, const long, const long, const long, const long, const long)
 Set transfer 2-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_3 (const long, const long, const long, const long, const long, const long, const long, const long, const long)
 Set transfer 3-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_4 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long)
 Set transfer 4-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_5 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long)
 Set transfer 5-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_6 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long)
 Set transfer 6-dim coarray information. More...
 
void _XMP_coarray_rdma_coarray_set_7 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long)
 Set transfer 7-dim coarray information. More...
 
void _XMP_coarray_rdma_array_set_1 (const long, const long, const long, const long, const size_t)
 Set transfer 1-dim array information. More...
 
void _XMP_coarray_rdma_array_set_2 (const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 2-dim array information. More...
 
void _XMP_coarray_rdma_array_set_3 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 3-dim array information. More...
 
void _XMP_coarray_rdma_array_set_4 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 4-dim array information. More...
 
void _XMP_coarray_rdma_array_set_5 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 5-dim array information. More...
 
void _XMP_coarray_rdma_array_set_6 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 6-dim array information. More...
 
void _XMP_coarray_rdma_array_set_7 (const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const long, const size_t)
 Set transfer 7-dim array information. More...
 
void _XMP_coarray_rdma_image_set_1 (const int)
 Set 1-dim image information. More...
 
void _XMP_coarray_rdma_image_set_2 (const int, const int)
 Set 2-dim image information. More...
 
void _XMP_coarray_rdma_image_set_3 (const int, const int, const int)
 Set 3-dim image information. More...
 
void _XMP_coarray_rdma_image_set_4 (const int, const int, const int, const int)
 Set 4-dim image information. More...
 
void _XMP_coarray_rdma_image_set_5 (const int, const int, const int, const int, const int)
 Set 5-dim image information. More...
 
void _XMP_coarray_rdma_image_set_6 (const int, const int, const int, const int, const int, const int)
 Set 6-dim image information. More...
 
void _XMP_coarray_rdma_image_set_7 (const int, const int, const int, const int, const int, const int, const int)
 Set 7-dim image information. More...
 
void _XMP_coarray_put (void *, void *, void *)
 
void _XMP_coarray_get (void *, void *, void *)
 
void _XMP_coarray_sync_all ()
 Execute sync_all() More...
 
void _XMP_coarray_sync_memory ()
 Execute sync_memory() More...
 
void xmp_sync_memory (const int *status)
 Execute sync_memory() More...
 
void xmp_sync_all (const int *status)
 Execute sync_all() More...
 
void xmp_sync_image (int image, int *status)
 Execute sync_image() More...
 
void xmp_sync_images (const int num, int *image_set, int *status)
 Execute sync_images() More...
 
void xmp_sync_images_all (int *status)
 Execute sync_images_all() More...
 
void _XMP_coarray_contiguous_put (const int, void *, const void *, const long, const long, const long, const long)
 
void _XMP_coarray_contiguous_get (const int, void *, const void *, const long, const long, const long, const long)
 
int _XMP_coarray_get_total_elmts (void *coarray_desc)
 
void _XMP_coarray_malloc_acc (void **coarray_desc, void *addr)
 
void _XMP_coarray_contiguous_put_acc (const int target_image, const void *dst_desc, const void *src_desc, const size_t dst_offset, const size_t src_offset, const size_t dst_elmts, const size_t src_elmts, const int is_dst_on_acc, const int is_src_on_acc)
 
void _XMP_coarray_contiguous_get_acc (const int target_image, const void *dst_desc, const void *src_desc, const size_t dst_offset, const size_t src_offset, const size_t dst_elmts, const size_t src_elmts, const int is_dst_on_acc, const int is_src_on_acc)
 
void _XMP_coarray_put_acc (void *, void *, void *, const int, const int)
 
void _XMP_coarray_get_acc (void *, void *, void *, const int, const int)
 
void _XMP_reflect_init_acc (void *, void *)
 
void _XMP_reflect_do_acc (void *)
 
void _XMP_reflect_acc__ (void *acc_addr, void *array_desc)
 
void _XMP_set_reflect_acc__ (void *a, int dim, int lwidth, int uwidth, int is_periodic)
 
void xmpc_gmv_g_alloc (void **gmv_desc, void *ap)
 
void xmpc_gmv_g_dim_info (void *gp, int i, int kind, int lb, int len, int st)
 
void xmpc_gmv_l_alloc (void **gmv_desc, void *local_data, int n)
 
void xmpc_gmv_l_dim_info (void *gp, int i, int a_lb, int a_len, int kind, int lb, int len, int st)
 
void xmpc_gmv_dealloc (void *gp)
 
void xmpc_gmv_do (void *gmv_desc_leftp, void *gmv_desc_rightp, int mode)
 
void xmpc_gmv_g_alloc_acc (void **gmv_desc, void *ap, void *dev_addr)
 
void xmpc_gmv_l_alloc_acc (void **gmv_desc, void *local_data, int n)
 
void xmpc_gmv_do_acc (void *gmv_desc_leftp, void *gmv_desc_rightp, int mode)
 
void xmpc_loop_sched (int ser_init, int ser_cond, int ser_step, int *par_init, int *par_cond, int *par_step, void *t_desc, int t_idx, int expand_type, int lwidth, int uwidth, int unbound_flag)
 
int _XMP_modi_ll_i (long long value, int cycle)
 
int _XMP_modi_i_i (int value, int cycle)
 
void _XMP_init_nodes_STATIC_GLOBAL (void **nodes, int dim,...)
 
void _XMP_init_nodes_DYNAMIC_GLOBAL (void **nodes, int dim,...)
 
void _XMP_init_nodes_STATIC_EXEC (void **nodes, int dim,...)
 
void _XMP_init_nodes_DYNAMIC_EXEC (void **nodes, int dim,...)
 
void _XMP_init_nodes_STATIC_NODES_NUMBER (void **nodes, int dim, int ref_lower, int ref_upper, int ref_stride,...)
 
void _XMP_init_nodes_DYNAMIC_NODES_NUMBER (void **nodes, int dim, int ref_lower, int ref_upper, int ref_stride,...)
 
void _XMP_init_nodes_STATIC_NODES_NAMED (void **nodes, int dim, void *ref_nodes,...)
 
void _XMP_init_nodes_DYNAMIC_NODES_NAMED (void **nodes, int dim, void *ref_nodes,...)
 
void _XMP_finalize_nodes (void *nodes)
 
int _XMP_exec_task_NODES_ENTIRE (void **task_desc, void *ref_nodes)
 
int _XMP_exec_task_NODES_ENTIRE_nocomm (void **task_desc, void *ref_nodes)
 
int _XMP_exec_task_NODES_PART (void **task_desc, void *ref_nodes,...)
 
int _XMP_exec_task_NODES_PART_nocomm (void **task_desc, void *ref_nodes,...)
 
void _XMP_exec_task_NODES_FINALIZE (void *task_desc)
 
void _XMP_push_nodes (void *nodes)
 
void _XMP_pop_nodes (void)
 
void _XMP_pop_n_free_nodes (void)
 
void _XMP_pop_n_free_nodes_wo_finalize_comm (void)
 
void * _XMP_get_execution_nodes (void)
 
int _XMP_get_execution_nodes_rank (void)
 
void _XMP_push_comm (void *comm)
 
void _XMP_finalize_comm (void *comm)
 
void _XMP_reduce_NODES_ENTIRE (void *nodes, void *addr, int count, int datatype, int op)
 
void _XMP_reduce_FLMM_NODES_ENTIRE (void *nodes, void *addr, int count, int datatype, int op, int num_locs,...)
 
void _XMP_reduce_CLAUSE (void *data_addr, int count, int datatype, int op)
 
void _XMP_reduce_FLMM_CLAUSE (void *data_addr, int count, int datatype, int op, int num_locs,...)
 
int _XMP_init_reduce_comm_NODES (void *nodes,...)
 
int _XMP_init_reduce_comm_TEMPLATE (void *template,...)
 
void xmp_reduce_loc_init (const int nlocs, const long double value, void *value_addr, const int datatype)
 
void xmp_reduce_loc_set (void *buf, const int length, const size_t s)
 
void xmp_reduce_loc_execute (const int op)
 
void _XMP_reduce_acc_NODES_ENTIRE (void *nodes, void *dev_addr, int count, int datatype, int op)
 
void _XMP_reduce_acc_FLMM_NODES_ENTIRE (void *nodes, void *addr, int count, int datatype, int op, int num_locs,...)
 
void _XMP_reduce_acc_CLAUSE (void *dev_addr, int count, int datatype, int op)
 
void _XMP_reduce_acc_FLMM_CLAUSE (void *data_addr, int count, int datatype, int op, int num_locs,...)
 
void _XMP_set_reflect__ (void *a, int dim, int lwidth, int uwidth, int is_periodic)
 
void _XMP_reflect__ (char *a)
 
void _XMP_wait_async__ (int async_id)
 
void _XMP_reflect_async__ (void *a, int async_id)
 
void _XMP_set_reduce_shadow__ (void *a, int dim, int lwidth, int uwidth, int is_periodic)
 
void _XMP_reduce_shadow__ (void *a)
 
char * _XMP_desc_of (void *p)
 
void _XMP_init_shadow (void *array,...)
 
void _XMP_pack_shadow_NORMAL (void **lo_buffer, void **hi_buffer, void *array_addr, void *array_desc, int array_index)
 
void _XMP_unpack_shadow_NORMAL (void *lo_buffer, void *hi_buffer, void *array_addr, void *array_desc, int array_index)
 
void _XMP_exchange_shadow_NORMAL (void **lo_recv_buffer, void **hi_recv_buffer, void *lo_send_buffer, void *hi_send_buffer, void *array_desc, int array_index)
 
void _XMP_reflect_shadow_FULL (void *array_addr, void *array_desc, int array_index)
 
void _XMP_init_shadow_noalloc (void *a,...)
 
void _XMP_init_template_FIXED (void **template, int dim,...)
 
void _XMP_init_template_UNFIXED (void **template, int dim,...)
 
void _XMP_set_template_size (void **template, int dim,...)
 
void _XMP_init_template_chunk (void *template, void *nodes)
 
void _XMP_finalize_template (void *template)
 
void _XMP_dist_template_DUPLICATION (void *template, int template_index)
 
void _XMP_dist_template_BLOCK (void *template, int template_index, int nodes_index)
 
void _XMP_dist_template_CYCLIC (void *template, int template_index, int nodes_index)
 
void _XMP_dist_template_BLOCK_CYCLIC (void *template, int template_index, int nodes_index, unsigned long long width)
 
void _XMP_dist_template_GBLOCK (void *template, int template_index, int nodes_index, int *mapping_array, int *temp0)
 
int _XMP_exec_task_TEMPLATE_PART (void **task_desc, void *ref_template,...)
 
int _XMP_exec_task_TEMPLATE_PART_nocomm (void **task_desc, void *ref_template,...)
 
int xmpc_ltog (int local_idx, void *template, int template_index, int offset)
 
void * _XMP_alloc (size_t size)
 
void _XMP_free (void *p)
 
void _XMP_fatal (char *msg)
 
void _XMP_unexpected_error (void)
 
void _XMP_init_world (int *argc, char ***argv)
 
void _XMP_finalize_world (void)
 
void _XMP_post_1 (const void *, const int, const int)
 
void _XMP_post_2 (const void *, const int, const int, const int)
 
void _XMP_post_3 (const void *, const int, const int, const int, const int)
 
void _XMP_post_4 (const void *, const int, const int, const int, const int, const int)
 
void _XMP_post_5 (const void *, const int, const int, const int, const int, const int, const int)
 
void _XMP_post_6 (const void *, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_post_7 (const void *, const int, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_wait_noargs ()
 
void _XMP_wait_1 (const void *, const int, const int)
 
void _XMP_wait_2 (const void *, const int, const int, const int)
 
void _XMP_wait_3 (const void *, const int, const int, const int, const int)
 
void _XMP_wait_4 (const void *, const int, const int, const int, const int, const int)
 
void _XMP_wait_5 (const void *, const int, const int, const int, const int, const int, const int)
 
void _XMP_wait_6 (const void *, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_wait_7 (const void *, const int, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_wait_node_1 (const void *, const int)
 
void _XMP_wait_node_2 (const void *, const int, const int)
 
void _XMP_wait_node_3 (const void *, const int, const int, const int)
 
void _XMP_wait_node_4 (const void *, const int, const int, const int, const int)
 
void _XMP_wait_node_5 (const void *, const int, const int, const int, const int, const int)
 
void _XMP_wait_node_6 (const void *, const int, const int, const int, const int, const int, const int)
 
void _XMP_wait_node_7 (const void *, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_lock_0 (const void *, const unsigned int)
 
void _XMP_lock_1 (const void *, const unsigned int, const int)
 
void _XMP_lock_2 (const void *, const unsigned int, const int, const int)
 
void _XMP_lock_3 (const void *, const unsigned int, const int, const int, const int)
 
void _XMP_lock_4 (const void *, const unsigned int, const int, const int, const int, const int)
 
void _XMP_lock_5 (const void *, const unsigned int, const int, const int, const int, const int, const int)
 
void _XMP_lock_6 (const void *, const unsigned int, const int, const int, const int, const int, const int, const int)
 
void _XMP_lock_7 (const void *, const unsigned int, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_unlock_0 (const void *, const unsigned int)
 
void _XMP_unlock_1 (const void *, const unsigned int, const int)
 
void _XMP_unlock_2 (const void *, const unsigned int, const int, const int)
 
void _XMP_unlock_3 (const void *, const unsigned int, const int, const int, const int)
 
void _XMP_unlock_4 (const void *, const unsigned int, const int, const int, const int, const int)
 
void _XMP_unlock_5 (const void *, const unsigned int, const int, const int, const int, const int, const int)
 
void _XMP_unlock_6 (const void *, const unsigned int, const int, const int, const int, const int, const int, const int)
 
void _XMP_unlock_7 (const void *, const unsigned int, const int, const int, const int, const int, const int, const int, const int)
 
void _XMP_threads_init (void)
 
void _XMP_threads_finalize (void)
 
void _XMP_gpu_init (void)
 
void _XMP_gpu_finalize (void)
 
void _XMP_gpu_init_data_NOT_ALIGNED (void **host_data_desc, void **device_addr, void *addr, size_t size)
 
void _XMP_gpu_init_data_ALIGNED (void **host_data_desc, void **device_array_desc, void **device_addr, void *addr, void *array_desc)
 
void _XMP_gpu_finalize_data (void *desc)
 
void _XMP_gpu_sync (void *desc, int direction)
 
void _XMP_gpu_pack_shadow_NORMAL (void *desc, void **lo_buffer, void **hi_buffer, int array_index)
 
void _XMP_gpu_unpack_shadow_NORMAL (void *desc, void *lo_buffer, void *hi_buffer, int array_index)
 
void xmp_transpose (void *dst_d, void *src_d, int opt)
 
void xmp_matmul (void *x_p, void *a_p, void *b_p)
 
void xmp_pack_mask (void *v_p, void *a_p, void *m_p)
 
void xmp_pack_nomask (void *v_p, void *a_p)
 
void xmp_pack (void *v_p, void *a_p, void *m_p)
 
void xmp_unpack_mask (void *a_p, void *v_p, void *m_p)
 
void xmp_unpack_nomask (void *a_p, void *v_p)
 
void xmp_unpack (void *a_p, void *v_p, void *m_p)
 
void xmp_gather (void *, void *,...)
 
void xmp_scatter (void *, void *,...)
 
void _XMP_atomic_define_0 (void *, size_t, int, void *, size_t, size_t)
 
void _XMP_atomic_define_1 (void *, size_t, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_2 (void *, size_t, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_3 (void *, size_t, int, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_4 (void *, size_t, int, int, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_5 (void *, size_t, int, int, int, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_6 (void *, size_t, int, int, int, int, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_define_7 (void *, size_t, int, int, int, int, int, int, int, int, void *, size_t, size_t)
 
void _XMP_atomic_ref_0 (void *, size_t, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_1 (void *, size_t, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_2 (void *, size_t, int, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_3 (void *, size_t, int, int, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_4 (void *, size_t, int, int, int, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_5 (void *, size_t, int, int, int, int, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_6 (void *, size_t, int, int, int, int, int, int, int *, void *, size_t, size_t)
 
void _XMP_atomic_ref_7 (void *, size_t, int, int, int, int, int, int, int, int *, void *, size_t, size_t)
 
void _XMP_lock_initialize_1 (void *, const unsigned int)
 Wrapper function of initializing 1-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_2 (void *, const unsigned int, const unsigned int)
 Wrapper function of initializing 2-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_3 (void *, const unsigned int, const unsigned int, const unsigned int)
 Wrapper function of initializing 3-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_4 (void *, const unsigned int, const unsigned int, const unsigned int, const unsigned int)
 Wrapper function of initializing 4-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_5 (void *, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int)
 Wrapper function of initializing 5-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_6 (void *, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int)
 Wrapper function of initializing 6-dim array Lock object (e.g. More...
 
void _XMP_lock_initialize_7 (void *, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int, const unsigned int)
 Wrapper function of initializing 7-dim array Lock object (e.g. More...
 

Function Documentation

◆ _XMP_align_array_BLOCK()

void _XMP_align_array_BLOCK ( void *  array,
int  array_index,
int  template_index,
long long  align_subscript,
int *  temp0 
)
Here is the caller graph for this function:

◆ _XMP_align_array_BLOCK_CYCLIC()

void _XMP_align_array_BLOCK_CYCLIC ( void *  array,
int  array_index,
int  template_index,
long long  align_subscript,
int *  temp0 
)
Here is the caller graph for this function:

◆ _XMP_align_array_CYCLIC()

void _XMP_align_array_CYCLIC ( void *  array,
int  array_index,
int  template_index,
long long  align_subscript,
int *  temp0 
)
Here is the caller graph for this function:

◆ _XMP_align_array_DUPLICATION()

void _XMP_align_array_DUPLICATION ( void *  array,
int  array_index,
int  template_index,
long long  align_subscript 
)
Here is the caller graph for this function:

◆ _XMP_align_array_GBLOCK()

void _XMP_align_array_GBLOCK ( void *  array,
int  array_index,
int  template_index,
long long  align_subscript,
int *  temp0 
)
Here is the caller graph for this function:

◆ _XMP_align_array_noalloc()

void _XMP_align_array_noalloc ( void *  a,
int  adim,
int  tdim,
long long  align_subscript,
int *  temp0,
unsigned long long *  acc0 
)

◆ _XMP_align_array_NOT_ALIGNED()

void _XMP_align_array_NOT_ALIGNED ( void *  array,
int  array_index 
)
Here is the caller graph for this function:

◆ _XMP_alloc()

void* _XMP_alloc ( size_t  size)
22 {
23  void *addr;
24 #ifdef _XMP_FJRDMA
25  int error = posix_memalign(&addr, 128, size);
26  if(addr == NULL || error != 0)
27  _XMP_fatal("cannot allocate memory");
28 #else
29  addr = malloc(size);
30  if(addr == NULL)
31  _XMP_fatal("cannot allocate memory");
32 #endif
33 
34  return addr;
35 }
Here is the caller graph for this function:

◆ _XMP_alloc_array()

void _XMP_alloc_array ( void **  array_addr,
void *  array_desc,
  ... 
)

◆ _XMP_alloc_array_EXTERN()

void _XMP_alloc_array_EXTERN ( void **  array_addr,
void *  array_desc,
  ... 
)

◆ _XMP_atomic_define_0()

void _XMP_atomic_define_0 ( void *  ,
size_t  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6333 {
6334 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6335  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6336 #endif
6337 
6338 #ifdef _XMP_GASNET
6339  _XMP_gasnet_atomic_define(_XMP_world_rank, c, dst_offset, value, src_desc, src_offset, elmt_size);
6340 #elif _XMP_FJRDMA
6341  _XMP_fjrdma_atomic_define(_XMP_world_rank, c, dst_offset, value, src_desc, src_offset, elmt_size);
6342 #elif _XMP_UTOFU
6343  _XMP_utofu_atomic_define(_XMP_world_rank, c, dst_offset, value, elmt_size);
6344 #elif _XMP_MPI3_ONESIDED
6345  _XMP_mpi_atomic_define(_XMP_world_rank, c, dst_offset, value, elmt_size);
6346 #endif
6347 }
Here is the call graph for this function:

◆ _XMP_atomic_define_1()

void _XMP_atomic_define_1 ( void *  ,
size_t  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6351 {
6352 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6353  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6354 #endif
6355 
6356 #ifdef _XMP_GASNET
6357  _XMP_gasnet_atomic_define(image0, c, dst_offset, value, src_desc, src_offset, elmt_size);
6358 #elif _XMP_FJRDMA
6359  _XMP_fjrdma_atomic_define(image0, c, dst_offset, value, src_desc, src_offset, elmt_size);
6360 #elif _XMP_UTOFU
6361  _XMP_utofu_atomic_define(image0, c, dst_offset, value, elmt_size);
6362 #elif _XMP_MPI3_ONESIDED
6363  _XMP_mpi_atomic_define(image0, c, dst_offset, value, elmt_size);
6364 #endif
6365 }
Here is the call graph for this function:

◆ _XMP_atomic_define_2()

void _XMP_atomic_define_2 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6369 {
6370 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6371  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6372  int image = c->distance_of_image_elmts[0] * image0 + c->distance_of_image_elmts[1] * image1;
6373 #endif
6374 
6375 #ifdef _XMP_GASNET
6376  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6377 #elif _XMP_FJRDMA
6378  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6379 #elif _XMP_UTOFU
6380  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6381 #elif _XMP_MPI3_ONESIDED
6382  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6383 #endif
6384 }
Here is the call graph for this function:

◆ _XMP_atomic_define_3()

void _XMP_atomic_define_3 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6388 {
6389 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6390  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6391  int image = c->distance_of_image_elmts[0] * image0
6392  + c->distance_of_image_elmts[1] * image1
6393  + c->distance_of_image_elmts[2] * image2;
6394 #endif
6395 
6396 #ifdef _XMP_GASNET
6397  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6398 #elif _XMP_FJRDMA
6399  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6400 #elif _XMP_UTOFU
6401  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6402 #elif _XMP_MPI3_ONESIDED
6403  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6404 #endif
6405 }
Here is the call graph for this function:

◆ _XMP_atomic_define_4()

void _XMP_atomic_define_4 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6409 {
6410 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6411  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6412  int image = c->distance_of_image_elmts[0] * image0
6413  + c->distance_of_image_elmts[1] * image1
6414  + c->distance_of_image_elmts[2] * image2
6415  + c->distance_of_image_elmts[3] * image3;
6416 #endif
6417 
6418 #ifdef _XMP_GASNET
6419  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6420 #elif _XMP_FJRDMA
6421  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6422 #elif _XMP_UTOFU
6423  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6424 #elif _XMP_MPI3_ONESIDED
6425  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6426 #endif
6427 }
Here is the call graph for this function:

◆ _XMP_atomic_define_5()

void _XMP_atomic_define_5 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6431 {
6432 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6433  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6434  int image = c->distance_of_image_elmts[0] * image0
6435  + c->distance_of_image_elmts[1] * image1
6436  + c->distance_of_image_elmts[2] * image2
6437  + c->distance_of_image_elmts[3] * image3
6438  + c->distance_of_image_elmts[4] * image4;
6439 #endif
6440 
6441 #ifdef _XMP_GASNET
6442  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6443 #elif _XMP_FJRDMA
6444  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6445 #elif _XMP_UTOFU
6446  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6447 #elif _XMP_MPI3_ONESIDED
6448  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6449 #endif
6450 }
Here is the call graph for this function:

◆ _XMP_atomic_define_6()

void _XMP_atomic_define_6 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6455 {
6456 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6457  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6458  int image = c->distance_of_image_elmts[0] * image0
6459  + c->distance_of_image_elmts[1] * image1
6460  + c->distance_of_image_elmts[2] * image2
6461  + c->distance_of_image_elmts[3] * image3
6462  + c->distance_of_image_elmts[4] * image4
6463  + c->distance_of_image_elmts[5] * image5;
6464 #endif
6465 
6466 #ifdef _XMP_GASNET
6467  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6468 #elif _XMP_FJRDMA
6469  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6470 #elif _XMP_UTOFU
6471  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6472 #elif _XMP_MPI3_ONESIDED
6473  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6474 #endif
6475 }
Here is the call graph for this function:

◆ _XMP_atomic_define_7()

void _XMP_atomic_define_7 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
void *  ,
size_t  ,
size_t   
)
6480 {
6481 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6482  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6483  int image = c->distance_of_image_elmts[0] * image0
6484  + c->distance_of_image_elmts[1] * image1
6485  + c->distance_of_image_elmts[2] * image2
6486  + c->distance_of_image_elmts[3] * image3
6487  + c->distance_of_image_elmts[4] * image4
6488  + c->distance_of_image_elmts[5] * image5
6489  + c->distance_of_image_elmts[6] * image6;
6490 #endif
6491 
6492 #ifdef _XMP_GASNET
6493  _XMP_gasnet_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6494 #elif _XMP_FJRDMA
6495  _XMP_fjrdma_atomic_define(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6496 #elif _XMP_UTOFU
6497  _XMP_utofu_atomic_define(image, c, dst_offset, value, elmt_size);
6498 #elif _XMP_MPI3_ONESIDED
6499  _XMP_mpi_atomic_define(image, c, dst_offset, value, elmt_size);
6500 #endif
6501 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_0()

void _XMP_atomic_ref_0 ( void *  ,
size_t  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6505 {
6506 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6507  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6508 #endif
6509 
6510  // Memo: This function requires a polling operation
6511 #ifdef _XMP_GASNET
6512  _XMP_gasnet_atomic_ref(_XMP_world_rank, c, dst_offset, value, elmt_size);
6513 #elif _XMP_FJRDMA
6514  _XMP_fjrdma_atomic_ref(_XMP_world_rank, c, dst_offset, value, src_desc, src_offset, elmt_size);
6515 #elif _XMP_UTOFU
6516  _XMP_utofu_atomic_ref(_XMP_world_rank, c, dst_offset, value, elmt_size);
6517 #elif _XMP_MPI3_ONESIDED
6518  _XMP_mpi_atomic_ref(_XMP_world_rank, c, dst_offset, value, elmt_size);
6519 #endif
6520 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_1()

void _XMP_atomic_ref_1 ( void *  ,
size_t  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6524 {
6525 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6526  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6527 #endif
6528 
6529 #ifdef _XMP_GASNET
6530  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6531 #elif _XMP_FJRDMA
6532  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6533 #elif _XMP_UTOFU
6534  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6535 #elif _XMP_MPI3_ONESIDED
6536  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6537 #endif
6538 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_2()

void _XMP_atomic_ref_2 ( void *  ,
size_t  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6542 {
6543 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6544  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6545  int image = c->distance_of_image_elmts[0] * image0
6546  + c->distance_of_image_elmts[1] * image1;
6547 #endif
6548 
6549 #ifdef _XMP_GASNET
6550  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6551 #elif _XMP_FJRDMA
6552  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6553 #elif _XMP_UTOFU
6554  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6555 #elif _XMP_MPI3_ONESIDED
6556  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6557 #endif
6558 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_3()

void _XMP_atomic_ref_3 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6562 {
6563 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6564  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6565  int image = c->distance_of_image_elmts[0] * image0
6566  + c->distance_of_image_elmts[1] * image1
6567  + c->distance_of_image_elmts[2] * image2;
6568 #endif
6569 
6570 #ifdef _XMP_GASNET
6571  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6572 #elif _XMP_FJRDMA
6573  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6574 #elif _XMP_UTOFU
6575  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6576 #elif _XMP_MPI3_ONESIDED
6577  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6578 #endif
6579 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_4()

void _XMP_atomic_ref_4 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6583 {
6584 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6585  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6586  int image = c->distance_of_image_elmts[0] * image0
6587  + c->distance_of_image_elmts[1] * image1
6588  + c->distance_of_image_elmts[2] * image2
6589  + c->distance_of_image_elmts[3] * image3;
6590 #endif
6591 
6592 #ifdef _XMP_GASNET
6593  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6594 #elif _XMP_FJRDMA
6595  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6596 #elif _XMP_UTOFU
6597  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6598 #elif _XMP_MPI3_ONESIDED
6599  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6600 #endif
6601 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_5()

void _XMP_atomic_ref_5 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6606 {
6607 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6608  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6609  int image = c->distance_of_image_elmts[0] * image0
6610  + c->distance_of_image_elmts[1] * image1
6611  + c->distance_of_image_elmts[2] * image2
6612  + c->distance_of_image_elmts[3] * image3
6613  + c->distance_of_image_elmts[4] * image4;
6614 #endif
6615 
6616 #ifdef _XMP_GASNET
6617  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6618 #elif _XMP_FJRDMA
6619  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6620 #elif _XMP_UTOFU
6621  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6622 #elif _XMP_MPI3_ONESIDED
6623  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6624 #endif
6625 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_6()

void _XMP_atomic_ref_6 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6630 {
6631 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6632  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6633  int image = c->distance_of_image_elmts[0] * image0
6634  + c->distance_of_image_elmts[1] * image1
6635  + c->distance_of_image_elmts[2] * image2
6636  + c->distance_of_image_elmts[3] * image3
6637  + c->distance_of_image_elmts[4] * image4
6638  + c->distance_of_image_elmts[5] * image5;
6639 #endif
6640 
6641 #ifdef _XMP_GASNET
6642  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6643 #elif _XMP_FJRDMA
6644  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6645 #elif _XMP_UTOFU
6646  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6647 #elif _XMP_MPI3_ONESIDED
6648  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6649 #endif
6650 }
Here is the call graph for this function:

◆ _XMP_atomic_ref_7()

void _XMP_atomic_ref_7 ( void *  ,
size_t  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int  ,
int *  ,
void *  ,
size_t  ,
size_t   
)
6655 {
6656 #if defined(_XMP_GASNET) || defined(_XMP_FJRDMA) || defined(_XMP_MPI3_ONESIDED) || defined(_XMP_UTOFU)
6657  _XMP_coarray_t* c = (_XMP_coarray_t*)dst_desc;
6658  int image = c->distance_of_image_elmts[0] * image0
6659  + c->distance_of_image_elmts[1] * image1
6660  + c->distance_of_image_elmts[2] * image2
6661  + c->distance_of_image_elmts[3] * image3
6662  + c->distance_of_image_elmts[4] * image4
6663  + c->distance_of_image_elmts[5] * image5
6664  + c->distance_of_image_elmts[6] * image6;
6665 #endif
6666 
6667 #ifdef _XMP_GASNET
6668  _XMP_gasnet_atomic_ref(image, c, dst_offset, value, elmt_size);
6669 #elif _XMP_FJRDMA
6670  _XMP_fjrdma_atomic_ref(image, c, dst_offset, value, src_desc, src_offset, elmt_size);
6671 #elif _XMP_UTOFU
6672  _XMP_utofu_atomic_ref(image, c, dst_offset, value, elmt_size);
6673 #elif _XMP_MPI3_ONESIDED
6674  _XMP_mpi_atomic_ref(image, c, dst_offset, value, elmt_size);
6675 #endif
6676 }
Here is the call graph for this function:

◆ _XMP_barrier_EXEC()

void _XMP_barrier_EXEC ( void  )
16  {
19 
20  MPI_Barrier(*((MPI_Comm *)(_XMP_get_execution_nodes())->comm));
21 }
Here is the caller graph for this function:

◆ _XMP_barrier_NODES_ENTIRE()

void _XMP_barrier_NODES_ENTIRE ( void *  nodes)

◆ _XMP_bcast_acc_NODES_ENTIRE_GLOBAL()

void _XMP_bcast_acc_NODES_ENTIRE_GLOBAL ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size,
int  from_lower,
int  from_upper,
int  from_stride 
)

◆ _XMP_bcast_acc_NODES_ENTIRE_NODES()

void _XMP_bcast_acc_NODES_ENTIRE_NODES ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size,
void *  from_nodes,
  ... 
)

◆ _XMP_bcast_acc_NODES_ENTIRE_OMITTED()

void _XMP_bcast_acc_NODES_ENTIRE_OMITTED ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size 
)

◆ _XMP_bcast_NODES_ENTIRE_GLOBAL()

void _XMP_bcast_NODES_ENTIRE_GLOBAL ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size,
int  from_lower,
int  from_upper,
int  from_stride 
)

◆ _XMP_bcast_NODES_ENTIRE_NODES()

void _XMP_bcast_NODES_ENTIRE_NODES ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size,
void *  from_nodes,
  ... 
)

◆ _XMP_bcast_NODES_ENTIRE_OMITTED()

void _XMP_bcast_NODES_ENTIRE_OMITTED ( void *  bcast_nodes,
void *  addr,
int  count,
size_t  datatype_size 
)

◆ _XMP_coarray_attach()

void _XMP_coarray_attach ( void **  ,
void *  ,
const  size_t 
)
Here is the caller graph for this function:

◆ _XMP_coarray_contiguous_get()

void _XMP_coarray_contiguous_get ( const int  ,
void *  ,
const void *  ,
const long  ,
const long  ,
const long  ,
const long   
)
Here is the caller graph for this function:

◆ _XMP_coarray_contiguous_get_acc()

void _XMP_coarray_contiguous_get_acc ( const int  target_image,
const void *  dst_desc,
const void *  src_desc,
const size_t  dst_offset,
const size_t  src_offset,
const size_t  dst_elmts,
const size_t  src_elmts,
const int  is_dst_on_acc,
const int  is_src_on_acc 
)

◆ _XMP_coarray_contiguous_put()

void _XMP_coarray_contiguous_put ( const int  ,
void *  ,
const void *  ,
const long  ,
const long  ,
const long  ,
const long   
)

◆ _XMP_coarray_contiguous_put_acc()

void _XMP_coarray_contiguous_put_acc ( const int  target_image,
const void *  dst_desc,
const void *  src_desc,
const size_t  dst_offset,
const size_t  src_offset,
const size_t  dst_elmts,
const size_t  src_elmts,
const int  is_dst_on_acc,
const int  is_src_on_acc 
)

◆ _XMP_coarray_detach()

void _XMP_coarray_detach ( void **  )
Here is the caller graph for this function:

◆ _XMP_coarray_get()

void _XMP_coarray_get ( void *  ,
void *  ,
void *   
)
1224 {
1225  if(_transfer_coarray_elmts == 0 || _transfer_array_elmts == 0) return;
1226 
1227  if(_transfer_coarray_elmts != _transfer_array_elmts && _transfer_coarray_elmts != 1){
1228  _XMP_fatal("Coarray Error ! transfer size is wrong.\n") ;
1229  // e.g. a[0:3] = b[0:2]:[3] is NG, but a[0:3] = b[0:1]:[3] is OK
1230  }
1231 
1232  int target_rank = 0;
1233  for(int i=0;i<_image_dims;i++)
1234  target_rank += ((_XMP_coarray_t*)remote_coarray)->distance_of_image_elmts[i] * _image_num[i];
1235 
1236  check_target_rank(target_rank);
1237 
1238  for(int i=0;i<_coarray_dims;i++){
1239  _coarray[i].elmts = ((_XMP_coarray_t*)remote_coarray)->coarray_elmts[i];
1240  _coarray[i].distance = ((_XMP_coarray_t*)remote_coarray)->distance_of_coarray_elmts[i];
1241  }
1242 
1243  int remote_coarray_is_contiguous = _check_contiguous(_coarray, _coarray_dims, _transfer_coarray_elmts);
1244  int local_array_is_contiguous = _check_contiguous(_array, _array_dims, _transfer_array_elmts);
1245 
1246  // _XMP_local_put(), _XMP_gasnet_put(), ... don't support to transfer long data size now.
1247  // _XMP_check_less_than_SIZE_MAX() checks whether the trasfer size is less than SIZE_MAX, defined in <limits.h>.
1248  size_t elmt_size = ((_XMP_coarray_t*)remote_coarray)->elmt_size;
1249  _XMP_check_less_than_SIZE_MAX(_transfer_coarray_elmts*elmt_size); // fix me
1250  _XMP_check_less_than_SIZE_MAX(_transfer_array_elmts*elmt_size); // fix me
1251 
1252  if(target_rank == _XMP_world_rank){
1253  _XMP_local_get(local_array, remote_coarray, local_array_is_contiguous, remote_coarray_is_contiguous,
1254  _array_dims, _coarray_dims, _array, _coarray, (size_t)_transfer_array_elmts, (size_t)_transfer_coarray_elmts);
1255  }
1256  else{
1257 #ifdef _XMP_GASNET
1258  _XMP_gasnet_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank,
1259  _coarray_dims, _array_dims, _coarray, _array, remote_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1260 #elif _XMP_FJRDMA
1261  _XMP_fjrdma_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1262  _coarray, _array, remote_coarray, local_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1263 #elif _XMP_UTOFU
1264  _XMP_utofu_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1265  _coarray, _array, remote_coarray, local_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1266 #elif _XMP_MPI3_ONESIDED
1267  _XMP_mpi_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1268  _coarray, _array, remote_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts,
1270 #endif
1271  }
1272 
1273  free(_coarray);
1274  free(_array);
1275  free(_image_num);
1276 }

◆ _XMP_coarray_get_acc()

void _XMP_coarray_get_acc ( void *  ,
void *  ,
void *  ,
const int  ,
const int   
)
1727 {
1728  if(_transfer_coarray_elmts == 0 || _transfer_array_elmts == 0) return;
1729 
1730  if(_transfer_coarray_elmts != _transfer_array_elmts && _transfer_coarray_elmts != 1){
1731  _XMP_fatal("Coarray Error ! transfer size is wrong.\n") ;
1732  // e.g. a[0:3] = b[0:2]:[3] is NG, but a[0:3] = b[0:1]:[3] is OK
1733  }
1734 
1735  int target_rank = 0;
1736  for(int i=0;i<_image_dims;i++)
1737  target_rank += ((_XMP_coarray_t*)remote_coarray)->distance_of_image_elmts[i] * _image_num[i];
1738  check_target_rank(target_rank);
1739 
1740  for(int i=0;i<_coarray_dims;i++){
1741  _coarray[i].elmts = ((_XMP_coarray_t*)remote_coarray)->coarray_elmts[i];
1742  _coarray[i].distance = ((_XMP_coarray_t*)remote_coarray)->distance_of_coarray_elmts[i];
1743  }
1744 
1745  int remote_coarray_is_contiguous = _check_contiguous(_coarray, _coarray_dims, _transfer_coarray_elmts);
1746  int local_array_is_contiguous = _check_contiguous(_array, _array_dims, _transfer_array_elmts);
1747 
1748  if(target_rank == _XMP_world_rank){
1749  _XMP_local_get(local_array, remote_coarray, local_array_is_contiguous, remote_coarray_is_contiguous,
1750  _array_dims, _coarray_dims, _array, _coarray, _transfer_array_elmts, _transfer_coarray_elmts);
1751  }
1752  else{
1753 #ifdef _XMP_GASNET
1754  _XMP_gasnet_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank,
1755  _coarray_dims, _array_dims, _coarray, _array, remote_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1756 #elif _XMP_FJRDMA
1757  _XMP_fjrdma_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1758  _coarray, _array, remote_coarray, local_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1759 #elif _XMP_UTOFU
1760  _XMP_utofu_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1761  _coarray, _array, remote_coarray, local_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1762 #elif _XMP_MPI3_ONESIDED
1763  _XMP_mpi_get(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1764  _coarray, _array, remote_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts,
1765  is_remote_on_acc);
1766 #endif
1767  }
1768 
1769  free(_coarray);
1770  free(_array);
1771  free(_image_num);
1772 }

◆ _XMP_coarray_get_total_elmts()

int _XMP_coarray_get_total_elmts ( void *  coarray_desc)
10 {
11  _XMP_coarray_t* c = (_XMP_coarray_t*)coarray_desc;
12 
13  int total_coarray_elmts = 1;
14  for(int i = 0; i < c->coarray_dims; i++){
15  total_coarray_elmts *= c->coarray_elmts[i];
16  }
17  return total_coarray_elmts;
18 }
Here is the caller graph for this function:

◆ _XMP_coarray_lastly_deallocate()

void _XMP_coarray_lastly_deallocate ( )

Deallocate memory space and an object of the last coarray.

1644 {
1645 #ifdef _XMP_GASNET
1647 #elif _XMP_FJRDMA
1649 #elif _XMP_UTOFU
1650  // _XMP_utofu_coarray_lastly_deallocate();
1651 #elif _XMP_MPI3_ONESIDED
1653 #endif
1654 
1655  _XMP_coarray_t *_last_coarray_ptr = _pop_coarray_queue();
1656  _XMP_coarray_deallocate(_last_coarray_ptr);
1657 }

◆ _XMP_coarray_malloc()

void _XMP_coarray_malloc ( void **  ,
void *   
)

Create coarray object and allocate coarray.

334 {
337  *coarray_desc = c;
338 
339  long transfer_size = _total_coarray_elmts*_elmt_size;
340  _XMP_check_less_than_SIZE_MAX(transfer_size);
341 
342 #ifdef _XMP_GASNET
343  _XMP_gasnet_coarray_malloc(*coarray_desc, addr, (size_t)transfer_size);
344 #elif _XMP_FJRDMA
345  _XMP_fjrdma_coarray_malloc(*coarray_desc, addr, (size_t)transfer_size);
346 #elif _XMP_UTOFU
347  _XMP_utofu_coarray_malloc(*coarray_desc, addr, (size_t)transfer_size);
348 #elif _XMP_MPI3_ONESIDED
349  _XMP_mpi_coarray_malloc(*coarray_desc, addr, (size_t)transfer_size, false);
350 #endif
351 
352  _push_coarray_queue(c);
353 }

◆ _XMP_coarray_malloc_acc()

void _XMP_coarray_malloc_acc ( void **  coarray_desc,
void *  addr 
)
47 {
48  _XMP_coarray_t* c = *coarray_desc;
49 
50  int total_coarray_elmts = _XMP_coarray_get_total_elmts(c);
51 
52 #ifdef _XMP_TCA
53  _XMP_tca_malloc(*coarray_desc, addr, total_coarray_elmts * c->elmt_size);
54 #elif _XMP_MPI3_ONESIDED
55  _XMP_mpi_coarray_malloc(*coarray_desc, addr, total_coarray_elmts * c->elmt_size, true);
56 #else
57  _XMP_fatal("_XMP_coarray_malloc_acc is unavailable");
58 #endif
59 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_1()

void _XMP_coarray_malloc_image_info_1 ( )

Set 1-dim image information.

156 {
157  _image_dims = 1;
158  _image_elmts = malloc(sizeof(int) * _image_dims);
159  _image_elmts[0] = 1;
160 }

◆ _XMP_coarray_malloc_image_info_2()

void _XMP_coarray_malloc_image_info_2 ( const int  )

Set 2-dim image information.

175 {
176  int total_node_size = _XMP_get_execution_nodes()->comm_size;
177 
178  _check_coarray_image(total_node_size, i1);
179 
180  _image_dims = 2;
181  _image_elmts = malloc(sizeof(int) * _image_dims);
182  _image_elmts[0] = i1;
183  _image_elmts[1] = total_node_size / i1;
184 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_3()

void _XMP_coarray_malloc_image_info_3 ( const int  ,
const int   
)

Set 3-dim image information.

190 {
191  int total_node_size = _XMP_get_execution_nodes()->comm_size;
192 
193  _check_coarray_image(total_node_size, i1*i2);
194 
195  _image_dims = 3;
196  _image_elmts = malloc(sizeof(int) * _image_dims);
197  _image_elmts[0] = i1;
198  _image_elmts[1] = i2;
199  _image_elmts[2] = total_node_size / (i1*i2);
200 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_4()

void _XMP_coarray_malloc_image_info_4 ( const int  ,
const int  ,
const int   
)

Set 4-dim image information.

206 {
207  int total_node_size = _XMP_get_execution_nodes()->comm_size;
208 
209  _check_coarray_image(total_node_size, i1*i2*i3);
210 
211  _image_dims = 4;
212  _image_elmts = malloc(sizeof(int) * _image_dims);
213  _image_elmts[0] = i1;
214  _image_elmts[1] = i2;
215  _image_elmts[2] = i3;
216  _image_elmts[3] = total_node_size / (i1*i2*i3);
217 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_5()

void _XMP_coarray_malloc_image_info_5 ( const int  ,
const int  ,
const int  ,
const int   
)

Set 5-dim image information.

223 {
224  int total_node_size = _XMP_get_execution_nodes()->comm_size;
225 
226  _check_coarray_image(total_node_size, i1*i2*i3*i4);
227 
228  _image_dims = 5;
229  _image_elmts = malloc(sizeof(int) * _image_dims);
230  _image_elmts[0] = i1;
231  _image_elmts[1] = i2;
232  _image_elmts[2] = i3;
233  _image_elmts[3] = i4;
234  _image_elmts[4] = total_node_size / (i1*i2*i3*i4);
235 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_6()

void _XMP_coarray_malloc_image_info_6 ( const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

Set 6-dim image information.

242 {
243  int total_node_size = _XMP_get_execution_nodes()->comm_size;
244 
245  _check_coarray_image(total_node_size, i1*i2*i3*i4*i5);
246 
247  _image_dims = 6;
248  _image_elmts = malloc(sizeof(int) * _image_dims);
249  _image_elmts[0] = i1;
250  _image_elmts[1] = i2;
251  _image_elmts[2] = i3;
252  _image_elmts[3] = i4;
253  _image_elmts[4] = i5;
254  _image_elmts[5] = total_node_size / (i1*i2*i3*i4*i5);
255 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_image_info_7()

void _XMP_coarray_malloc_image_info_7 ( const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)
259 {
260  int total_node_size = _XMP_get_execution_nodes()->comm_size;
261 
262  _check_coarray_image(total_node_size, i1*i2*i3*i4*i5*i6);
263 
264  _image_dims = 7;
265  _image_elmts = malloc(sizeof(int) * _image_dims);
266  _image_elmts[0] = i1;
267  _image_elmts[1] = i2;
268  _image_elmts[2] = i3;
269  _image_elmts[3] = i4;
270  _image_elmts[4] = i5;
271  _image_elmts[5] = i6;
272  _image_elmts[6] = total_node_size / (i1*i2*i3*i4*i5*i6);
273 }
Here is the call graph for this function:

◆ _XMP_coarray_malloc_info_1()

void _XMP_coarray_malloc_info_1 ( const long  ,
const  size_t 
)

Set 1-dim coarray information.

32 {
33  _elmt_size = elmt_size;
34  _coarray_dims = 1;
35  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
36  _coarray_elmts[0] = n1;
37  _total_coarray_elmts = n1;
38 }

◆ _XMP_coarray_malloc_info_2()

void _XMP_coarray_malloc_info_2 ( const long  ,
const long  ,
const  size_t 
)

Set 2-dim coarray information.

44 {
45  _elmt_size = elmt_size;
46  _coarray_dims = 2;
47  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
48  _coarray_elmts[0] = n1;
49  _coarray_elmts[1] = n2;
50  _total_coarray_elmts = n1*n2;
51 }

◆ _XMP_coarray_malloc_info_3()

void _XMP_coarray_malloc_info_3 ( const long  ,
const long  ,
const long  ,
const  size_t 
)

Set 3-dim coarray information.

57 {
58  _elmt_size = elmt_size;
59  _coarray_dims = 3;
60  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
61  _coarray_elmts[0] = n1;
62  _coarray_elmts[1] = n2;
63  _coarray_elmts[2] = n3;
64  _total_coarray_elmts = n1*n2*n3;
65 }

◆ _XMP_coarray_malloc_info_4()

void _XMP_coarray_malloc_info_4 ( const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set 4-dim coarray information.

72 {
73  _elmt_size = elmt_size;
74  _coarray_dims = 4;
75  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
76  _coarray_elmts[0] = n1;
77  _coarray_elmts[1] = n2;
78  _coarray_elmts[2] = n3;
79  _coarray_elmts[3] = n4;
80  _total_coarray_elmts = n1*n2*n3*n4;
81 }

◆ _XMP_coarray_malloc_info_5()

void _XMP_coarray_malloc_info_5 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set 5-dim coarray information.

88 {
89  _elmt_size = elmt_size;
90  _coarray_dims = 5;
91  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
92  _coarray_elmts[0] = n1;
93  _coarray_elmts[1] = n2;
94  _coarray_elmts[2] = n3;
95  _coarray_elmts[3] = n4;
96  _coarray_elmts[4] = n5;
97  _total_coarray_elmts = n1*n2*n3*n4*n5;
98 }

◆ _XMP_coarray_malloc_info_6()

void _XMP_coarray_malloc_info_6 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set 6-dim coarray information.

105 {
106  _elmt_size = elmt_size;
107  _coarray_dims = 6;
108  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
109  _coarray_elmts[0] = n1;
110  _coarray_elmts[1] = n2;
111  _coarray_elmts[2] = n3;
112  _coarray_elmts[3] = n4;
113  _coarray_elmts[4] = n5;
114  _coarray_elmts[5] = n6;
115  _total_coarray_elmts = n1*n2*n3*n4*n5*n6;
116 }

◆ _XMP_coarray_malloc_info_7()

void _XMP_coarray_malloc_info_7 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set 7-dim coarray information.

123 {
124  _elmt_size = elmt_size;
125  _coarray_dims = 7;
126  _coarray_elmts = malloc(sizeof(long) * _coarray_dims);
127  _coarray_elmts[0] = n1;
128  _coarray_elmts[1] = n2;
129  _coarray_elmts[2] = n3;
130  _coarray_elmts[3] = n4;
131  _coarray_elmts[4] = n5;
132  _coarray_elmts[5] = n6;
133  _coarray_elmts[6] = n7;
134  _total_coarray_elmts = n1*n2*n3*n4*n5*n6*n7;
135 }

◆ _XMP_coarray_put()

void _XMP_coarray_put ( void *  ,
void *  ,
void *   
)
1161 {
1162  if(_transfer_coarray_elmts == 0 || _transfer_array_elmts == 0) return;
1163 
1164  if(_transfer_coarray_elmts != _transfer_array_elmts && _transfer_array_elmts != 1){
1165  _XMP_fatal("Coarray Error ! transfer size is wrong.\n");
1166  // e.g. a[0:3]:[3] = b[0:2] is NG, but a[0:3]:[3] = b[0:1] is OK.
1167  }
1168 
1169  int target_rank = 0;
1170  for(int i=0;i<_image_dims;i++)
1171  target_rank += ((_XMP_coarray_t*)remote_coarray)->distance_of_image_elmts[i] * _image_num[i];
1172 
1173  check_target_rank(target_rank);
1174 
1175  for(int i=0;i<_coarray_dims;i++){
1176  _coarray[i].elmts = ((_XMP_coarray_t*)remote_coarray)->coarray_elmts[i];
1177  _coarray[i].distance = ((_XMP_coarray_t*)remote_coarray)->distance_of_coarray_elmts[i];
1178  }
1179 
1180  int remote_coarray_is_contiguous = _check_contiguous(_coarray, _coarray_dims, _transfer_coarray_elmts);
1181  int local_array_is_contiguous = _check_contiguous(_array, _array_dims, _transfer_array_elmts);
1182 
1183  // _XMP_local_put(), _XMP_gasnet_put(), ... don't support to transfer long data size now.
1184  // _XMP_check_less_than_SIZE_MAX() checks whether the trasfer size is less than SIZE_MAX, defined in <limits.h>.
1185  size_t elmt_size = ((_XMP_coarray_t*)remote_coarray)->elmt_size;
1186  _XMP_check_less_than_SIZE_MAX(_transfer_coarray_elmts*elmt_size); // fix me
1187  _XMP_check_less_than_SIZE_MAX(_transfer_array_elmts*elmt_size); // fix me
1188 
1189  if(target_rank == _XMP_world_rank){
1190  _XMP_local_put(remote_coarray, local_array, remote_coarray_is_contiguous, local_array_is_contiguous,
1191  _coarray_dims, _array_dims, _coarray, _array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1192  }
1193  else{
1194 #ifdef _XMP_GASNET
1195  _XMP_gasnet_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1196  _coarray, _array, remote_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1197 #elif _XMP_FJRDMA
1198  _XMP_fjrdma_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1199  _coarray, _array, remote_coarray, local_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1200 #elif _XMP_UTOFU
1201  _XMP_utofu_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1202  _coarray, _array, remote_coarray, local_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts);
1203 #elif _XMP_MPI3_ONESIDED
1204  _XMP_mpi_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1205  _coarray, _array, remote_coarray, local_array, (size_t)_transfer_coarray_elmts, (size_t)_transfer_array_elmts,
1207 #endif
1208  }
1209 
1210  free(_coarray);
1211  free(_array);
1212  free(_image_num);
1213 }

◆ _XMP_coarray_put_acc()

void _XMP_coarray_put_acc ( void *  ,
void *  ,
void *  ,
const int  ,
const int   
)
1669 {
1670  if(_transfer_coarray_elmts == 0 || _transfer_array_elmts == 0) return;
1671 
1672  if(_transfer_coarray_elmts != _transfer_array_elmts && _transfer_array_elmts != 1){
1673  _XMP_fatal("Coarray Error ! transfer size is wrong.\n");
1674  // e.g. a[0:3]:[3] = b[0:2] is NG, but a[0:3]:[3] = b[0:1] is OK.
1675  }
1676 
1677  int target_rank = 0;
1678  for(int i=0;i<_image_dims;i++)
1679  target_rank += ((_XMP_coarray_t*)remote_coarray)->distance_of_image_elmts[i] * _image_num[i];
1680  check_target_rank(target_rank);
1681 
1682  for(int i=0;i<_coarray_dims;i++){
1683  _coarray[i].elmts = ((_XMP_coarray_t*)remote_coarray)->coarray_elmts[i];
1684  _coarray[i].distance = ((_XMP_coarray_t*)remote_coarray)->distance_of_coarray_elmts[i];
1685  }
1686 
1687  int remote_coarray_is_contiguous = _check_contiguous(_coarray, _coarray_dims, _transfer_coarray_elmts);
1688  int local_array_is_contiguous = _check_contiguous(_array, _array_dims, _transfer_array_elmts);
1689 
1690  if(target_rank == _XMP_world_rank){
1691  _XMP_fatal("_XMP_coarray_put_acc: local_put is unimplemented");
1692  /* _XMP_local_put(remote_coarray, local_array, remote_coarray_is_contiguous, local_array_is_contiguous, */
1693  /* _coarray_dims, _array_dims, _coarray, _array, _transfer_coarray_elmts, _transfer_array_elmts); */
1694  }
1695  else{
1696 #ifdef _XMP_GASNET
1697  _XMP_gasnet_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1698  _coarray, _array, remote_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1699 #elif _XMP_FJRDMA
1700  _XMP_fjrdma_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1701  _coarray, _array, remote_coarray, local_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1702 #elif _XMP_UTOFU
1703  _XMP_utofu_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1704  _coarray, _array, remote_coarray, local_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts);
1705 #elif _XMP_MPI3_ONESIDED
1706  _XMP_mpi_put(remote_coarray_is_contiguous, local_array_is_contiguous, target_rank, _coarray_dims, _array_dims,
1707  _coarray, _array, remote_coarray, local_array, _transfer_coarray_elmts, _transfer_array_elmts,
1708  is_remote_on_acc);
1709 #endif
1710  }
1711 
1712  free(_coarray);
1713  free(_array);
1714  free(_image_num);
1715 }

◆ _XMP_coarray_rdma_array_set_1()

void _XMP_coarray_rdma_array_set_1 ( const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 1-dim array information.

657 {
658  _transfer_array_elmts = length1;
659  _array_dims = 1;
660  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
661 
662  _array[0].start = start1;
663  _array[0].length = length1;
664  _array[0].stride = ((length1 == 1)? 1 : stride1);
665  _array[0].elmts = elmts1;
666  _array[0].distance = (long)elmt;
667 }

◆ _XMP_coarray_rdma_array_set_2()

void _XMP_coarray_rdma_array_set_2 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 2-dim array information.

675 {
676  _transfer_array_elmts = length1 * length2;
677  _array_dims = 2;
678  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
679 
680  _array[0].start = start1;
681  _array[0].length = length1;
682  _array[0].stride = ((length1 == 1)? 1 : stride1);
683  _array[0].elmts = elmts1;
684  _array[0].distance = elmts2 * (long)elmt;
685 
686  _array[1].start = start2;
687  _array[1].length = length2;
688  _array[1].stride = ((length2 == 1)? 1 : stride2);
689  _array[1].elmts = elmts2;
690  _array[1].distance = (long)elmt;
691 }

◆ _XMP_coarray_rdma_array_set_3()

void _XMP_coarray_rdma_array_set_3 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 3-dim array information.

700 {
701  _transfer_array_elmts = length1 * length2 * length3;
702  _array_dims = 3;
703  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
704 
705  _array[0].start = start1;
706  _array[0].length = length1;
707  _array[0].stride = ((length1 == 1)? 1 : stride1);
708  _array[0].elmts = elmts1;
709  _array[0].distance = elmts2 * elmts3 * (long)elmt;
710 
711  _array[1].start = start2;
712  _array[1].length = length2;
713  _array[1].stride = ((length2 == 1)? 1 : stride2);
714  _array[1].elmts = elmts2;
715  _array[1].distance = elmts3 * (long)elmt;
716 
717  _array[2].start = start3;
718  _array[2].length = length3;
719  _array[2].stride = ((length3 == 1)? 1 : stride3);
720  _array[2].elmts = elmts3;
721  _array[2].distance = (long)elmt;
722 }

◆ _XMP_coarray_rdma_array_set_4()

void _XMP_coarray_rdma_array_set_4 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 4-dim array information.

732 {
733  _transfer_array_elmts = length1 * length2 * length3 * length4;
734  _array_dims = 4;
735  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
736 
737  _array[0].start = start1;
738  _array[0].length = length1;
739  _array[0].stride = ((length1 == 1)? 1 : stride1);
740  _array[0].elmts = elmts1;
741  _array[0].distance = elmts2 * elmts3 * elmts4 * (long)elmt;
742 
743  _array[1].start = start2;
744  _array[1].length = length2;
745  _array[1].stride = ((length2 == 1)? 1 : stride2);
746  _array[1].elmts = elmts2;
747  _array[1].distance = elmts3 * elmts4 * (long)elmt;
748 
749  _array[2].start = start3;
750  _array[2].length = length3;
751  _array[2].stride = ((length3 == 1)? 1 : stride3);
752  _array[2].elmts = elmts3;
753  _array[2].distance = elmts4 * (long)elmt;
754 
755  _array[3].start = start4;
756  _array[3].length = length4;
757  _array[3].stride = ((length4 == 1)? 1 : stride4);
758  _array[3].elmts = elmts4;
759  _array[3].distance = (long)elmt;
760 }

◆ _XMP_coarray_rdma_array_set_5()

void _XMP_coarray_rdma_array_set_5 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 5-dim array information.

771 {
772  _transfer_array_elmts = length1 * length2 * length3 * length4 * length5;
773  _array_dims = 5;
774  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
775 
776  _array[0].start = start1;
777  _array[0].length = length1;
778  _array[0].stride = ((length1 == 1)? 1 : stride1);
779  _array[0].elmts = elmts1;
780  _array[0].distance = elmts2 * elmts3 * elmts4 * elmts5 * (long)elmt;
781 
782  _array[1].start = start2;
783  _array[1].length = length2;
784  _array[1].stride = ((length2 == 1)? 1 : stride2);
785  _array[1].elmts = elmts2;
786  _array[1].distance = elmts3 * elmts4 * elmts5 * (long)elmt;
787 
788  _array[2].start = start3;
789  _array[2].length = length3;
790  _array[2].stride = ((length3 == 1)? 1 : stride3);
791  _array[2].elmts = elmts3;
792  _array[2].distance = elmts4 * elmts5 * (long)elmt;
793 
794  _array[3].start = start4;
795  _array[3].length = length4;
796  _array[3].stride = ((length4 == 1)? 1 : stride4);
797  _array[3].elmts = elmts4;
798  _array[3].distance = elmts5 * (long)elmt;
799 
800  _array[4].start = start5;
801  _array[4].length = length5;
802  _array[4].stride = ((length5 == 1)? 1 : stride5);
803  _array[4].elmts = elmts5;
804  _array[4].distance = (long)elmt;
805 }

◆ _XMP_coarray_rdma_array_set_6()

void _XMP_coarray_rdma_array_set_6 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 6-dim array information.

817 {
818  _transfer_array_elmts = length1 * length2 * length3 * length4 * length5 * length6;
819  _array_dims = 6;
820  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
821 
822  _array[0].start = start1;
823  _array[0].length = length1;
824  _array[0].stride = ((length1 == 1)? 1 : stride1);
825  _array[0].elmts = elmts1;
826  _array[0].distance = elmts2 * elmts3 * elmts4 * elmts5 * elmts6 * (long)elmt;
827 
828  _array[1].start = start2;
829  _array[1].length = length2;
830  _array[1].stride = ((length2 == 1)? 1 : stride2);
831  _array[1].elmts = elmts2;
832  _array[1].distance = elmts3 * elmts4 * elmts5 * elmts6 * (long)elmt;
833 
834  _array[2].start = start3;
835  _array[2].length = length3;
836  _array[2].stride = ((length3 == 1)? 1 : stride3);
837  _array[2].elmts = elmts3;
838  _array[2].distance = elmts4 * elmts5 * elmts6 * (long)elmt;
839 
840  _array[3].start = start4;
841  _array[3].length = length4;
842  _array[3].stride = ((length4 == 1)? 1 : stride4);
843  _array[3].elmts = elmts4;
844  _array[3].distance = elmts5 * elmts6 * (long)elmt;
845 
846  _array[4].start = start5;
847  _array[4].length = length5;
848  _array[4].stride = ((length5 == 1)? 1 : stride5);
849  _array[4].elmts = elmts5;
850  _array[4].distance = elmts6 * (long)elmt;
851 
852  _array[5].start = start6;
853  _array[5].length = length6;
854  _array[5].stride = ((length6 == 1)? 1 : stride6);
855  _array[5].elmts = elmts6;
856  _array[5].distance = (long)elmt;
857 }

◆ _XMP_coarray_rdma_array_set_7()

void _XMP_coarray_rdma_array_set_7 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const  size_t 
)

Set transfer 7-dim array information.

870 {
871  _transfer_array_elmts = length1 * length2 * length3 * length4 * length5 * length6 * length7;
872  _array_dims = 7;
873  _array = malloc(sizeof(_XMP_array_section_t) * _array_dims);
874 
875  _array[0].start = start1;
876  _array[0].length = length1;
877  _array[0].stride = ((length1 == 1)? 1 : stride1);
878  _array[0].elmts = elmts1;
879  _array[0].distance = elmts2 * elmts3 * elmts4 * elmts5 * elmts6 * elmts7 * (long)elmt;
880 
881  _array[1].start = start2;
882  _array[1].length = length2;
883  _array[1].stride = ((length2 == 1)? 1 : stride2);
884  _array[1].elmts = elmts2;
885  _array[1].distance = elmts3 * elmts4 * elmts5 * elmts6 * elmts7 * (long)elmt;
886 
887  _array[2].start = start3;
888  _array[2].length = length3;
889  _array[2].stride = ((length3 == 1)? 1 : stride3);
890  _array[2].elmts = elmts3;
891  _array[2].distance = elmts4 * elmts5 * elmts6 * elmts7 * (long)elmt;
892 
893  _array[3].start = start4;
894  _array[3].length = length4;
895  _array[3].stride = ((length4 == 1)? 1 : stride4);
896  _array[3].elmts = elmts4;
897  _array[3].distance = elmts5 * elmts6 * elmts7 * (long)elmt;
898 
899  _array[4].start = start5;
900  _array[4].length = length5;
901  _array[4].stride = ((length5 == 1)? 1 : stride5);
902  _array[4].elmts = elmts5;
903  _array[4].distance = elmts6 * elmts7 * (long)elmt;
904 
905  _array[5].start = start6;
906  _array[5].length = length6;
907  _array[5].stride = ((length6 == 1)? 1 : stride6);
908  _array[5].elmts = elmts6;
909  _array[5].distance = elmts7 * (long)elmt;
910 
911  _array[6].start = start7;
912  _array[6].length = length7;
913  _array[6].stride = ((length7 == 1)? 1 : stride7);
914  _array[6].elmts = elmts7;
915  _array[6].distance = (long)elmt;
916 }

◆ _XMP_coarray_rdma_coarray_set_1()

void _XMP_coarray_rdma_coarray_set_1 ( const long  ,
const long  ,
const long   
)

Set transfer 1-dim coarray information.

435 {
436  _transfer_coarray_elmts = length1;
437  _coarray_dims = 1;
438  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
439 
440  _coarray[0].start = start1;
441  _coarray[0].length = length1;
442  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
443 }

◆ _XMP_coarray_rdma_coarray_set_2()

void _XMP_coarray_rdma_coarray_set_2 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 2-dim coarray information.

450 {
451  _transfer_coarray_elmts = length1 * length2;
452  _coarray_dims = 2;
453  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
454 
455  _coarray[0].start = start1;
456  _coarray[0].length = length1;
457  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
458 
459  _coarray[1].start = start2;
460  _coarray[1].length = length2;
461  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
462 }

◆ _XMP_coarray_rdma_coarray_set_3()

void _XMP_coarray_rdma_coarray_set_3 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 3-dim coarray information.

470 {
471  _transfer_coarray_elmts = length1 * length2 * length3;
472  _coarray_dims = 3;
473  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
474 
475  _coarray[0].start = start1;
476  _coarray[0].length = length1;
477  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
478 
479  _coarray[1].start = start2;
480  _coarray[1].length = length2;
481  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
482 
483  _coarray[2].start = start3;
484  _coarray[2].length = length3;
485  _coarray[2].stride = ((length3 == 1)? 1 : stride3);
486 }

◆ _XMP_coarray_rdma_coarray_set_4()

void _XMP_coarray_rdma_coarray_set_4 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 4-dim coarray information.

495 {
496  _transfer_coarray_elmts = length1 * length2 * length3 * length4;
497  _coarray_dims = 4;
498  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
499 
500  _coarray[0].start = start1;
501  _coarray[0].length = length1;
502  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
503 
504  _coarray[1].start = start2;
505  _coarray[1].length = length2;
506  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
507 
508  _coarray[2].start = start3;
509  _coarray[2].length = length3;
510  _coarray[2].stride = ((length3 == 1)? 1 : stride3);
511 
512  _coarray[3].start = start4;
513  _coarray[3].length = length4;
514  _coarray[3].stride = ((length4 == 1)? 1 : stride4);
515 }

◆ _XMP_coarray_rdma_coarray_set_5()

void _XMP_coarray_rdma_coarray_set_5 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 5-dim coarray information.

525 {
526  _transfer_coarray_elmts = length1 * length2 * length3 * length4 * length5;
527  _coarray_dims = 5;
528  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
529 
530  _coarray[0].start = start1;
531  _coarray[0].length = length1;
532  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
533 
534  _coarray[1].start = start2;
535  _coarray[1].length = length2;
536  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
537 
538  _coarray[2].start = start3;
539  _coarray[2].length = length3;
540  _coarray[2].stride = ((length3 == 1)? 1 : stride3);
541 
542  _coarray[3].start = start4;
543  _coarray[3].length = length4;
544  _coarray[3].stride = ((length4 == 1)? 1 : stride4);
545 
546  _coarray[4].start = start5;
547  _coarray[4].length = length5;
548  _coarray[4].stride = ((length5 == 1)? 1 : stride5);
549 }

◆ _XMP_coarray_rdma_coarray_set_6()

void _XMP_coarray_rdma_coarray_set_6 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 6-dim coarray information.

560 {
561  _transfer_coarray_elmts = length1 * length2 * length3 * length4 * length5 * length6;
562  _coarray_dims = 6;
563  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
564 
565  _coarray[0].start = start1;
566  _coarray[0].length = length1;
567  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
568 
569  _coarray[1].start = start2;
570  _coarray[1].length = length2;
571  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
572 
573  _coarray[2].start = start3;
574  _coarray[2].length = length3;
575  _coarray[2].stride = ((length3 == 1)? 1 : stride3);
576 
577  _coarray[3].start = start4;
578  _coarray[3].length = length4;
579  _coarray[3].stride = ((length4 == 1)? 1 : stride4);
580 
581  _coarray[4].start = start5;
582  _coarray[4].length = length5;
583  _coarray[4].stride = ((length5 == 1)? 1 : stride5);
584 
585  _coarray[5].start = start6;
586  _coarray[5].length = length6;
587  _coarray[5].stride = ((length6 == 1)? 1 : stride6);
588 }

◆ _XMP_coarray_rdma_coarray_set_7()

void _XMP_coarray_rdma_coarray_set_7 ( const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long  ,
const long   
)

Set transfer 7-dim coarray information.

600 {
601  _transfer_coarray_elmts = length1 * length2 * length3 * length4 * length5 * length6 * length7;
602  _coarray_dims = 7;
603  _coarray = malloc(sizeof(_XMP_array_section_t) * _coarray_dims);
604 
605  _coarray[0].start = start1;
606  _coarray[0].length = length1;
607  _coarray[0].stride = ((length1 == 1)? 1 : stride1);
608 
609  _coarray[1].start = start2;
610  _coarray[1].length = length2;
611  _coarray[1].stride = ((length2 == 1)? 1 : stride2);
612 
613  _coarray[2].start = start3;
614  _coarray[2].length = length3;
615  _coarray[2].stride = ((length3 == 1)? 1 : stride3);
616 
617  _coarray[3].start = start4;
618  _coarray[3].length = length4;
619  _coarray[3].stride = ((length4 == 1)? 1 : stride4);
620 
621  _coarray[4].start = start5;
622  _coarray[4].length = length5;
623  _coarray[4].stride = ((length5 == 1)? 1 : stride5);
624 
625  _coarray[5].start = start6;
626  _coarray[5].length = length6;
627  _coarray[5].stride = ((length6 == 1)? 1 : stride6);
628 
629  _coarray[6].start = start7;
630  _coarray[6].length = length7;
631  _coarray[6].stride = ((length7 == 1)? 1 : stride7);
632 }

◆ _XMP_coarray_rdma_image_set_1()

void _XMP_coarray_rdma_image_set_1 ( const int  )

Set 1-dim image information.

943 {
944  _image_dims = 1;
945  _image_num = malloc(sizeof(int) * _image_dims);
946  _image_num[0] = n1;
947 }

◆ _XMP_coarray_rdma_image_set_2()

void _XMP_coarray_rdma_image_set_2 ( const int  ,
const int   
)

Set 2-dim image information.

953 {
954  _image_dims = 2;
955  _image_num = malloc(sizeof(int) * _image_dims);
956  _image_num[0] = n1;
957  _image_num[1] = n2;
958 }

◆ _XMP_coarray_rdma_image_set_3()

void _XMP_coarray_rdma_image_set_3 ( const int  ,
const int  ,
const int   
)

Set 3-dim image information.

964 {
965  _image_dims = 3;
966  _image_num = malloc(sizeof(int) * _image_dims);
967  _image_num[0] = n1;
968  _image_num[1] = n2;
969  _image_num[2] = n3;
970 }

◆ _XMP_coarray_rdma_image_set_4()

void _XMP_coarray_rdma_image_set_4 ( const int  ,
const int  ,
const int  ,
const int   
)

Set 4-dim image information.

976 {
977  _image_dims = 4;
978  _image_num = malloc(sizeof(int) * _image_dims);
979  _image_num[0] = n1;
980  _image_num[1] = n2;
981  _image_num[2] = n3;
982  _image_num[3] = n4;
983 }

◆ _XMP_coarray_rdma_image_set_5()

void _XMP_coarray_rdma_image_set_5 ( const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

Set 5-dim image information.

990 {
991  _image_dims = 5;
992  _image_num = malloc(sizeof(int) * _image_dims);
993  _image_num[0] = n1;
994  _image_num[1] = n2;
995  _image_num[2] = n3;
996  _image_num[3] = n4;
997  _image_num[4] = n5;
998 }

◆ _XMP_coarray_rdma_image_set_6()

void _XMP_coarray_rdma_image_set_6 ( const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

Set 6-dim image information.

1005 {
1006  _image_dims = 6;
1007  _image_num = malloc(sizeof(int) * _image_dims);
1008  _image_num[0] = n1;
1009  _image_num[1] = n2;
1010  _image_num[2] = n3;
1011  _image_num[3] = n4;
1012  _image_num[4] = n5;
1013  _image_num[5] = n6;
1014 }

◆ _XMP_coarray_rdma_image_set_7()

void _XMP_coarray_rdma_image_set_7 ( const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

Set 7-dim image information.

1021 {
1022  _image_dims = 7;
1023  _image_num = malloc(sizeof(int) * _image_dims);
1024  _image_num[0] = n1;
1025  _image_num[1] = n2;
1026  _image_num[2] = n3;
1027  _image_num[3] = n4;
1028  _image_num[4] = n5;
1029  _image_num[5] = n6;
1030  _image_num[6] = n7;
1031 }

◆ _XMP_coarray_regmem()

void _XMP_coarray_regmem ( void **  ,
void *   
)

Create coarray object but not allocate coarray.

360 {
363  *coarray_desc = c;
364 
365  long transfer_size = _total_coarray_elmts*_elmt_size;
366  _XMP_check_less_than_SIZE_MAX(transfer_size);
367 
368 #if _XMP_GASNET
369  //not implemented
370  _XMP_fatal("_XMP_coarray_regmem_do is not supported over GASNet.\n");
371 #elif _XMP_FJRDMA
372  _XMP_fjrdma_regmem(*coarray_desc, addr, (size_t)transfer_size);
373 #elif _XMP_UTOFU
374  _XMP_utofu_regmem(*coarray_desc, addr, (size_t)transfer_size);
375 #elif _XMP_MPI3_ONESIDED
376  _XMP_mpi_coarray_regmem(*coarray_desc, addr, (size_t)transfer_size, false);
377 #endif
378 
379  _push_coarray_queue(c);
380 }

◆ _XMP_coarray_sync_all()

void _XMP_coarray_sync_all ( )

Execute sync_all()

1372 {
1373 #ifdef _XMP_GASNET
1375 #elif _XMP_FJRDMA
1377 #elif _XMP_UTOFU
1379 #elif _XMP_MPI3_ONESIDED
1381 #endif
1382 }
Here is the call graph for this function:

◆ _XMP_coarray_sync_memory()

void _XMP_coarray_sync_memory ( )

Execute sync_memory()

1388 {
1389 #ifdef _XMP_GASNET
1391 #elif _XMP_FJRDMA
1393 #elif _XMP_UTOFU
1395 #elif _XMP_TCA
1397 #elif _XMP_MPI3_ONESIDED
1399 #endif
1400 }
Here is the call graph for this function:

◆ _XMP_dealloc_array()

void _XMP_dealloc_array ( void *  array_desc)
Here is the caller graph for this function:

◆ _XMP_desc_of()

char* _XMP_desc_of ( void *  p)
87 {
88  return (char *)p;
89 }

◆ _XMP_dist_template_BLOCK()

void _XMP_dist_template_BLOCK ( void *  template,
int  template_index,
int  nodes_index 
)

◆ _XMP_dist_template_BLOCK_CYCLIC()

void _XMP_dist_template_BLOCK_CYCLIC ( void *  template,
int  template_index,
int  nodes_index,
unsigned long long  width 
)

◆ _XMP_dist_template_CYCLIC()

void _XMP_dist_template_CYCLIC ( void *  template,
int  template_index,
int  nodes_index 
)

◆ _XMP_dist_template_DUPLICATION()

void _XMP_dist_template_DUPLICATION ( void *  template,
int  template_index 
)

◆ _XMP_dist_template_GBLOCK()

void _XMP_dist_template_GBLOCK ( void *  template,
int  template_index,
int  nodes_index,
int *  mapping_array,
int *  temp0 
)

◆ _XMP_exchange_shadow_NORMAL()

void _XMP_exchange_shadow_NORMAL ( void **  lo_recv_buffer,
void **  hi_recv_buffer,
void *  lo_send_buffer,
void *  hi_send_buffer,
void *  array_desc,
int  array_index 
)

◆ _XMP_exec_task_NODES_ENTIRE()

int _XMP_exec_task_NODES_ENTIRE ( void **  task_desc,
void *  ref_nodes 
)

◆ _XMP_exec_task_NODES_ENTIRE_nocomm()

int _XMP_exec_task_NODES_ENTIRE_nocomm ( void **  task_desc,
void *  ref_nodes 
)

◆ _XMP_exec_task_NODES_FINALIZE()

void _XMP_exec_task_NODES_FINALIZE ( void *  task_desc)

◆ _XMP_exec_task_NODES_PART()

int _XMP_exec_task_NODES_PART ( void **  task_desc,
void *  ref_nodes,
  ... 
)

◆ _XMP_exec_task_NODES_PART_nocomm()

int _XMP_exec_task_NODES_PART_nocomm ( void **  task_desc,
void *  ref_nodes,
  ... 
)

◆ _XMP_exec_task_TEMPLATE_PART()

int _XMP_exec_task_TEMPLATE_PART ( void **  task_desc,
void *  ref_template,
  ... 
)

◆ _XMP_exec_task_TEMPLATE_PART_nocomm()

int _XMP_exec_task_TEMPLATE_PART_nocomm ( void **  task_desc,
void *  ref_template,
  ... 
)

◆ _XMP_fatal()

void _XMP_fatal ( char *  msg)
43 {
44  fprintf(stderr, "[RANK:%d] XcalableMP runtime error: %s\n", _XMP_world_rank, msg);
45  MPI_Abort(MPI_COMM_WORLD, 1);
46 }

◆ _XMP_finalize_array_desc()

void _XMP_finalize_array_desc ( void *  array)

◆ _XMP_finalize_comm()

void _XMP_finalize_comm ( void *  comm)
Here is the caller graph for this function:

◆ _XMP_finalize_nodes()

void _XMP_finalize_nodes ( void *  nodes)
Here is the caller graph for this function:

◆ _XMP_finalize_template()

void _XMP_finalize_template ( void *  template)

◆ _XMP_finalize_world()

void _XMP_finalize_world ( void  )

◆ _XMP_free()

void _XMP_free ( void *  p)
38 {
39  free(p);
40 }
Here is the caller graph for this function:

◆ _XMP_gasnet_contiguous_get()

void _XMP_gasnet_contiguous_get ( )

◆ _XMP_gasnet_contiguous_put()

void _XMP_gasnet_contiguous_put ( )

◆ _XMP_gasnet_not_contiguous_get()

void _XMP_gasnet_not_contiguous_get ( )

◆ _XMP_gasnet_not_contiguous_put()

void _XMP_gasnet_not_contiguous_put ( )

◆ _XMP_get_array_total_elmts()

unsigned long long _XMP_get_array_total_elmts ( void *  array)

◆ _XMP_get_execution_nodes()

void* _XMP_get_execution_nodes ( void  )
47 {
48  return _XMP_nodes_stack_top->nodes;
49 }
Here is the caller graph for this function:

◆ _XMP_get_execution_nodes_rank()

int _XMP_get_execution_nodes_rank ( void  )
52 {
54 }

◆ _XMP_gpu_finalize()

void _XMP_gpu_finalize ( void  )

◆ _XMP_gpu_finalize_data()

void _XMP_gpu_finalize_data ( void *  desc)

◆ _XMP_gpu_init()

void _XMP_gpu_init ( void  )

◆ _XMP_gpu_init_data_ALIGNED()

void _XMP_gpu_init_data_ALIGNED ( void **  host_data_desc,
void **  device_array_desc,
void **  device_addr,
void *  addr,
void *  array_desc 
)

◆ _XMP_gpu_init_data_NOT_ALIGNED()

void _XMP_gpu_init_data_NOT_ALIGNED ( void **  host_data_desc,
void **  device_addr,
void *  addr,
size_t  size 
)

◆ _XMP_gpu_pack_shadow_NORMAL()

void _XMP_gpu_pack_shadow_NORMAL ( void *  desc,
void **  lo_buffer,
void **  hi_buffer,
int  array_index 
)

◆ _XMP_gpu_sync()

void _XMP_gpu_sync ( void *  desc,
int  direction 
)

◆ _XMP_gpu_unpack_shadow_NORMAL()

void _XMP_gpu_unpack_shadow_NORMAL ( void *  desc,
void *  lo_buffer,
void *  hi_buffer,
int  array_index 
)

◆ _XMP_init_array_addr()

void _XMP_init_array_addr ( void **  array_addr,
void *  init_addr,
void *  array_desc,
  ... 
)

◆ _XMP_init_array_comm()

void _XMP_init_array_comm ( void *  array,
  ... 
)

◆ _XMP_init_array_desc()

void _XMP_init_array_desc ( void **  array,
void *  template,
int  dim,
int  type,
size_t  type_size,
  ... 
)

◆ _XMP_init_array_nodes()

void _XMP_init_array_nodes ( void *  array)
Here is the caller graph for this function:

◆ _XMP_init_nodes_DYNAMIC_EXEC()

void _XMP_init_nodes_DYNAMIC_EXEC ( void **  nodes,
int  dim,
  ... 
)

◆ _XMP_init_nodes_DYNAMIC_GLOBAL()

void _XMP_init_nodes_DYNAMIC_GLOBAL ( void **  nodes,
int  dim,
  ... 
)

◆ _XMP_init_nodes_DYNAMIC_NODES_NAMED()

void _XMP_init_nodes_DYNAMIC_NODES_NAMED ( void **  nodes,
int  dim,
void *  ref_nodes,
  ... 
)

◆ _XMP_init_nodes_DYNAMIC_NODES_NUMBER()

void _XMP_init_nodes_DYNAMIC_NODES_NUMBER ( void **  nodes,
int  dim,
int  ref_lower,
int  ref_upper,
int  ref_stride,
  ... 
)

◆ _XMP_init_nodes_STATIC_EXEC()

void _XMP_init_nodes_STATIC_EXEC ( void **  nodes,
int  dim,
  ... 
)

◆ _XMP_init_nodes_STATIC_GLOBAL()

void _XMP_init_nodes_STATIC_GLOBAL ( void **  nodes,
int  dim,
  ... 
)

◆ _XMP_init_nodes_STATIC_NODES_NAMED()

void _XMP_init_nodes_STATIC_NODES_NAMED ( void **  nodes,
int  dim,
void *  ref_nodes,
  ... 
)

◆ _XMP_init_nodes_STATIC_NODES_NUMBER()

void _XMP_init_nodes_STATIC_NODES_NUMBER ( void **  nodes,
int  dim,
int  ref_lower,
int  ref_upper,
int  ref_stride,
  ... 
)

◆ _XMP_init_reduce_comm_NODES()

int _XMP_init_reduce_comm_NODES ( void *  nodes,
  ... 
)

◆ _XMP_init_reduce_comm_TEMPLATE()

int _XMP_init_reduce_comm_TEMPLATE ( void *  template,
  ... 
)

◆ _XMP_init_shadow()

void _XMP_init_shadow ( void *  array,
  ... 
)

◆ _XMP_init_shadow_noalloc()

void _XMP_init_shadow_noalloc ( void *  a,
  ... 
)

◆ _XMP_init_template_chunk()

void _XMP_init_template_chunk ( void *  template,
void *  nodes 
)

◆ _XMP_init_template_FIXED()

void _XMP_init_template_FIXED ( void **  template,
int  dim,
  ... 
)

◆ _XMP_init_template_UNFIXED()

void _XMP_init_template_UNFIXED ( void **  template,
int  dim,
  ... 
)

◆ _XMP_init_world()

void _XMP_init_world ( int *  argc,
char ***  argv 
)
12  {
13  int flag = 0;
14  MPI_Initialized(&flag);
15  if (!flag) MPI_Init(argc, argv);
16 
17  MPI_Comm *comm = _XMP_alloc(sizeof(MPI_Comm));
18  MPI_Comm_dup(MPI_COMM_WORLD, comm);
23  _XMP_world_nodes = n;
24  _XMP_push_nodes(n);
25 
26  MPI_Barrier(MPI_COMM_WORLD);
27 }

◆ _XMP_lidx_GBLOCK()

int _XMP_lidx_GBLOCK ( void *  a,
int  i_dim,
int  global_idx 
)

◆ _XMP_lock_0()

void _XMP_lock_0 ( const void *  ,
const unsigned int   
)

◆ _XMP_lock_1()

void _XMP_lock_1 ( const void *  ,
const unsigned int  ,
const int   
)

◆ _XMP_lock_2()

void _XMP_lock_2 ( const void *  ,
const unsigned int  ,
const int  ,
const int   
)

◆ _XMP_lock_3()

void _XMP_lock_3 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_lock_4()

void _XMP_lock_4 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_lock_5()

void _XMP_lock_5 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_lock_6()

void _XMP_lock_6 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_lock_7()

void _XMP_lock_7 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_lock_initialize_1()

void _XMP_lock_initialize_1 ( void *  addr,
const unsigned int  e0 
)

Wrapper function of initializing 1-dim array Lock object (e.g.

xmp_lock_t A[e0];)

208 {
209  _xmp_lock_initialize(addr, e0);
210 }

◆ _XMP_lock_initialize_2()

void _XMP_lock_initialize_2 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1 
)

Wrapper function of initializing 2-dim array Lock object (e.g.

xmp_lock_t A[e0][e1];)

216 {
217  _xmp_lock_initialize(addr, e0*e1);
218 }

◆ _XMP_lock_initialize_3()

void _XMP_lock_initialize_3 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1,
const unsigned int  e2 
)

Wrapper function of initializing 3-dim array Lock object (e.g.

xmp_lock_t A[e0][e1][e2];)

224 {
225  _xmp_lock_initialize(addr, e0*e1*e2);
226 }

◆ _XMP_lock_initialize_4()

void _XMP_lock_initialize_4 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1,
const unsigned int  e2,
const unsigned int  e3 
)

Wrapper function of initializing 4-dim array Lock object (e.g.

xmp_lock_t A[e0][e1][e2][e3];)

233 {
234  _xmp_lock_initialize(addr, e0*e1*e2*e3);
235 }

◆ _XMP_lock_initialize_5()

void _XMP_lock_initialize_5 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1,
const unsigned int  e2,
const unsigned int  e3,
const unsigned int  e4 
)

Wrapper function of initializing 5-dim array Lock object (e.g.

xmp_lock_t A[e0][e1][e2][e3][e4];)

242 {
243  _xmp_lock_initialize(addr, e0*e1*e2*e3*e4);
244 }

◆ _XMP_lock_initialize_6()

void _XMP_lock_initialize_6 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1,
const unsigned int  e2,
const unsigned int  e3,
const unsigned int  e4,
const unsigned int  e5 
)

Wrapper function of initializing 6-dim array Lock object (e.g.

xmp_lock_t A[e0][e1][e2][e3][e4][e5];)

251 {
252  _xmp_lock_initialize(addr, e0*e1*e2*e3*e4*e5);
253 }

◆ _XMP_lock_initialize_7()

void _XMP_lock_initialize_7 ( void *  addr,
const unsigned int  e0,
const unsigned int  e1,
const unsigned int  e2,
const unsigned int  e3,
const unsigned int  e4,
const unsigned int  e5,
const unsigned int  e6 
)

Wrapper function of initializing 7-dim array Lock object (e.g.

xmp_lock_t A[e0][e1][e2][e3][e4][e5][e6];)

260 {
261  _xmp_lock_initialize(addr, e0*e1*e2*e3*e4*e5*e6);
262 }

◆ _XMP_modi_i_i()

int _XMP_modi_i_i ( int  value,
int  cycle 
)
19  {
20  int mod = value % cycle;
21  if (mod < 0) {
22  return (mod += cycle) % cycle;
23  }
24  else {
25  return mod;
26  }
27 }

◆ _XMP_modi_ll_i()

int _XMP_modi_ll_i ( long long  value,
int  cycle 
)
9  {
10  int mod = value % cycle;
11  if (mod < 0) {
12  return (mod += cycle) % cycle;
13  }
14  else {
15  return mod;
16  }
17 }
Here is the caller graph for this function:

◆ _XMP_normalize_array_section()

void _XMP_normalize_array_section ( int *  lower,
int *  upper,
int *  stride 
)
Here is the caller graph for this function:

◆ _XMP_pack_array()

void _XMP_pack_array ( void *  buffer,
void *  src,
int  array_type,
size_t  array_type_size,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_pack_array_BASIC()

void _XMP_pack_array_BASIC ( void *  buffer,
void *  src,
int  array_type,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_pack_array_GENERAL()

void _XMP_pack_array_GENERAL ( void *  buffer,
void *  src,
size_t  array_type_size,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_pack_shadow_NORMAL()

void _XMP_pack_shadow_NORMAL ( void **  lo_buffer,
void **  hi_buffer,
void *  array_addr,
void *  array_desc,
int  array_index 
)

◆ _XMP_pop_n_free_nodes()

void _XMP_pop_n_free_nodes ( void  )
31 {
32  _XMP_nodes_dish_t *freed_dish = _XMP_nodes_stack_top;
33  _XMP_nodes_stack_top = freed_dish->prev;
34  _XMP_finalize_nodes(freed_dish->nodes);
35  _XMP_free(freed_dish);
36 }

◆ _XMP_pop_n_free_nodes_wo_finalize_comm()

void _XMP_pop_n_free_nodes_wo_finalize_comm ( void  )
39 {
40  _XMP_nodes_dish_t *freed_dish = _XMP_nodes_stack_top;
41  _XMP_nodes_stack_top = freed_dish->prev;
42  _XMP_free(freed_dish->nodes);
43  _XMP_free(freed_dish);
44 }

◆ _XMP_pop_nodes()

void _XMP_pop_nodes ( void  )
24 {
25  _XMP_nodes_dish_t *freed_dish = _XMP_nodes_stack_top;
26  _XMP_nodes_stack_top = freed_dish->prev;
27  _XMP_free(freed_dish);
28 }

◆ _XMP_post_1()

void _XMP_post_1 ( const void *  ,
const int  ,
const int   
)

◆ _XMP_post_2()

void _XMP_post_2 ( const void *  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_post_3()

void _XMP_post_3 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_post_4()

void _XMP_post_4 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_post_5()

void _XMP_post_5 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_post_6()

void _XMP_post_6 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_post_7()

void _XMP_post_7 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_push_comm()

void _XMP_push_comm ( void *  comm)

◆ _XMP_push_nodes()

void _XMP_push_nodes ( void *  nodes)
Here is the caller graph for this function:

◆ _XMP_reduce_acc_CLAUSE()

void _XMP_reduce_acc_CLAUSE ( void *  dev_addr,
int  count,
int  datatype,
int  op 
)
69 {
70  set_comm_mode();
71 
72  if(comm_mode >= 1){
73  _XMP_reduce_CLAUSE(data_addr, count, datatype, op);
74  }else{
75 #ifdef _XMP_TCA
76  //
77 #else
78  _XMP_reduce_gpu_CLAUSE(data_addr, count, datatype, op);
79 #endif
80 
81  }
82 }

◆ _XMP_reduce_acc_FLMM_CLAUSE()

void _XMP_reduce_acc_FLMM_CLAUSE ( void *  data_addr,
int  count,
int  datatype,
int  op,
int  num_locs,
  ... 
)
85 {
86  _XMP_fatal("_XMP_reduce_acc_FLMM_CLAUSE is unimplemented");
87 }
Here is the call graph for this function:

◆ _XMP_reduce_acc_FLMM_NODES_ENTIRE()

void _XMP_reduce_acc_FLMM_NODES_ENTIRE ( void *  nodes,
void *  addr,
int  count,
int  datatype,
int  op,
int  num_locs,
  ... 
)

◆ _XMP_reduce_acc_NODES_ENTIRE()

void _XMP_reduce_acc_NODES_ENTIRE ( void *  nodes,
void *  dev_addr,
int  count,
int  datatype,
int  op 
)

◆ _XMP_reduce_CLAUSE()

void _XMP_reduce_CLAUSE ( void *  data_addr,
int  count,
int  datatype,
int  op 
)
351  {
353 
354  // setup information
355  MPI_Datatype mpi_datatype = MPI_INT; // dummy
356  size_t datatype_size; // not used in this function
357  MPI_Op mpi_op = MPI_SUM; // dummy
358  _XMP_setup_reduce_type(&mpi_datatype, &datatype_size, datatype);
359  _XMP_setup_reduce_op(&mpi_op, op);
360 
361  // reduce
362  MPI_Allreduce(MPI_IN_PLACE, data_addr, count, mpi_datatype, mpi_op, *((MPI_Comm *)(_XMP_get_execution_nodes())->comm));
363 }

◆ _XMP_reduce_FLMM_CLAUSE()

void _XMP_reduce_FLMM_CLAUSE ( void *  data_addr,
int  count,
int  datatype,
int  op,
int  num_locs,
  ... 
)
366 {
368  _XMP_ASSERT(nodes->is_member);
369 
370  // setup information
371  MPI_Datatype mpi_datatype;
372  size_t datatype_size; // not used in this function
373  MPI_Op mpi_op;
374  _XMP_setup_reduce_type(&mpi_datatype, &datatype_size, datatype);
375  _XMP_setup_reduce_op(&mpi_op, op);
376 
377  // reduce <reduction-variable>
378  size_t n = datatype_size * count;
379  void *temp_buffer = _XMP_alloc(n);
380  memcpy(temp_buffer, data_addr, n);
381 
382  MPI_Allreduce(temp_buffer, data_addr, count, mpi_datatype, mpi_op, *((MPI_Comm *)nodes->comm));
383 
384  // compare results
385  n = sizeof(int) * count;
386  int *cmp_buffer = _XMP_alloc(n);
387  _XMP_compare_reduce_results(cmp_buffer, temp_buffer, data_addr, count, datatype);
388 
389  // reduce <location-variable>
390  va_list args;
391  va_start(args, num_locs);
392  for (int i = 0; i < num_locs; i++) {
393  void *loc = va_arg(args, void *);
394  int loc_datatype = va_arg(args, int);
395 
396  _XMP_setup_reduce_type(&mpi_datatype, &datatype_size, loc_datatype);
397  _XMP_setup_reduce_FLMM_op(&mpi_op, op);
398  _XMP_init_localtion_variables(loc, count, loc_datatype, cmp_buffer, op);
399 
400  n = datatype_size * count;
401  void *loc_temp = _XMP_alloc(n);
402  memcpy(loc_temp, loc, n);
403 
404  MPI_Allreduce(loc_temp, loc, count, mpi_datatype, mpi_op, *((MPI_Comm *)nodes->comm));
405 
406  _XMP_free(loc_temp);
407  }
408  va_end(args);
409 
410  _XMP_free(temp_buffer);
411  _XMP_free(cmp_buffer);
412 }
Here is the call graph for this function:

◆ _XMP_reduce_FLMM_NODES_ENTIRE()

void _XMP_reduce_FLMM_NODES_ENTIRE ( void *  nodes,
void *  addr,
int  count,
int  datatype,
int  op,
int  num_locs,
  ... 
)

◆ _XMP_reduce_NODES_ENTIRE()

void _XMP_reduce_NODES_ENTIRE ( void *  nodes,
void *  addr,
int  count,
int  datatype,
int  op 
)

◆ _XMP_reduce_shadow__()

void _XMP_reduce_shadow__ ( void *  a)

◆ _XMP_reflect__()

void _XMP_reflect__ ( char *  a)

◆ _XMP_reflect_acc__()

void _XMP_reflect_acc__ ( void *  acc_addr,
void *  array_desc 
)

◆ _XMP_reflect_async__()

void _XMP_reflect_async__ ( void *  a,
int  async_id 
)

◆ _XMP_reflect_do_acc()

void _XMP_reflect_do_acc ( void *  )

◆ _XMP_reflect_init_acc()

void _XMP_reflect_init_acc ( void *  ,
void *   
)

◆ _XMP_reflect_shadow_FULL()

void _XMP_reflect_shadow_FULL ( void *  array_addr,
void *  array_desc,
int  array_index 
)

◆ _XMP_set_reduce_shadow__()

void _XMP_set_reduce_shadow__ ( void *  a,
int  dim,
int  lwidth,
int  uwidth,
int  is_periodic 
)

◆ _XMP_set_reflect__()

void _XMP_set_reflect__ ( void *  a,
int  dim,
int  lwidth,
int  uwidth,
int  is_periodic 
)

◆ _XMP_set_reflect_acc__()

void _XMP_set_reflect_acc__ ( void *  a,
int  dim,
int  lwidth,
int  uwidth,
int  is_periodic 
)

◆ _XMP_set_template_size()

void _XMP_set_template_size ( void **  template,
int  dim,
  ... 
)

◆ _XMP_threads_finalize()

void _XMP_threads_finalize ( void  )
7  {
8  return;
9 }

◆ _XMP_threads_init()

void _XMP_threads_init ( void  )
3  {
4  return;
5 }

◆ _XMP_unexpected_error()

void _XMP_unexpected_error ( void  )
54 {
55  _XMP_fatal("unexpected error in runtime");
56 }

◆ _XMP_unlock_0()

void _XMP_unlock_0 ( const void *  ,
const unsigned int   
)

◆ _XMP_unlock_1()

void _XMP_unlock_1 ( const void *  ,
const unsigned int  ,
const int   
)

◆ _XMP_unlock_2()

void _XMP_unlock_2 ( const void *  ,
const unsigned int  ,
const int  ,
const int   
)

◆ _XMP_unlock_3()

void _XMP_unlock_3 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_unlock_4()

void _XMP_unlock_4 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_unlock_5()

void _XMP_unlock_5 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_unlock_6()

void _XMP_unlock_6 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_unlock_7()

void _XMP_unlock_7 ( const void *  ,
const unsigned int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_unpack_array()

void _XMP_unpack_array ( void *  dst,
void *  buffer,
int  array_type,
size_t  array_type_size,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_unpack_array_BASIC()

void _XMP_unpack_array_BASIC ( void *  dst,
void *  buffer,
int  array_type,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_unpack_array_GENERAL()

void _XMP_unpack_array_GENERAL ( void *  dst,
void *  buffer,
size_t  array_type_size,
int  array_dim,
int *  l,
int *  u,
int *  s,
unsigned long long *  d 
)

◆ _XMP_unpack_shadow_NORMAL()

void _XMP_unpack_shadow_NORMAL ( void *  lo_buffer,
void *  hi_buffer,
void *  array_addr,
void *  array_desc,
int  array_index 
)

◆ _XMP_wait_1()

void _XMP_wait_1 ( const void *  ,
const int  ,
const int   
)

◆ _XMP_wait_2()

void _XMP_wait_2 ( const void *  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_3()

void _XMP_wait_3 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_4()

void _XMP_wait_4 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_5()

void _XMP_wait_5 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_6()

void _XMP_wait_6 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_7()

void _XMP_wait_7 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_async__()

void _XMP_wait_async__ ( int  async_id)
88 {
89  _XMP_async_comm_t *async;
90 
91  if(!(async = _XMP_get_async(async_id))) return;
92 
93  int nreqs = async->nreqs;
94  MPI_Request *reqs = async->reqs;
95 
96 #if defined(_KCOMPUTER) && defined(K_RDMA_REFLECT)
97  // For RDMA reflects, async->nreqs > 0 and async->reqs == NULL.
98  if(nreqs && !reqs){
99  _XMP_wait_async_rdma(async);
100  return;
101  }
102 #endif
103 
104  _XMP_async_gmove_t *gmove = async->gmove;
105 
106  if (async->type == _XMP_COMM_REDUCE_SHADOW){
107  MPI_Waitall(nreqs, reqs, MPI_STATUSES_IGNORE);
108  _XMP_reduce_shadow_sum(async->a);
109  }
110  else if (!gmove || gmove->mode == _XMP_N_GMOVE_NORMAL){
111  _XMP_TSTART(t0);
112  MPI_Waitall(nreqs, reqs, MPI_STATUSES_IGNORE);
113  _XMP_TEND(xmptiming_.t_wait, t0);
114  }
115 
116  //
117  // for asynchronous gmove
118  //
119 
120  if (gmove){
121  if (gmove->mode == _XMP_N_GMOVE_NORMAL) _XMP_finalize_async_gmove(gmove);
122 #ifdef _XMP_MPI3_ONESIDED
123  else {
124  int status;
125  // NOTE: the send_buf field is used for an improper purpose.
126  _XMP_sync_images_COMM((MPI_Comm *)gmove->sendbuf, &status);
127  }
128 #endif
129  }
130 
131 }

◆ _XMP_wait_noargs()

void _XMP_wait_noargs ( )
174 {
175 #ifdef _XMP_GASNET
177 #elif _XMP_FJRDMA
179 #elif _XMP_UTOFU
181 #elif _XMP_TCA
183 #elif _XMP_MPI3_ONESIDED
185 #endif
186 }
Here is the call graph for this function:

◆ _XMP_wait_node_1()

void _XMP_wait_node_1 ( const void *  ,
const int   
)

◆ _XMP_wait_node_2()

void _XMP_wait_node_2 ( const void *  ,
const int  ,
const int   
)

◆ _XMP_wait_node_3()

void _XMP_wait_node_3 ( const void *  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_node_4()

void _XMP_wait_node_4 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_node_5()

void _XMP_wait_node_5 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_node_6()

void _XMP_wait_node_6 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ _XMP_wait_node_7()

void _XMP_wait_node_7 ( const void *  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int  ,
const int   
)

◆ xmp_gather()

void xmp_gather ( void *  ,
void *  ,
  ... 
)
4768 {
4769  int i;
4770  va_list valst;
4771  _XMP_array_t *idx_p;
4772  _XMP_array_t **idx_array;
4773  _XMP_array_t *a_p = (_XMP_array_t *)a_d;
4774 
4775  idx_array = (_XMP_array_t **)_XMP_alloc(sizeof(_XMP_array_t *)*a_p->dim);
4776 
4777  va_start( valst, a_d );
4778  for(i=0;i<a_p->dim;i++){
4779  idx_p = va_arg( valst , _XMP_array_t* );
4780  idx_array[i] = idx_p;
4781  }
4782  va_end(valst);
4783 
4784  xmp_gather_kernel(x_d, a_d, idx_array);
4785 
4786  _XMP_free(idx_array);
4787 }
Here is the call graph for this function:

◆ xmp_matmul()

void xmp_matmul ( void *  x_p,
void *  a_p,
void *  b_p 
)
3786 {
3787  _XMP_array_t *x_d;
3788  _XMP_array_t *a_d;
3789  _XMP_array_t *b_d;
3790  int same_nodes;
3791  int same_align;
3792  int duplicate;
3793  int dist_dim=0;
3794  int i;
3795 
3796  x_d = (_XMP_array_t*)x_p;
3797  a_d = (_XMP_array_t*)a_p;
3798  b_d = (_XMP_array_t*)b_p;
3799 
3800 
3801  /* error check */
3802  if(x_d->dim != 2 || a_d->dim != 2 || b_d->dim != 2){
3803  _XMP_fatal("xmp_matmul: argument dimension is not 2");
3804  return;
3805  }
3806  if(x_d->type != a_d->type || x_d->type != b_d->type){
3807  _XMP_fatal("xmp_matmul: argument type is not match");
3808  return;
3809  }
3810  if(!x_d->align_template->is_distributed ||
3811  !a_d->align_template->is_distributed ||
3813  _XMP_fatal("xmp_matmul: argument is not distributed");
3814  return;
3815  }
3816 
3817  /* same nodes? */
3818  same_nodes = 1;
3819  if(_XMP_get_execution_nodes()->comm_size != x_d->align_template->onto_nodes->comm_size) same_nodes = 0;
3820  if(_XMP_get_execution_nodes()->comm_size != a_d->align_template->onto_nodes->comm_size) same_nodes = 0;
3821  if(_XMP_get_execution_nodes()->comm_size != b_d->align_template->onto_nodes->comm_size) same_nodes = 0;
3822 
3823  /* duplicate? */
3824  duplicate = 0;
3825  for(i=0; i<x_d->dim; i++){
3826  if(x_d->info[i].align_template_index >= 0){
3827  duplicate++;
3828  }
3829  }
3830  if(duplicate >= x_d->align_template->onto_nodes->dim) duplicate = 0;
3831 
3832  /* distribute & align check */
3833  same_align = 0;
3834  if(same_nodes){
3835  for(i=0; i<x_d->dim; i++){
3836  if(x_d->info[i].align_manner == _XMP_N_ALIGN_BLOCK ||
3838  if(x_d->info[i].align_manner == a_d->info[i].align_manner &&
3839  x_d->info[i].align_manner == b_d->info[i].align_manner &&
3840  x_d->info[i].align_subscript == 0 &&
3841  a_d->info[i].align_subscript == 0 &&
3842  b_d->info[i].align_subscript == 0 &&
3843  x_d->info[i].ser_size == x_d->align_template->info[x_d->info[i].align_template_index].ser_size &&
3844  a_d->info[i].ser_size == a_d->align_template->info[a_d->info[i].align_template_index].ser_size &&
3845  b_d->info[i].ser_size == b_d->align_template->info[b_d->info[i].align_template_index].ser_size){
3846  same_align++;
3847  dist_dim = i;
3848  } else {
3849  same_align = 0;
3850  break;
3851  }
3852  }
3853  }
3854  }
3855 
3856  /* GBLOCK mapping check */
3857  if(same_align == 1 && x_d->info[dist_dim].align_manner == _XMP_N_ALIGN_GBLOCK){
3858  _XMP_template_chunk_t *x_chunk = &(x_d->align_template->chunk[x_d->info[dist_dim].align_template_index]);
3859  if(dist_dim == 0){
3860  _XMP_template_chunk_t *a_chunk = &(a_d->align_template->chunk[a_d->info[dist_dim].align_template_index]);
3861  for(i=0; i<x_d->align_template->onto_nodes->comm_size; i++){
3862  if(x_chunk->mapping_array[i] != a_chunk->mapping_array[i]){
3863  same_align = 0;
3864  break;
3865  }
3866  }
3867  } else {
3868  _XMP_template_chunk_t *b_chunk = &(b_d->align_template->chunk[b_d->info[dist_dim].align_template_index]);
3869  for(i=0; i<x_d->align_template->onto_nodes->comm_size; i++){
3870  if(x_chunk->mapping_array[i] != b_chunk->mapping_array[i]){
3871  same_align = 0;
3872  break;
3873  }
3874  }
3875  }
3876  } else if(same_align == 2){
3877  if(x_d->info[0].align_manner == _XMP_N_ALIGN_GBLOCK){
3880  for(i=0; i<x_d->align_template->onto_nodes->comm_size; i++){
3881  if(x_chunk->mapping_array[i] != a_chunk->mapping_array[i]){
3882  same_align = 0;
3883  break;
3884  }
3885  }
3886  }
3887  if(x_d->info[1].align_manner == _XMP_N_ALIGN_GBLOCK){
3890  for(i=0; i<x_d->align_template->onto_nodes->comm_size; i++){
3891  if(x_chunk->mapping_array[i] != b_chunk->mapping_array[i]){
3892  same_align = 0;
3893  break;
3894  }
3895  }
3896  }
3897  }
3898 
3899  /* */
3900  if(same_nodes && !duplicate && same_align == 1){
3901  xmp_matmul_allgather(x_d, a_d, b_d, dist_dim);
3902  } else if(xmpf_running && same_nodes && !duplicate && same_align == 2){
3903  xmp_matmul_blockf(x_d, a_d, b_d);
3904  } else if(!xmpf_running && same_nodes && !duplicate && same_align == 2){
3905  xmp_matmul_blockc(x_d, a_d, b_d);
3906  } else {
3907  xmp_matmul_no_opt(x_d, a_d, b_d);
3908  }
3909 }
Here is the call graph for this function:

◆ xmp_pack()

void xmp_pack ( void *  v_p,
void *  a_p,
void *  m_p 
)
5729 {
5730  _XMP_array_t *v_d;
5731  _XMP_array_t *a_d;
5732  _XMP_array_t *m_d;
5733  //int *mp;
5734  int i;
5735  MPI_Comm *comm;
5736  int /*myrank,*/size;
5737  MPI_Request *com_req1;
5738  int *offset;
5739  int *lindx;
5740  int *lindx2;
5741  int wkcount;
5742  int masknum;
5743  int localnum_a;
5744  int *maskflag;
5745  int *pickindx;
5746  int icounter;
5747  int vcount;
5748  int packnum;
5749  int packflag;
5750  void (*xmp_pack_recv_info)(_XMP_array_t *, _XMP_array_t *, int, int *,
5751  int *, int *, int *, int *, int, void *);
5752  void (*xmp_pack_send_info)(_XMP_array_t *, _XMP_array_t *, int, int *,
5753  int *, int *, void *);
5754  /* packing */
5755 
5756  /* pack-unpack list */
5757  struct Listindx {
5758  int indx;
5759  struct Listindx *next;
5760  };
5761 
5762  /* pack-unpack list */
5763  struct Listinfo {
5764  int num;
5765  struct Listindx *head;
5766  struct Listindx *tail;
5767  };
5768 
5769  struct Listinfo *listinfo1;
5770  struct Listinfo *listinfo2;
5771 
5772  struct Listindx *p;
5773  MPI_Status istatus;
5774  char *buf;
5775  char *buf2;
5776  int dtoffset;
5777  int dsize;
5778  int comcount;
5779  int j;
5780 
5781  xmp_pack_recv_info = xmp_pack_unpack_array_v;
5782  xmp_pack_send_info = xmp_pack_unpack_array_a;
5783 
5784  v_d = (_XMP_array_t*)v_p;
5785  a_d = (_XMP_array_t*)a_p;
5786  if(m_p==NULL){
5787  m_d = NULL;
5788  }else{
5789  m_d = (_XMP_array_t*)m_p;
5790  }
5791 
5792  /* error check */
5793  if(v_d->dim != 1){
5794  _XMP_fatal("xmp_pack: 1st argument dimension is not 1");
5795  return;
5796  }
5797 
5798  if(m_p!=NULL){
5799  if(a_d->dim != m_d->dim){
5800  _XMP_fatal("xmp_pack: 2nd and 3rd argument dimension is not match");
5801  return;
5802  }
5803  }
5804 
5805  if(v_d->type != a_d->type){
5806  _XMP_fatal("xmp_pack: 1st and 2nd argument type is not match");
5807  return;
5808  }
5809 
5810  if(!v_d->align_template->is_distributed ||
5812  _XMP_fatal("xmp_pack: argument is not distributed");
5813  if(m_p!=NULL){
5814  if(!m_d->align_template->is_distributed){
5815  _XMP_fatal("xmp_pack: argument is not distributed");
5816  }
5817  }
5818  return;
5819  }
5820 /*
5821  mp=NULL;
5822  if(m_d != NULL){
5823  mp=m_d->array_addr_p;
5824  }
5825 */
5826  comm = _XMP_get_execution_nodes()->comm;
5827 // myrank=_XMP_get_execution_nodes()->comm_rank;
5828  size =_XMP_get_execution_nodes()->comm_size;
5829 
5830  offset = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
5831  lindx = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
5832  lindx2 = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
5833 
5834  /* packing */
5835  listinfo1 = (struct Listinfo*)_XMP_alloc(sizeof(struct Listinfo)*size);
5836  listinfo2 = (struct Listinfo*)_XMP_alloc(sizeof(struct Listinfo)*size);
5837  for(i=0;i<size;i++){
5838  listinfo1[i].num = 0;
5839  listinfo1[i].head = NULL;
5840  listinfo1[i].tail = NULL;
5841  listinfo2[i].num = 0;
5842  listinfo2[i].head = NULL;
5843  listinfo2[i].tail = NULL;
5844  }
5845 
5846  for(i=0; i<a_d->dim; i++){
5847  offset[i] = 0 - a_d->info[i].ser_lower;
5848  }
5849 
5850  /* gen maskXXX */
5851  masknum=1;
5852  localnum_a=1;
5853  for(i=0; i<a_d->dim; i++){
5854  masknum *= (a_d->info[i].ser_upper - a_d->info[i].ser_lower + 1);
5855  localnum_a *= (a_d->info[i].local_upper - a_d->info[i].local_lower + 1);
5856  }
5857  maskflag = (int*)_XMP_alloc(masknum*sizeof(int));
5858  pickindx = (int*)_XMP_alloc(masknum*sizeof(int));
5859 
5860  com_req1 = (MPI_Request*)_XMP_alloc(size*sizeof(MPI_Request));
5861 
5862  /* init maksXXX */
5863  for(i=0;i<masknum;i++){
5864  maskflag[i]=0;
5865  pickindx[i]=v_d->info[0].ser_lower - 1;
5866  }
5867  for(i=0;i<size;i++){
5868  com_req1[i] = MPI_REQUEST_NULL;
5869  }
5870 
5871  wkcount=0;
5872 
5873  if(m_d != NULL){
5874  if(xmpf_running){
5875  xmp_pack_unpack_dim(m_d, m_d->dim, offset, &wkcount, maskflag, lindx2);
5876  }else{
5877  xmp_pack_unpack_dim(m_d, -1, offset, &wkcount, maskflag, lindx2);
5878  }
5879  }
5880 
5881  /* gather(reduce) all mask */
5882  if(m_d != NULL){
5883  MPI_Allreduce(MPI_IN_PLACE, maskflag, masknum, MPI_INT, MPI_SUM, *comm);
5884  }else{
5885  for(i=0;i<masknum;i++){
5886  maskflag[i] = 1;
5887  }
5888  wkcount = masknum;
5889  }
5890 
5891  icounter=v_d->info[0].ser_lower;
5892  packnum=0;
5893  for(i=0;i<masknum;i++){
5894  if(maskflag[i]==1){
5895  pickindx[i]=icounter++;
5896  packnum++;
5897  }
5898  }
5899 
5900  packflag = 1;
5901  wkcount=0;
5902  vcount=0;
5903 
5904  /* pack data recv info */
5905  if(xmpf_running){
5906  xmp_pack_recv_info(a_d, v_d, a_d->dim, offset, &wkcount, lindx2, pickindx,
5907  &vcount, packflag,(void *)listinfo2);
5908  }else{
5909  xmp_pack_recv_info(a_d, v_d, -1, offset, &wkcount, lindx2, pickindx,
5910  &vcount, packflag,(void *)listinfo2);
5911  }
5912 
5913  /* pack data send info*/
5914  wkcount=0;
5915 
5916  if(xmpf_running){
5917  xmp_pack_send_info(a_d, v_d, a_d->dim, offset, lindx2, pickindx,
5918  (void *)listinfo1);
5919  }else{
5920  xmp_pack_send_info(a_d, v_d, -1, offset, lindx2, pickindx,
5921  (void *)listinfo1);
5922  }
5923 
5924  /* send packing data */
5925  dsize=0;
5926  for(i=0;i<size;i++){
5927  if(listinfo1[i].num > 0){
5928  p = listinfo1[i].head;
5929  for(j=0;j<listinfo1[i].num;j++){
5930  dsize++;
5931  }
5932  }
5933  }
5934 
5935  buf = (char*)_XMP_alloc(a_d->type_size*dsize);
5936 
5937  comcount=0;
5938  dtoffset=0;
5939  for(i=0;i<size;i++){
5940  if(listinfo1[i].num > 0){
5941  p = listinfo1[i].head;
5942  for(j=0;j<listinfo1[i].num;j++){
5943  memcpy(buf+j*a_d->type_size+dtoffset,
5944  (char *)a_d->array_addr_p+p->indx*a_d->type_size,
5945  a_d->type_size);
5946  p = p->next;
5947  }
5948  MPI_Isend(buf+dtoffset, a_d->type_size*listinfo1[i].num, MPI_BYTE,
5949  i, 99, *comm, &com_req1[comcount]);
5950  dtoffset += listinfo1[i].num*a_d->type_size;
5951  comcount++;
5952  }
5953  }
5954 
5955  /* recv packing data */
5956  for(i=0;i<size;i++){
5957  if(listinfo2[i].num > 0){
5958  buf2 = (char*)_XMP_alloc(v_d->type_size*listinfo2[i].num);
5959 
5960  MPI_Recv(buf2, v_d->type_size*listinfo2[i].num, MPI_BYTE, i, 99, *comm, &istatus);
5961 
5962  p = listinfo2[i].head;
5963  for(j=0;j<listinfo2[i].num;j++){
5964 
5965  memcpy((char *)v_d->array_addr_p+p->indx*v_d->type_size,
5966  buf2+j*v_d->type_size,
5967  v_d->type_size);
5968  p = p->next;
5969  }
5970  _XMP_free(buf2);
5971  }
5972  }
5973 
5974  if(comcount > 0){
5975  MPI_Waitall(comcount, com_req1, MPI_STATUSES_IGNORE);
5976  }
5977  _XMP_free(buf);
5978 
5979  /* duplicate */
5980  duplicate_copy(v_d);
5981 
5982  _XMP_free(maskflag);
5983  _XMP_free(pickindx);
5984  _XMP_free(com_req1);
5985  _XMP_free(offset);
5986  _XMP_free(lindx);
5987  _XMP_free(lindx2);
5988  _XMP_free(listinfo1);
5989  _XMP_free(listinfo2);
5990 
5991  return;
5992 }
Here is the caller graph for this function:

◆ xmp_pack_mask()

void xmp_pack_mask ( void *  v_p,
void *  a_p,
void *  m_p 
)
5996 {
5997  xmp_pack(v_p, a_p, m_p);
5998 }
Here is the call graph for this function:

◆ xmp_pack_nomask()

void xmp_pack_nomask ( void *  v_p,
void *  a_p 
)
6002 {
6003  xmp_pack(v_p, a_p, NULL);
6004 }
Here is the call graph for this function:

◆ xmp_reduce_loc_execute()

void xmp_reduce_loc_execute ( const int  op)
653 {
655 
656  if(nodes->is_member && nodes->comm_size != 1){
657  size_t total_reduce_size = 0;
658  for(int i=0;i<_nlocs+2;i++)
659  total_reduce_size += _size[i];
660 
661  char *buffer = malloc(total_reduce_size);
662 
663  size_t offset = 0;
664  for(int i=0;i<_nlocs+2;i++){
665  memcpy(buffer + offset, _addr[i], _size[i]);
666  offset += _size[i];
667  }
668 
669  if(op == _XMP_N_REDUCE_MAXLOC)
670  MPI_Allreduce(MPI_IN_PLACE, buffer, total_reduce_size, MPI_BYTE, _xmp_maxloc, *((MPI_Comm *)nodes->comm));
671  else if(op == _XMP_N_REDUCE_MINLOC)
672  MPI_Allreduce(MPI_IN_PLACE, buffer, total_reduce_size, MPI_BYTE, _xmp_minloc, *((MPI_Comm *)nodes->comm));
673  else
674  _XMP_fatal("Unknown operation in reduction directve");
675 
676  offset = 0;
677  for(int i=0;i<_nlocs+2;i++){
678  memcpy(_addr[i], buffer + offset, _size[i]);
679  offset += _size[i];
680  }
681 
682  long double value = *(long double *)_addr[0];
683  _cast_define_double_value(_value_addr, value, _datatype);
684 
685  free(buffer);
686  }
687 
688  free(_size);
689  free(_addr);
690 }
Here is the call graph for this function:

◆ xmp_reduce_loc_init()

void xmp_reduce_loc_init ( const int  nlocs,
const long double  value,
void *  value_addr,
const int  datatype 
)
572 {
573  _nlocs = nlocs;
574  _value = value;
575  _value_addr = value_addr;
576  _datatype = datatype;
577  _node_num = _XMP_get_execution_nodes()->comm_rank;
578 
579  _addr = malloc(sizeof(void *) * (nlocs+2));
580  _addr[0] = &_value;
581  _addr[1] = &_node_num;
582 
583  _size = malloc(sizeof(int) * (nlocs+2));
584  _size[0] = sizeof(long double);
585  _size[1] = sizeof(int);
586 
587  _num = 2;
588 }

◆ xmp_reduce_loc_set()

void xmp_reduce_loc_set ( void *  buf,
const int  length,
const size_t  s 
)
598 {
599  _addr[_num] = buf;
600  _size[_num] = length * s;
601  _num++;
602 }

◆ xmp_scatter()

void xmp_scatter ( void *  ,
void *  ,
  ... 
)
5004 {
5005  int i;
5006  va_list valst;
5007  _XMP_array_t *idx_p;
5008  _XMP_array_t **idx_array;
5009  _XMP_array_t *x_p = (_XMP_array_t *)x_d;
5010  _XMP_array_t *a_p = (_XMP_array_t *)a_d;
5011 
5012  idx_array = (_XMP_array_t **)_XMP_alloc(sizeof(_XMP_array_t *)*a_p->dim);
5013 
5014  va_start( valst, a_d );
5015  for(i=0;i<x_p->dim;i++){
5016  idx_p = va_arg( valst , _XMP_array_t* );
5017  idx_array[i] = idx_p;
5018  }
5019  va_end(valst);
5020 
5021  xmp_scatter_kernel(x_d, a_d, idx_array);
5022 
5023  _XMP_free(idx_array);
5024 }
Here is the call graph for this function:

◆ xmp_sync_all()

void xmp_sync_all ( const int *  status)

Execute sync_all()

1424 {
1425 #ifdef _XMP_GASNET
1427 #elif _XMP_FJRDMA
1429 #elif _XMP_UTOFU
1431 #elif _XMP_MPI3_ONESIDED
1433 #endif
1434 }

◆ xmp_sync_image()

void xmp_sync_image ( int  image,
int *  status 
)

Execute sync_image()

1456 {
1457  xmp_sync_images(1, &image, status);
1458 }

◆ xmp_sync_images()

void xmp_sync_images ( const int  num,
int *  image_set,
int *  status 
)

Execute sync_images()

1440 {
1441 #ifdef _XMP_GASNET
1442  _XMP_gasnet_sync_images(num, image_set, status);
1443 #elif _XMP_FJRDMA
1444  _XMP_fjrdma_sync_images(num, image_set, status);
1445 #elif _XMP_UTOFU
1446  _XMP_utofu_sync_images(num, image_set, status);
1447 #elif _XMP_MPI3_ONESIDED
1448  _XMP_mpi_sync_images(num, image_set, status);
1449 #endif
1450 }

◆ xmp_sync_images_all()

void xmp_sync_images_all ( int *  status)

Execute sync_images_all()

1464 {
1465  _XMP_fatal("Not implement xmp_sync_images_all()");
1466 }

◆ xmp_sync_memory()

void xmp_sync_memory ( const int *  status)

Execute sync_memory()

1406 {
1407 #ifdef _XMP_GASNET
1409 #elif _XMP_FJRDMA
1411 #elif _XMP_UTOFU
1413 #elif _XMP_TCA
1415 #elif _XMP_MPI3_ONESIDED
1417 #endif
1418 }

◆ xmp_transpose()

void xmp_transpose ( void *  dst_d,
void *  src_d,
int  opt 
)
1246 {
1247  _XMP_array_t *dst_d;
1248  _XMP_array_t *src_d;
1249  int same_nodes;
1250  int same_template;
1251  int same_align;
1252  int dist_num;
1253  int dist_dim;
1254  int regular;
1255  int duplicate;
1256  int dst_alloc_size[2];
1257  int src_alloc_size[2];
1258  int i, j, k;
1259 
1260  dst_d = (_XMP_array_t*)dst_p;
1261  src_d = (_XMP_array_t*)src_p;
1262 
1263  /* error check */
1264  if(dst_d->dim != 2 || src_d->dim != 2){
1265  _XMP_fatal("xmp_transpose: argument dimension is not 2");
1266  return;
1267  }
1268  if(dst_d->type != src_d->type){
1269  _XMP_fatal("xmp_transpose: argument type is not match");
1270  return;
1271  }
1273  _XMP_fatal("xmp_transpose: argument is not distributed");
1274  return;
1275  }
1276 
1277  /* allocate check */
1278  if(dst_d->is_allocated){
1279  dst_alloc_size[0] = dst_d->info[0].alloc_size;
1280  dst_alloc_size[1] = dst_d->info[1].alloc_size;
1281  } else {
1282  dst_alloc_size[0] = 0;
1283  dst_alloc_size[1] = 0;
1284  }
1285  if(src_d->is_allocated){
1286  src_alloc_size[0] = src_d->info[0].alloc_size;
1287  src_alloc_size[1] = src_d->info[1].alloc_size;
1288  } else {
1289  src_alloc_size[0] = 0;
1290  src_alloc_size[1] = 0;
1291  }
1292 
1293  /* same nodes? */
1294  same_nodes=1;
1295  if(_XMP_get_execution_nodes()->comm_size != dst_d->align_template->onto_nodes->comm_size) same_nodes = 0;
1296  if(_XMP_get_execution_nodes()->comm_size != src_d->align_template->onto_nodes->comm_size) same_nodes = 0;
1297 
1298  /* duplicate? */
1299  duplicate = 0;
1300  for(i=0; i<dst_d->dim; i++){
1301  if(dst_d->info[i].align_template_index >= 0){
1302  duplicate++;
1303  }
1304  }
1305  if(duplicate >= dst_d->align_template->onto_nodes->dim) duplicate = 0;
1306 
1307 
1308  /* same template? */
1309  same_template = check_template(dst_d->align_template, src_d->align_template);
1310 
1311  /* same align? */
1312  same_align = 1;
1313  if(dst_d->info[0].align_template_index != src_d->info[0].align_template_index) same_align = 0;
1314  if(dst_d->info[1].align_template_index != src_d->info[1].align_template_index) same_align = 0;
1315 
1316  /* distribute num & regular */
1317  dist_num = 0;
1318  dist_dim = -1;
1319  regular = 0;
1320  for(i=0; i<src_d->dim; i++){
1321  j = src_d->info[i].align_template_index;
1322  if(j >= 0){
1323  switch(src_d->align_template->chunk[j].dist_manner){
1324  case _XMP_N_DIST_BLOCK:
1325  if(same_align && src_d->info[i].align_manner == dst_d->info[i].align_manner){
1326  if(dist_num == 0 &&
1327  src_d->info[i].ser_size == src_d->align_template->info[j].ser_size &&
1328  src_d->info[i].ser_size%_XMP_get_execution_nodes()->comm_size == 0 &&
1329  dst_d->info[i].ser_size == dst_d->align_template->info[j].ser_size &&
1330  dst_d->info[i].ser_size%_XMP_get_execution_nodes()->comm_size == 0) {
1331  regular = 1;
1332  } else {
1333  regular = 0;
1334  }
1335  }
1336  dist_num++;
1337  dist_dim = i;
1338  break;
1339  case _XMP_N_DIST_CYCLIC:
1341  dist_num++;
1342  dist_dim = i;
1343  break;
1344  case _XMP_N_DIST_GBLOCK:
1345  if(same_align && src_d->info[i].align_manner == dst_d->info[i].align_manner){
1346  _XMP_template_chunk_t *src_c = &(src_d->align_template->chunk[src_d->info[i].align_template_index]);
1347  _XMP_template_chunk_t *dst_c = &(dst_d->align_template->chunk[dst_d->info[i].align_template_index]);
1348  unsigned long long w;
1349  if(dist_num == 0 &&
1350  src_d->info[i].ser_size == src_d->align_template->info[j].ser_size &&
1351  dst_d->info[i].ser_size == dst_d->align_template->info[j].ser_size){
1352  regular = 1;
1353 
1354  w=src_c->mapping_array[1]-src_c->mapping_array[0];
1355  for(k=1; k<=src_c->onto_nodes_info->size; k++){
1356  if((src_c->mapping_array[k]-src_c->mapping_array[k-1]) != w) regular = 0;
1357  }
1358  w=dst_c->mapping_array[1]-dst_c->mapping_array[0];
1359  for(k=1; k<=dst_c->onto_nodes_info->size; k++){
1360  if((dst_c->mapping_array[k]-dst_c->mapping_array[k-1]) != w) regular = 0;
1361  }
1362  }
1363  }
1364  dist_num++;
1365  dist_dim = i;
1366  break;
1367  default:
1368  break;
1369  }
1370  }
1371  }
1372  /* regular? */
1373  if(src_d->info[0].align_subscript != 0 || src_d->info[1].align_subscript != 0 ||
1374  dst_d->info[0].align_subscript != 0 || dst_d->info[1].align_subscript != 0 ) regular = 0;
1375 
1376 #ifdef DEBUG
1377  for(i=0; i<_XMP_get_execution_nodes()->comm_size; i++){
1378  if(i == _XMP_get_execution_nodes()->comm_rank){
1379  printf("rank%d: nodes %d: template %d: align %d: regular %d\n",
1380  i, same_nodes, same_template, same_align, regular);
1381  fflush(stdout);
1382  }
1383  fflush(stdout);
1384  MPI_Barrier(*(MPI_Comm*)(_XMP_get_execution_nodes()->comm));
1385  }
1386 #endif
1387 
1388  /*============================================================================================*/
1389  /* same_node && same_template && !same_align && dist_num==1 : no MPI communication */
1390  /* same_node && same_align && regular && dist_num==1 : use collective MPI communication */
1391  /* other: pack/unpack + send/recv */
1392  /*============================================================================================*/
1393  if(same_nodes && same_template && !same_align && dist_num == 1 &&
1394  dst_d->info[0].align_subscript == src_d->info[1].align_subscript &&
1395  dst_d->info[1].align_subscript == src_d->info[0].align_subscript){
1396  /* no MPI communication transpose */
1397  int di, dj;
1398  char *dst_array_p = (char*)dst_d->array_addr_p;
1399  char *src_array_p = (char*)src_d->array_addr_p;
1400 
1401 #ifdef DEBUG
1402  show_all(src_d);
1403  show_all(dst_d);
1404 #endif
1405  if(xmpf_running){ /* Fortran */
1406  if(dst_d->is_allocated && src_d->is_allocated){
1407  for(j=src_d->info[1].local_lower; j<=src_d->info[1].local_upper; j++){
1408  di = j-src_d->info[1].local_lower+dst_d->info[0].local_lower;
1409  for(i=src_d->info[0].local_lower; i<=src_d->info[0].local_upper; i++){
1410  dj = i-src_d->info[0].local_lower+dst_d->info[1].local_lower;
1411  memcpy(dst_array_p+(dj*dst_alloc_size[0]+di)*dst_d->type_size,
1412  src_array_p+(j*src_alloc_size[0]+i)*src_d->type_size,
1413  src_d->type_size);
1414  }
1415  }
1416  }
1417  } else { /* C */
1418  if(dst_d->is_allocated && src_d->is_allocated){
1419  for(i=src_d->info[0].local_lower; i<=src_d->info[0].local_upper; i++){
1420  dj = i-src_d->info[0].local_lower+dst_d->info[1].local_lower;
1421  for(j=src_d->info[1].local_lower; j<=src_d->info[1].local_upper; j++){
1422  di = j-src_d->info[1].local_lower+dst_d->info[0].local_lower;
1423  memcpy(dst_array_p+(di*dst_alloc_size[1]+dj)*dst_d->type_size,
1424  src_array_p+(i*src_alloc_size[1]+j)*src_d->type_size,
1425  src_d->type_size);
1426  }
1427  }
1428  }
1429  }
1430 #ifdef DEBUG
1431  show_array(src_d, NULL);
1432  show_array(dst_d, NULL);
1433 #endif
1434 
1435  }
1436  else if(xmpf_running && same_nodes && same_align && regular && !duplicate &&
1437  dist_num == 1 && dist_dim == 1 && dst_d->info[dist_dim].align_manner == _XMP_N_ALIGN_BLOCK &&
1438  dst_d->info[dist_dim].shadow_size_lo == 0 && dst_d->info[dist_dim].shadow_size_hi == 0 &&
1439  src_d->info[dist_dim].shadow_size_lo == 0 && src_d->info[dist_dim].shadow_size_hi == 0){
1440  /* original xmp_transpose (Fortran) */
1441  /* start_collection("xmp_transpose_original"); */
1442  xmp_transpose_original(dst_d, src_d, opt);
1443  /* stop_collection("xmp_transpose_original"); */
1444 
1445  }
1446  else if(same_nodes && same_align && regular && !duplicate && dist_num == 1){
1447  /* collective MPI communication transpose */
1448  /* start_collection("xmp_transpose_alltoall"); */
1449  xmp_transpose_alltoall(dst_d, src_d, opt, dist_dim);
1450  /* stop_collection("xmp_transpose_alltoall"); */
1451 
1452  /* } else if(same_nodes && same_align && !duplicate && dist_num == 1){ */
1453  /* TODO: not support (block size is not even) */
1454  /* /\* collective MPI communication transpose *\/ */
1455  /* xmp_transpose_alltoallv(dst_d, src_d, opt, dist_dim); */
1456 
1457  }
1458  else {
1459  /* pack/unpack + sendrecv */
1460  xmp_transpose_no_opt(dst_d, src_d, opt);
1461  }
1462 }
Here is the call graph for this function:

◆ xmp_unpack()

void xmp_unpack ( void *  a_p,
void *  v_p,
void *  m_p 
)
6032 {
6033  _XMP_array_t *v_d;
6034  _XMP_array_t *a_d;
6035  _XMP_array_t *m_d;
6036 // int *mp;
6037  int i;
6038  MPI_Comm *comm;
6039  int /*myrank,*/size;
6040  MPI_Request *com_req2;
6041  int *offset;
6042  int *lindx;
6043  int *lindx2;
6044  int wkcount;
6045  int masknum;
6046  int localnum_v;
6047  int *maskflag;
6048  int *pickindx;
6049  int icounter;
6050  int vcount;
6051  int packnum;
6052  int packflag;
6053  void (*xmp_unpack_send_info)(_XMP_array_t *, _XMP_array_t *, int, int *,
6054  int *, int *, int *, int *, int, void *);
6055  void (*xmp_unpack_recv_info)(_XMP_array_t *, _XMP_array_t *, int, int *,
6056  int *, int *, void *);
6057  /* packing */
6058  /* pack-unpack list */
6059  struct Listindx {
6060  int indx;
6061  struct Listindx *next;
6062  };
6063  /* pack-unpack list */
6064  struct Listinfo {
6065  int num;
6066  struct Listindx *head;
6067  struct Listindx *tail;
6068  };
6069  struct Listinfo *listinfo1;
6070  struct Listinfo *listinfo2;
6071  struct Listindx *p;
6072  MPI_Status istatus;
6073  char *buf;
6074  char *buf2;
6075  int dtoffset;
6076  int dsize;
6077  int comcount;
6078  int j;
6079 
6080  xmp_unpack_send_info = xmp_pack_unpack_array_v;
6081  xmp_unpack_recv_info = xmp_pack_unpack_array_a;
6082 
6083  a_d = (_XMP_array_t*)a_p;
6084  v_d = (_XMP_array_t*)v_p;
6085  if(m_p==NULL){
6086  m_d = NULL;
6087  }else{
6088  m_d = (_XMP_array_t*)m_p;
6089  }
6090 
6091  /* error check */
6092  if(v_d->dim != 1){
6093  _XMP_fatal("xmp_unpack: 2st argument dimension is not 1");
6094  return;
6095  }
6096 
6097  if(m_p!=NULL){
6098  if(a_d->dim != m_d->dim){
6099  _XMP_fatal("xmp_unpack: 1nd and 3rd argument dimension is not match");
6100  return;
6101  }
6102  }
6103 
6104  if(a_d->type != v_d->type){
6105  _XMP_fatal("xmp_unpack: 1st and 2nd argument type is not match");
6106  return;
6107  }
6108 
6109  if(!v_d->align_template->is_distributed ||
6111  _XMP_fatal("xmp_unpack: argument is not distributed");
6112  if(m_p!=NULL){
6113  if(!m_d->align_template->is_distributed){
6114  _XMP_fatal("xmp_unpack: argument is not distributed");
6115  }
6116  }
6117  return;
6118  }
6119 /*
6120  mp=NULL;
6121  if(m_d != NULL){
6122  mp=m_d->array_addr_p;
6123  }*/
6124 
6125  comm = _XMP_get_execution_nodes()->comm;
6126  //myrank=_XMP_get_execution_nodes()->comm_rank;
6127  size =_XMP_get_execution_nodes()->comm_size;
6128 
6129  offset = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
6130  lindx = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
6131  lindx2 = (int*)_XMP_alloc((a_d->dim)*sizeof(int));
6132 
6133  /* packing */
6134  listinfo1 = (struct Listinfo*)_XMP_alloc(sizeof(struct Listinfo)*size);
6135  listinfo2 = (struct Listinfo*)_XMP_alloc(sizeof(struct Listinfo)*size);
6136  for(i=0;i<size;i++){
6137  listinfo1[i].num = 0;
6138  listinfo1[i].head = NULL;
6139  listinfo1[i].tail = NULL;
6140  listinfo2[i].num = 0;
6141  listinfo2[i].head = NULL;
6142  listinfo2[i].tail = NULL;
6143  }
6144 
6145  for(i=0; i<a_d->dim; i++){
6146  offset[i] = 0 - a_d->info[i].ser_lower;
6147  }
6148 
6149  /* gen maskXXX */
6150  masknum=1;
6151  localnum_v=1;
6152  for(i=0; i<a_d->dim; i++){
6153  masknum *= (a_d->info[i].ser_upper - a_d->info[i].ser_lower + 1);
6154  }
6155  for(i=0; i<v_d->dim; i++){
6156  localnum_v *= (v_d->info[i].local_upper - v_d->info[i].local_lower + 1);
6157  }
6158  maskflag = (int*)_XMP_alloc(masknum*sizeof(int));
6159  pickindx = (int*)_XMP_alloc(masknum*sizeof(int));
6160 
6161  com_req2 = (MPI_Request*)_XMP_alloc(size*sizeof(MPI_Request));
6162 
6163  /* init maksXXX */
6164  for(i=0;i<masknum;i++){
6165  maskflag[i]=0;
6166  pickindx[i]=v_d->info[0].ser_lower - 1;
6167  }
6168  for(i=0;i<size;i++){
6169  com_req2[i] = MPI_REQUEST_NULL;
6170  }
6171 
6172  wkcount=0;
6173 
6174  if(m_d != NULL){
6175  if(xmpf_running){
6176  xmp_pack_unpack_dim(m_d, m_d->dim, offset, &wkcount, maskflag, lindx2);
6177  }else{
6178  xmp_pack_unpack_dim(m_d, -1, offset, &wkcount, maskflag, lindx2);
6179  }
6180  }
6181 
6182  /* gather(reduce) all mask */
6183  if(m_d != NULL){
6184  MPI_Allreduce(MPI_IN_PLACE, maskflag, masknum, MPI_INT, MPI_SUM, *comm);
6185  }else{
6186  for(i=0;i<masknum;i++){
6187  maskflag[i] = 1;
6188  }
6189  wkcount = masknum;
6190  }
6191 
6192  icounter=v_d->info[0].ser_lower;
6193  packnum=0;
6194  for(i=0;i<masknum;i++){
6195  if(maskflag[i]==1){
6196  pickindx[i]=icounter++;
6197  packnum++;
6198  }
6199  }
6200 
6201  packflag = 0;
6202  wkcount=0;
6203  vcount=0;
6204 
6205  /* unpack data send info */
6206  if(xmpf_running){
6207  xmp_unpack_send_info(a_d, v_d, a_d->dim, offset, &wkcount, lindx2, pickindx,
6208  &vcount, packflag, listinfo2);
6209  }else{
6210  xmp_unpack_send_info(a_d, v_d, -1, offset, &wkcount, lindx2, pickindx,
6211  &vcount, packflag, listinfo2);
6212  }
6213 
6214  /* unpack data recv info */
6215  wkcount=0;
6216 
6217  if(xmpf_running){
6218  xmp_unpack_recv_info(a_d, v_d, a_d->dim, offset, lindx2, pickindx,
6219  listinfo1);
6220  }else{
6221  xmp_unpack_recv_info(a_d, v_d, -1, offset, lindx2, pickindx,
6222  listinfo1);
6223  }
6224 
6225  /* send packing data */
6226  dsize=0;
6227  for(i=0;i<size;i++){
6228  if(listinfo2[i].num > 0){
6229  p = listinfo2[i].head;
6230  for(j=0;j<listinfo2[i].num;j++){
6231  dsize++;
6232  }
6233  }
6234  }
6235 
6236  buf = (char*)_XMP_alloc(v_d->type_size*dsize);
6237 
6238  comcount=0;
6239  dtoffset=0;
6240  for(i=0;i<size;i++){
6241  if(listinfo2[i].num > 0){
6242  p = listinfo2[i].head;
6243  for(j=0;j<listinfo2[i].num;j++){
6244  memcpy(buf+j*v_d->type_size+dtoffset,
6245  (char *)v_d->array_addr_p+p->indx*v_d->type_size,
6246  v_d->type_size);
6247  p = p->next;
6248  }
6249  MPI_Isend(buf+dtoffset, v_d->type_size*listinfo2[i].num, MPI_BYTE,
6250  i, 99, *comm, &com_req2[comcount]);
6251  dtoffset += listinfo2[i].num*v_d->type_size;
6252  comcount++;
6253  }
6254  }
6255 
6256  /* recv packing data */
6257  for(i=0;i<size;i++){
6258  if(listinfo1[i].num > 0){
6259  buf2 = (char*)_XMP_alloc(a_d->type_size*listinfo1[i].num);
6260 
6261  MPI_Recv(buf2, a_d->type_size*listinfo1[i].num, MPI_BYTE, i, 99, *comm, &istatus);
6262 
6263  p = listinfo1[i].head;
6264  for(j=0;j<listinfo1[i].num;j++){
6265  memcpy((char *)a_d->array_addr_p+p->indx*a_d->type_size,
6266  buf2+j*a_d->type_size,
6267  a_d->type_size);
6268  p = p->next;
6269  }
6270  _XMP_free(buf2);
6271  }
6272  }
6273 
6274  if(comcount > 0){
6275  MPI_Waitall(comcount, com_req2, MPI_STATUSES_IGNORE);
6276  }
6277  _XMP_free(buf);
6278 
6279  /* duplicate */
6280  duplicate_copy(a_d);
6281 
6282  _XMP_free(maskflag);
6283  _XMP_free(pickindx);
6284  _XMP_free(com_req2);
6285  _XMP_free(offset);
6286  _XMP_free(lindx);
6287  _XMP_free(lindx2);
6288  _XMP_free(listinfo1);
6289  _XMP_free(listinfo2);
6290 
6291  return;
6292 }
Here is the caller graph for this function:

◆ xmp_unpack_mask()

void xmp_unpack_mask ( void *  a_p,
void *  v_p,
void *  m_p 
)
6296 {
6297  xmp_unpack(v_p, a_p, m_p);
6298 }
Here is the call graph for this function:

◆ xmp_unpack_nomask()

void xmp_unpack_nomask ( void *  a_p,
void *  v_p 
)
6302 {
6303  xmp_unpack(a_p, v_p, NULL);
6304 }
Here is the call graph for this function:

◆ xmpc_end_async()

void xmpc_end_async ( int  async_id)
328 {
329  int hash_id = async_id % _XMP_ASYNC_COMM_SIZE;
330  _XMP_async_comm_t *async = &_XMP_async_comm_tab[hash_id];
331 
332  if(!async->is_used) return;
333 
334  // The case no comm. registered for async_id 0 and xmpc_end_async called for
335  // async_id == 0, may occur and is inconsistent.
336  // But, actually, the code below works without problems in such a case, even if
337  // no hash_id == 0.
338  if(async->async_id == async_id){
339  if(async->next == NULL){
340  initialize_async(async);
341  }
342  else{
343  _XMP_async_comm_t *next = async->next;
344  initialize_async(async);
345  async->async_id = next->async_id;
346  async->nreqs = next->nreqs;
347  async->nnodes = next->nnodes;
348  async->is_used = next->is_used;
349  async->type = next->type;
350  async->node = next->node;
351  async->gmove = next->gmove;
352  async->reqs = next->reqs;
353  async->a = next->a;
354  async->next = next->next;
355  _XMP_free(next);
356  }
357  return;
358  }
359  else{
360  _XMP_async_comm_t *prev = async;
361  while((async = prev->next)){
362  if(async->async_id == async_id){
363  prev->next = async->next;
364  initialize_async(async);
365  _XMP_free(async);
366  return;
367  }
368  prev = async;
369  }
370  }
371 }

◆ xmpc_gmv_dealloc()

void xmpc_gmv_dealloc ( void *  gp)

◆ xmpc_gmv_do()

void xmpc_gmv_do ( void *  gmv_desc_leftp,
void *  gmv_desc_rightp,
int  mode 
)

◆ xmpc_gmv_do_acc()

void xmpc_gmv_do_acc ( void *  gmv_desc_leftp,
void *  gmv_desc_rightp,
int  mode 
)

◆ xmpc_gmv_g_alloc()

void xmpc_gmv_g_alloc ( void **  gmv_desc,
void *  ap 
)

◆ xmpc_gmv_g_alloc_acc()

void xmpc_gmv_g_alloc_acc ( void **  gmv_desc,
void *  ap,
void *  dev_addr 
)

◆ xmpc_gmv_g_dim_info()

void xmpc_gmv_g_dim_info ( void *  gp,
int  i,
int  kind,
int  lb,
int  len,
int  st 
)

◆ xmpc_gmv_l_alloc()

void xmpc_gmv_l_alloc ( void **  gmv_desc,
void *  local_data,
int  n 
)

◆ xmpc_gmv_l_alloc_acc()

void xmpc_gmv_l_alloc_acc ( void **  gmv_desc,
void *  local_data,
int  n 
)

◆ xmpc_gmv_l_dim_info()

void xmpc_gmv_l_dim_info ( void *  gp,
int  i,
int  a_lb,
int  a_len,
int  kind,
int  lb,
int  len,
int  st 
)

◆ xmpc_init_async()

void xmpc_init_async ( int  async_id)
220 {
221  _xmp_is_async = true;
222 
223  int hash_id = async_id % _XMP_ASYNC_COMM_SIZE;
224  _XMP_async_comm_t *async = &_XMP_async_comm_tab[hash_id];
225 
226  if(!async->is_used){
227  async->async_id = async_id;
228  async->reqs = _XMP_alloc(sizeof(MPI_Request) * _XMP_MAX_ASYNC_REQS);
229  async->is_used = true;
230  _tmp_async = async;
231  }
232  else{
233  if(async->async_id == async_id){
234  _tmp_async = async;
235  }
236  else{
237  while(async->next){
238  async = async->next;
239  if(async->async_id == async_id){
240  _tmp_async = async;
241  return;
242  }
243  }
244 
245  // When above while-statement cannot find a async descriptor,
246  // the following lines create a new async descriptor
247  async->next = _XMP_alloc(sizeof(_XMP_async_comm_t));
248  async = async->next;
249  async->async_id = async_id;
250  async->nreqs = 0;
251  async->nnodes = 0;
252  async->is_used = true;
253  async->type = _XMP_COMM_NONE;
254  async->node = NULL;
255  async->reqs = _XMP_alloc(sizeof(MPI_Request) * _XMP_MAX_ASYNC_REQS);
256  async->gmove = NULL;
257  async->a = NULL;
258  async->next = NULL;
259  _tmp_async = async;
260  }
261  }
262 }

◆ xmpc_loop_sched()

void xmpc_loop_sched ( int  ser_init,
int  ser_cond,
int  ser_step,
int *  par_init,
int *  par_cond,
int *  par_step,
void *  t_desc,
int  t_idx,
int  expand_type,
int  lwidth,
int  uwidth,
int  unbound_flag 
)

◆ xmpc_ltog()

int xmpc_ltog ( int  local_idx,
void *  template,
int  template_index,
int  offset 
)

◆ xmpc_start_async()

void xmpc_start_async ( )
290 {
291  _xmp_is_async = false;
292  _tmp_async = NULL;
293 }
_XMP_utofu_sync_all
void _XMP_utofu_sync_all(void)
Definition: xmp_coarray_utofu.c:975
_XMP_gasnet_sync_memory
void _XMP_gasnet_sync_memory()
Execute sync_memory.
Definition: xmp_coarray_gasnet.c:830
_XMP_COMM_NONE
#define _XMP_COMM_NONE
Definition: xmp_constant.h:135
_XMP_array_info_type::align_subscript
long long align_subscript
Definition: xmp_data_struct.h:246
_XMP_utofu_coarray_malloc
void _XMP_utofu_coarray_malloc(_XMP_coarray_t *coarray_desc, void **addr, const size_t coarray_size)
Definition: xmp_coarray_utofu.c:232
_XMP_gasnet_atomic_ref
void _XMP_gasnet_atomic_ref(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int *value, size_t elmt_size)
Definition: xmp_intrinsic_gasnet.c:95
_XMP_nodes_info_type::size
int size
Definition: xmp_data_struct.h:32
_XMP_fjrdma_sync_all
void _XMP_fjrdma_sync_all()
Execute sync_all.
Definition: xmp_coarray_fjrdma.c:1350
_XMP_ASYNC_COMM_SIZE
#define _XMP_ASYNC_COMM_SIZE
Definition: xmp_data_struct.h:471
_XMP_nodes_type::comm_size
int comm_size
Definition: xmp_data_struct.h:48
_XMP_mpi_atomic_ref
void _XMP_mpi_atomic_ref(int target_rank, _XMP_coarray_t *c, size_t offset, int *value, size_t elmt_size)
Definition: xmp_intrinsic_mpi.c:21
_XMP_template_type::info
_XMP_template_info_t info[1]
Definition: xmp_data_struct.h:115
_XMP_MAX_ASYNC_REQS
#define _XMP_MAX_ASYNC_REQS
Definition: xmp_data_struct.h:472
_xmp_fjrdma_wait_noargs
void _xmp_fjrdma_wait_noargs()
Wait operation without node-ref and tag.
Definition: xmp_post_wait_fjrdma.c:175
_XMP_template_info_type::ser_size
unsigned long long ser_size
Definition: xmp_data_struct.h:74
_XMP_array_info_type::align_template_index
int align_template_index
Definition: xmp_data_struct.h:260
_XMP_utofu_sync_memory
void _XMP_utofu_sync_memory(void)
Definition: xmp_coarray_utofu.c:960
_XMP_N_DIST_BLOCK
#define _XMP_N_DIST_BLOCK
Definition: xmp_constant.h:29
_XMP_fjrdma_sync_memory
void _XMP_fjrdma_sync_memory()
Execute sync_memory.
Definition: xmp_coarray_fjrdma.c:1338
_XMP_N_REDUCE_MINLOC
#define _XMP_N_REDUCE_MINLOC
Definition: xmp_constant.h:61
_XMP_nodes_type::is_member
int is_member
Definition: xmp_data_struct.h:46
_XMP_alloc
void * _XMP_alloc(size_t size)
Definition: xmp_util.c:21
_XMP_gasnet_atomic_define
void _XMP_gasnet_atomic_define(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int value, _XMP_coarray_t *src_desc, size_t src_offset, size_t elmt_size)
Definition: xmp_intrinsic_gasnet.c:57
_XMP_finalize_nodes
void _XMP_finalize_nodes(void *nodes)
_XMP_async_comm::next
struct _XMP_async_comm * next
Definition: xmp_data_struct.h:468
_XMP_array_section::length
long length
Definition: xmp_data_struct.h:377
_XMP_template_type::chunk
_XMP_template_chunk_t * chunk
Definition: xmp_data_struct.h:112
_XMP_tca_malloc
void _XMP_tca_malloc(_XMP_coarray_t *coarray_desc, void **addr, const size_t coarray_size)
Definition: xmp_coarray_tca.c:107
_XMP_gasnet_coarray_malloc
void _XMP_gasnet_coarray_malloc(_XMP_coarray_t *coarray_desc, void **addr, const size_t coarray_size)
Definition: xmp_coarray_gasnet.c:794
_xmp_mpi_wait_noargs
void _xmp_mpi_wait_noargs()
Wait operation without node-ref and tag.
Definition: xmp_post_wait_mpi.c:126
_XMP_coarray_get_total_elmts
int _XMP_coarray_get_total_elmts(void *coarray_desc)
Definition: xmp_coarray_acc.c:9
xmp_unpack
void xmp_unpack(void *a_p, void *v_p, void *m_p)
Definition: xmp_intrinsic.c:6031
_XMP_array_info_type::ser_upper
int ser_upper
Definition: xmp_data_struct.h:200
_XMP_N_GMOVE_NORMAL
#define _XMP_N_GMOVE_NORMAL
Definition: xmp_constant.h:69
_XMP_async_gmove::sendbuf
void * sendbuf
Definition: xmp_data_struct.h:451
_XMP_fjrdma_get
void _XMP_fjrdma_get(const int src_contiguous, const int dst_contiguous, const int target_rank, const int src_dims, const int dst_dims, const _XMP_array_section_t *src_info, const _XMP_array_section_t *dst_info, const _XMP_coarray_t *src_desc, const _XMP_coarray_t *dst_desc, void *dst, const size_t src_elmts, const size_t dst_elmts)
Definition: xmp_coarray_fjrdma.c:2114
_XMP_mpi_coarray_lastly_deallocate
void _XMP_mpi_coarray_lastly_deallocate(bool is_acc)
Deallocate memory region when calling _XMP_coarray_lastly_deallocate()
Definition: xmp_coarray_mpi.c:216
_XMP_utofu_put
void _XMP_utofu_put(const int dst_contiguous, const int src_contiguous, const int target_rank, const int dst_dims, const int src_dims, const _XMP_array_section_t *dst_info, const _XMP_array_section_t *src_info, const _XMP_coarray_t *dst_desc, const _XMP_coarray_t *src_desc, void *src, const size_t dst_elmts, const size_t src_elmts)
Definition: xmp_coarray_utofu.c:625
xmp_coarray::elmt_size
size_t elmt_size
Definition: xmp_data_struct.h:339
xmp_coarray::distance_of_image_elmts
int * distance_of_image_elmts
Definition: xmp_data_struct.h:357
_XMP_mpi_put
void _XMP_mpi_put(const int dst_contiguous, const int src_contiguous, const int org_target_rank, const int dst_dims, const int src_dims, const _XMP_array_section_t *dst_info, const _XMP_array_section_t *src_info, const _XMP_coarray_t *dst_desc, const void *src, const int dst_elmts, const int src_elmts, const int is_dst_on_acc)
Definition: xmp_coarray_mpi.c:424
_XMP_array_info_type::ser_size
int ser_size
Definition: xmp_data_struct.h:201
_XMP_mpi_sync_memory
void _XMP_mpi_sync_memory()
Execute sync_memory.
Definition: xmp_coarray_mpi.c:542
_XMP_async_comm::gmove
_XMP_async_gmove_t * gmove
Definition: xmp_data_struct.h:466
_XMP_nodes_dish_type::prev
struct _XMP_nodes_dish_type * prev
Definition: xmp_nodes_stack.c:10
_XMP_TEND
#define _XMP_TEND(t, t0)
Definition: xmp_internal.h:748
_XMP_async_comm::type
int type
Definition: xmp_data_struct.h:463
_XMP_template_chunk_type::onto_nodes_info
_XMP_nodes_info_t * onto_nodes_info
Definition: xmp_data_struct.h:94
head
MemoryChunkOrder_t * head
Definition: xmpco_alloc.c:92
_XMP_nodes_dish_type::nodes
_XMP_nodes_t * nodes
Definition: xmp_nodes_stack.c:9
_XMP_nodes_type::comm_rank
int comm_rank
Definition: xmp_data_struct.h:52
_XMP_async_comm::is_used
_Bool is_used
Definition: xmp_data_struct.h:462
_XMP_COMM_REDUCE_SHADOW
#define _XMP_COMM_REDUCE_SHADOW
Definition: xmp_constant.h:137
_XMP_world_rank
int _XMP_world_rank
Definition: xmp_world.c:9
_XMP_gasnet_coarray_lastly_deallocate
void _XMP_gasnet_coarray_lastly_deallocate()
Deallocate memory region when calling _XMP_coarray_lastly_deallocate()
Definition: xmp_coarray_gasnet.c:784
_XMP_mpi_coarray_malloc
void _XMP_mpi_coarray_malloc(_XMP_coarray_t *coarray_desc, void **addr, const size_t coarray_size, bool is_acc)
Definition: xmp_coarray_mpi.c:237
_XMP_mpi_sync_all
void _XMP_mpi_sync_all()
Execute sync_all.
Definition: xmp_coarray_mpi.c:603
_XMP_template_type::onto_nodes
_XMP_nodes_t * onto_nodes
Definition: xmp_data_struct.h:111
xmp_coarray::coarray_dims
int coarray_dims
Definition: xmp_data_struct.h:342
_XMP_array_info_type::shadow_size_lo
int shadow_size_lo
Definition: xmp_data_struct.h:249
tail
MemoryChunkOrder_t * tail
Definition: xmpco_alloc.c:93
_XMP_TSTART
#define _XMP_TSTART(t0)
Definition: xmp_internal.h:747
_XMP_array_type::align_template
_XMP_template_t * align_template
Definition: xmp_data_struct.h:312
_XMP_async_comm::nnodes
int nnodes
Definition: xmp_data_struct.h:461
_XMP_array_info_type::align_manner
int align_manner
Definition: xmp_data_struct.h:197
_XMP_ENTIRE_NODES
#define _XMP_ENTIRE_NODES
Definition: xmp_constant.h:121
_XMP_N_INT_FALSE
#define _XMP_N_INT_FALSE
Definition: xmp_constant.h:5
_XMP_N_DIST_CYCLIC
#define _XMP_N_DIST_CYCLIC
Definition: xmp_constant.h:30
_XMP_local_get
void _XMP_local_get(void *, const _XMP_coarray_t *, const int, const int, const int, const int, const _XMP_array_section_t *, const _XMP_array_section_t *, const size_t, const size_t)
Definition: xmp_coarray_local.c:597
_XMP_array_section::start
long start
Definition: xmp_data_struct.h:376
_XMP_gasnet_sync_all
void _XMP_gasnet_sync_all()
Execute sync_all.
Definition: xmp_coarray_gasnet.c:846
_XMP_array_info_type::ser_lower
int ser_lower
Definition: xmp_data_struct.h:199
_XMP_tca_sync_memory
void _XMP_tca_sync_memory()
Execute sync_memory.
Definition: xmp_coarray_tca.c:177
_XMP_template_chunk_type
Definition: xmp_data_struct.h:78
_XMP_mpi_get
void _XMP_mpi_get(const int src_contiguous, const int dst_contiguous, const int org_target_rank, const int src_dims, const int dst_dims, const _XMP_array_section_t *src_info, const _XMP_array_section_t *dst_info, const _XMP_coarray_t *src_desc, void *dst, const int src_elmts, const int dst_elmts, const int is_src_on_acc)
Definition: xmp_coarray_mpi.c:483
_XMP_async_comm::nreqs
int nreqs
Definition: xmp_data_struct.h:460
_XMP_gasnet_sync_images
void _XMP_gasnet_sync_images(const int num, int image_set[num], int *status)
Execute sync images.
Definition: xmp_coarray_gasnet.c:1677
_XMP_N_DIST_BLOCK_CYCLIC
#define _XMP_N_DIST_BLOCK_CYCLIC
Definition: xmp_constant.h:31
_XMP_array_info_type::local_lower
int local_lower
Definition: xmp_data_struct.h:209
_XMP_N_DIST_GBLOCK
#define _XMP_N_DIST_GBLOCK
Definition: xmp_constant.h:32
_XMP_array_info_type::shadow_size_hi
int shadow_size_hi
Definition: xmp_data_struct.h:250
_XMP_get_execution_nodes
_XMP_nodes_t * _XMP_get_execution_nodes(void)
Definition: xmp_nodes_stack.c:46
_XMP_array_type
Definition: xmp_data_struct.h:266
_xmp_utofu_wait_noargs
void _xmp_utofu_wait_noargs(void)
Definition: xmp_post_wait_utofu.c:89
_XMP_N_REDUCE_MAXLOC
#define _XMP_N_REDUCE_MAXLOC
Definition: xmp_constant.h:60
_XMP_async_comm::reqs
MPI_Request * reqs
Definition: xmp_data_struct.h:464
_XMP_async_comm
Definition: xmp_data_struct.h:458
_xmp_gasnet_wait_noargs
void _xmp_gasnet_wait_noargs()
Wait operation without node-ref and tag.
Definition: xmp_post_wait_gasnet.c:123
_XMP_fjrdma_regmem
void _XMP_fjrdma_regmem(_XMP_coarray_t *coarray_desc, void *addr, const size_t coarray_size)
Definition: xmp_coarray_fjrdma.c:1567
_XMP_template_chunk_type::dist_manner
int dist_manner
Definition: xmp_data_struct.h:87
_XMP_array_type::type_size
size_t type_size
Definition: xmp_data_struct.h:274
_XMP_array_info_type::alloc_size
int alloc_size
Definition: xmp_data_struct.h:212
_XMP_N_ALIGN_BLOCK
#define _XMP_N_ALIGN_BLOCK
Definition: xmp_constant.h:37
_XMP_mpi_coarray_regmem
void _XMP_mpi_coarray_regmem(_XMP_coarray_t *coarray_desc, void *real_addr, const size_t coarray_size, bool is_acc)
Definition: xmp_coarray_mpi.c:1157
xmp_coarray
Definition: xmp_data_struct.h:328
_XMP_array_type::info
_XMP_array_info_t info[1]
Definition: xmp_data_struct.h:313
_XMP_free
void _XMP_free(void *p)
Definition: xmp_util.c:37
_XMP_ASSERT
#define _XMP_ASSERT(_flag)
Definition: xmp_internal.h:34
_XMP_reduce_CLAUSE
void _XMP_reduce_CLAUSE(void *data_addr, int count, int datatype, int op)
Definition: xmp_reduce.c:351
_XMP_fjrdma_atomic_ref
void _XMP_fjrdma_atomic_ref(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int *value, _XMP_coarray_t *src_desc, size_t src_offset, size_t elmt_size)
Definition: xmp_intrinsic_fjrdma.c:26
_xmp_tca_wait_noargs
void _xmp_tca_wait_noargs()
Wait operation without node-ref and tag.
Definition: xmp_post_wait_tca.c:168
_XMP_mpi_sync_images
void _XMP_mpi_sync_images(const int num, const int *image_set, int *status)
Execute sync images.
Definition: xmp_coarray_mpi.c:1080
xmp_sync_images
void xmp_sync_images(const int num, int *image_set, int *status)
Execute sync_images()
Definition: xmp_coarray.c:1439
_XMP_coarray_set_info
void _XMP_coarray_set_info(_XMP_coarray_t *c)
Definition: xmp_coarray.c:297
_XMP_utofu_atomic_define
void _XMP_utofu_atomic_define(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int value, size_t elmt_size)
Definition: xmp_intrinsic_utofu.c:32
_XMP_reduce_gpu_CLAUSE
void _XMP_reduce_gpu_CLAUSE(void *data_addr, int count, int datatype, int op)
Definition: xmp_reduce_gpu.c:144
_XMP_gasnet_put
void _XMP_gasnet_put(const int dst_contiguous, const int src_contiguous, const int target_rank, const int dst_dims, const int src_dims, const _XMP_array_section_t *dst_info, const _XMP_array_section_t *src_info, const _XMP_coarray_t *dst_desc, const void *src, const size_t dst_elmts, const size_t src_elmts)
Definition: xmp_coarray_gasnet.c:1095
_XMP_async_comm::a
_XMP_array_t * a
Definition: xmp_data_struct.h:467
_XMP_fjrdma_coarray_lastly_deallocate
void _XMP_fjrdma_coarray_lastly_deallocate()
Deallocate memory region when calling _XMP_coarray_lastly_deallocate()
Definition: xmp_coarray_fjrdma.c:1593
_XMP_array_type::array_addr_p
void * array_addr_p
Definition: xmp_data_struct.h:279
_XMP_utofu_get
void _XMP_utofu_get(const int src_contiguous, const int dst_contiguous, const int target_rank, const int src_dims, const int dst_dims, const _XMP_array_section_t *src_info, const _XMP_array_section_t *dst_info, const _XMP_coarray_t *src_desc, const _XMP_coarray_t *dst_desc, void *dst, const size_t src_elmts, const size_t dst_elmts)
Definition: xmp_coarray_utofu.c:929
_XMP_nodes_type::comm
_XMP_comm_t * comm
Definition: xmp_data_struct.h:53
_XMP_sync_images_COMM
void _XMP_sync_images_COMM(MPI_Comm *comm, int *status)
Definition: xmp_coarray_mpi.c:1105
_XMP_async_comm::node
_XMP_nodes_t ** node
Definition: xmp_data_struct.h:465
_XMP_create_nodes_by_comm
_XMP_nodes_t * _XMP_create_nodes_by_comm(int is_member, _XMP_comm_t *comm)
Definition: xmp_nodes.c:1007
_XMP_world_size
int _XMP_world_size
Definition: xmp_world.c:8
_XMP_get_async
_XMP_async_comm_t * _XMP_get_async(int async_id)
Definition: xmp_async.c:30
_XMP_array_type::dim
int dim
Definition: xmp_data_struct.h:272
xmp_pack
void xmp_pack(void *v_p, void *a_p, void *m_p)
Definition: xmp_intrinsic.c:5728
_XMP_fatal
void _XMP_fatal(char *msg)
Definition: xmp_util.c:42
_XMP_reduce_shadow_sum
void _XMP_reduce_shadow_sum(_XMP_array_t *a)
Definition: xmp_reduce_shadow.c:153
_XMP_array_section::stride
long stride
Definition: xmp_data_struct.h:378
xmp_coarray::coarray_elmts
long * coarray_elmts
Definition: xmp_data_struct.h:345
_XMP_fjrdma_put
void _XMP_fjrdma_put(const int dst_contiguous, const int src_contiguous, const int target_rank, const int dst_dims, const int src_dims, const _XMP_array_section_t *dst_info, const _XMP_array_section_t *src_info, const _XMP_coarray_t *dst_desc, const _XMP_coarray_t *src_desc, void *src, const size_t dst_elmts, const size_t src_elmts)
Definition: xmp_coarray_fjrdma.c:1866
_XMP_world_nodes
void * _XMP_world_nodes
Definition: xmp_world.c:10
_XMP_setup_reduce_type
void _XMP_setup_reduce_type(MPI_Datatype *mpi_datatype, size_t *datatype_size, int datatype)
Definition: xmp_reduce.c:13
check_template
int check_template(_XMP_template_t *dst_t, _XMP_template_t *src_t)
Definition: xmp_intrinsic.c:1216
_XMP_fatal
void _XMP_fatal(char *msg)
Definition: xmp_util.c:42
_XMP_array_section::distance
long distance
Definition: xmp_data_struct.h:380
_XMP_array_section
Definition: xmp_data_struct.h:375
_XMP_push_nodes
void _XMP_push_nodes(void *nodes)
_XMP_template_type::is_distributed
_Bool is_distributed
Definition: xmp_data_struct.h:105
_XMP_fjrdma_coarray_malloc
void _XMP_fjrdma_coarray_malloc(_XMP_coarray_t *coarray_desc, void **addr, const size_t coarray_size)
Definition: xmp_coarray_fjrdma.c:1553
_XMP_world_rank
int _XMP_world_rank
Definition: xmp_world.c:9
_XMP_nodes_type::dim
int dim
Definition: xmp_data_struct.h:47
_XMP_nodes_type::attr
int attr
Definition: xmp_data_struct.h:49
_XMP_nodes_type
Definition: xmp_data_struct.h:40
_XMP_async_comm::async_id
int async_id
Definition: xmp_data_struct.h:459
_XMP_local_put
void _XMP_local_put(_XMP_coarray_t *, const void *, const int, const int, const int, const int, const _XMP_array_section_t *, const _XMP_array_section_t *, const size_t, const size_t)
Definition: xmp_coarray_local.c:563
_XMP_async_gmove::mode
int mode
Definition: xmp_data_struct.h:450
_XMP_RETURN_IF_SINGLE
#define _XMP_RETURN_IF_SINGLE
Definition: xmp_internal.h:37
_XMP_async_gmove
Definition: xmp_data_struct.h:449
_XMP_check_less_than_SIZE_MAX
void _XMP_check_less_than_SIZE_MAX(const long s)
Definition: xmp_coarray_utils.c:9
_XMP_fjrdma_atomic_define
void _XMP_fjrdma_atomic_define(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int value, _XMP_coarray_t *src_desc, size_t src_offset, size_t elmt_size)
Definition: xmp_intrinsic_fjrdma.c:3
_XMP_nodes_dish_type
Definition: xmp_nodes_stack.c:8
_XMP_RETURN_IF_AFTER_FINALIZATION
#define _XMP_RETURN_IF_AFTER_FINALIZATION
Definition: xmp_internal.h:45
_XMP_mpi_atomic_define
void _XMP_mpi_atomic_define(int target_rank, _XMP_coarray_t *c, size_t offset, int value, size_t elmt_size)
Definition: xmp_intrinsic_mpi.c:3
_XMP_utofu_sync_images
void _XMP_utofu_sync_images(const int num, int *image_set, int *status)
Definition: xmp_coarray_utofu.c:1065
_XMP_array_section::elmts
long elmts
Definition: xmp_data_struct.h:379
_XMP_array_type::type
int type
Definition: xmp_data_struct.h:273
_XMP_fjrdma_sync_images
void _XMP_fjrdma_sync_images(const int num, int *image_set, int *status)
Execute sync images.
Definition: xmp_coarray_fjrdma.c:2251
_XMP_N_INT_TRUE
#define _XMP_N_INT_TRUE
Definition: xmp_constant.h:4
_XMP_gasnet_get
void _XMP_gasnet_get(const int src_contiguous, const int dst_contiguous, const int target_rank, const int src_dims, const int dst_dims, const _XMP_array_section_t *src_info, const _XMP_array_section_t *dst_info, const _XMP_coarray_t *src_desc, const void *dst, const size_t src_elmts, const size_t dst_elmts)
Definition: xmp_coarray_gasnet.c:1430
_XMP_N_ALIGN_GBLOCK
#define _XMP_N_ALIGN_GBLOCK
Definition: xmp_constant.h:40
_XMP_template_chunk_type::mapping_array
long long * mapping_array
Definition: xmp_data_struct.h:88
_XMP_array_type::is_allocated
_Bool is_allocated
Definition: xmp_data_struct.h:270
_XMP_utofu_regmem
void _XMP_utofu_regmem(_XMP_coarray_t *coarray_desc, void *addr, const size_t coarray_size)
Definition: xmp_coarray_utofu.c:238
_XMP_get_execution_nodes
void * _XMP_get_execution_nodes(void)
Definition: xmp_nodes_stack.c:46
_XMP_utofu_atomic_ref
void _XMP_utofu_atomic_ref(int target_rank, _XMP_coarray_t *dst_desc, size_t dst_offset, int *value, size_t elmt_size)
Definition: xmp_intrinsic_utofu.c:59
_XMP_array_info_type::local_upper
int local_upper
Definition: xmp_data_struct.h:210