Skip to content

Commit a65a6de

Browse files
Logical binding ouptut
Signed-off-by: Guillaume Mercier <[email protected]>
1 parent de1c932 commit a65a6de

7 files changed

+82
-12
lines changed

src/qvi-bbuff-rmi.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ qvi_bbuff_rmi_pack_item_impl(
459459
}
460460
// Non-null data.
461461
char *datas = nullptr;
462-
int rc = qvi_hwloc_bitmap_asprintf(data, &datas);
462+
int rc = qvi_hwloc_bitmap_asprintf(NULL, data, &datas);
463463
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
464464
// We are sending the string representation of the cpuset.
465465
rc = buff->append(datas, strlen(datas) + 1);

src/qvi-hwloc.cc

+72-7
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,16 @@ qvi_hwloc_obj_type_is_host_resource(
180180

181181
int
182182
qvi_hwloc_bitmap_string(
183+
hwloc_topology_t topo,
183184
hwloc_const_bitmap_t bitmap,
184185
qv_bind_string_format_t format,
185186
char **result
186187
) {
187188
switch (format) {
188189
case QV_BIND_STRING_AS_BITMAP:
189-
return qvi_hwloc_bitmap_asprintf(bitmap, result);
190+
return qvi_hwloc_bitmap_asprintf(topo, bitmap, result);
190191
case QV_BIND_STRING_AS_LIST:
191-
return qvi_hwloc_bitmap_list_asprintf(bitmap, result);
192+
return qvi_hwloc_bitmap_list_asprintf(topo, bitmap, result);
192193
default:
193194
*result = nullptr;
194195
return QV_ERR_INVLD_ARG;
@@ -816,11 +817,11 @@ qvi_hwloc_emit_cpubind(
816817
if (rc != QV_SUCCESS) return rc;
817818

818819
char *cpusets = nullptr;
819-
rc = qvi_hwloc_bitmap_asprintf(cpuset, &cpusets);
820+
rc = qvi_hwloc_bitmap_asprintf(hwl->topo, cpuset, &cpusets);
820821
if (rc != QV_SUCCESS) goto out;
821822

822823
qvi_log_info(
823-
"[pid={} tid={}] cpubind={}",
824+
"[pid={} tid={}] cpubind (physical) = {}",
824825
getpid(), task_id, cpusets
825826
);
826827
out:
@@ -831,6 +832,7 @@ qvi_hwloc_emit_cpubind(
831832

832833
int
833834
qvi_hwloc_bitmap_asprintf(
835+
hwloc_topology_t topo,
834836
hwloc_const_cpuset_t cpuset,
835837
char **result
836838
) {
@@ -840,12 +842,44 @@ qvi_hwloc_bitmap_asprintf(
840842
qvi_log_error("hwloc_bitmap_asprintf() failed");
841843
return QV_ERR_OOR;
842844
}
845+
846+
if (topo) {
847+
hwloc_bitmap_t cpuset_logical = hwloc_bitmap_alloc();
848+
hwloc_obj_t obj_pu = nullptr;
849+
850+
int num_pus = hwloc_get_nbobjs_inside_cpuset_by_type(topo, cpuset, HWLOC_OBJ_PU);
851+
for(int idx = 0; idx < num_pus ; idx++){
852+
obj_pu = hwloc_get_next_obj_inside_cpuset_by_type(topo, cpuset, HWLOC_OBJ_PU, obj_pu);
853+
(void)hwloc_bitmap_set(cpuset_logical,obj_pu->logical_index);
854+
}
855+
856+
char *iresult_logical = nullptr;
857+
(void)hwloc_bitmap_list_asprintf(&iresult_logical, cpuset_logical);
858+
if (qvi_unlikely(!iresult_logical)) {
859+
qvi_log_error("hwloc_bitmap_list_asprintf() failed");
860+
return QV_ERR_OOR;
861+
}
862+
(void)hwloc_bitmap_free(cpuset_logical);
863+
864+
char head[] = " | (logical) = ";
865+
char *final_result = (char*)calloc(strlen(iresult)+
866+
strlen(head)+
867+
strlen(iresult_logical)+1,sizeof(char));
868+
memcpy(final_result,iresult,strlen(iresult));
869+
strcat(final_result,head);
870+
strcat(final_result,iresult_logical);
871+
free(iresult_logical);
872+
free(iresult);
873+
iresult = final_result;
874+
}
875+
843876
*result = iresult;
844877
return QV_SUCCESS;
845878
}
846879

847880
int
848881
qvi_hwloc_bitmap_list_asprintf(
882+
hwloc_topology_t topo,
849883
hwloc_const_cpuset_t cpuset,
850884
char **result
851885
) {
@@ -855,6 +889,37 @@ qvi_hwloc_bitmap_list_asprintf(
855889
qvi_log_error("hwloc_bitmap_list_asprintf() failed");
856890
return QV_ERR_OOR;
857891
}
892+
893+
if (topo) {
894+
hwloc_bitmap_t cpuset_logical = hwloc_bitmap_alloc();
895+
hwloc_obj_t obj_pu = nullptr;
896+
897+
int num_pus = hwloc_get_nbobjs_inside_cpuset_by_type(topo, cpuset, HWLOC_OBJ_PU);
898+
for(int idx = 0; idx < num_pus ; idx++){
899+
obj_pu = hwloc_get_next_obj_inside_cpuset_by_type(topo, cpuset, HWLOC_OBJ_PU, obj_pu);
900+
(void)hwloc_bitmap_set(cpuset_logical,obj_pu->logical_index);
901+
}
902+
903+
char *iresult_logical = nullptr;
904+
(void)hwloc_bitmap_list_asprintf(&iresult_logical, cpuset_logical);
905+
if (qvi_unlikely(!iresult_logical)) {
906+
qvi_log_error("hwloc_bitmap_list_asprintf() failed");
907+
return QV_ERR_OOR;
908+
}
909+
(void)hwloc_bitmap_free(cpuset_logical);
910+
911+
char head[] = " | (logical) = ";
912+
char *final_result = (char*)calloc(strlen(iresult)+
913+
strlen(head)+
914+
strlen(iresult_logical)+1,sizeof(char));
915+
memcpy(final_result,iresult,strlen(iresult));
916+
strcat(final_result,head);
917+
strcat(final_result,iresult_logical);
918+
free(iresult_logical);
919+
free(iresult);
920+
iresult = final_result;
921+
}
922+
858923
*result = iresult;
859924
return QV_SUCCESS;
860925
}
@@ -869,7 +934,7 @@ qvi_hwloc_cpuset_debug(
869934
#endif
870935
assert(cpuset);
871936
char *cpusets = nullptr;
872-
int rc = qvi_hwloc_bitmap_asprintf(cpuset, &cpusets);
937+
int rc = qvi_hwloc_bitmap_asprintf(nullptr, cpuset, &cpusets);
873938
if (rc != QV_SUCCESS) {
874939
qvi_abort();
875940
}
@@ -957,7 +1022,7 @@ qvi_hwloc_task_get_cpubind_as_string(
9571022
int rc = qvi_hwloc_task_get_cpubind(hwl, task_id, &cpuset);
9581023
if (rc != QV_SUCCESS) return rc;
9591024

960-
rc = qvi_hwloc_bitmap_asprintf(cpuset, cpusets);
1025+
rc = qvi_hwloc_bitmap_asprintf(hwl->topo, cpuset, cpusets);
9611026
qvi_hwloc_bitmap_delete(&cpuset);
9621027
return rc;
9631028
}
@@ -1185,7 +1250,7 @@ qvi_hwloc_devices_emit(
11851250
}
11861251
for (auto &dev : *devlist) {
11871252
char *cpusets = nullptr;
1188-
int rc = qvi_hwloc_bitmap_asprintf(dev->affinity.cdata(), &cpusets);
1253+
int rc = qvi_hwloc_bitmap_asprintf(hwl->topo, dev->affinity.cdata(), &cpusets);
11891254
if (rc != QV_SUCCESS) return rc;
11901255

11911256
qvi_log_info(" Device Name: {}", dev->name);

src/qvi-hwloc.h

+3
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ qvi_hwloc_emit_cpubind(
187187
*/
188188
int
189189
qvi_hwloc_bitmap_asprintf(
190+
hwloc_topology_t topo,
190191
hwloc_const_cpuset_t cpuset,
191192
char **result
192193
);
@@ -196,6 +197,7 @@ qvi_hwloc_bitmap_asprintf(
196197
*/
197198
int
198199
qvi_hwloc_bitmap_list_asprintf(
200+
hwloc_topology_t topo,
199201
hwloc_const_cpuset_t cpuset,
200202
char **result
201203
);
@@ -537,6 +539,7 @@ qvi_hwloc_get_devices_in_bitmap(
537539

538540
int
539541
qvi_hwloc_bitmap_string(
542+
hwloc_topology_t topo,
540543
hwloc_const_bitmap_t bitmap,
541544
qv_bind_string_format_t format,
542545
char **result

src/qvi-scope.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ qv_scope::bind_string(
213213
int rc = m_group->task()->bind_top(&bitmap);
214214
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
215215

216-
rc = qvi_hwloc_bitmap_string(bitmap, format, result);
216+
hwloc_topology_t topo = qvi_hwloc_get_topo_obj(m_group->hwloc());
217+
218+
rc = qvi_hwloc_bitmap_string(topo, bitmap, format, result);
217219
qvi_hwloc_bitmap_delete(&bitmap);
218220
return rc;
219221
}

tests/common-test-utils.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ ctu_emit_task_bind(
6262
ers = "qv_bind_string() failed";
6363
ctu_panic("%s (rc=%s)", ers, qv_strerr(rc));
6464
}
65-
printf("[%d] cpubind=%s\n", pid, binds);
65+
printf("[%d] cpubind (physical) = %s\n", pid, binds);
6666
free(binds);
6767
}
6868

tests/internal/test-hwloc.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ main(void)
208208
ctu_panic("%s (rc=%s)", ers, qv_strerr(rc));
209209
}
210210

211-
rc = qvi_hwloc_bitmap_asprintf(bitmap, &binds);
211+
rc = qvi_hwloc_bitmap_asprintf(NULL, bitmap, &binds);
212212
if (rc != QV_SUCCESS) {
213213
ers = "qvi_hwloc_bitmap_asprintf() failed";
214214
ctu_panic("%s (rc=%s)", ers, qv_strerr(rc));

tests/internal/test-rmi.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ client(
112112
}
113113

114114
char *res;
115-
qvi_hwloc_bitmap_asprintf(bitmap, &res);
115+
qvi_hwloc_bitmap_asprintf(NULL, bitmap, &res);
116116
printf("# [%d] cpubind = %s\n", who, res);
117117
hwloc_bitmap_free(bitmap);
118118
free(res);

0 commit comments

Comments
 (0)