Hi, I have a perl-wrapper lib for hwloc based on hwloc-1.0.2. It is written manually because of the pointer things. However, the lib is not complete. I use it mainly for discovering topologies. Supporting pinning does not make sense for perl scripts to my opinion
I'm thinking about either submitting this to CPAN or to the hwloc dev team. However, I first wanted to wait how things with hwloc 1.1 will look, when the dust has settled somehow. Any hints or ideas? Attached you find the man page. On Tue, 2010-11-30 at 11:07 -0500, Jeff Squyres wrote: > Would anyone object if I take a whack at making some SWIG bindings for hwloc? > I'm thinking specifically for perl (because that's my scripting language of > choice), but I could probably be convinced to look at python as well. > > (this would be for 1.2 at the earliest -- definitely not for 1.1) > -- Dr. Bernd Kallies Konrad-Zuse-Zentrum für Informationstechnik Berlin Takustr. 7 14195 Berlin Tel: +49-30-84185-270 Fax: +49-30-84185-311 e-mail: kall...@zib.de
NAME Hwloc - Perl Access to Portable Hardware Locality (hwloc) SYNOPSIS use Hwloc; # Load topology my $topology = hwloc_topology_init(); die "Failed to init topology" unless $topology; my $rc = hwloc_topology_load($topology); die "Failed to load topology" if $rc; # Determine number of sockets and processors my $nProcs = hwloc_get_nbobjs_by_type($topology,HWLOC_OBJ_PU); die "Failed to determine number of processors" unless $nProcs; my $nSockets = hwloc_get_nbobjs_by_type($topology,HWLOC_OBJ_SOCKET); die "Failed to determine number of sockets" unless $nSockets; printf "Topology contains %d processors on %d sockets.\n", $nProcs, $nSockets; # Browse through processors, retrieve data my $proc = undef; while ($proc = hwloc_get_next_obj_by_type($topology,HWLOC_OBJ_PU,$proc)) { my $idx = hwloc_get_obj_data($proc,HWLOC_ObjLogicalIndex); my $id = hwloc_get_obj_data($proc,HWLOC_ObjOsIndex); my $rank = hwloc_get_obj_data($proc,HWLOC_ObjSiblingRank); printf "Processor %2d: os_index %2d, sibling_rank %2d\n", $idx, $id, $rank; } # Calculate distance between first and last processor my $firstProc = hwloc_get_obj_by_type($topology,HWLOC_OBJ_PU,0); my $lastProc = hwloc_get_obj_by_type($topology,HWLOC_OBJ_PU,$nProcs-1); my $ancestor = hwloc_get_common_ancestor_obj($topology,$firstProc,$lastProc); die "Failed to determine common ancestor of first and last processor" unless $ancestor; my $distance = hwloc_get_obj_data($firstProc,HWLOC_ObjDepth) + hwloc_get_obj_data($lastProc,HWLOC_ObjDepth) - 2*hwloc_get_obj_data($ancestor,HWLOC_ObjDepth); printf "Processors %2d and %2d are %2d levels apart.\n", hwloc_get_obj_data($firstProc,HWLOC_ObjOsIndex), hwloc_get_obj_data($lastProc,HWLOC_ObjOsIndex), $distance; # Destroy topology hwloc_topology_destroy($topology); DESCRIPTION The Hwloc module provides a perl API for selected functions of the hwloc C API. Visit <http://www.open-mpi.org/projects/hwloc> for information about hwloc. The Hwloc module treats objects of C type *hwloc_topology_t* and *hwloc_obj_t* as perl integers. The perl value *undef* is used to represent the C value NULL. To access the properties of a *hwloc_obj_t* object, the Hwloc module provides the method hwloc_get_obj_data, which is not part of the hwloc C API. CONSTANTS The following constants are exported by the Hwloc module: Type of topology objects HWLOC_OBJ_MACHINE HWLOC_OBJ_NODE HWLOC_OBJ_SOCKET HWLOC_OBJ_CACHE HWLOC_OBJ_CORE HWLOC_OBJ_PU HWLOC_OBJ_GROUP HWLOC_OBJ_MISC Topology flags HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM Properties of topology objects These constants are used by the hwloc_get_obj_data method. HWLOC_ObjType HWLOC_ObjOsIndex HWLOC_ObjDepth HWLOC_ObjLogicalIndex HWLOC_ObjNextCousin HWLOC_ObjPrevCousin HWLOC_ObjParent HWLOC_ObjSiblingRank HWLOC_ObjNextSibling HWLOC_ObjPrevSibling HWLOC_ObjArity HWLOC_ObjFirstChild HWLOC_ObjLastChild Misc HWLOC_API_VERSION HWLOC_TYPE_UNORDERED HWLOC_TYPE_DEPTH_UNKNOWN HWLOC_TYPE_DEPTH_MULTIPLE HWLOC_CPUBIND_PROCESS HWLOC_CPUBIND_THREAD HWLOC_CPUBIND_STRICT METHODS The following methods are exported: Create and destroy topologies $t = hwloc_topology_init() $rc = hwloc_topology_set_flags($t,$flags) $rc = hwloc_topology_load($t) hwloc_topology_destroy($t) Get some topology information $val = hwloc_topology_get_depth($t) $val = hwloc_topology_get_type_depth($t,$type) $val = hwloc_topology_get_depth_type($t,$depth) $val = hwloc_get_nbobjs_by_depth($t,$depth) $val = hwloc_get_nbobjs_by_type($t,$type) $val = hwloc_topology_is_thissystem($t) Retrieve objects and their properties $obj = hwloc_get_obj_by_depth($t,$depth,$idx) $obj = hwloc_get_obj_by_type($t,$type,$idx) $val = hwloc_get_obj_data($obj,$spec) Traversal helpers $obj = hwloc_get_root_obj($t) $obj = hwloc_get_ancestor_obj_by_depth($t,$depth,$obj) $obj = hwloc_get_ancestor_obj_by_type($t,$type,$obj) $obj = hwloc_get_next_obj_by_depth($t,$depth,$obj) $obj = hwloc_get_next_obj_by_type($t,$type,$obj) $obj = hwloc_get_pu_obj_by_os_index($t,$idx) $obj = hwloc_get_next_child($t,$obj,$obj) $obj = hwloc_get_common_ancestor_obj($t,$obj,$obj) $val = hwloc_obj_is_in_subtree($t,$obj,$obj) AUTHOR Bernd Kallies, <kall...@zib.de> COPYRIGHT AND LICENSE Copyright (C) 2010 by Bernd Kallies This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.1 or, at your option, any later version of Perl 5 you may have available.