Skip to content

Commit 86c6450

Browse files
author
neok-m4700
committed
Getting close
dst_dim seems to be failing some increment in send_for_ref see the log below: 1/2: send_for_ref(5119) Entering send_for_ref: dst_offset = 0, desc_offset = 0, ds_glb = 0, desc_glb = 0 1/2: send_for_ref(5216) image_index = 1, num = 1, src_size = 4, src_dim = 0, dst_dim = 0, ref_type = CAF_REF_ARRAY 1/2: send_for_ref(5302) remote desc rank: 2 (ref_rank: 1) 1/2: send_for_ref(5307) remote desc dim[0] = (lb = 1, ub = 8, stride = 1) 1/2: send_for_ref(5307) remote desc dim[1] = (lb = 1, ub = 4, stride = 8) 1/2: send_for_ref(5313) array_ref_dst[0] = CAF_ARR_REF_SINGLE := array_ref_src[0] = CAF_ARR_REF_SINGLE 1/2: send_for_ref(5119) Entering send_for_ref: dst_offset = 0, desc_offset = 0, ds_glb = 0, desc_glb = 0 1/2: send_for_ref(5216) image_index = 1, num = 1, src_size = 4, src_dim = 1, dst_dim = 0, ref_type = CAF_REF_ARRAY 1/2: send_for_ref(5313) array_ref_dst[0] = CAF_ARR_REF_SINGLE := array_ref_src[1] = CAF_ARR_REF_FULL 1/2: send_for_ref(5119) Entering send_for_ref: dst_offset = 0, desc_offset = 0, ds_glb = 0, desc_glb = 0 1/2: send_for_ref(5216) image_index = 1, num = 1, src_size = 4, src_dim = 2, dst_dim = 0, ref_type = CAF_REF_ARRAY 1/2: send_for_ref(5313) array_ref_dst[0] = CAF_ARR_REF_SINGLE := array_ref_src[2] = CAF_ARR_REF_FULL 1/2: send_for_ref(5119) Entering send_for_ref: dst_offset = 0, desc_offset = 0, ds_glb = 0, desc_glb = 0 1/2: put_data(5017) (win: -1610612734, image: 2, offset: 0) <- 0x21e7440, num: 1, size 4 -> 4, dst type 3(4), src type 3(4)
1 parent e596c7c commit 86c6450

File tree

1 file changed

+73
-49
lines changed

1 file changed

+73
-49
lines changed

src/mpi/mpi_caf.c

Lines changed: 73 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ static char* caf_array_ref_str[] = {
7070
"CAF_ARR_REF_OPEN_START"
7171
};
7272

73+
static char* caf_ref_type_str[] = {
74+
"CAF_REF_COMPONENT",
75+
"CAF_REF_ARRAY",
76+
"CAF_REF_STATIC_ARRAY",
77+
};
78+
7379
#ifndef EXTRA_DEBUG_OUTPUT
7480
#define dprint(...)
7581
#define chk_err(...)
@@ -3973,9 +3979,11 @@ get_for_ref(caf_reference_t *ref, size_t *i, size_t dst_index,
39733979
int ierr;
39743980

39753981
if (unlikely(ref == NULL))
3982+
{
39763983
/* May be we should issue an error here, because this case should not
39773984
* occur. */
39783985
return;
3986+
}
39793987

39803988
dprint("sr_offset = %zd, sr = %p, desc_offset = %zd, src = %p, "
39813989
"sr_glb = %d, desc_glb = %d\n",
@@ -4493,7 +4501,7 @@ PREFIX(get_by_ref) (caf_token_t token, int image_index,
44934501
bool access_data_through_global_win = false;
44944502
/* Set when the remote descriptor is to accessed through the global window. */
44954503
bool access_desc_through_global_win = false;
4496-
caf_array_ref_t mode;
4504+
caf_array_ref_t array_ref;
44974505

44984506
realloc_needed = realloc_required = dst->base_addr == NULL;
44994507

@@ -4597,9 +4605,9 @@ PREFIX(get_by_ref) (caf_token_t token, int image_index,
45974605
#endif
45984606
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
45994607
{
4600-
mode = riter->u.a.mode[i];
4601-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
4602-
switch (mode)
4608+
array_ref = riter->u.a.mode[i];
4609+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
4610+
switch (array_ref)
46034611
{
46044612
case CAF_ARR_REF_VECTOR:
46054613
delta = riter->u.a.dim[i].v.nvec;
@@ -4785,9 +4793,9 @@ case kind: \
47854793
case CAF_REF_STATIC_ARRAY:
47864794
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
47874795
{
4788-
mode = riter->u.a.mode[i];
4789-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
4790-
switch (mode)
4796+
array_ref = riter->u.a.mode[i];
4797+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
4798+
switch (array_ref)
47914799
{
47924800
case CAF_ARR_REF_VECTOR:
47934801
delta = riter->u.a.dim[i].v.nvec;
@@ -5097,23 +5105,28 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
50975105
ptrdiff_t extent_dst = 1, array_offset_dst = 0, dst_stride, src_stride;
50985106
size_t next_dst_dim, ref_rank;
50995107
gfc_max_dim_descriptor_t dst_desc_data;
5108+
caf_ref_type_t ref_type = ref->type;
5109+
caf_array_ref_t array_ref_src = ref->u.a.mode[src_dim];
5110+
caf_array_ref_t array_ref_dst = ref->u.a.mode[dst_dim];
5111+
size_t src_size = 0;
51005112
int ierr;
51015113

51025114
if (unlikely(ref == NULL))
5115+
{
51035116
/* May be we should issue an error here, because this case should not
51045117
* occur. */
51055118
return;
5119+
}
51065120

5107-
dprint("dst_offset = %zd, ds = %p, desc_offset = %zd, dst = %p, "
5108-
"src = %p, sr = %p, ds_glb = %d, desc_glb = %d\n",
5109-
dst_byte_offset, ds, desc_byte_offset,
5110-
dst, src, sr, ds_global, desc_global);
5121+
dprint("Entering send_for_ref: "
5122+
"dst_offset = %zd, desc_offset = %zd, ds_glb = %d, desc_glb = %d\n",
5123+
dst_byte_offset, desc_byte_offset, ds_global, desc_global);
51115124

51125125
if (ref->next == NULL)
51135126
{
5114-
size_t src_size = GFC_DESCRIPTOR_SIZE(src);
5127+
src_size = GFC_DESCRIPTOR_SIZE(src);
51155128

5116-
switch (ref->type)
5129+
switch (ref_type)
51175130
{
51185131
case CAF_REF_COMPONENT:
51195132
dst_byte_offset += ref->u.c.offset;
@@ -5165,7 +5178,7 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
51655178
dst_type = ref->u.a.static_array_type;
51665179
/* Intentionally fall through. */
51675180
case CAF_REF_ARRAY:
5168-
if (ref->u.a.mode[src_dim] == CAF_ARR_REF_NONE)
5181+
if (array_ref_src == CAF_ARR_REF_NONE)
51695182
{
51705183
if (ds_global)
51715184
{
@@ -5201,7 +5214,12 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52015214
}
52025215
}
52035216

5204-
switch (ref->type)
5217+
dprint("image_index = %d, num = %zd, src_size = %zd, "
5218+
"src_dim = %zd, dst_dim = %zd, ref_type = %s\n",
5219+
image_index, num, src_size, src_dim, dst_dim,
5220+
caf_ref_type_str[ref_type]);
5221+
5222+
switch (ref_type)
52055223
{
52065224
case CAF_REF_COMPONENT:
52075225
if (ref->u.c.caf_token_offset > 0)
@@ -5239,7 +5257,7 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52395257
);
52405258
return;
52415259
case CAF_REF_ARRAY:
5242-
if (ref->u.a.mode[src_dim] == CAF_ARR_REF_NONE)
5260+
if (array_ref_src == CAF_ARR_REF_NONE)
52435261
{
52445262
send_for_ref(ref->next, i, src_index, mpi_token, dst, src, ds, sr,
52455263
dst_byte_offset, desc_byte_offset, dst_kind, src_kind,
@@ -5278,7 +5296,9 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52785296
dst = (gfc_descriptor_t *)&dst_desc_data;
52795297
}
52805298
else
5299+
{
52815300
dst = mpi_token->desc;
5301+
}
52825302
dst_byte_offset = 0;
52835303
desc_byte_offset = 0;
52845304
#ifdef EXTRA_DEBUG_OUTPUT
@@ -5292,7 +5312,10 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52925312
}
52935313
#endif
52945314
}
5295-
switch (ref->u.a.mode[dst_dim])
5315+
dprint("array_ref_dst[%zd] = %s := array_ref_src[%zd] = %s\n",
5316+
dst_dim, caf_array_ref_str[array_ref_dst],
5317+
src_dim, caf_array_ref_str[array_ref_src]);
5318+
switch (array_ref_dst)
52965319
{
52975320
case CAF_ARR_REF_VECTOR:
52985321
extent_dst = GFC_DESCRIPTOR_EXTENT(dst, dst_dim);
@@ -5345,7 +5368,8 @@ case kind: \
53455368
array_offset_dst = 0;
53465369
src_stride = (GFC_DESCRIPTOR_RANK(src) > 0) ?
53475370
src->dim[src_dim]._stride : 0;
5348-
dprint("arr ref full src_stride: %zd\n", src_stride);
5371+
dprint("CAF_ARR_REF_FULL: src_stride = %zd, dst_stride = %zd\n",
5372+
src_stride, dst_stride);
53495373
for (ptrdiff_t idx = 0; idx < extent_dst;
53505374
++idx, array_offset_dst += dst_stride)
53515375
{
@@ -5374,8 +5398,8 @@ case kind: \
53745398
src_stride = (GFC_DESCRIPTOR_RANK(src) > 0) ?
53755399
src->dim[src_dim]._stride : 0;
53765400
/* Increase the dst_dim only, when the src_extent is greater one
5377-
* or src and dst extent are both one. Don't increase when the scalar
5378-
* source is not present in the dst. */
5401+
* or src and dst extent are both one. Don't increase when the
5402+
* scalar source is not present in the dst. */
53795403
next_dst_dim = (extent_dst > 1) ||
53805404
(GFC_DESCRIPTOR_EXTENT(dst, dst_dim) == 1 && extent_dst == 1) ?
53815405
(dst_dim + 1) : dst_dim;
@@ -5465,7 +5489,7 @@ case kind: \
54655489
}
54665490
return;
54675491
case CAF_REF_STATIC_ARRAY:
5468-
if (ref->u.a.mode[dst_dim] == CAF_ARR_REF_NONE)
5492+
if (array_ref_dst == CAF_ARR_REF_NONE)
54695493
{
54705494
send_for_ref(ref->next, i, src_index, mpi_token, dst, NULL, ds, sr,
54715495
dst_byte_offset, desc_byte_offset, dst_kind, src_kind,
@@ -5476,7 +5500,7 @@ case kind: \
54765500
);
54775501
return;
54785502
}
5479-
switch (ref->u.a.mode[dst_dim])
5503+
switch (array_ref_dst)
54805504
{
54815505
case CAF_ARR_REF_VECTOR:
54825506
array_offset_dst = 0;
@@ -5632,7 +5656,7 @@ PREFIX(send_by_ref) (caf_token_t token, int image_index,
56325656
/* Set when the remote descriptor is to accessed through the global window. */
56335657
bool access_desc_through_global_win = false;
56345658
bool free_temp_src = false;
5635-
caf_array_ref_t mode;
5659+
caf_array_ref_t array_ref;
56365660

56375661
if (stat)
56385662
*stat = 0;
@@ -5738,9 +5762,9 @@ PREFIX(send_by_ref) (caf_token_t token, int image_index,
57385762
#endif
57395763
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
57405764
{
5741-
mode = riter->u.a.mode[i];
5742-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
5743-
switch (mode)
5765+
array_ref = riter->u.a.mode[i];
5766+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
5767+
switch (array_ref)
57445768
{
57455769
case CAF_ARR_REF_VECTOR:
57465770
delta = riter->u.a.dim[i].v.nvec;
@@ -5873,9 +5897,9 @@ case kind: \
58735897
case CAF_REF_STATIC_ARRAY:
58745898
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
58755899
{
5876-
mode = riter->u.a.mode[i];
5877-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
5878-
switch (mode)
5900+
array_ref = riter->u.a.mode[i];
5901+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
5902+
switch (array_ref)
58795903
{
58805904
case CAF_ARR_REF_VECTOR:
58815905
delta = riter->u.a.dim[i].v.nvec;
@@ -6092,7 +6116,7 @@ PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
60926116
bool access_data_through_global_win = false;
60936117
/* Set when the remote descriptor is to accessed through the global window. */
60946118
bool access_desc_through_global_win = false;
6095-
caf_array_ref_t mode;
6119+
caf_array_ref_t array_ref;
60966120
#ifndef GCC_GE_8
60976121
int dst_type = -1, src_type = -1;
60986122
#endif
@@ -6201,9 +6225,9 @@ PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
62016225
#endif
62026226
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
62036227
{
6204-
mode = riter->u.a.mode[i];
6205-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6206-
switch (mode)
6228+
array_ref = riter->u.a.mode[i];
6229+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6230+
switch (array_ref)
62076231
{
62086232
case CAF_ARR_REF_VECTOR:
62096233
delta = riter->u.a.dim[i].v.nvec;
@@ -6285,9 +6309,9 @@ case kind: \
62856309
case CAF_REF_STATIC_ARRAY:
62866310
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
62876311
{
6288-
mode = riter->u.a.mode[i];
6289-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6290-
switch (mode)
6312+
array_ref = riter->u.a.mode[i];
6313+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6314+
switch (array_ref)
62916315
{
62926316
case CAF_ARR_REF_VECTOR:
62936317
delta = riter->u.a.dim[i].v.nvec;
@@ -6461,7 +6485,7 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
64616485
size_t i, ref_rank;
64626486
int ierr;
64636487
gfc_max_dim_descriptor_t src_desc;
6464-
caf_array_ref_t mode;
6488+
caf_array_ref_t array_ref;
64656489

64666490
while (carryOn && riter)
64676491
{
@@ -6489,9 +6513,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
64896513
(gfc_descriptor_t *)(mpi_token->memptr + local_offset);
64906514
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
64916515
{
6492-
mode = riter->u.a.mode[i];
6493-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6494-
switch (mode)
6516+
array_ref = riter->u.a.mode[i];
6517+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6518+
switch (array_ref)
64956519
{
64966520
case CAF_ARR_REF_FULL:
64976521
/* The local_offset stays unchanged when ref'ing the first
@@ -6518,9 +6542,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
65186542
case CAF_REF_STATIC_ARRAY:
65196543
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
65206544
{
6521-
mode = riter->u.a.mode[i];
6522-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6523-
switch (mode)
6545+
array_ref = riter->u.a.mode[i];
6546+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6547+
switch (array_ref)
65246548
{
65256549
case CAF_ARR_REF_FULL:
65266550
/* The local_offset stays unchanged when ref'ing the first
@@ -6638,9 +6662,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
66386662

66396663
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
66406664
{
6641-
mode = riter->u.a.mode[i];
6642-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6643-
switch (mode)
6665+
array_ref = riter->u.a.mode[i];
6666+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6667+
switch (array_ref)
66446668
{
66456669
case CAF_ARR_REF_FULL:
66466670
/* The local_offset stays unchanged when ref'ing the first
@@ -6668,9 +6692,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
66686692
case CAF_REF_STATIC_ARRAY:
66696693
for (i = 0; riter->u.a.mode[i] != CAF_ARR_REF_NONE; ++i)
66706694
{
6671-
mode = riter->u.a.mode[i];
6672-
dprint("i = %zd, mode = %s\n", i, caf_array_ref_str[mode]);
6673-
switch (mode)
6695+
array_ref = riter->u.a.mode[i];
6696+
dprint("i = %zd, array_ref = %s\n", i, caf_array_ref_str[array_ref]);
6697+
switch (array_ref)
66746698
{
66756699
case CAF_ARR_REF_FULL:
66766700
/* The memptr stays unchanged when ref'ing the first element

0 commit comments

Comments
 (0)