Skip to content

Commit 6928fb4

Browse files
committed
Use helper for computing sizes.
1 parent 8af45b8 commit 6928fb4

File tree

1 file changed

+49
-57
lines changed

1 file changed

+49
-57
lines changed

src/runtime-libraries/mpi/mpi_caf.c

Lines changed: 49 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,9 @@ double (*double_by_value)(double, double);
427427
#define GFC_DESCRIPTOR_EXTENT(desc, i) \
428428
((desc)->dim[i]._ubound + 1 - (desc)->dim[i].lower_bound)
429429

430+
#define sizeof_desc_for_rank(rank) \
431+
(sizeof(gfc_descriptor_t) + (rank) * sizeof(descriptor_dimension))
432+
430433
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
431434

432435
#if defined(NONBLOCKING_PUT) && !defined(CAF_MPI_LOCK_UNLOCK)
@@ -583,6 +586,21 @@ dump_mem(const char *pre, void *m, const size_t s)
583586
#define dump_mem(pre, m, s) ;
584587
#endif
585588

589+
size_t
590+
compute_arr_data_size_sz(const gfc_descriptor_t *desc, size_t sz)
591+
{
592+
for (int i = 0; i < GFC_DESCRIPTOR_RANK(desc); ++i)
593+
sz *= GFC_DESCRIPTOR_EXTENT(desc, i);
594+
595+
return sz;
596+
}
597+
598+
size_t
599+
compute_arr_data_size(const gfc_descriptor_t *desc)
600+
{
601+
return compute_arr_data_size_sz(desc, desc->span);
602+
}
603+
586604
size_t
587605
handle_getting(ct_msg_t *msg, int cb_image, void *baseptr, void *dst_ptr,
588606
void **buffer, int32_t *free_buffer, void *dbase)
@@ -596,9 +614,8 @@ handle_getting(ct_msg_t *msg, int cb_image, void *baseptr, void *dst_ptr,
596614
{
597615
((gfc_descriptor_t *)dbase)->base_addr = baseptr;
598616
src_ptr = dbase;
599-
dbase += sizeof(gfc_descriptor_t)
600-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr)
601-
* sizeof(descriptor_dimension);
617+
dbase += sizeof_desc_for_rank(
618+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr));
602619
dprint("ct: src_desc base: %p, rank: %d, offset: %zd.\n",
603620
((gfc_descriptor_t *)src_ptr)->base_addr,
604621
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr),
@@ -656,10 +673,8 @@ handle_getting(ct_msg_t *msg, int cb_image, void *baseptr, void *dst_ptr,
656673
}
657674
if (msg->flags & CT_INCLUDE_DESCRIPTOR)
658675
{
659-
const size_t desc_size
660-
= sizeof(gfc_descriptor_t)
661-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)dst_ptr)
662-
* sizeof(descriptor_dimension);
676+
const size_t desc_size = sizeof_desc_for_rank(
677+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)dst_ptr));
663678
void *tbuff = malloc(desc_size + send_size);
664679
dprint("ct: Including dst descriptor: %p, sizeof(desc): %zd, rank: "
665680
"%d, sizeof(buffer): %zd, incoming free_buffer: %b.\n",
@@ -704,9 +719,9 @@ handle_get_message(ct_msg_t *msg, void *baseptr)
704719
{
705720
buffer = msg->data;
706721
((gfc_descriptor_t *)buffer)->base_addr = NULL;
707-
get_data = msg->data + sizeof(gfc_descriptor_t)
708-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)buffer)
709-
* sizeof(descriptor_dimension);
722+
get_data = msg->data
723+
+ sizeof_desc_for_rank(
724+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)buffer));
710725
/* The destination is a descriptor which address is not mutable. */
711726
dst_ptr = buffer;
712727
}
@@ -748,9 +763,8 @@ handle_is_present_message(ct_msg_t *msg, void *baseptr)
748763
{
749764
((gfc_descriptor_t *)add_data)->base_addr = baseptr;
750765
ptr = add_data;
751-
add_data += sizeof(gfc_descriptor_t)
752-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)ptr)
753-
* sizeof(descriptor_dimension);
766+
add_data
767+
+= sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)ptr));
754768
}
755769
else
756770
ptr = baseptr;
@@ -778,9 +792,8 @@ handle_send_message(ct_msg_t *msg, void *baseptr)
778792
{
779793
src_ptr = add_data;
780794
((gfc_descriptor_t *)add_data)->base_addr = buffer;
781-
add_data += sizeof(gfc_descriptor_t)
782-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr)
783-
* sizeof(descriptor_dimension);
795+
add_data += sizeof_desc_for_rank(
796+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr));
784797
dprint("ct: src_desc base: %p, rank: %d, offset: %td.\n",
785798
((gfc_descriptor_t *)src_ptr)->base_addr,
786799
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)src_ptr),
@@ -803,9 +816,8 @@ handle_send_message(ct_msg_t *msg, void *baseptr)
803816
{
804817
((gfc_descriptor_t *)add_data)->base_addr = baseptr;
805818
dst_ptr = add_data;
806-
add_data += sizeof(gfc_descriptor_t)
807-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)dst_ptr)
808-
* sizeof(descriptor_dimension);
819+
add_data += sizeof_desc_for_rank(
820+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)dst_ptr));
809821
dprint("ct: dst_desc base: %p, rank: %d, offset: %zd.\n",
810822
((gfc_descriptor_t *)dst_ptr)->base_addr,
811823
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)dst_ptr),
@@ -890,14 +902,12 @@ handle_transfer_message(ct_msg_t *msg, void *baseptr)
890902
{
891903
const gfc_descriptor_t *d = (gfc_descriptor_t *)buffer;
892904
const int rank = GFC_DESCRIPTOR_RANK(d);
893-
size_t desc_size, sz = d->span;
894-
for (int i = 0; i < rank; ++i)
895-
sz *= GFC_DESCRIPTOR_EXTENT(d, i);
905+
const size_t desc_size = sizeof_desc_for_rank(rank),
906+
sz = compute_arr_data_size(d);
896907
/* Add the data first. */
897908
send_msg->transfer_size = sz;
898909
memcpy(send_msg->data, ((gfc_descriptor_t *)buffer)->base_addr, sz);
899910
offset += sz;
900-
desc_size = sizeof(gfc_descriptor_t) + rank * sizeof(descriptor_dimension);
901911
memcpy(send_msg->data + offset, buffer, desc_size);
902912
offset += desc_size;
903913
}
@@ -4795,9 +4805,6 @@ get_data(void *ds, mpi_caf_token_t *token, MPI_Aint offset, int dst_type,
47954805
num = (abs_stride > 1) ? (1 + (num - 1) / abs_stride) : num; \
47964806
} while (0)
47974807

4798-
#define sizeof_desc_for_rank(rank) \
4799-
(sizeof(gfc_descriptor_t) + (rank) * sizeof(descriptor_dimension))
4800-
48014808
typedef struct gfc_dim1_descriptor_t
48024809
{
48034810
gfc_descriptor_t base;
@@ -5454,14 +5461,11 @@ PREFIX(get_from_remote)(caf_token_t token, const gfc_descriptor_t *opt_src_desc,
54545461
has_src_desc = opt_src_desc,
54555462
external_call = *TOKEN(token) != MPI_WIN_NULL;
54565463
const size_t dst_desc_size
5457-
= opt_dst_desc ? sizeof(gfc_descriptor_t)
5458-
+ GFC_DESCRIPTOR_RANK(opt_dst_desc)
5459-
* sizeof(descriptor_dimension)
5464+
= opt_dst_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_dst_desc))
5465+
: 0,
5466+
src_desc_size
5467+
= has_src_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_src_desc))
54605468
: 0,
5461-
src_desc_size = has_src_desc ? sizeof(gfc_descriptor_t)
5462-
+ GFC_DESCRIPTOR_RANK(opt_src_desc)
5463-
* sizeof(descriptor_dimension)
5464-
: 0,
54655469
msg_size
54665470
= sizeof(ct_msg_t) + dst_desc_size + src_desc_size + get_data_size;
54675471
struct running_accesses_t *rat;
@@ -5594,10 +5598,8 @@ PREFIX(get_from_remote)(caf_token_t token, const gfc_descriptor_t *opt_src_desc,
55945598
*opt_dst_charlen = cnt / dst_size;
55955599
if (dst_incl_desc)
55965600
{
5597-
const size_t desc_size
5598-
= sizeof(gfc_descriptor_t)
5599-
+ GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)(*dst_data))
5600-
* sizeof(descriptor_dimension);
5601+
const size_t desc_size = sizeof_desc_for_rank(
5602+
GFC_DESCRIPTOR_RANK((gfc_descriptor_t *)(*dst_data)));
56015603
dprint("refitting dst descriptor of size %zd at %p with data %zd at %p "
56025604
"from %d bytes transfered.\n",
56035605
desc_size, opt_dst_desc, cnt - desc_size, *dst_data, cnt);
@@ -5766,14 +5768,11 @@ PREFIX(send_to_remote)(caf_token_t token, gfc_descriptor_t *opt_dst_desc,
57665768
const bool dst_incl_desc = opt_dst_desc, has_src_desc = opt_src_desc,
57675769
external_call = *TOKEN(token) != MPI_WIN_NULL;
57685770
const size_t dst_desc_size
5769-
= opt_dst_desc ? sizeof(gfc_descriptor_t)
5770-
+ GFC_DESCRIPTOR_RANK(opt_dst_desc)
5771-
* sizeof(descriptor_dimension)
5771+
= opt_dst_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_dst_desc))
57725772
: 0,
5773-
src_desc_size = has_src_desc ? sizeof(gfc_descriptor_t)
5774-
+ GFC_DESCRIPTOR_RANK(opt_src_desc)
5775-
* sizeof(descriptor_dimension)
5776-
: 0;
5773+
src_desc_size
5774+
= has_src_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_src_desc))
5775+
: 0;
57775776
size_t src_size
57785777
= opt_src_charlen ? in_src_size * *opt_src_charlen : in_src_size,
57795778
msg_size = sizeof(ct_msg_t) + src_size + dst_desc_size + src_desc_size
@@ -5810,10 +5809,8 @@ PREFIX(send_to_remote)(caf_token_t token, gfc_descriptor_t *opt_dst_desc,
58105809
check_image_health(remote_image, stat);
58115810
if (opt_src_charlen && opt_src_desc)
58125811
{
5813-
size_t sz = 1;
5812+
const size_t sz = compute_arr_data_size_sz(opt_src_desc, 1);
58145813
msg_size -= src_size;
5815-
for (int i = 0; i < GFC_DESCRIPTOR_RANK(opt_src_desc); ++i)
5816-
sz *= GFC_DESCRIPTOR_EXTENT(opt_src_desc, i);
58175814
src_size *= sz;
58185815
msg_size += src_size;
58195816
}
@@ -5952,14 +5949,11 @@ PREFIX(transfer_between_remotes)(
59525949
struct transfer_msg_data_t *tmd;
59535950
const bool has_src_desc = opt_src_desc;
59545951
const size_t dst_desc_size
5955-
= opt_dst_desc ? sizeof(gfc_descriptor_t)
5956-
+ GFC_DESCRIPTOR_RANK(opt_dst_desc)
5957-
* sizeof(descriptor_dimension)
5952+
= opt_dst_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_dst_desc))
59585953
: 0,
5959-
src_desc_size = has_src_desc ? sizeof(gfc_descriptor_t)
5960-
+ GFC_DESCRIPTOR_RANK(opt_src_desc)
5961-
* sizeof(descriptor_dimension)
5962-
: 0;
5954+
src_desc_size
5955+
= has_src_desc ? sizeof_desc_for_rank(GFC_DESCRIPTOR_RANK(opt_src_desc))
5956+
: 0;
59635957
size_t src_size
59645958
= opt_src_charlen ? in_src_size * *opt_src_charlen : in_src_size,
59655959
dst_msg_size = sizeof(ct_msg_t) + sizeof(struct transfer_msg_data_t)
@@ -5996,11 +5990,9 @@ PREFIX(transfer_between_remotes)(
59965990

59975991
if (opt_src_charlen && opt_src_desc)
59985992
{
5999-
size_t sz = 1;
5993+
const size_t sz = compute_arr_data_size_sz(opt_src_desc, 1);
60005994
full_msg_size -= src_size;
60015995
dst_msg_size -= src_size;
6002-
for (int i = 0; i < GFC_DESCRIPTOR_RANK(opt_src_desc); ++i)
6003-
sz *= GFC_DESCRIPTOR_EXTENT(opt_src_desc, i);
60045996
src_size *= sz;
60055997
full_msg_size += src_size;
60065998
dst_msg_size += src_size;

0 commit comments

Comments
 (0)