@@ -427,6 +427,9 @@ double (*double_by_value)(double, double);
427
427
#define GFC_DESCRIPTOR_EXTENT (desc , i ) \
428
428
((desc)->dim[i]._ubound + 1 - (desc)->dim[i].lower_bound)
429
429
430
+ #define sizeof_desc_for_rank (rank ) \
431
+ (sizeof(gfc_descriptor_t) + (rank) * sizeof(descriptor_dimension))
432
+
430
433
#define MIN (X , Y ) (((X) < (Y)) ? (X) : (Y))
431
434
432
435
#if defined(NONBLOCKING_PUT ) && !defined(CAF_MPI_LOCK_UNLOCK )
@@ -583,6 +586,21 @@ dump_mem(const char *pre, void *m, const size_t s)
583
586
#define dump_mem (pre , m , s ) ;
584
587
#endif
585
588
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
+
586
604
size_t
587
605
handle_getting (ct_msg_t * msg , int cb_image , void * baseptr , void * dst_ptr ,
588
606
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,
596
614
{
597
615
((gfc_descriptor_t * )dbase )-> base_addr = baseptr ;
598
616
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 ));
602
619
dprint ("ct: src_desc base: %p, rank: %d, offset: %zd.\n" ,
603
620
((gfc_descriptor_t * )src_ptr )-> base_addr ,
604
621
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,
656
673
}
657
674
if (msg -> flags & CT_INCLUDE_DESCRIPTOR )
658
675
{
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 ));
663
678
void * tbuff = malloc (desc_size + send_size );
664
679
dprint ("ct: Including dst descriptor: %p, sizeof(desc): %zd, rank: "
665
680
"%d, sizeof(buffer): %zd, incoming free_buffer: %b.\n" ,
@@ -704,9 +719,9 @@ handle_get_message(ct_msg_t *msg, void *baseptr)
704
719
{
705
720
buffer = msg -> data ;
706
721
((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 ) );
710
725
/* The destination is a descriptor which address is not mutable. */
711
726
dst_ptr = buffer ;
712
727
}
@@ -748,9 +763,8 @@ handle_is_present_message(ct_msg_t *msg, void *baseptr)
748
763
{
749
764
((gfc_descriptor_t * )add_data )-> base_addr = baseptr ;
750
765
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 ));
754
768
}
755
769
else
756
770
ptr = baseptr ;
@@ -778,9 +792,8 @@ handle_send_message(ct_msg_t *msg, void *baseptr)
778
792
{
779
793
src_ptr = add_data ;
780
794
((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 ));
784
797
dprint ("ct: src_desc base: %p, rank: %d, offset: %td.\n" ,
785
798
((gfc_descriptor_t * )src_ptr )-> base_addr ,
786
799
GFC_DESCRIPTOR_RANK ((gfc_descriptor_t * )src_ptr ),
@@ -803,9 +816,8 @@ handle_send_message(ct_msg_t *msg, void *baseptr)
803
816
{
804
817
((gfc_descriptor_t * )add_data )-> base_addr = baseptr ;
805
818
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 ));
809
821
dprint ("ct: dst_desc base: %p, rank: %d, offset: %zd.\n" ,
810
822
((gfc_descriptor_t * )dst_ptr )-> base_addr ,
811
823
GFC_DESCRIPTOR_RANK ((gfc_descriptor_t * )dst_ptr ),
@@ -890,14 +902,12 @@ handle_transfer_message(ct_msg_t *msg, void *baseptr)
890
902
{
891
903
const gfc_descriptor_t * d = (gfc_descriptor_t * )buffer ;
892
904
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 );
896
907
/* Add the data first. */
897
908
send_msg -> transfer_size = sz ;
898
909
memcpy (send_msg -> data , ((gfc_descriptor_t * )buffer )-> base_addr , sz );
899
910
offset += sz ;
900
- desc_size = sizeof (gfc_descriptor_t ) + rank * sizeof (descriptor_dimension );
901
911
memcpy (send_msg -> data + offset , buffer , desc_size );
902
912
offset += desc_size ;
903
913
}
@@ -4795,9 +4805,6 @@ get_data(void *ds, mpi_caf_token_t *token, MPI_Aint offset, int dst_type,
4795
4805
num = (abs_stride > 1) ? (1 + (num - 1) / abs_stride) : num; \
4796
4806
} while (0)
4797
4807
4798
- #define sizeof_desc_for_rank (rank ) \
4799
- (sizeof(gfc_descriptor_t) + (rank) * sizeof(descriptor_dimension))
4800
-
4801
4808
typedef struct gfc_dim1_descriptor_t
4802
4809
{
4803
4810
gfc_descriptor_t base ;
@@ -5454,14 +5461,11 @@ PREFIX(get_from_remote)(caf_token_t token, const gfc_descriptor_t *opt_src_desc,
5454
5461
has_src_desc = opt_src_desc ,
5455
5462
external_call = * TOKEN (token ) != MPI_WIN_NULL ;
5456
5463
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 ))
5460
5468
: 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 ,
5465
5469
msg_size
5466
5470
= sizeof (ct_msg_t ) + dst_desc_size + src_desc_size + get_data_size ;
5467
5471
struct running_accesses_t * rat ;
@@ -5594,10 +5598,8 @@ PREFIX(get_from_remote)(caf_token_t token, const gfc_descriptor_t *opt_src_desc,
5594
5598
* opt_dst_charlen = cnt / dst_size ;
5595
5599
if (dst_incl_desc )
5596
5600
{
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 )));
5601
5603
dprint ("refitting dst descriptor of size %zd at %p with data %zd at %p "
5602
5604
"from %d bytes transfered.\n" ,
5603
5605
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,
5766
5768
const bool dst_incl_desc = opt_dst_desc , has_src_desc = opt_src_desc ,
5767
5769
external_call = * TOKEN (token ) != MPI_WIN_NULL ;
5768
5770
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 ))
5772
5772
: 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 ;
5777
5776
size_t src_size
5778
5777
= opt_src_charlen ? in_src_size * * opt_src_charlen : in_src_size ,
5779
5778
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,
5810
5809
check_image_health (remote_image , stat );
5811
5810
if (opt_src_charlen && opt_src_desc )
5812
5811
{
5813
- size_t sz = 1 ;
5812
+ const size_t sz = compute_arr_data_size_sz ( opt_src_desc , 1 ) ;
5814
5813
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 );
5817
5814
src_size *= sz ;
5818
5815
msg_size += src_size ;
5819
5816
}
@@ -5952,14 +5949,11 @@ PREFIX(transfer_between_remotes)(
5952
5949
struct transfer_msg_data_t * tmd ;
5953
5950
const bool has_src_desc = opt_src_desc ;
5954
5951
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 ))
5958
5953
: 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 ;
5963
5957
size_t src_size
5964
5958
= opt_src_charlen ? in_src_size * * opt_src_charlen : in_src_size ,
5965
5959
dst_msg_size = sizeof (ct_msg_t ) + sizeof (struct transfer_msg_data_t )
@@ -5996,11 +5990,9 @@ PREFIX(transfer_between_remotes)(
5996
5990
5997
5991
if (opt_src_charlen && opt_src_desc )
5998
5992
{
5999
- size_t sz = 1 ;
5993
+ const size_t sz = compute_arr_data_size_sz ( opt_src_desc , 1 ) ;
6000
5994
full_msg_size -= src_size ;
6001
5995
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 );
6004
5996
src_size *= sz ;
6005
5997
full_msg_size += src_size ;
6006
5998
dst_msg_size += src_size ;
0 commit comments