@@ -715,8 +715,7 @@ static uint32_t get_package_rank(opal_process_info_t *process_info)
715
715
{
716
716
int i ;
717
717
uint16_t relative_locality , * package_rank_ptr ;
718
- uint16_t current_package_rank = 0 ;
719
- uint16_t package_ranks [process_info -> num_local_peers + 1 ];
718
+ uint32_t ranks_on_package = 0 ;
720
719
opal_process_name_t pname ;
721
720
pmix_status_t rc ;
722
721
char * * peers = NULL ;
@@ -745,26 +744,24 @@ static uint32_t get_package_rank(opal_process_info_t *process_info)
745
744
// Get the local peers
746
745
OPAL_MODEX_RECV_VALUE (rc , PMIX_LOCAL_PEERS , & pname , & local_peers , PMIX_STRING );
747
746
if (PMIX_SUCCESS != rc || NULL == local_peers ) {
748
- // We can't find package_rank, fall back to procid
749
- opal_show_help ("help-common-ofi.txt" , "package_rank failed" , true);
750
- return (uint32_t ) process_info -> myprocid .rank ;
747
+ goto err ;
751
748
}
752
749
peers = opal_argv_split (local_peers , ',' );
753
750
free (local_peers );
754
751
755
752
for (i = 0 ; NULL != peers [i ]; i ++ ) {
756
753
pname .vpid = strtoul (peers [i ], NULL , 10 );
754
+
755
+ if ((uint16_t ) pname .vpid == process_info -> my_local_rank ) {
756
+ return ranks_on_package ;
757
+ }
758
+
757
759
locality_string = NULL ;
758
760
// Get the LOCALITY_STRING for process[i]
759
761
OPAL_MODEX_RECV_VALUE_OPTIONAL (rc , PMIX_LOCALITY_STRING , & pname , & locality_string ,
760
762
PMIX_STRING );
761
763
if (PMIX_SUCCESS != rc || NULL == locality_string ) {
762
- // If we don't have information about locality, fall back to procid
763
- int level = 10 ;
764
- if (opal_output_get_verbosity (opal_common_ofi .output ) >= level ) {
765
- opal_show_help ("help-common-ofi.txt" , "package_rank failed" , true, level );
766
- }
767
- return (uint32_t ) process_info -> myprocid .rank ;
764
+ goto err ;
768
765
}
769
766
770
767
// compute relative locality
@@ -773,12 +770,12 @@ static uint32_t get_package_rank(opal_process_info_t *process_info)
773
770
free (locality_string );
774
771
775
772
if (relative_locality & OPAL_PROC_ON_SOCKET ) {
776
- package_ranks [i ] = current_package_rank ;
777
- current_package_rank ++ ;
773
+ ranks_on_package ++ ;
778
774
}
779
775
}
780
-
781
- return (uint32_t ) package_ranks [process_info -> my_local_rank ];
776
+ err :
777
+ opal_show_help ("help-common-ofi.txt" , "package_rank failed" , true);
778
+ return (uint32_t ) process_info -> myprocid .rank ;
782
779
}
783
780
784
781
struct fi_info * opal_common_ofi_select_provider (struct fi_info * provider_list ,
0 commit comments