The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Sys::Hwloc::Obj - Class representing a hwloc topology object

SYNOPSIS

       use Sys::Hwloc;

       $obj    = $topology->get_obj_by_depth( $depth, $idx );
       $obj    = $topology->get_obj_by_type( $type, $idx );

       $type   = $obj->type;
       $idx    = $obj->os_index;
       $name   = $obj->name;
       $href   = $obj->memory;
       $href   = $obj->attr;
       $depth  = $obj->depth;
       $idx    = $obj->logical_index;
       $level  = $obj->os_level;
       $oobj   = $obj->next_cousin;
       $oobj   = $obj->prev_cousin;
       $oobj   = $obj->parent;
       $rank   = $obj->sibling_rank;
       $oobj   = $obj->next_sibling;
       $oobj   = $obj->prev_sibling;
       $arity  = $obj->arity;
       @oobjs  = $obj->children;
       $oobj   = $obj->first_child;
       $oobj   = $obj->last_child;
       $set    = $obj->cpuset;
       $set    = $obj->complete_cpuset;
       $set    = $obj->online_cpuset;
       $set    = $obj->allowed_cpuset;
       $set    = $obj->nodeset;
       $set    = $obj->complete_nodeset;
       $set    = $obj->allowed_nodeset;
       $href   = $obj->infos;

       $string = $obj->sprintf_type( $verbose );
       $string = $obj->sprintf_attr( $separator, $verbose );
       $string = $obj->sprintf_cpuset;
       $string = $obj->sprintf( $prefix, $verbose );
       $string = $obj->info_by_name ( $name );

       $oobj   = $obj->ancestor_by_depth( $depth );
       $oobj   = $obj->ancestor_by_type( $type );
       $oobj   = $obj->next_child( $oobj );
       $oobj   = $obj->common_ancestor( $oobj );

       $rc     = $obj->is_same_obj( $oobj );

DESCRIPTION

Sys::Hwloc::Obj is the Perl namespace used for struct hwloc_obj data.

The Sys::Hwloc::Obj class provides an object-oriented interface for members of struct hwloc_obj, and for hwloc C functions that act on topology objects without involving the topology context. In particular, every hwloc C function that gets a hwloc_obj pointer as first argument has an OO-ish counterpart in Sys::Hwloc::Obj.

There are no constructors and destructors of Sys::Hwloc::Obj instances.

A Sys::Hwloc::Obj instance is retrieved either from a Sys::Hwloc::Topology instance, or from another Sys::Hwloc::Obj instance.

METHODS

Refer to http://www.open-mpi.org/projects/hwloc for the full specification.

This section lists only methods that are specific to Sys::Hwloc. These are methods, which have no pendants in the hwloc C API, or which behave differently compared to their hwloc C API counterparts.

memory
  $memory = $obj->memory;

Retrieves the object memory as reference to a hash.

The corresponding hwloc C struct member points to a struct hwloc_obj_memory_s.

As with hwloc-1.1, the memory hashref consists of the following:

  $memory->{total_memory}
  $memory->{local_memory}
  $memory->{page_types_len}
  @{$memory->{page_types}}

The $memory->{page_types} array reference contains $memory->{page_types_len} references to hashes with

  $memory->{page_types}->[$i]->{size}
  $memory->{page_types}->[$i]->{count}
attr
  $attrs = $obj->attr;

Retrieves the object attributes as reference to a hash.

The corresponding hwloc C struct member points to a union hwloc_obj_attr_u.

The content of the attrs hashref depends on the object type and the hwloc version, and may be empty.

As with hwloc-1.1, if e.g. $obj->type == HWLOC_OBJ_CACHE, there will be

  $obj->attr->{cache}->{depth}
  $obj->attr->{cache}->{size}
  $obj->attr->{cache}->{linesize}

To inspect the content, parse it like

  while(my ($key, $value) = each %{$obj->attr}) {
    ...
  }
children
  @oobj = $obj->children;

Returns an array with Sys::Hwloc::Obj instances representing the child objects of $obj. The returned array has $obj->arity members. If $obj->arity is 0, the array is empty.

The array may be processed by array index or with foreach() and the like. The following constructs are equivalent:

  for($i = 0; $i < $obj->arity; $i++) {
    $type = ($obj->children)[$i]->type;
  }

  foreach($obj->children) {
    $type = $_->type;
  }
cpuset
  $set = $obj->cpuset

Returns an object that represents the object's cpuset.

Before hwloc-1.1, this method returns an instance of Sys::Hwloc::Cpuset.

Since hwloc-1.1, this method returns an instance of Sys::Hwloc::Bitmap. A class Sys::Hwloc::Cpuset does not exist.

nodeset
  $set = $obj->nodeset

Returns an object that represents the object's nodeset.

In hwloc-1.0, this method returns an instance of Sys::Hwloc::Cpuset. There is no class Sys::Hwloc::Nodeset.

Since hwloc-1.1, this method returns an instance of Sys::Hwloc::Bitmap. A class Sys::Hwloc::Nodeset does not exist.

infos
  $infos = $obj->infos;

Retrieves the object info as reference to a hash.

The corresponding hwloc C struct member points to an array of struct hwloc_obj_info_s.

The $infos hash represents individual object infos as name->value pairs.

There also exists the method $obj->info_by_name($name), which allows the retrieval of an individual value that corresponds to a name key via the hwloc C API directly from the topology object.

A method infos_count that returns the extent of the $infos hash is not provided.

sprintf_type
  $string = $obj->sprintf_type( $verbose );

This method is an alias of Sys::Hwloc::hwloc_obj_type_sprintf($obj,$verbose).

It returns a string that represents the type of a given topology object in human-readable form.

The argument $verbose is optional, and defaults to 0. The handling of this default is done by the hwloc C API.

sprintf_attr
  $string = $obj->sprintf_attr( $separator, $verbose );

This method is an alias of Sys::Hwloc::hwloc_obj_attr_sprintf($obj,$separator,$verbose).

It returns a string that represents the attributes of a given topology object in human-readable form.

The arguments $separator and $verbose are optional, and default to undef and 0, respectively. The handling of these defaults is done by the hwloc C API.

sprintf_cpuset
  $string = $obj->sprintf_cpuset;

This method is an alias of Sys::Hwloc::hwloc_obj_cpuset_sprintf($obj).

It returns a string that represents the cpuset of a given single topology object in human-readable form.

The call $obj-cpuset->sprintf> yields the same result.

In contrast to that, the function Sys::Hwloc::hwloc_obj_cpuset_sprintf() understands more than one object in its argument list.

sprintf
  $string = $obj->sprintf( $prefix, $verbose );

This method is an alias of Sys::Hwloc::hwloc_obj_sprintf($obj,$prefix,$verbose).

It returns a string that represents a given topology object in human-readable form.

The arguments $prefix and $verbose are optional, and default to undef and 0, respectively. The handling of these defaults is done by the hwloc C API.

Note that this method is regarded as depreciated in hwloc-1.1.

is_same_obj
  $rc = $obj->is_same_obj( $oobj );

Compares the Sys::Hwloc::Obj instance $obj with the Sys::Hwloc::Obj instance $oobj.

Returns 1, if they are equal. Returns 0, if they are not equal.

Comparison is done by comparing the underlying raw hwloc_obj_t pointer values.

The method is an alias for Sys::Hwloc::hwloc_compare_objects($topo,$obj1,$obj2).

SEE ALSO

hwloc(7), Sys::Hwloc::Topology(3pm), Sys::Hwloc::Cpuset(3pm), Sys::Hwloc::Bitmap(3pm)

AUTHOR

Bernd Kallies, <kallies@zib.de>

COPYRIGHT AND LICENSE

Copyright (C) 2011 Zuse Institute Berlin

This package and its accompanying libraries is free software; you can redistribute it and/or modify it under the terms of the GPL version 2.0, or the Artistic License 2.0. Refer to LICENSE for the full license text.