[mpich2-commits] r9527 - in mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc: . config contrib contrib/dist contrib/hg doc doc/images include include/hwloc include/hwloc/autogen include/private m4 src tests tests/embedded tests/embedded/config tests/linux tests/linux/gather tests/ports tests/ports/include tests/ports/include/sys tests/rename tests/xml utils
balaji at mcs.anl.gov
balaji at mcs.anl.gov
Fri Feb 24 18:52:56 CST 2012
Author: balaji
Date: 2012-02-24 18:52:55 -0600 (Fri, 24 Feb 2012)
New Revision: 9527
Added:
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_vendor.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.css
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc-hello.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/HACKING
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.pdf
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/diagram.fig
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.pdf
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.pdf
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.pdf
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.png
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-css.inc
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-footer.inc
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-header.inc
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org.cfg
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/solaris-chiptype.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris-chiptype.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cuda.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cudart.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/README.txt
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/autogen.sh
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/config/README.txt
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/configure.ac
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/do_test.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/main.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/glibc-sched.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bind.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_first_last_weight.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_singlify.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_string.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_distances.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_closest_objs.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups2.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_insert_misc.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_iodevs.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_is_thissystem.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_obj_infos.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_synthetic.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_topology_restrict.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_type_depth.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux-libnuma.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.exclude
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.exclude
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.env
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.env
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.env
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.options
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.env
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.source
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.bz2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/test-topology.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/myriexpress.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/openfabrics-verbs.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cpuset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/kstat.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/numa.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/picl.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/pthread_np.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/radset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/cpuset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/mpctl.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/processor.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/procset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/rset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/sysctl.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systemcfg.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systeminfo.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/thread.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/24em64t-2n6c2t-pci.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/96em64t-4n4d3ca2co-pci.xml
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/test-topology.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xmlbuffer.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-gather-topology.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc.7in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-color.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/misc.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input1
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input2
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.output
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.sh.in
Removed:
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/depcomp_pgcc.patch
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/m4/decl.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/README
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/README
Modified:
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/README
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_visibility.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_pkg.m4
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/configure.ac
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/hg/build-hgignore.pl
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/autogen/config.h.in
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cpuset.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cuda.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cudart.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/glibc-sched.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux-libnuma.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/myriexpress.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/cpuset.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/dolib.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-libpci.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
Log:
Upgrade hwloc to 1.4.1rc1.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/COPYING 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,5 +1,5 @@
Copyright © 2009 CNRS
-Copyright © 2009 INRIA. All rights reserved.
+Copyright © 2009 inria. All rights reserved.
Copyright © 2009 Université Bordeaux 1
Copyright © 2009 Cisco Systems, Inc. All rights reserved.
See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,4 +1,4 @@
-# Copyright © 2009 INRIA. All rights reserved.
+# Copyright © 2009 inria. All rights reserved.
# Copyright © 2009 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/NEWS 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,5 +1,5 @@
Copyright © 2009 CNRS
-Copyright © 2009-2011 INRIA. All rights reserved.
+Copyright © 2009-2011 inria. All rights reserved.
Copyright © 2009-2011 Université Bordeaux 1
Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
@@ -17,6 +17,118 @@
in v0.9.1).
+Version 1.4.1
+-------------
+* This release contains all changes from v1.3.2.
+* Fix some overzealous assertions in the distance grouping code.
+* Workaround BIOS reporting empty I/O locality in cuda and openfabrics
+ helpers on Linux. Thanks to Albert Solernou for reporting the problem.
+* Fix helpers converting from Linux libnuma to hwloc (hwloc/linux-libnuma.h)
+ in case of out-of-order NUMA node ids.
+
+
+Version 1.4.0 (does not contain all v1.3.2 changes)
+-------------
+* Major features
+ + Add "custom" interface and "assembler" tools to build multi-node
+ topology. See the Multi-node Topologies section in the documentation
+ for details.
+* Interface improvements
+ + Add symmetric_subtree object attribute to ease assumptions when consulting
+ regular symmetric topologies.
+ + Add a CPUModel and CPUType info attribute to Socket objects on Linux
+ and Solaris.
+ + Add hwloc_get_obj_index_inside_cpuset() to retrieve the "logical" index
+ of an object within a subtree of the topology.
+ + Add more NVIDIA CUDA helpers in cuda.h and cudart.h to find hwloc objects
+ corresponding to CUDA devices.
+* Discovery improvements
+ + Add a group object above partial distance matrices to make sure
+ the matrices are available in the final topology, except when this
+ new object would contradict the existing hierarchy.
+ + Grouping by distances now also works when loading from XML.
+ + Fix some corner cases in object insertion, for instance when dealing
+ with NUMA nodes without any CPU.
+* Backends
+ + Implement hwloc_get_area_membind() on Linux.
+ + Honor I/O topology flags when importing from XML.
+ + Further improve XML-related error checking and reporting.
+ + Hide synthetic topology error messages unless HWLOC_SYNTHETIC_VERBOSE=1.
+* Tools
+ + Add synthetic exporting of symmetric topologies to lstopo.
+ + lstopo --horiz and --vert can now be applied to some specific object types.
+ + lstopo -v -p now displays distance matrices with physical indexes.
+ + Add hwloc-distances utility to list distances.
+* Documentation
+ + Fix and/or document the behavior of most inline functions in hwloc/helper.h
+ when the topology contains some I/O or Misc objects.
+ + Backend documentation enhancements.
+* Bug fixes
+ + Fix missing last bit in hwloc_linux_get_thread_cpubind().
+ Thanks to Carolina Gómez-Tostón Gutiérrez for reporting the issue.
+ + Fix FreeBSD build without cpuid support.
+ + Fix several Windows build issues.
+ + Fix inline keyword definition in public headers.
+ + Fix dependencies in the embedded library.
+ + Improve visibility support detection. Thanks to Dave Love for providing
+ the patch.
+ + Remove references to internal symbols in the tools.
+
+
+Version 1.3.2
+-------------
+* Fix missing last bit in hwloc_linux_get_thread_cpubind().
+ Thanks to Carolina Gómez-Tostón Gutiérrez for reporting the issue.
+* Fix build with -mcmodel=medium. Thanks to Devendar Bureddy for reporting
+ the issue.
+* Fix build with Solaris Studio 12 compiler when XML is disabled.
+ Thanks to Paul H. Hargrove for reporting the problem.
+* Fix installation with old GNU sed, for instance on Red Hat 8.
+ Thanks to Paul H. Hargrove for reporting the problem.
+* Fix PCI locality when Linux cgroups restrict the available CPUs.
+* Fix floating point issue when grouping by distance on mips64 architecture.
+ Thanks to Paul H. Hargrove for reporting the problem.
+* Fix conversion from/to Linux libnuma when some NUMA nodes have no memory.
+* Fix support for gccfss compilers with broken ffs() support. Thanks to
+ Paul H. Hargrove for reporting the problem and providing a patch.
+* Fix FreeBSD build without cpuid support.
+* Fix several Windows build issues.
+* Fix inline keyword definition in public headers.
+* Fix dependencies in the embedded library.
+* Detect when a compiler such as xlc may not report compile errors
+ properly, causing some configure checks to be wrong. Thanks to
+ Paul H. Hargrove for reporting the problem and providing a patch.
+* Improve visibility support detection. Thanks to Dave Love for providing
+ the patch.
+* Remove references to internal symbols in the tools.
+* Fix installation on systems with limited command-line size.
+ Thanks to Paul H. Hargrove for reporting the problem.
+* Further improve XML-related error checking and reporting.
+
+
+Version 1.3.1
+-------------
+* Fix pciutils detection with pkg-config when not installed in standard
+ directories.
+* Fix visibility options detection with the Solaris Studio compiler.
+ Thanks to Igor GaliÄ and Terry Dontje for reporting the problems.
+* Fix support for old Linux sched.h headers such as those found
+ on Red Hat 8. Thanks to Paul H. Hargrove for reporting the problems.
+* Fix inline and attribute support for Solaris compilers. Thanks to
+ Dave Love for reporting the problems.
+* Print a short summary at the end of the configure output. Thanks to
+ Stefan Eilemann for the suggestion.
+* Add --disable-libnuma configure option to disable libnuma-based
+ memory binding support on Linux. Thanks to Rayson Ho for the
+ suggestion.
+* Make hwloc's configure script properly obey $PKG_CONFIG. Thanks to
+ Nathan Phillip Brink for raising the issue.
+* Silence some harmless pciutils warnings, thanks to Paul H. Hargrove
+ for reporting the problem.
+* Fix the documentation with respect to hwloc_pid_t and hwloc_thread_t
+ being either pid_t and pthread_t on Unix, or HANDLE on Windows.
+
+
Version 1.3.0
-------------
* Major features
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/README 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/README 2012-02-25 00:52:55 UTC (rev 9527)
@@ -12,7 +12,7 @@
locality on modern computing platforms.
Note that the hwloc project represents the merger of the libtopology project
-from INRIA and the Portable Linux Processor Affinity (PLPA) sub-project from
+from inria and the Portable Linux Processor Affinity (PLPA) sub-project from
Open MPI. Both of these prior projects are now deprecated. The first hwloc
release was essentially a "re-branding" of the libtopology code base, but with
both a few genuinely new features and a few PLPA-like features added in. Prior
@@ -102,9 +102,12 @@
The hwloc core may also benefit from the following development packages:
- * libxml2 (also needed for lstopo XML support).
* pciutils (libpci) for I/O discovery.
* libnuma for memory binding and migration support on Linux.
+ * libxml2 for full XML import/export support (otherwise, the internal
+ minimalistic parser will only be able to import XML files that were
+ exported by the same hwloc release). See Importing and exporting topologies
+ from/to XML files for details.
CLI Examples
@@ -357,7 +360,8 @@
routines for advanced programmers that want to manually manipulate objects and
follow links between them. Documentation for everything in hwloc.h are provided
later in this document. Developers should also look at hwloc/helper.h (and also
-in this document, which provides good higher-level topology traversal examples.
+in this document, which provides good higher-level topology traversal
+examples).
To precisely define the vocabulary used by hwloc, a Terms and Definitions
section is available and should probably be read first.
@@ -446,7 +450,7 @@
/* Example hwloc API program.
*
- * Copyright ? 2009-2010 INRIA. All rights reserved.
+ * Copyright ? 2009-2010 inria. All rights reserved.
* Copyright ? 2009-2011 Universit? Bordeaux 1
* Copyright ? 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -686,7 +690,7 @@
Because of functional and ideological overlap, these two code bases and ideas
were merged and released under the name "hwloc" as an Open MPI sub-project.
-libtopology was initially developed by the INRIA Runtime Team-Project (http://
+libtopology was initially developed by the inria Runtime Team-Project (http://
runtime.bordeaux.inria.fr/) (headed by Raymond Namyst (http://
dept-info.labri.fr/~namyst/). PLPA was initially developed by the Open MPI
development team as a sub-project. Both are now deprecated in favor of hwloc,
@@ -701,6 +705,8 @@
* Environment Variables
* CPU and Memory Binding Overview
* I/O Devices
+ * Multi-node Topologies
+ * Importing and exporting topologies from/to XML files
* Interoperability With Other Software
* Thread Safety
* Embedding hwloc in Other Software
@@ -710,5 +716,5 @@
-------------------------------------------------------------------------------
-Generated on Thu Aug 11 2011 10:45:18 for Hardware Locality (hwloc) by doxygen
+Generated on Thu Oct 20 2011 10:28:29 for Hardware Locality (hwloc) by doxygen
1.7.4
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/VERSION 2012-02-25 00:52:55 UTC (rev 9527)
@@ -6,8 +6,8 @@
# <major>.<minor>.<release>. If release is zero, then it is omitted.
major=1
-minor=3
-release=0
+minor=4
+release=1
# greek is used for alpha or beta release tags. If it is non-empty,
# it will be appended to the version number. It does not have to be
@@ -16,7 +16,7 @@
# requirement is that it must be entirely printable ASCII characters
# and have no white space.
-greek=rc3
+greek=rc1
# If want_repo_rev=1, then the SVN r number will be included in the overall
# hwloc version number in some form.
@@ -58,4 +58,4 @@
# 2. Version numbers are described in the Libtool current:revision:age
# format.
-libhwloc_so_version=4:0:4
+libhwloc_so_version=5:1:0
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/autogen.sh 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,10 +1,2 @@
:
-autoreconf ${autoreconf_args:-"-vif"}
-
-# fix depcomp to support pgcc correctly
-if grep "pgcc)" config/depcomp 2>&1 >/dev/null ; then :
-else
- echo 'patching "config/depcomp" to support pgcc'
- patch -f -p0 < config/depcomp_pgcc.patch
-fi
-
+autoreconf -ivf
Copied: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4 (from rev 9526, mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/m4/decl.m4)
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/decl.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,31 @@
+dnl -*- Autoconf -*-
+dnl Copyright © 2009 CNRS
+dnl Copyright © 2009 inria. All rights reserved.
+dnl Copyright © 2009 Université Bordeaux 1
+dnl See COPYING in top-level directory.
+
+dnl HWLOC_CHECK_DECL
+dnl
+dnl Check declaration of given function by trying to call it with an insane
+dnl number of arguments (10). Success means the compiler couldn't really check.
+AC_DEFUN([HWLOC_CHECK_DECL], [
+ AC_MSG_CHECKING([whether function $1 is declared])
+ AC_REQUIRE([AC_PROG_CC])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[$1(1,2,3,4,5,6,7,8,9,10);])],
+ ac_res=no
+ $3,
+ ac_res=yes
+ $2
+ )
+ AC_MSG_RESULT([$ac_res])
+])
+
+dnl HWLOC_CHECK_DECLS
+dnl
+dnl Same as HWLOCK_CHECK_DECL, but defines HAVE_DECL_foo to 1 or 0 depending on
+dnl the result.
+AC_DEFUN([HWLOC_CHECK_DECLS], [
+ HWLOC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])
+ AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_DECL_$1]), [$ac_have_decl],
+ [Define to 1 if you have the declaration of `$1', and to 0 if you don't])
+])
Deleted: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/depcomp_pgcc.patch
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/depcomp_pgcc.patch 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/depcomp_pgcc.patch 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,91 +0,0 @@
---- confdb/depcomp.orig 2011-12-13 15:36:07.000000000 -0600
-+++ confdb/depcomp 2011-12-14 13:25:33.000000000 -0600
-@@ -302,6 +302,88 @@
- rm -f "$tmpdepfile"
- ;;
-
-+## --------------------------------------------------------------------------
-+## begin ANL modification:
-+##
-+## PGCC support based on a code from Jeff Daily @ PNNL via the automake list:
-+## https://lists.gnu.org/archive/html/automake/2011-06/msg00002.html
-+##
-+## Note that the order of this option in the case statement is important, since
-+## the shell code in configure will try each of these formats in the order
-+## listed in this file. A plain `-MD' option would be understood by many
-+## compilers, so we must ensure this comes after the gcc and icc options.
-+pgcc)
-+ # Portland's C compiler understands `-MD'.
-+ # Will always output deps to `file.d' where file is the root name of the
-+ # source file under compilation, even if file resides in a subdirectory.
-+ # The object file name does not affect the name of the ".d" file.
-+ # pgcc 10.2 will output
-+ # foo.o: sub/foo.c sub/foo.h
-+ # and will wrap long lines using \ :
-+ # foo.o: sub/foo.c ... \
-+ # sub/foo.h ... \
-+ # ...
-+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-+ test "x$dir" = "x$object" && dir=
-+ ##base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-+ # use the source, not the object to determine the base name, since that's
-+ # sadly what pgcc will do too
-+ base=`echo "$source" | sed -e 's|^.*/||' -e 's/\.[-_a-zA-Z0-9]*$//'`
-+ tmpdepfile="$base.d"
-+
-+ # For projects that build the same source file twice into different object
-+ # files, the pgcc approach of using the *source* file root name can cause
-+ # problems in parallel builds. Use a locking strategy to avoid stomping on
-+ # the same $tmpdepfile.
-+ lockdir="$base.d-lock"
-+ trap "echo '$0: caught signal, cleaning up...' ; rm -rf $lockdir" 1 2 13 15
-+ numtries=100
-+ i=$numtries
-+ while test $i -gt 0 ; do
-+ # mkdir is a portable test-and-set
-+ if mkdir $lockdir 2>/dev/null; then
-+ # this process acquired the lock
-+ "$@" -MD
-+ stat=$?
-+ # release the lock
-+ rm -rf $lockdir
-+ break
-+ else
-+ ## the lock is being held by a different process,
-+ ## wait until the winning process is done or we timeout
-+ while test -d $lockdir && test $i -gt 0 ; do
-+ sleep 1;
-+ i=`expr $i - 1`
-+ done
-+ fi
-+ i=`expr $i - 1`
-+ done
-+ trap - 1 2 13 15
-+ if test $i -le 0 ; then
-+ echo "$0 ERROR: failed to acquire lock after $numtries attempts, check lockdir '$lockdir'"
-+ exit 1;
-+ fi
-+
-+ if test $stat -eq 0; then :
-+ else
-+ rm -f "$tmpdepfile"
-+ exit $stat
-+ fi
-+ rm -f "$depfile"
-+ # Each line is of the form `foo.o: dependent.h',
-+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-+ # Do two passes, one to just change these to
-+ # `$object: dependent.h' and one to simply `dependent.h:'.
-+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-+ # Some versions of the HPUX 10.20 sed can't process this invocation
-+ # correctly. Breaking it into two sed invocations is a workaround.
-+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
-+ sed -e 's/$/ :/' >> "$depfile"
-+ rm -f "$tmpdepfile"
-+ ;;
-+## end ANL modification
-+## --------------------------------------------------------------------------
-+
- hp2)
- # The "hp" stanza above does not work with aCC (C++) and HP's ia64
- # compilers, which have integrated preprocessors. The correct option
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/distscript.csh 2012-02-25 00:52:55 UTC (rev 9527)
@@ -10,7 +10,7 @@
# University of Stuttgart. All rights reserved.
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
-# Copyright © 2010 INRIA. All rights reserved.
+# Copyright © 2010 inria. All rights reserved.
# Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
# $COPYRIGHT$
#
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,11 +1,11 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright (c) 2009-2010 INRIA. All rights reserved.
-dnl Copyright (c) 2009-2011 Université Bordeaux 1
+dnl Copyright (c) 2009-2010 inria. All rights reserved.
+dnl Copyright (c) 2009-2012 Université Bordeaux 1
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
-dnl Copyright (c) 2004-2005 The Regents of the University of California.
+dnl Copyright (c) 2004-2012 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
@@ -21,7 +21,6 @@
# 4. If non-empty, print the announcement banner
#
AC_DEFUN([HWLOC_SETUP_CORE],[
- AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([AC_CANONICAL_TARGET])
AC_REQUIRE([AC_PROG_CC])
@@ -142,6 +141,7 @@
fi
# Enample system extensions for O_DIRECTORY, fdopen, fssl, etc.
+ AC_USE_SYSTEM_EXTENSIONS
AH_VERBATIM([USE_HPUX_SYSTEM_EXTENSIONS],
[/* Enable extensions on HP-UX. */
#ifndef _HPUX_SOURCE
@@ -234,20 +234,28 @@
4)
AC_DEFINE(HWLOC_X86_32_ARCH, 1, [Define to 1 on x86_32])
hwloc_x86_32=yes
+ HWLOC_MS_LIB_ARCH=X86
AC_MSG_RESULT([x86_32])
;;
8)
AC_DEFINE(HWLOC_X86_64_ARCH, 1, [Define to 1 on x86_64])
hwloc_x86_64=yes
+ HWLOC_MS_LIB_ARCH=X64
AC_MSG_RESULT([x86_64])
;;
*)
AC_DEFINE(HWLOC_X86_64_ARCH, 1, [Define to 1 on x86_64])
hwloc_x86_64=yes
+ HWLOC_MS_LIB_ARCH=X64
AC_MSG_RESULT([unknown -- assuming x86_64])
;;
esac
+ ;;
+ *)
+ AC_MSG_RESULT([unknown])
+ ;;
esac
+ AC_SUBST(HWLOC_MS_LIB_ARCH)
AC_CHECK_SIZEOF([unsigned long])
AC_DEFINE_UNQUOTED([HWLOC_SIZEOF_UNSIGNED_LONG], $ac_cv_sizeof_unsigned_long, [The size of `unsigned long', as computed by sizeof])
@@ -257,27 +265,54 @@
#
# Check for compiler attributes and visibility
#
+ _HWLOC_C_COMPILER_VENDOR([hwloc_c_vendor])
_HWLOC_CHECK_ATTRIBUTES
_HWLOC_CHECK_VISIBILITY
HWLOC_CFLAGS="$HWLOC_FLAGS $HWLOC_VISIBILITY_CFLAGS"
AS_IF([test "$HWLOC_VISIBILITY_CFLAGS" != ""],
[AC_MSG_WARN(["$HWLOC_VISIBILITY_CFLAGS" has been added to the hwloc CFLAGS])])
+ # Make sure the compiler returns an error code when function arg
+ # count is wrong, otherwise sched_setaffinity checks may fail.
+ HWLOC_STRICT_ARGS_CFLAGS=
+ hwloc_args_check=0
+ AC_MSG_CHECKING([whether the C compiler rejects function calls with too many arguments])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ extern int one_arg(int x);
+ int foo(void) { return one_arg(1, 2); }
+ ]])],
+ [AC_MSG_RESULT([no])],
+ [hwloc_args_check=1
+ AC_MSG_RESULT([yes])])
+ AC_MSG_CHECKING([whether the C compiler rejects function calls with too few arguments])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+ extern int two_arg(int x, int y);
+ int foo(void) { return two_arg(3); }
+ ]])],
+ [AC_MSG_RESULT([no])],
+ [hwloc_args_check=`expr $hwloc_args_check + 1`
+ AC_MSG_RESULT([yes])])
+ AS_IF([test "$hwloc_args_check" != "2"],[
+ AC_MSG_WARN([Your C compiler does not consider incorrect argument counts to be a fatal error.])
+ case "$hwloc_c_vendor" in
+ ibm)
+ HWLOC_STRICT_ARGS_CFLAGS="-qhalt=e"
+ ;;
+ intel)
+ HWLOC_STRICT_ARGS_CFLAGS="-we140"
+ ;;
+ *)
+ HWLOC_STRICT_ARGS_CFLAGS=FAIL
+ AC_MSG_WARN([Please report this warning and configure using a different C compiler if possible.])
+ ;;
+ esac
+ AS_IF([test "$HWLOC_STRICT_ARGS_CFLAGS" != "FAIL"],[
+ AC_MSG_WARN([Configure will append '$HWLOC_STRICT_ARGS_CFLAGS' to the value of CFLAGS when needed.])
+ AC_MSG_WARN([Alternatively you may configure with a different compiler.])
+ ])
+ ])
+
#
- # Check for inline compatibility support
- #
- AC_MSG_CHECKING([for inline compatibility keyword])
- AC_TRY_COMPILE([static void __inline__ f(void) { }], [],
- [__hwloc_inline=__inline__],
- [AC_TRY_COMPILE([static void __inline f(void) {}], [],
- [__hwloc_inline=__inline],
- [__hwloc_inline=]
- )]
- )
- AC_MSG_RESULT([$__hwloc_inline])
- AC_DEFINE_UNQUOTED(__hwloc_inline, $__hwloc_inline, [Define this to a keyword that can safely replace inline in installed headers])
-
- #
# Now detect support
#
@@ -297,6 +332,8 @@
])
AC_CHECK_HEADERS([sys/mman.h])
+ old_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0601"
AC_CHECK_TYPES([KAFFINITY,
PROCESSOR_CACHE_TYPE,
CACHE_DESCRIPTOR,
@@ -313,6 +350,7 @@
PSAPI_WORKING_SET_EX_BLOCK,
PSAPI_WORKING_SET_EX_INFORMATION],
[],[],[[#include <windows.h>]])
+ CPPFLAGS="$old_CPPFLAGS"
AC_CHECK_LIB([gdi32], [main],
[HWLOC_LIBS="-lgdi32 $HWLOC_LIBS"
AC_DEFINE([HAVE_LIBGDI32], 1, [Define to 1 if we have -lgdi32])])
@@ -331,7 +369,11 @@
[HWLOC_LIBS="-lkstat $HWLOC_LIBS"
AC_DEFINE([HAVE_LIBKSTAT], 1, [Define to 1 if we have -lkstat])])
])
-
+ AC_CHECK_LIB([m], [fabsf],
+ [HWLOC_LIBS="-lm $HWLOC_LIBS"])
+
+ AC_CHECK_HEADERS([picl.h])
+
AC_CHECK_DECLS([_SC_NPROCESSORS_ONLN,
_SC_NPROCESSORS_CONF,
_SC_NPROC_ONLN,
@@ -375,16 +417,25 @@
fi
_HWLOC_CHECK_DECL([sched_setaffinity], [
+ AC_DEFINE([HWLOC_HAVE_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides a prototype of sched_setaffinity()])
+ AS_IF([test "$HWLOC_STRICT_ARGS_CFLAGS" = "FAIL"],[
+ AC_MSG_WARN([Support for sched_setaffinity() requires a C compiler which])
+ AC_MSG_WARN([considers incorrect argument counts to be a fatal error.])
+ AC_MSG_ERROR([Cannot continue.])
+ ])
AC_MSG_CHECKING([for old prototype of sched_setaffinity])
+ hwloc_save_CFLAGS=$CFLAGS
+ CFLAGS="$CFLAGS $HWLOC_STRICT_ARGS_CFLAGS"
AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([[
- #define _GNU_SOURCE
- #include <sched.h>
- static unsigned long mask;
- ]], [[ sched_setaffinity(0, (void*) &mask); ]])],
- [AC_DEFINE([HWLOC_HAVE_OLD_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides the old prototype of sched_setaffinity()])
- AC_MSG_RESULT([yes])],
- [AC_MSG_RESULT([no])])
+ AC_LANG_PROGRAM([[
+ #define _GNU_SOURCE
+ #include <sched.h>
+ static unsigned long mask;
+ ]], [[ sched_setaffinity(0, (void*) &mask); ]])],
+ [AC_DEFINE([HWLOC_HAVE_OLD_SCHED_SETAFFINITY], [1], [Define to 1 if glibc provides the old prototype (without length) of sched_setaffinity()])
+ AC_MSG_RESULT([yes])],
+ [AC_MSG_RESULT([no])])
+ CFLAGS=$hwloc_save_CFLAGS
], , [[
#define _GNU_SOURCE
#include <sched.h>
@@ -443,6 +494,19 @@
AC_DEFINE([HWLOC_HAVE_DECL_FFS], [1], [Define to 1 if function `ffs' is declared by system headers])
])
AC_DEFINE([HWLOC_HAVE_FFS], [1], [Define to 1 if you have the `ffs' function.])
+ if ( $CC --version | grep gccfss ) >/dev/null 2>&1 ; then
+ dnl May be broken due to
+ dnl https://forums.oracle.com/forums/thread.jspa?threadID=1997328
+ dnl TODO: a more selective test, since bug may be version dependent.
+ dnl We can't use AC_TRY_LINK because the failure does not appear until
+ dnl run/load time and there is currently no precedent for AC_TRY_RUN
+ dnl use in hwloc. --PHH
+ dnl For now, we're going with "all gccfss compilers are broken".
+ dnl Better to be safe and correct; it's not like this is
+ dnl performance-critical code, after all.
+ AC_DEFINE([HWLOC_HAVE_BROKEN_FFS], [1],
+ [Define to 1 if your `ffs' function is known to be broken.])
+ fi
])
AC_CHECK_FUNCS([ffsl], [
_HWLOC_CHECK_DECL([ffsl],[
@@ -485,25 +549,6 @@
AC_CHECK_HEADERS([sys/utsname.h])
AC_CHECK_FUNCS([uname])
- # set_mempolicy and mbind support
- AC_CHECK_HEADERS([numaif.h], [
- AC_CHECK_LIB([numa], [set_mempolicy], [
- enable_set_mempolicy=yes
- AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"])
- AC_DEFINE([HWLOC_HAVE_SET_MEMPOLICY], [1], [Define to 1 if set_mempolicy is available.])
- ])
- AC_CHECK_LIB([numa], [mbind], [
- enable_mbind=yes
- AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"])
- AC_DEFINE([HWLOC_HAVE_MBIND], [1], [Define to 1 if mbind is available.])
- ])
- AC_CHECK_LIB([numa], [migrate_pages], [
- enable_migrate_pages=yes
- AC_SUBST([HWLOC_LINUX_LIBNUMA_LIBS], ["-lnuma"])
- AC_DEFINE([HWLOC_HAVE_MIGRATE_PAGES], [1], [Define to 1 if migrate_pages is available.])
- ])
- ])
-
AC_CHECK_HEADERS([pthread_np.h])
AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[
#include <pthread.h>
@@ -523,6 +568,41 @@
AC_DEFINE([HWLOC_HAVE_PTHREAD_GETTHRDS_NP], 1, `Define to 1 if you have pthread_getthrds_np')
)
+ # Linux libnuma support
+ hwloc_linux_libnuma_happy=no
+ if test "x$enable_libnuma" != "xno"; then
+ hwloc_linux_libnuma_happy=yes
+ AC_CHECK_HEADERS([numaif.h], [
+ AC_CHECK_LIB([numa], [numa_available], [HWLOC_LINUX_LIBNUMA_LIBS="-lnuma"], [hwloc_linux_libnuma_happy=no])
+ ], [hwloc_linux_libnuma_happy=no])
+ fi
+ AC_SUBST(HWLOC_LINUX_LIBNUMA_LIBS)
+ # If we asked for Linux libnuma support but couldn't deliver, fail
+ HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LINUX_LIBNUMA_LIBS"
+ AS_IF([test "$enable_libnuma" = "yes" -a "$hwloc_linux_libnuma_happy" = "no"],
+ [AC_MSG_WARN([Specified --enable-libnuma switch, but could not])
+ AC_MSG_WARN([find appropriate support])
+ AC_MSG_ERROR([Cannot continue])])
+ if test "x$hwloc_linux_libnuma_happy" = "xyes"; then
+ tmp_save_LIBS="$LIBS"
+ LIBS="$LIBS $HWLOC_LINUX_LIBNUMA_LIBS"
+
+ AC_CHECK_LIB([numa], [set_mempolicy], [
+ enable_set_mempolicy=yes
+ AC_DEFINE([HWLOC_HAVE_SET_MEMPOLICY], [1], [Define to 1 if set_mempolicy is available.])
+ ])
+ AC_CHECK_LIB([numa], [mbind], [
+ enable_mbind=yes
+ AC_DEFINE([HWLOC_HAVE_MBIND], [1], [Define to 1 if mbind is available.])
+ ])
+ AC_CHECK_LIB([numa], [migrate_pages], [
+ enable_migrate_pages=yes
+ AC_DEFINE([HWLOC_HAVE_MIGRATE_PAGES], [1], [Define to 1 if migrate_pages is available.])
+ ])
+
+ LIBS="$tmp_save_LIBS"
+ fi
+
# PCI support
hwloc_pci_happy=no
if test "x$enable_pci" != "xno"; then
@@ -567,13 +647,19 @@
])
fi
AC_SUBST(HWLOC_PCI_LIBS)
+ HWLOC_LIBS="$HWLOC_LIBS $HWLOC_PCI_LIBS"
# If we asked for pci support but couldn't deliver, fail
AS_IF([test "$enable_pci" = "yes" -a "$hwloc_pci_happy" = "no"],
[AC_MSG_WARN([Specified --enable-pci switch, but could not])
AC_MSG_WARN([find appropriate support])
AC_MSG_ERROR([Cannot continue])])
if test "x$hwloc_pci_happy" = "xyes"; then
+ tmp_save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $HWLOC_PCI_CFLAGS"
+ tmp_save_LIBS="$LIBS"
+ LIBS="$LIBS $HWLOC_PCI_LIBS"
AC_CHECK_DECLS([PCI_LOOKUP_NO_NUMBERS],,[:],[[#include <pci/pci.h>]])
+ AC_CHECK_DECLS([PCI_LOOKUP_NO_NUMBERS],,[:],[[#include <pci/pci.h>]])
AC_CHECK_LIB([pci], [pci_find_cap], [enable_pci_caps=yes], [enable_pci_caps=no], [$HWLOC_PCI_ADDITIONAL_LIBS])
if test "x$enable_pci_caps" = "xyes"; then
AC_DEFINE([HWLOC_HAVE_PCI_FIND_CAP], [1], [Define to 1 if `libpci' has the `pci_find_cap' function.])
@@ -600,6 +686,8 @@
HWLOC_REQUIRES="libpci $HWLOC_REQUIRES"
AC_DEFINE([HWLOC_HAVE_LIBPCI], [1], [Define to 1 if you have the `libpci' library.])
AC_SUBST([HWLOC_HAVE_LIBPCI], [1])
+ CFLAGS="$tmp_save_CFLAGS"
+ LIBS="$tmp_save_LIBS"
else
AC_SUBST([HWLOC_HAVE_LIBPCI], [0])
fi
@@ -623,11 +711,12 @@
AC_MSG_ERROR([Cannot continue])])
fi
HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LIBXML2_CFLAGS"
+ HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LIBXML2_LIBS"
# Setup HWLOC's C, CPP, and LD flags, and LIBS
AC_SUBST(HWLOC_REQUIRES)
AC_SUBST(HWLOC_CFLAGS)
- HWLOC_CPPFLAGS='-I$(HWLOC_top_srcdir)/include -I$(HWLOC_top_builddir)/include'
+ HWLOC_CPPFLAGS='-I$(HWLOC_top_builddir)/include -I$(HWLOC_top_srcdir)/include'
AC_SUBST(HWLOC_CPPFLAGS)
HWLOC_LDFLAGS='-L$(HWLOC_top_builddir)/src'
AC_SUBST(HWLOC_LDFLAGS)
@@ -635,22 +724,30 @@
# Set these values explicitly for embedded builds. Exporting
# these values through *_EMBEDDED_* values gives us the freedom to
- # do something different someday if we ever need to.
- HWLOC_EMBEDDED_CFLAGS=$HWLOC_CFLAGS
+ # do something different someday if we ever need to. There's no
+ # need to fill these values in unless we're in embedded mode.
+ # Indeed, if we're building in embedded mode, we want HWLOC_LIBS
+ # to be empty so that nothing is linked into libhwloc_embedded.la
+ # itself -- only the upper-layer will link in anything required.
+
+ AS_IF([test "$hwloc_mode" = "embedded"],
+ [HWLOC_EMBEDDED_CFLAGS=$HWLOC_CFLAGS
+ HWLOC_EMBEDDED_CPPFLAGS=$HWLOC_CPPFLAGS
+ HWLOC_EMBEDDED_LDADD='$(HWLOC_top_builddir)/src/libhwloc_embedded.la'
+ HWLOC_EMBEDDED_LIBS=$HWLOC_LIBS
+ HWLOC_LIBS=])
AC_SUBST(HWLOC_EMBEDDED_CFLAGS)
- HWLOC_EMBEDDED_CPPFLAGS=$HWLOC_CPPFLAGS
AC_SUBST(HWLOC_EMBEDDED_CPPFLAGS)
- HWLOC_EMBEDDED_LDADD='$(HWLOC_top_builddir)/src/libhwloc_embedded.la'
AC_SUBST(HWLOC_EMBEDDED_LDADD)
- HWLOC_EMBEDDED_LIBS=$HWLOC_LIBS
AC_SUBST(HWLOC_EMBEDDED_LIBS)
# Try to compile the cpuid inlines
AC_MSG_CHECKING([for cpuid])
old_CPPFLAGS="$CPPFLAGS"
- CFLAGS="$CFLAGS -I$HWLOC_top_srcdir/include"
+ CPPFLAGS="$CPPFLAGS -I$HWLOC_top_srcdir/include"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#include <stdio.h>
+ #define __hwloc_inline
#include <private/cpuid.h>
]], [[
if (hwloc_have_cpuid()) {
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_attributes.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -10,7 +10,7 @@
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# and renamed for hwloc:
-# Copyright (c) 2009 INRIA. All rights reserved.
+# Copyright (c) 2009 inria. All rights reserved.
# Copyright (c) 2009 Université Bordeaux 1
# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_vendor.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_vendor.m4 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_vendor.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,239 @@
+dnl -*- shell-script -*-
+dnl
+dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
+dnl University Research and Technology
+dnl Corporation. All rights reserved.
+dnl Copyright (c) 2004-2005 The University of Tennessee and The University
+dnl of Tennessee Research Foundation. All rights
+dnl reserved.
+dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
+dnl University of Stuttgart. All rights reserved.
+dnl Copyright (c) 2004-2005 The Regents of the University of California.
+dnl All rights reserved.
+dnl Copyright (c) 2011 Cisco Systems, Inc. All rights reserved.
+dnl $COPYRIGHT$
+dnl
+dnl Additional copyrights may follow
+dnl
+dnl $HEADER$
+dnl
+
+dnl ------------------------------------------------------------------
+dnl This m4 file originally copied from Open MPI
+dnl config/ompi_check_vendor.m4.
+dnl ------------------------------------------------------------------
+
+
+# HWLOC_C_COMPILER_VENDOR(VENDOR_VARIABLE)
+# ---------------------------------------
+# Set shell variable VENDOR_VARIABLE to the name of the compiler
+# vendor for the current C compiler.
+#
+# See comment for _HWLOC_CHECK_COMPILER_VENDOR for a complete
+# list of currently detected compilers.
+AC_DEFUN([_HWLOC_C_COMPILER_VENDOR], [
+ AC_REQUIRE([AC_PROG_CC])
+
+ AC_CACHE_CHECK([for the C compiler vendor],
+ [hwloc_cv_c_compiler_vendor],
+ [AC_LANG_PUSH(C)
+ _HWLOC_CHECK_COMPILER_VENDOR([hwloc_cv_c_compiler_vendor])
+ AC_LANG_POP(C)])
+
+ $1="$hwloc_cv_c_compiler_vendor"
+])
+
+
+# workaround to avoid syntax error with Autoconf < 2.68:
+m4_ifndef([AC_LANG_DEFINES_PROVIDED],
+ [m4_define([AC_LANG_DEFINES_PROVIDED])])
+
+# HWLOC_IFDEF_IFELSE(symbol, [action-if-defined],
+# [action-if-not-defined])
+# ----------------------------------------------
+# Run compiler to determine if preprocessor symbol "symbol" is
+# defined by the compiler.
+AC_DEFUN([HWLOC_IFDEF_IFELSE], [
+ AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED
+#ifndef $1
+#error "symbol $1 not defined"
+choke me
+#endif], [$2], [$3])])
+
+
+# HWLOC_IF_IFELSE(symbol, [action-if-defined],
+# [action-if-not-defined])
+# ----------------------------------------------
+# Run compiler to determine if preprocessor symbol "symbol" is
+# defined by the compiler.
+AC_DEFUN([HWLOC_IF_IFELSE], [
+ AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED
+#if !( $1 )
+#error "condition $1 not met"
+choke me
+#endif], [$2], [$3])])
+
+
+# _HWLOC_CHECK_COMPILER_VENDOR(VENDOR_VARIABLE)
+# --------------------------------------------
+# Set shell variable VENDOR_VARIABLE to the name of the compiler
+# vendor for the compiler for the current language. Language must be
+# one of C, OBJC, or C++.
+#
+# thanks to http://predef.sourceforge.net/precomp.html for the list
+# of defines to check.
+AC_DEFUN([_HWLOC_CHECK_COMPILER_VENDOR], [
+ hwloc_check_compiler_vendor_result="unknown"
+
+ # GNU is probably the most common, so check that one as soon as
+ # possible. Intel pretends to be GNU, so need to check Intel
+ # before checking for GNU.
+
+ # Intel
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__INTEL_COMPILER) || defined(__ICC)],
+ [hwloc_check_compiler_vendor_result="intel"])])
+
+ # GNU
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__GNUC__],
+ [hwloc_check_compiler_vendor_result="gnu"])])
+
+ # Borland Turbo C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__TURBOC__],
+ [hwloc_check_compiler_vendor_result="borland"])])
+
+ # Borland C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__BORLANDC__],
+ [hwloc_check_compiler_vendor_result="borland"])])
+
+ # Comeau C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__COMO__],
+ [hwloc_check_compiler_vendor_result="comeau"])])
+
+ # Compaq C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__DECC) || defined(VAXC) || defined(__VAXC)],
+ [hwloc_check_compiler_vendor_result="compaq"],
+ [HWLOC_IF_IFELSE([defined(__osf__) && defined(__LANGUAGE_C__)],
+ [hwloc_check_compiler_vendor_result="compaq"],
+ [HWLOC_IFDEF_IFELSE([__DECCXX],
+ [hwloc_check_compiler_vendor_result="compaq"])])])])
+
+ # Cray C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([_CRAYC],
+ [hwloc_check_compiler_vendor_result="cray"])])
+
+ # Diab C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__DCC__],
+ [hwloc_check_compiler_vendor_result="diab"])])
+
+ # Digital Mars
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__DMC__) || defined(__SC__) || defined(__ZTC__)],
+ [hwloc_check_compiler_vendor_result="digital mars"])])
+
+ # HP ANSI C / aC++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__HP_cc) || defined(__HP_aCC)],
+ [hwloc_check_compiler_vendor_result="hp"])])
+
+ # IBM XL C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)],
+ [hwloc_check_compiler_vendor_result="ibm"],
+ [HWLOC_IF_IFELSE([defined(_AIX) && !defined(__GNUC__)],
+ [hwloc_check_compiler_vendor_result="ibm"])])])
+
+ # KAI C++ (rest in peace)
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__KCC],
+ [hwloc_check_compiler_vendor_result="kai"])])
+
+ # LCC
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__LCC__],
+ [hwloc_check_compiler_vendor_result="lcc"])])
+
+ # MetaWare High C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__HIGHC__],
+ [hwloc_check_compiler_vendor_result="metaware high"])])
+
+ # Metrowerks Codewarrior
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__MWERKS__],
+ [hwloc_check_compiler_vendor_result="metrowerks"])])
+
+ # MIPSpro (SGI)
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(sgi) || defined(__sgi)],
+ [hwloc_check_compiler_vendor_result="sgi"])])
+
+ # MPW C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__MRC__) || defined(MPW_C) || defined(MPW_CPLUS)],
+ [hwloc_check_compiler_vendor_result="mpw"])])
+
+ # Microsoft
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [# Always use C compiler when checking for Microsoft, as
+ # Visual C++ doesn't recognize .cc as a C++ file.
+ AC_LANG_PUSH(C)
+ HWLOC_IF_IFELSE([defined(_MSC_VER) || defined(__MSC_VER)],
+ [hwloc_check_compiler_vendor_result="microsoft"])
+ AC_LANG_POP(C)])
+
+ # Norcroft C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__CC_NORCROFT],
+ [hwloc_check_compiler_vendor_result="norcroft"])])
+
+ # Pelles C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__POCC__],
+ [hwloc_check_compiler_vendor_result="pelles"])])
+
+ # Portland Group
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__PGI],
+ [hwloc_check_compiler_vendor_result="portland group"])])
+
+ # SAS/C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(SASC) || defined(__SASC) || defined(__SASC__)],
+ [hwloc_check_compiler_vendor_result="sas"])])
+
+ # Sun Workshop C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IF_IFELSE([defined(__SUNPRO_C) || defined(__SUNPRO_CC)],
+ [hwloc_check_compiler_vendor_result="sun"])])
+
+ # TenDRA C/C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__TenDRA__],
+ [hwloc_check_compiler_vendor_result="tendra"])])
+
+ # Tiny C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__TINYC__],
+ [hwloc_check_compiler_vendor_result="tiny"])])
+
+ # USL C
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__USLC__],
+ [hwloc_check_compiler_vendor_result="usl"])])
+
+ # Watcom C++
+ AS_IF([test "$hwloc_check_compiler_vendor_result" = "unknown"],
+ [HWLOC_IFDEF_IFELSE([__WATCOMC__],
+ [hwloc_check_compiler_vendor_result="watcom"])])
+
+ $1="$hwloc_check_compiler_vendor_result"
+ unset hwloc_check_compiler_vendor_result
+])
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_visibility.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_visibility.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_check_visibility.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -10,10 +10,10 @@
# Copyright (c) 2004-2005 The Regents of the University of California.
# All rights reserved.
# Copyright (c) 2006-2007 Cisco Systems, Inc. All rights reserved.
-# and renamed for hwloc:
-# Copyright (c) 2009 INRIA. All rights reserved.
+# and renamed/modified for hwloc:
+# Copyright (c) 2009 inria. All rights reserved.
# Copyright (c) 2009-2010 Université Bordeaux 1
-# Copyright (c) 2010 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
# See COPYING in top-level directory.
#
# Redistribution and use in source and binary forms, with or without
@@ -60,63 +60,72 @@
[AC_REQUIRE([AC_PROG_GREP])],
[GREP=grep])
- msg="whether to enable visibility"
# Check if the compiler has support for visibility, like some
- # versions of gcc, icc.
+ # versions of gcc, icc, Sun Studio cc.
AC_ARG_ENABLE(visibility,
AC_HELP_STRING([--enable-visibility],
- [enable visibility feature of certain compilers/linkers (default: enabled)]))
+ [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
case ${target} in
- *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
- enable_visibility=no
- ;;
+ *-*-aix*|*-*-mingw*|*-*-cygwin*|*-*-hpux*)
+ enable_visibility=no
+ ;;
esac
+ hwloc_visibility_define=0
+ hwloc_msg="whether to enable symbol visibility"
if test "$enable_visibility" = "no"; then
- AC_MSG_CHECKING([$msg])
+ AC_MSG_CHECKING([$hwloc_msg])
AC_MSG_RESULT([no (disabled)])
- have_visibility=0
else
- CFLAGS_orig="$CFLAGS"
- CFLAGS="$CFLAGS_orig -fvisibility=hidden"
+ CFLAGS_orig=$CFLAGS
+
hwloc_add=
- AC_CACHE_CHECK([if $CC supports -fvisibility],
- [hwloc_cv_cc_fvisibility],
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
- __attribute__((visibility("default"))) int foo;
- ]],[[int i;]])],
- [hwloc_cv_cc_fvisibility=yes],
- [if test -s conftest.err ; then
- $GREP -iq "visibility" conftest.err
- if test "$?" = "0" ; then
- hwloc_cv_cc_fvisibility=no
- else
- hwloc_cv_cc_fvisibility=yes
- fi
- else
- hwloc_cv_cc_fvisibility=yes
- fi],
- [hwloc_cv_cc_fvisibility=no])
- ])
+ case "$hwloc_c_vendor" in
+ sun)
+ # Check using Sun Studio -xldscope=hidden flag
+ hwloc_add=-xldscope=hidden
+ CFLAGS="$CFLAGS_orig $hwloc_add -errwarn=%all"
+ ;;
- if test "$hwloc_cv_cc_fvisibility" = "yes" ; then
- hwloc_add=" -fvisibility=hidden"
- have_visibility=1
- AC_MSG_CHECKING([$msg])
- AC_MSG_RESULT([yes (via$hwloc_add)])
+ *)
+ # Check using -fvisibility=hidden
+ hwloc_add=-fvisibility=hidden
+ CFLAGS="$CFLAGS_orig $hwloc_add -Werror"
+ ;;
+ esac
+
+ AC_MSG_CHECKING([if $CC supports $hwloc_add])
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+ #include <stdio.h>
+ __attribute__((visibility("default"))) int foo;
+ ]],[[fprintf(stderr, "Hello, world\n");]])],
+ [AS_IF([test -s conftest.err],
+ [$GREP -iq visibility conftest.err
+ # If we find "visibility" in the stderr, then
+ # assume it doesn't work
+ AS_IF([test "$?" = "0"], [hwloc_add=])])
+ ], [hwloc_add=])
+ AS_IF([test "$hwloc_add" = ""],
+ [AC_MSG_RESULT([no])],
+ [AC_MSG_RESULT([yes])])
+
+ CFLAGS=$CFLAGS_orig
+ HWLOC_VISIBILITY_CFLAGS=$hwloc_add
+
+ if test "$hwloc_add" != "" ; then
+ hwloc_visibility_define=1
+ AC_MSG_CHECKING([$hwloc_msg])
+ AC_MSG_RESULT([yes (via $hwloc_add)])
elif test "$enable_visibility" = "yes"; then
AC_MSG_ERROR([Symbol visibility support requested but compiler does not seem to support it. Aborting])
else
- AC_MSG_CHECKING([$msg])
+ AC_MSG_CHECKING([$hwloc_msg])
AC_MSG_RESULT([no (unsupported)])
- have_visibility=0
fi
- CFLAGS=$CFLAGS_orig
- HWLOC_VISIBILITY_CFLAGS=$hwloc_add
unset hwloc_add
fi
- AC_DEFINE_UNQUOTED([HWLOC_C_HAVE_VISIBILITY], [$have_visibility],
- [Whether C compiler supports -fvisibility])
+ AC_DEFINE_UNQUOTED([HWLOC_C_HAVE_VISIBILITY], [$hwloc_visibility_define],
+ [Whether C compiler supports symbol visibility or not])
])
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_internal.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
dnl -*- Autoconf -*-
dnl
-dnl Copyright (c) 2009 INRIA. All rights reserved.
+dnl Copyright (c) 2009 inria. All rights reserved.
dnl Copyright (c) 2009, 2011 Université Bordeaux 1
dnl Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
dnl University Research and Technology
@@ -9,7 +9,7 @@
dnl All rights reserved.
dnl Copyright (c) 2004-2008 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
-dnl Copyright © 2010 INRIA. All rights reserved.
+dnl Copyright © 2010 inria. All rights reserved.
dnl Copyright © 2006-2011 Cisco Systems, Inc. All rights reserved.
dnl
dnl See COPYING in top-level directory.
@@ -65,6 +65,11 @@
AS_HELP_STRING([--disable-pci],
[Disable the PCI device discovery using libpci]))
+ # Linux libnuma
+ AC_ARG_ENABLE([libnuma],
+ AS_HELP_STRING([--disable-libnuma],
+ [Disable the Linux libnuma]))
+
])dnl
#-----------------------------------------------------------------------
@@ -167,7 +172,7 @@
# specifically disabled by the user.
AC_MSG_CHECKING([whether to enable "picky" compiler mode])
hwloc_want_picky=0
- AS_IF([test "$GCC" = "yes"],
+ AS_IF([test "$hwloc_c_vendor" = "gnu"],
[AS_IF([test -d "$srcdir/.svn" -o -d "$srcdir/.hg" -o -d "$srcdir/.git"],
[hwloc_want_picky=1])])
if test "$enable_picky" = "yes"; then
@@ -383,14 +388,19 @@
hwloc_config_prefix[tests/linux/gather/Makefile]
hwloc_config_prefix[tests/xml/Makefile]
hwloc_config_prefix[tests/ports/Makefile]
+ hwloc_config_prefix[tests/rename/Makefile]
hwloc_config_prefix[tests/linux/hwloc-gather-topology]
hwloc_config_prefix[tests/linux/gather/test-gather-topology.sh]
hwloc_config_prefix[tests/linux/test-topology.sh]
hwloc_config_prefix[tests/xml/test-topology.sh]
+ hwloc_config_prefix[utils/hwloc-assembler-remote]
+ hwloc_config_prefix[utils/test-hwloc-assembler.sh]
hwloc_config_prefix[utils/test-hwloc-calc.sh]
- hwloc_config_prefix[utils/test-hwloc-distrib.sh])
+ hwloc_config_prefix[utils/test-hwloc-distances.sh]
+ hwloc_config_prefix[utils/test-hwloc-distrib.sh]
+ hwloc_config_prefix[utils/test-hwloc-ls.sh])
- AC_CONFIG_COMMANDS([chmoding-scripts], [chmod +x ]hwloc_config_prefix[tests/linux/test-topology.sh ]hwloc_config_prefix[tests/xml/test-topology.sh ]hwloc_config_prefix[tests/linux/hwloc-gather-topology ]hwloc_config_prefix[tests/linux/gather/test-gather-topology.sh ]hwloc_config_prefix[utils/test-hwloc-calc.sh ]hwloc_config_prefix[utils/test-hwloc-distrib.sh])
+ AC_CONFIG_COMMANDS([chmoding-scripts], [chmod +x ]hwloc_config_prefix[tests/linux/test-topology.sh ]hwloc_config_prefix[tests/xml/test-topology.sh ]hwloc_config_prefix[tests/linux/hwloc-gather-topology ]hwloc_config_prefix[tests/linux/gather/test-gather-topology.sh ]hwloc_config_prefix[utils/hwloc-assembler-remote ]hwloc_config_prefix[utils/test-hwloc-assembler.sh ]hwloc_config_prefix[utils/test-hwloc-calc.sh ]hwloc_config_prefix[utils/test-hwloc-distances.sh ]hwloc_config_prefix[utils/test-hwloc-distrib.sh ]hwloc_config_prefix[utils/test-hwloc-ls.sh])
# These links are only needed in standalone mode. It would
# be nice to m4 foreach this somehow, but whenever I tried
@@ -403,6 +413,7 @@
hwloc_config_prefix[tests/ports/traversal.c]:hwloc_config_prefix[src/traversal.c]
hwloc_config_prefix[tests/ports/topology-synthetic.c]:hwloc_config_prefix[src/topology-synthetic.c]
hwloc_config_prefix[tests/ports/topology-solaris.c]:hwloc_config_prefix[src/topology-solaris.c]
+ hwloc_config_prefix[tests/ports/topology-solaris-chiptype.c]:hwloc_config_prefix[src/topology-solaris-chiptype.c]
hwloc_config_prefix[tests/ports/topology-aix.c]:hwloc_config_prefix[src/topology-aix.c]
hwloc_config_prefix[tests/ports/topology-osf.c]:hwloc_config_prefix[src/topology-osf.c]
hwloc_config_prefix[tests/ports/topology-windows.c]:hwloc_config_prefix[src/topology-windows.c]
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_pkg.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_pkg.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/config/hwloc_pkg.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -31,21 +31,30 @@
# HWLOC_PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
+# hwloc note: Per https://svn.open-mpi.org/trac/hwloc/ticket/55, keep
+# the environment variable $PKG_CONFIG (vs. renaming it
+# $HWLOC_PKG_CONFIG). Short explanation: $PKG_CONFIG is a well-known
+# environment variable that can be set by users to override what these
+# .m4 macros do. There's no reason we should have a different env
+# variable name (e.g., $HWLOC_PKG_CONFIG). So leave it named
+# $PKG_CONFIG both here in this specific macro, and all the other
+# macros that use it.
AC_DEFUN([HWLOC_PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-m4_pattern_allow([^HWLOC_PKG_CONFIG(_PATH)?$])
-AC_ARG_VAR([HWLOC_PKG_CONFIG], [path to pkg-config utility])dnl
-if test "x$ac_cv_env_HWLOC_PKG_CONFIG_set" != "xset"; then
- AC_PATH_TOOL([HWLOC_PKG_CONFIG], [pkg-config])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
-if test -n "$HWLOC_PKG_CONFIG"; then
+if test -n "$PKG_CONFIG"; then
HWLOC_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $HWLOC_pkg_min_version])
- if $HWLOC_PKG_CONFIG --atleast-pkgconfig-version $HWLOC_pkg_min_version; then
+ if $PKG_CONFIG --atleast-pkgconfig-version $HWLOC_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
- HWLOC_PKG_CONFIG=""
+ PKG_CONFIG=""
fi
fi[]dnl
@@ -63,8 +72,8 @@
# --------------------------------------------------------------
AC_DEFUN([HWLOC_PKG_CHECK_EXISTS],
[AC_REQUIRE([HWLOC_PKG_PROG_PKG_CONFIG])dnl
-if test -n "$HWLOC_PKG_CONFIG" && \
- AC_RUN_LOG([$HWLOC_PKG_CONFIG --exists --silence-errors "$1"]); then
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --silence-errors "$1"]); then
m4_ifval([$2], [$2], [:])
m4_ifvaln([$3], [else
$3])dnl
@@ -74,12 +83,12 @@
# _HWLOC_PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
m4_define([_HWLOC_PKG_CONFIG],
-[if test -n "$HWLOC_PKG_CONFIG"; then
+[if test -n "$PKG_CONFIG"; then
if test -n "$$1"; then
HWLOC_pkg_cv_[]$1="$$1"
else
HWLOC_PKG_CHECK_EXISTS([$3],
- [HWLOC_pkg_cv_[]$1=`$HWLOC_PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [HWLOC_pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
[HWLOC_pkg_failed=yes])
fi
else
@@ -91,7 +100,7 @@
# -----------------------------
AC_DEFUN([_HWLOC_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([HWLOC_PKG_PROG_PKG_CONFIG])
-if $HWLOC_PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
HWLOC_pkg_short_errors_supported=yes
else
HWLOC_pkg_short_errors_supported=no
@@ -128,9 +137,9 @@
if test $HWLOC_pkg_failed = yes; then
_HWLOC_PKG_SHORT_ERRORS_SUPPORTED
if test $HWLOC_pkg_short_errors_supported = yes; then
- HWLOC_[]$1[]_PKG_ERRORS=`$HWLOC_PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2" 2>&1`
+ HWLOC_[]$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2" 2>&1`
else
- HWLOC_[]$1[]_PKG_ERRORS=`$HWLOC_PKG_CONFIG --errors-to-stdout --print-errors "$2" 2>&1`
+ HWLOC_[]$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$HWLOC_[]$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
@@ -138,9 +147,9 @@
ifelse([$5], , [AC_MSG_ERROR(dnl
[Package requirements ($2) were not met:
-$HWLOCC_$1_PKG_ERRORS
+$HWLOC_$1_PKG_ERRORS
-Consider adjusting the HWLOC_PKG_CONFIG_PATH environment variable if you
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_HWLOC_PKG_TEXT
@@ -150,7 +159,7 @@
elif test $HWLOC_pkg_failed = untried; then
ifelse([$5], , [AC_MSG_FAILURE(dnl
[The pkg-config script could not be found or is too old. Make sure it
-is in your PATH or set the HWLOC_PKG_CONFIG environment variable to the full
+is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_HWLOC_PKG_TEXT
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/configure.ac
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/configure.ac 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/configure.ac 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,8 +1,8 @@
# -*- shell-script -*-
#
# Copyright © 2009 CNRS
-# Copyright © 2009-2010 INRIA. All rights reserved.
-# Copyright © 2009, 2011 Université Bordeaux 1
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009, 2011-2012 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
#
# See COPYING in top-level directory.
@@ -14,7 +14,7 @@
AC_INIT([hwloc],
[m4_normalize(esyscmd([config/hwloc_get_version.sh VERSION --base]))],
- [http://www.open-mpi.org/community/help/], [hwloc])
+ [http://www.open-mpi.org/projects/hwloc/], [hwloc])
AC_PREREQ(2.63)
AC_CONFIG_AUX_DIR(./config)
# Note that this directory must *exactly* match what was specified via
@@ -85,7 +85,7 @@
# Setup the header file
AH_TOP([/* -*- c -*-
*
- * Copyright © 2009 CNRS, INRIA., Université Bordeaux 1 All rights reserved.
+ * Copyright © 2009 CNRS, inria., Université Bordeaux 1 All rights reserved.
* Copyright © 2009 Cisco Systems, Inc. All rights reserved.
* $COPYRIGHT$
*
@@ -131,16 +131,11 @@
# Setup the hwloc core
HWLOC_SETUP_CORE([], [], [AC_MSG_ERROR([Cannot build hwloc core])], [1])
-dnl MPICH2 modification: don't expand these macros, even inside a shell-if,
-dnl because we have deleted the directories that these macros configure.
-dnl Therefore numerous ".in" files listed in AC_CONFIG_FILES are no longer
-dnl present and cause errors at automake time.
-dnl
-dnl # Setup hwloc's docs, utils, and tests
-dnl AS_IF([test "$hwloc_mode" = "standalone"],
-dnl [HWLOC_SETUP_DOCS
-dnl HWLOC_SETUP_UTILS
-dnl HWLOC_SETUP_TESTS])
+# Setup hwloc's docs, utils, and tests
+AS_IF([test "$hwloc_mode" = "standalone"],
+ [HWLOC_SETUP_DOCS
+ HWLOC_SETUP_UTILS
+ HWLOC_SETUP_TESTS])
# Run the AM_CONDITIONALs
HWLOC_DO_AM_CONDITIONALS
@@ -159,3 +154,44 @@
# Party on
AC_OUTPUT
+
+# Create a comma-delimited list in an environment variable.
+# $1 = variable name
+# $2 = value to append
+append_env() {
+ # Tricky shell/m4 quoting here -- not for the meek.
+ var=[$]1
+ # Note: quotes *NOT* needed in this assignment
+ eval initial_value=\$$var
+
+ AS_IF([test "$initial_value" != ""],
+ [new_value="$initial_value, [$]2"],
+ [new_value="[$]2]")
+ eval "[$]1=\"$new_value\""
+}
+
+# Show which optional support we'll be building
+hwloc_xml_status=basic
+AS_IF([test "$hwloc_libxml2_happy" = "yes"], [hwloc_xml_status=full])
+
+# Beginning of generic support
+cat <<EOF
+
+-----------------------------------------------------------------------------
+Hwloc optional build support status (more details can be found above):
+
+Probe / display PCI devices: $hwloc_pci_happy
+Graphical output (Cairo): $hwloc_cairo_happy
+XML input / output: $hwloc_xml_status
+EOF
+
+# Linux specific support
+AS_IF([test "$hwloc_linux" = "yes"], [cat <<EOF
+libnuma memory support: $hwloc_linux_libnuma_happy
+EOF])
+
+# End of generic support
+cat <<EOF
+-----------------------------------------------------------------------------
+
+EOF
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/dist/make_dist_tarball 2012-02-25 00:52:55 UTC (rev 9527)
@@ -22,9 +22,9 @@
# Version of auto tools that we want
#
-AM_TARGET_VERSION=1.11.1
+AM_TARGET_VERSION=1.11.2
AC_TARGET_VERSION=2.68
-LT_TARGET_VERSION=2.4
+LT_TARGET_VERSION=2.4.2
#
# First things first -- check that the auto versions that we have are
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/hg/build-hgignore.pl
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/hg/build-hgignore.pl 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/hg/build-hgignore.pl 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,6 @@
#!/usr/bin/env perl
#
-# Copyright (c) 2008 Cisco Systems, Inc. All rights reserved.
-# See COPYING in top-level directory.
+# Copyright (c) 2008-2010 Cisco Systems, Inc. All rights reserved.
#
# Dumb script to run through all the svn:ignore's in the tree and build
# build a .hgignore file for Mercurial. Do a few trivial things to
@@ -30,6 +29,8 @@
*.dSYM
*.S
*.loT
+*.orig
+*.rej
.git*
.DS_Store
stamp-h[1-9]
@@ -60,6 +61,17 @@
# Start at the top level
process(".");
+# See if there's an .hgignore_local file. If so, add its contents to the end.
+if (-f ".hgignore_local") {
+ open(IN, ".hgignore_local") || die "Can't open .hgignore_local";
+ while (<IN>) {
+ chomp;
+ push(@globals, $_);
+ }
+
+ close(IN);
+}
+
# If there's an old .hgignore, delete it
unlink(".hgignore")
if (-f ".hgignore");
@@ -78,10 +90,6 @@
sub process {
my $dir = shift;
- # Ensure we're in a svn-controlled directory
- return
- if (! -d "$dir/.svn");
-
# Look at the svn:ignore property for this directory
my $svn_ignore = `svn pg svn:ignore $dir 2> /dev/null`;
# If svn failed, bail on this directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/contrib/update-my-copyright.pl 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# Copyright (c) 2010-2011 Cisco Systems, Inc. All rights reserved.
-# Copyright (c) 2011 INRIA. All rights reserved.
+# Copyright (c) 2011 inria. All rights reserved.
# $COPYRIGHT$
#
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,792 @@
+# Copyright © 2009-2011 inria. All rights reserved.
+# Copyright © 2009-2011 Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+
+DOCDIR = $(HWLOC_top_builddir)/doc
+DOX_CONFIG = $(HWLOC_top_srcdir)/doc/doxygen.cfg
+
+DOX_DIR = doxygen-doc
+DOX_HTML_DIR = $(DOX_DIR)/html
+DOX_MAN_DIR = $(DOX_DIR)/man
+DOX_LATEX_DIR = $(DOX_DIR)/latex
+DOX_A4PDF = doxygen-doc/$(PACKAGE)-a4.pdf
+DOX_LETTERPDF = doxygen-doc/$(PACKAGE)-letter.pdf
+DOX_TAG = $(DOX_DIR)/$(PACKAGE).tag
+
+#
+# The goal is that Doxygen output (i.e., the documentation) is
+# included in release tarballs; there is no need to build anything
+# from tarballs. Developers will need to build the docs the first
+# time they build after a checkout (or if something in the docs
+# changes, etc.).
+#
+# Note that by listing directories in EXTRA_DIST, we pick up the whole
+# tree (e.g., everything in the man and latex directories).
+#
+
+# images already available in repository
+PREBUILT_IMAGES = images/dudley.png images/emmett.png images/hagrid.png
+# images built from repository before inclusion in make dist
+BUILT_IMAGES = images/diagram.png images/diagram.eps
+
+EXTRA_DIST = \
+ hwloc.doxy \
+ doxygen.css \
+ doxygen.cfg \
+ images/diagram.fig \
+ images/devel09-pci.png \
+ images/devel09-pci.pdf \
+ images/ppc64-with-smt.png \
+ images/ppc64-with-smt.pdf \
+ images/ppc64-without-smt.png \
+ images/ppc64-without-smt.pdf \
+ images/ppc64-full-with-smt.png \
+ images/ppc64-full-with-smt.pdf \
+ www.open-mpi.org.cfg \
+ www.open-mpi.org-css.inc \
+ www.open-mpi.org-footer.inc \
+ www.open-mpi.org-header.inc \
+ $(PREBUILT_IMAGES) \
+ $(BUILT_IMAGES)
+
+#
+# Files where the doxygen inputs live (i.e., dependencies). Make the
+# generated tagfile depend on these files, which will force them to be
+# regenerated (i.e., re-run doxygen) whenever any of these files
+# change.
+#
+
+dox_inputs = $(DOX_CONFIG) \
+ $(srcdir)/hwloc.doxy \
+ $(HWLOC_top_srcdir)/include/hwloc.h \
+ $(HWLOC_top_srcdir)/include/hwloc/helper.h \
+ $(HWLOC_top_srcdir)/include/hwloc/bitmap.h \
+ $(HWLOC_top_srcdir)/include/hwloc/glibc-sched.h \
+ $(HWLOC_top_srcdir)/include/hwloc/linux.h \
+ $(HWLOC_top_srcdir)/include/hwloc/linux-libnuma.h \
+ $(HWLOC_top_srcdir)/include/hwloc/cuda.h \
+ $(HWLOC_top_srcdir)/include/hwloc/cudart.h \
+ $(HWLOC_top_srcdir)/include/hwloc/openfabrics-verbs.h \
+ $(HWLOC_top_srcdir)/include/hwloc/myriexpress.h
+
+#
+# Create the images that we need for the PDF output and the HTML
+# output. There is not an easy way to check if the output of
+# AC_PATH_PROG found something in configure.ac (!), so we have to put
+# a run-time check here to see if fig2dev was found. :-(
+#
+# Note that BUILD_DOXYGEN will automatically be false if we're not
+# building standalone.
+#
+
+if HWLOC_BUILD_DOXYGEN
+BUILT_SOURCES = $(BUILT_IMAGES)
+
+images/diagram.png: $(srcdir)/images/diagram.fig
+ $(MKDIR_P) images
+ @if test "x$(FIG2DEV)" = "x"; then \
+ echo "ERROR: Cannot find the 'fig2dev' executable -- cannot make $@"; \
+ exit 1; \
+ fi
+ $(FIG2DEV) -L png $< $@
+
+images/diagram.eps: $(srcdir)/images/diagram.fig
+ $(MKDIR_P) images
+ @if test "x$(FIG2DEV)" = "x"; then \
+ echo "ERROR: Cannot find the 'fig2dev' executable -- cannot make $@"; \
+ exit 1; \
+ fi
+ $(FIG2DEV) -L eps $< $@
+endif
+
+#
+# Rules for running doxygen. It depends on the built images and the
+# dox_inputs.
+# Remove useless manpages, they have too long filenames anyway because
+# of nested structurre/union declarations.
+#
+
+if HWLOC_BUILD_DOXYGEN
+$(DOX_TAG): $(BUILT_SOURCES) $(dox_inputs) $(PREBUILT_IMAGES)
+ rm -fr $(DOX_DIR)
+ $(DOXYGEN) $(DOX_CONFIG)
+ -$(SED_I) -e 's/__hwloc_restrict/restrict/g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-restrict/restrict/g' \
+ -e 's/__hwloc_attribute_unused//g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-unused//g' \
+ -e 's/__hwloc_attribute_malloc//g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-malloc//g' \
+ -e 's/__hwloc_attribute_const//g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-const//g' \
+ -e 's/__hwloc_attribute_pure//g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-pure//g' \
+ -e 's/__hwloc_attribute_deprecated//g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-attribute\\_\\-deprecated//g' \
+ -e 's/HWLOC_DECLSPEC//g' \
+ -e 's/HWLOC\\_\\-DECLSPEC//g' \
+ -e 's/__hwloc_inline/inline/g' \
+ -e 's/\\_\\-\\_\\-hwloc\\_\\-inline/inline/g' \
+ $(DOX_DIR)/html/*.html $(DOX_DIR)/latex/*.tex $(DOX_DIR)/man/man3/*.3
+ @echo "Work-around spurious leading _ in doxygen filenames..."
+ -(cd $(DOX_DIR)/man/man3 ; \
+ for i in _hwloc* ; do \
+ [ ! -f $$i ] || mv $$i $${i#_} ; \
+ done)
+ @echo "Removing useless manpages..."
+ @mkdir $(DOX_DIR)/man.tmp
+ @mv $(DOX_MAN_DIR)/man3/hwloc* $(DOX_MAN_DIR)/man3/HWLOC* $(DOX_DIR)/man.tmp/
+ @rm -rf $(DOX_MAN_DIR)/man3
+ @mv $(DOX_DIR)/man.tmp $(DOX_MAN_DIR)/man3
+if HWLOC_DOXYGEN_BROKEN_SHORT_NAMES
+ @echo "Work-around buggy doxygen filenames..."
+ - at mv -f $(DOX_DIR)/html/termsanddefs.html $(DOX_DIR)/html/a00001.html
+ - at mv -f $(DOX_DIR)/latex/termsanddefs.tex $(DOX_DIR)/latex/a00001.tex
+ - at mv -f $(DOX_DIR)/html/tools.html $(DOX_DIR)/html/a00002.html
+ - at mv -f $(DOX_DIR)/latex/tools.tex $(DOX_DIR)/latex/a00002.tex
+ - at mv -f $(DOX_DIR)/html/envvar.html $(DOX_DIR)/html/a00003.html
+ - at mv -f $(DOX_DIR)/latex/envvar.tex $(DOX_DIR)/latex/a00003.tex
+ - at mv -f $(DOX_DIR)/html/cpu_mem_bind.html $(DOX_DIR)/html/a00004.html
+ - at mv -f $(DOX_DIR)/latex/cpu_mem_bind.tex $(DOX_DIR)/latex/a00004.tex
+ - at mv -f $(DOX_DIR)/html/iodevices.html $(DOX_DIR)/html/a00005.html
+ - at mv -f $(DOX_DIR)/latex/iodevices.tex $(DOX_DIR)/latex/a00005.tex
+ - at mv -f $(DOX_DIR)/html/multinode.html $(DOX_DIR)/html/a00006.html
+ - at mv -f $(DOX_DIR)/latex/multinode.tex $(DOX_DIR)/latex/a00006.tex
+ - at mv -f $(DOX_DIR)/html/xml.html $(DOX_DIR)/html/a00007.html
+ - at mv -f $(DOX_DIR)/latex/xml.tex $(DOX_DIR)/latex/a00007.tex
+ - at mv -f $(DOX_DIR)/html/interoperability.html $(DOX_DIR)/html/a00008.html
+ - at mv -f $(DOX_DIR)/latex/interoperability.tex $(DOX_DIR)/latex/a00008.tex
+ - at mv -f $(DOX_DIR)/html/threadsafety.html $(DOX_DIR)/html/a00009.html
+ - at mv -f $(DOX_DIR)/latex/threadsafety.tex $(DOX_DIR)/latex/a00009.tex
+ - at mv -f $(DOX_DIR)/html/embed.html $(DOX_DIR)/html/a00010.html
+ - at mv -f $(DOX_DIR)/latex/embed.tex $(DOX_DIR)/latex/a00010.tex
+ - at mv -f $(DOX_DIR)/html/faq.html $(DOX_DIR)/html/a00011.html
+ - at mv -f $(DOX_DIR)/latex/faq.tex $(DOX_DIR)/latex/a00011.tex
+endif
+endif
+
+#
+# Rules for building the PDF
+#
+
+if HWLOC_BUILD_DOXYGEN
+
+# The Doxygen config is set to generate a4 latex -- no transformation
+# is necessary.
+$(DOX_A4PDF): $(DOX_TAG)
+ cd $(DOX_LATEX_DIR); \
+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+ cp refman.tex a4-refman.tex; \
+ $(PDFLATEX) a4-refman.tex; \
+ $(MAKEINDEX) a4-refman.idx; \
+ $(PDFLATEX) a4-refman.tex; \
+ done=0; repeat=5; \
+ while test $$done = 0 -a $$repeat -gt 0; do \
+ if $(EGREP) 'Rerun (LaTeX|to get cross-references right)' a4-refman.log > /dev/null 2>&1; then \
+ $(PDFLATEX) a4-refman.tex; \
+ repeat=`expr $$repeat - 1`; \
+ else \
+ done=1; \
+ fi; \
+ done; \
+ mv a4-refman.pdf $(DOCDIR)/$(DOX_A4PDF)
+
+# The Doxygen config is set to generate a4 latex -- slightly transform
+# to make suitable for US letter.
+$(DOX_LETTERPDF): $(DOX_TAG)
+ cd $(DOX_LATEX_DIR); \
+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
+ $(SED) -e 's/a4paper/letterpaper/g' -e 's/\\usepackage{a4wide}//' refman.tex > letter-refman.tex; \
+ $(PDFLATEX) letter-refman.tex; \
+ $(MAKEINDEX) letter-refman.idx; \
+ $(PDFLATEX) letter-refman.tex; \
+ done=0; repeat=5; \
+ while test $$done = 0 -a $$repeat -gt 0; do \
+ if $(EGREP) 'Rerun (LaTeX|to get cross-references right)' letter-refman.log > /dev/null 2>&1; then \
+ $(PDFLATEX) letter-refman.tex; \
+ repeat=`expr $$repeat - 1`; \
+ else \
+ done=1; \
+ fi; \
+ done; \
+ mv letter-refman.pdf $(DOCDIR)/$(DOX_LETTERPDF)
+endif
+
+#
+# Note that we want to use our own doxygen.css file; not the one that
+# doxygen installs in the HTML directory. So manually copy it over.
+# Be a little clever: only copy the doxygen.css file over if it exists
+# in DOX_HTML_DIR (which is in the build tree). If the html tree
+# doesn't exist in the build tree, then we're using an html tree in
+# the source tree, and we don't need to copy over the doxygen.css
+# because we didn't build the html tree (e.g., the html tree came
+# pre-bundled in a tarball).
+#
+
+if HWLOC_BUILD_DOXYGEN
+all-local: $(DOX_TAG)
+ if test -d $(DOX_HTML_DIR) -a -f $(DOX_HTML_DIR)/doxygen.css; then \
+ cp -f $(srcdir)/doxygen.css $(DOX_HTML_DIR); \
+ fi
+endif
+
+#
+# Un/install the generated PDF and man pages (just like BUILD_DOXYGEN,
+# INSTALL_DOXYGEN will automatically be false if we're not building in
+# standalone mode).
+#
+
+if HWLOC_INSTALL_DOXYGEN
+dist_pdf_DATA = $(DOX_A4PDF) $(DOX_LETTERPDF)
+endif
+
+#
+# Install the HWLOC_* and hwloc_* man pages. It would be great to
+# figure out how to not have to list every installable man page here
+# in the Makefile.am... :-(
+#
+
+if HWLOC_INSTALL_DOXYGEN
+
+# We have so many man pages that if we put them all in man3_MANS, we
+# exceed the maximum command line length on some systems (during "make
+# install"). :-( So we have to split them up so that the total
+# command line length will be shorter. It seemed logical to split
+# them by small-ish groups. Put at least one group in man3_MANS so
+# that the proper $mandir/man/man3 is created, and then put the rest
+# in _DATA suffix names, because AM won't allow us to do things like
+# man3_extra_MANS = ...group...
+
+man3_MANS = \
+ $(DOX_MAN_DIR)/man3/hwlocality_api_version.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_API_VERSION.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_api_version.3
+
+man3_topologydir = $(man3dir)
+man3_topology_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_topology.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_t.3
+
+man3_setsdir = $(man3dir)
+man3_sets_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_sets.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_const_bitmap_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_const_cpuset_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_const_nodeset_t.3
+
+man3_typesdir = $(man3dir)
+man3_types_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_types.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_BRIDGE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_CACHE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_CORE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_GROUP.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_MACHINE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_MISC.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_NODE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OS_DEVICE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PU.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_PCI_DEVICE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_SOCKET.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_SYSTEM.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_TYPE_MAX.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_t.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_BRIDGE_HOST.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_BRIDGE_PCI.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_bridge_type_e.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_bridge_type_t.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OSDEV_BLOCK.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OSDEV_DMA.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OSDEV_GPU.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OSDEV_NETWORK.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_OBJ_OSDEV_OPENFABRICS.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_osdev_type_e.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_osdev_type_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_compare_types.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_compare_types_e.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_UNORDERED.3
+
+man3_objectsdir = $(man3dir)
+man3_objects_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_objects.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_memory_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_memory_s_hwloc_obj_memory_page_type_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_bridge_attr_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_cache_attr_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_group_attr_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_osdev_attr_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_u_hwloc_pcidev_attr_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_distances_s.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_info_s.3
+
+man3_creationdir = $(man3dir)
+man3_creation_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_creation.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_init.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_load.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_destroy.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_check.3
+
+man3_configurationdir = $(man3dir)
+man3_configuration_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_configuration.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_type_keep_structure.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_ignore_all_keep_structure.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IO_BRIDGES.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IO_DEVICES.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_WHOLE_IO.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_flags_e.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_flags.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_pid.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_fsroot.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_synthetic.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_xml.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_xmlbuffer.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_custom.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_set_distance_matrix.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_discovery_support.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_cpubind_support.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_membind_support.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_support.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_support.3
+
+man3_tinkerdir = $(man3dir)
+man3_tinker_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_tinker.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_export_xml.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_export_xmlbuffer.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_free_xmlbuffer.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_insert_misc_object_by_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_insert_misc_object_by_parent.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_RESTRICT_FLAG_ADAPT_IO.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_RESTRICT_FLAG_ADAPT_MISC.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_restrict_flags_e.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_restrict.3
+
+man3_informationdir = $(man3dir)
+man3_information_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_information.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_type_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_type_depth_e.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_DEPTH_MULTIPLE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_DEPTH_UNKNOWN.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_DEPTH_BRIDGE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_DEPTH_PCI_DEVICE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_TYPE_DEPTH_OS_DEVICE.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_depth_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_is_thissystem.3
+
+man3_traversaldir = $(man3dir)
+man3_traversal_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_traversal.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_by_type.3
+
+man3_conversiondir = $(man3dir)
+man3_conversion_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_conversion.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_string.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_of_string.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_type_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_attr_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_cpuset_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_get_info_by_name.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_add_info.3
+
+man3_cpubindingdir = $(man3dir)
+man3_cpubinding_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_cpubinding.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_NOMEMBIND.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_PROCESS.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_STRICT.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_CPUBIND_THREAD.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpubind_flags_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_proc_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_proc_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_thread_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_thread_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_proc_last_cpu_location.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_last_cpu_location.3
+
+man3_membindingdir = $(man3dir)
+man3_membinding_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_membinding.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_BIND.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_DEFAULT.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_FIRSTTOUCH.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_INTERLEAVE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_MIGRATE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_MIXED.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NEXTTOUCH.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_NOCPUBIND.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_PROCESS.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_REPLICATE.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_STRICT.3 \
+ $(DOX_MAN_DIR)/man3/HWLOC_MEMBIND_THREAD.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_membind_flags_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_membind_policy_t.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_proc_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_proc_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_proc_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_proc_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_area_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_set_area_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_area_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_area_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_alloc.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_free.3
+
+man3_customdir = $(man3dir)
+man3_custom_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_custom.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_custom_insert_topology.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_custom_insert_group_object_by_parent.3
+
+man3_bitmapdir = $(man3dir)
+man3_bitmap_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_bitmap.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_allbut.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_alloc.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_alloc_full.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_and.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_andnot.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_asprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_clr.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_clr_range.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_compare.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_compare_first.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_copy.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_dup.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_fill.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_first.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_foreach_begin.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_foreach_end.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_free.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_from_ith_ulong.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_from_ulong.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_intersects.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_isequal.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_isfull.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_isincluded.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_isset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_iszero.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_last.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_list_asprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_list_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_list_sscanf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_next.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_not.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_only.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_or.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_set.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_set_ith_ulong.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_set_range.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_singlify.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_sscanf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_taskset_asprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_taskset_snprintf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_taskset_sscanf.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_to_ith_ulong.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_to_ulong.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_weight.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_xor.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bitmap_zero.3
+
+man3_helper_typesdir = $(man3dir)
+man3_helper_types_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_types.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_type_or_above_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_type_or_below_depth.3
+
+man3_helper_traversal_basicdir = $(man3dir)
+man3_helper_traversal_basic_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_traversal_basic.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_root_obj.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_ancestor_obj_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_ancestor_obj_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_pu_obj_by_os_index.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_child.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_common_ancestor_obj.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_obj_is_in_subtree.3
+
+man3_helper_find_insidedir = $(man3dir)
+man3_helper_find_inside_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_find_inside.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_first_largest_obj_inside_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_largest_objs_inside_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_inside_cpuset_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_inside_cpuset_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_inside_cpuset_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_inside_cpuset_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_inside_cpuset_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_nbobjs_inside_cpuset_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_index_inside_cpuset.3
+
+man3_helper_find_coveringdir = $(man3dir)
+man3_helper_find_covering_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_find_covering.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_child_covering_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_covering_cpuset.3
+
+man3_helper_find_coveringsdir = $(man3dir)
+man3_helper_find_coverings_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_find_coverings.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_covering_cpuset_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_obj_covering_cpuset_by_type.3
+
+man3_helper_find_cachedir = $(man3dir)
+man3_helper_find_cache_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_find_cache.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_cache_covering_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_shared_cache_covering_obj.3
+
+man3_helper_traversaldir = $(man3dir)
+man3_helper_traversal_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_traversal.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_closest_objs.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_below_array_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_obj_below_by_type.3
+
+man3_helper_bindingdir = $(man3dir)
+man3_helper_binding_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_binding.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_distribute.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_distributev.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind_policy.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_alloc_membind_policy_nodeset.3
+
+man3_helper_cpusetdir = $(man3dir)
+man3_helper_cpuset_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_allowed_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_complete_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_online_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_topology_cpuset.3
+
+man3_helper_nodesetdir = $(man3dir)
+man3_helper_nodeset_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_allowed_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_complete_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_topology_get_topology_nodeset.3
+
+man3_helper_nodeset_convertdir = $(man3dir)
+man3_helper_nodeset_convert_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_helper_nodeset_convert.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_nodeset_strict.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_nodeset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_nodeset_strict.3
+
+man3_helper_distancesdir = $(man3dir)
+man3_helper_distances_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_distances.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_whole_distance_matrix_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_whole_distance_matrix_by_type.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_distance_matrix_covering_obj_by_depth.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_latency.3
+
+man3_helper_advanced_iodir = $(man3dir)
+man3_helper_advanced_io_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_advanced_io.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_non_io_ancestor_obj.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_pcidev.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_pcidev_by_busid.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_pcidev_by_busidstring.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_osdev.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_next_bridge.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_bridge_covers_pcibus.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_get_hostbridge_by_pcibus.3
+
+man3_cudadir = $(man3dir)
+man3_cuda_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_cuda.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cuda_get_device_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cuda_get_device_pci_ids.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cuda_get_device_pcidev.3 \
+ $(DOX_MAN_DIR)/man3/hwlocality_cudart.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cudart_get_device_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cudart_get_device_pci_ids.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cudart_get_device_pcidev.3
+
+man3_glibc_scheddir = $(man3dir)
+man3_glibc_sched_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_glibc_sched.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_glibc_sched_affinity.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_glibc_sched_affinity.3
+
+man3_linuxdir = $(man3dir)
+man3_linux_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_linux.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_linux_get_tid_cpubind.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_linux_parse_cpumap_file.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_linux_set_tid_cpubind.3
+
+man3_linux_libnumadir = $(man3dir)
+man3_linux_libnuma_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_linux_libnuma_bitmask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_linux_libnuma_bitmask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_from_linux_libnuma_bitmask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_bitmask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_from_linux_libnuma_nodemask.3 \
+ $(DOX_MAN_DIR)/man3/hwlocality_linux_libnuma_nodemask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_linux_libnuma_nodemask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_to_linux_libnuma_bitmask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_nodemask.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_to_linux_libnuma_nodemask.3 \
+ $(DOX_MAN_DIR)/man3/hwlocality_linux_libnuma_ulongs.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_from_linux_libnuma_ulongs.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3
+
+man3_myriexpressdir = $(man3dir)
+man3_myriexpress_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_myriexpress.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_mx_board_get_device_cpuset.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_mx_endpoint_get_device_cpuset.3
+
+man3_openfabricsdir = $(man3dir)
+man3_openfabrics_DATA = \
+ $(DOX_MAN_DIR)/man3/hwlocality_openfabrics.3 \
+ $(DOX_MAN_DIR)/man3/hwloc_ibv_get_device_cpuset.3
+
+# end of manpages(3) if HWLOC_BUILD_DOXYGEN
+endif
+
+if HWLOC_BUILD_DOXYGEN
+
+# Put in these rules to force the generation of the man pages and get
+# all the dependencies right. Additionally, this forces a
+# serialization during parallel builds (e.g., "make -j X") to ensure
+# that we don't get partial target errors (i.e., doxygen must be run
+# *first* before we can try to process/install man pages, the HTML,
+# run pdflatex, .etc.).
+
+$(man3_MANS): $(DOX_TAG)
+$(man3_topology_DATA): $(DOX_TAG)
+$(man3_sets_DATA): $(DOX_TAG)
+$(man3_types_DATA): $(DOX_TAG)
+$(man3_objects_DATA): $(DOX_TAG)
+$(man3_creation_DATA): $(DOX_TAG)
+$(man3_configuration_DATA): $(DOX_TAG)
+$(man3_tinker_DATA): $(DOX_TAG)
+$(man3_information_DATA): $(DOX_TAG)
+$(man3_traversal_DATA): $(DOX_TAG)
+$(man3_conversion_DATA): $(DOX_TAG)
+$(man3_cpubinding_DATA): $(DOX_TAG)
+$(man3_membinding_DATA): $(DOX_TAG)
+$(man3_custom_DATA): $(DOX_TAG)
+$(man3_bitmap_DATA): $(DOX_TAG)
+$(man3_helper_types_DATA): $(DOX_TAG)
+$(man3_helper_traversal_basic_DATA): $(DOX_TAG)
+$(man3_helper_find_inside_DATA): $(DOX_TAG)
+$(man3_helper_find_coverings_DATA): $(DOX_TAG)
+$(man3_helper_find_covering_DATA): $(DOX_TAG)
+$(man3_helper_find_cache_DATA): $(DOX_TAG)
+$(man3_helper_traversal_DATA): $(DOX_TAG)
+$(man3_helper_binding_DATA): $(DOX_TAG)
+$(man3_helper_cpuset_DATA): $(DOX_TAG)
+$(man3_helper_nodeset_DATA): $(DOX_TAG)
+$(man3_helper_nodeset_convert_DATA): $(DOX_TAG)
+$(man3_helper_distances_DATA): $(DOX_TAG)
+$(man3_helper_advanced_io_DATA): $(DOX_TAG)
+$(man3_cuda_DATA): $(DOX_TAG)
+$(man3_glibc_sched_DATA): $(DOX_TAG)
+$(man3_linux_DATA): $(DOX_TAG)
+$(man3_linux_libnuma_DATA): $(DOX_TAG)
+$(man3_myriexpress_DATA): $(DOX_TAG)
+$(man3_openfabrics_DATA): $(DOX_TAG)
+
+$(DOX_LETTERPDF): $(DOX_TAG)
+$(DOX_HTML_DIR): $(DOX_TAG)
+$(DOX_LATEX_DIR): $(DOX_TAG)
+$(DOX_MAN_DIR): $(DOX_TAG)
+
+# Additionally, we have to ensure that the A4 and Letter PDFs aren't
+# built at the same time during a parallel build (e.g., "make -j X").
+# So arbitrarily make the A4 PDF dependent upon the Letter PDF.
+$(DOX_A4PDF): $(DOX_TAG) $(DOX_LETTERPDF)
+endif
+
+#
+# Make sure that the documentation example works
+#
+
+if HWLOC_BUILD_TESTS
+TESTS = hwloc-hello
+check_PROGRAMS = $(TESTS)
+endif HWLOC_BUILD_TESTS
+
+hwloc_hello_LDADD = $(HWLOC_top_builddir)/src/libhwloc.la
+hwloc_hello_DEPENDENCIES = $(hwloc_hello_LDADD)
+
+#
+# Only remove the actual generated documentation files for maintainers
+#
+
+MAINTAINERCLEANFILES = $(DOX_TAG) \
+ -r \
+ $(DOX_HTML_DIR) \
+ $(DOX_MAN_DIR) \
+ $(DOX_LATEX_DIR) \
+ $(DOX_A4PDF) \
+ $(DOX_LETTERPDF)
+
+#
+# Rules for creating the top-level README file. There does not appear
+# to be an easy way to know if AC_PATH_PROG found something in
+# configure.ac (!), so put a run-time check here to see if we have
+# w3c.
+#
+# Just like BUILD_DOXYGEN, BUILD_README will automatically be false if
+# we're not building standalone.
+#
+
+if HWLOC_BUILD_README
+doc readme: all $(HWLOC_top_srcdir)/README
+$(HWLOC_top_srcdir)/README: $(DOX_HTML_DIR)
+ LC_ALL=C $(HWLOC_W3_GENERATOR) $(DOX_HTML_DIR)/index.html | $(SED) -n -e 's/^ //' -e '/^Introduction$$/,$$p' > $@
+else
+doc readme: no-build-readme
+$(HWLOC_top_srcdir)/README: no-build-readme
+
+no-build-readme:
+ @echo "ERROR: You do not have the 'w3m' or 'lynx' executables to build the README, or do not have the 'doxygen' executable to build the docs."
+ @echo "ERROR: Cannot continue."
+ @exit 1
+endif
+
+#DOCUPLOADHOST=sync.bordeaux.inria.fr
+#DOCUPLOADOPTS=
+#doc-upload: @DX_DOCDIR@/html
+# echo FIXME
+# false
+# rsync -avz --delete --chmod=ug+rwX,o+rX $(DOCUPLOADOPTS) @DX_DOCDIR@/html/ $(DOCUPLOADHOST):/web/runtime/libtopology/doc/
Deleted: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/README 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,4 +0,0 @@
-The contents of this directory have been deleted from the MPICH2 repository.
-Because we build hwloc in "embedded" mode, these directories cause problems with
-the tarballs resulting from "make dist". The directory itself is left in place
-to keep automake happy and hold this README.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen-config.cfg.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,26 @@
+# Copyright © 2010 inria. All rights reserved.
+# Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+# See big comments in doxygen.cfg about the purpose of this file.
+
+PROJECT_NUMBER = @PACKAGE_VERSION@
+
+INPUT = \
+ @top_srcdir@/doc/hwloc.doxy \
+ @top_srcdir@/include/hwloc.h \
+ @top_srcdir@/include/hwloc/helper.h \
+ @top_srcdir@/include/hwloc/bitmap.h \
+ @top_srcdir@/include/hwloc/glibc-sched.h \
+ @top_srcdir@/include/hwloc/linux.h \
+ @top_srcdir@/include/hwloc/linux-libnuma.h \
+ @top_srcdir@/include/hwloc/cuda.h \
+ @top_srcdir@/include/hwloc/cudart.h \
+ @top_srcdir@/include/hwloc/openfabrics-verbs.h \
+ @top_srcdir@/include/hwloc/myriexpress.h
+
+EXAMPLE_PATH = @top_srcdir@/doc
+
+IMAGE_PATH = @top_srcdir@/doc/images images
+
+INCLUDE_PATH = @top_srcdir@/doc
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.css
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.css (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/doxygen.css 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,108 @@
+body {
+ font-size: 13px;
+/* margin-top: 0px; */
+}
+
+div.menu {
+ text-align: center;
+ margin-top: 12px;
+ margin-bottom: 3px;
+ background: #eeeeff;
+ font-variant: small-caps;
+/* position: fixed;*/
+ width: 100%;
+}
+div.menu a {
+ text-decoration: none;
+ color: #0020a0;
+}
+div.menu hr.menu {
+ height: 4px;
+ background: #fe0;
+ border: 0px;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+
+h1 {
+ font: bold normal 2.5em sans-serif ;
+ margin: 0px;
+ color: #0020a0;
+}
+h1.sub {
+ font: bold normal 2em sans-serif ;
+ text-align: right ;
+ color: #0020a0;
+}
+h1 a {
+ color: #0020a0;
+ text-decoration: none;
+}
+
+h2 {
+ font: bold normal small-caps 1.5em sans-serif ;
+ color: #0020a0;
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+h4 {
+ font: bold normal small-caps 1em sans-serif ;
+ color: #0020a0;
+ margin-top: 8px;
+ margin-bottom: 4px;
+}
+
+h6.mirrors {
+ text-align: right;
+ margin: 0px;
+ font-size: 10px;
+}
+
+div.section {
+ background: #eeeeff;
+ padding-left: 2px;
+ padding-bottom: 2px;
+ margin-top: 12px;
+ margin-bottom: 12px;
+}
+
+p {
+ margin-top: 8px;
+ margin-bottom: 4px;
+ margin-left: 6px;
+ margin-right: 6px;
+}
+
+hr {
+ height: 8px;
+ background: #fe0;
+ border: 0px;
+ margin-top: 6px;
+ margin-bottom: 6px;
+}
+
+pre {
+ font-size: 12px;
+ background: #dddddd;
+ padding: 3px;
+ padding-left: 0px;
+ margin-left: 12px;
+}
+
+a {
+ font-weight: bold;
+}
+
+div.publis-desc {
+ text-align: right;
+ font-style: italic;
+ font-size: 12px;
+ padding-left: 15%;
+}
+
+p.updated {
+ text-align: right;
+ font-size: 10px;
+ font-style: italic;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc-hello.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc-hello.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc-hello.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,169 @@
+/* Example hwloc API program.
+ *
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ *
+ * hwloc-hello.c
+ */
+
+#include <hwloc.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+
+static void print_children(hwloc_topology_t topology, hwloc_obj_t obj,
+ int depth)
+{
+ char string[128];
+ unsigned i;
+
+ hwloc_obj_snprintf(string, sizeof(string), topology, obj, "#", 0);
+ printf("%*s%s\n", 2*depth, "", string);
+ for (i = 0; i < obj->arity; i++) {
+ print_children(topology, obj->children[i], depth + 1);
+ }
+}
+
+int main(void)
+{
+ int depth;
+ unsigned i, n;
+ unsigned long size;
+ int levels;
+ char string[128];
+ int topodepth;
+ hwloc_topology_t topology;
+ hwloc_cpuset_t cpuset;
+ hwloc_obj_t obj;
+
+ /* Allocate and initialize topology object. */
+ hwloc_topology_init(&topology);
+
+ /* ... Optionally, put detection configuration here to ignore
+ some objects types, define a synthetic topology, etc....
+
+ The default is to detect all the objects of the machine that
+ the caller is allowed to access. See Configure Topology
+ Detection. */
+
+ /* Perform the topology detection. */
+ hwloc_topology_load(topology);
+
+ /* Optionally, get some additional topology information
+ in case we need the topology depth later. */
+ topodepth = hwloc_topology_get_depth(topology);
+
+ /*****************************************************************
+ * First example:
+ * Walk the topology with an array style, from level 0 (always
+ * the system level) to the lowest level (always the proc level).
+ *****************************************************************/
+ for (depth = 0; depth < topodepth; depth++) {
+ printf("*** Objects at level %d\n", depth);
+ for (i = 0; i < hwloc_get_nbobjs_by_depth(topology, depth);
+ i++) {
+ hwloc_obj_snprintf(string, sizeof(string), topology,
+ hwloc_get_obj_by_depth(topology, depth, i),
+ "#", 0);
+ printf("Index %u: %s\n", i, string);
+ }
+ }
+
+ /*****************************************************************
+ * Second example:
+ * Walk the topology with a tree style.
+ *****************************************************************/
+ printf("*** Printing overall tree\n");
+ print_children(topology, hwloc_get_root_obj(topology), 0);
+
+ /*****************************************************************
+ * Third example:
+ * Print the number of sockets.
+ *****************************************************************/
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+ if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+ printf("*** The number of sockets is unknown\n");
+ } else {
+ printf("*** %u socket(s)\n",
+ hwloc_get_nbobjs_by_depth(topology, depth));
+ }
+
+ /*****************************************************************
+ * Fourth example:
+ * Compute the amount of cache that the first logical processor
+ * has above it.
+ *****************************************************************/
+ levels = 0;
+ size = 0;
+ for (obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, 0);
+ obj;
+ obj = obj->parent)
+ if (obj->type == HWLOC_OBJ_CACHE) {
+ levels++;
+ size += obj->attr->cache.size;
+ }
+ printf("*** Logical processor 0 has %d caches totaling %luKB\n",
+ levels, size / 1024);
+
+ /*****************************************************************
+ * Fifth example:
+ * Bind to only one thread of the last core of the machine.
+ *
+ * First find out where cores are, or else smaller sets of CPUs if
+ * the OS doesn't have the notion of a "core".
+ *****************************************************************/
+ depth = hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CORE);
+
+ /* Get last core. */
+ obj = hwloc_get_obj_by_depth(topology, depth,
+ hwloc_get_nbobjs_by_depth(topology, depth) - 1);
+ if (obj) {
+ /* Get a copy of its cpuset that we may modify. */
+ cpuset = hwloc_bitmap_dup(obj->cpuset);
+
+ /* Get only one logical processor (in case the core is
+ SMT/hyperthreaded). */
+ hwloc_bitmap_singlify(cpuset);
+
+ /* And try to bind ourself there. */
+ if (hwloc_set_cpubind(topology, cpuset, 0)) {
+ char *str;
+ int error = errno;
+ hwloc_bitmap_asprintf(&str, obj->cpuset);
+ printf("Couldn't bind to cpuset %s: %s\n", str, strerror(error));
+ free(str);
+ }
+
+ /* Free our cpuset copy */
+ hwloc_bitmap_free(cpuset);
+ }
+
+ /*****************************************************************
+ * Sixth example:
+ * Allocate some memory on the last NUMA node, bind some existing
+ * memory to the last NUMA node.
+ *****************************************************************/
+ /* Get last node. */
+ n = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE);
+ if (n) {
+ void *m;
+ size = 1024*1024;
+
+ obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, n - 1);
+ m = hwloc_alloc_membind_nodeset(topology, size, obj->nodeset,
+ HWLOC_MEMBIND_DEFAULT, 0);
+ hwloc_free(topology, m, size);
+
+ m = malloc(size);
+ hwloc_set_area_membind_nodeset(topology, m, size, obj->nodeset,
+ HWLOC_MEMBIND_DEFAULT, 0);
+ free(m);
+ }
+
+ /* Destroy topology object. */
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/hwloc.doxy 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,1988 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+/*! \mainpage Hardware Locality
+
+<h1 class="sub">Portable abstraction of hierarchical architectures for high-performance computing</h1>
+
+<hr>
+
+\htmlonly
+<div class="section" id="introduction">
+\endhtmlonly
+\section Introduction
+
+hwloc provides command line tools and a C API to obtain the
+hierarchical map of key computing elements, such as: NUMA memory
+nodes, shared caches, processor sockets, processor cores,
+processing units (logical processors or "threads")
+and even I/O devices.
+hwloc also gathers various attributes such as
+cache and memory information, and is portable across a variety of
+different operating systems and platforms.
+Additionally it may assemble the topologies of multiple machines
+into a single one so as to let applications consult the topology
+of an entire fabric or cluster at once.
+
+hwloc primarily aims at helping high-performance computing (HPC)
+applications, but is also applicable to any project seeking to exploit
+code and/or data locality on modern computing platforms.
+
+*** Note that the hwloc project represents the merger of the
+libtopology project from inria and the Portable Linux Processor
+Affinity (PLPA) sub-project from Open MPI. <em>Both of these prior
+projects are now deprecated.</em> The first hwloc release was
+essentially a "re-branding" of the libtopology code base, but with
+both a few genuinely new features and a few PLPA-like features added
+in. Prior releases of hwloc included documentation about switching
+from PLPA to hwloc; this documentation has been dropped on the
+assumption that everyone who was using PLPA has already switched to
+hwloc.
+
+hwloc supports the following operating systems:
+
+<ul>
+<li>Linux (including old kernels not having sysfs topology
+information, with knowledge of cpusets, offline CPUs, ScaleMP vSMP,
+and Kerrighed support)</li>
+<li>Solaris</li>
+<li>AIX</li>
+<li>Darwin / OS X</li>
+<li>FreeBSD and its variants, such as kFreeBSD/GNU</li>
+<li>OSF/1 (a.k.a., Tru64)</li>
+<li>HP-UX</li>
+<li>Microsoft Windows</li>
+</ul>
+
+Since it uses standard Operating System information, hwloc's support is mostly
+independant from the processor type (x86, powerpc, ...) and just relies on the
+Operating System support. The only exception to this is kFreeBSD, which does
+not support topology information, and hwloc thus uses an x86-only CPUID-based
+backend (which could be used for other OSes too).
+
+To check whether hwloc works on a particular machine, just try to build it
+and run <tt>lstopo</tt>. If some things do not look right (e.g. bogus or missing
+cache information), see \ref bugs below.
+
+hwloc only reports the number of processors on unsupported operating
+systems; no topology information is available.
+
+For development and debugging purposes, hwloc also offers the ability to
+work on "fake" topologies:
+
+<ul>
+ <li> Symmetrical tree of resources generated from a list of level arities</li>
+ <li> Remote machine simulation through the gathering of Linux sysfs topology files</li>
+</ul>
+
+hwloc can display the topology in a human-readable format, either in
+graphical mode (X11), or by exporting in one of several different
+formats, including: plain text, PDF, PNG, and FIG (see \ref cli_examples
+below). Note that some of the export formats require additional
+support libraries.
+
+hwloc offers a programming interface for manipulating topologies and
+objects. It also brings a powerful CPU bitmap API that is used to
+describe topology objects location on physical/logical processors. See
+the \ref interface below. It may also be used to binding applications
+onto certain cores or memory nodes. Several utility programs are also
+provided to ease command-line manipulation of topology objects,
+binding of processes, and so on.
+
+Perl bindings are available from Bernd Kallies
+<a href=http://search.cpan.org/~bka/Sys-Hwloc-0.10/>on CPAN:</a>
+
+Python bindings are available from Guy Streeter:
+<ul>
+<li><a href=http://people.redhat.com/streeter/>Fedora RPM and tarball</a>.</li>
+<li><a href=git://git.fedorahosted.org/python-hwloc.git>git tree</a>
+(<a href=http://git.fedorahosted.org/git/python-hwloc.git>html</a>).</li>
+</ul>
+
+\htmlonly
+</div><div class="section" id="installation">
+\endhtmlonly
+\section installation Installation
+
+hwloc (http://www.open-mpi.org/projects/hwloc/) is available under the
+BSD license. It is hosted as a sub-project of the overall Open MPI
+project (http://www.open-mpi.org/). Note that hwloc does not require
+any functionality from Open MPI -- it is a wholly separate (and much
+smaller!) project and code base. It just happens to be hosted as part
+of the overall Open MPI project.
+
+Nightly development snapshots are available on the web site.
+Additionally, the code can be directly checked out of Subversion:
+
+\code
+shell$ svn checkout http://svn.open-mpi.org/svn/hwloc/trunk hwloc-trunk
+shell$ cd hwloc-trunk
+shell$ ./autogen.sh
+\endcode
+
+Note that GNU Autoconf >=2.63, Automake >=1.10 and Libtool >=2.2.6 are
+required when building from a Subversion checkout.
+
+Installation by itself is the fairly common GNU-based process:
+
+\code
+shell$ ./configure --prefix=...
+shell$ make
+shell$ make install
+\endcode
+
+The hwloc command-line tool "lstopo" produces human-readable topology
+maps, as mentioned above. It can also export maps to the "fig" file
+format. Support for PDF, Postscript, and PNG exporting is provided if
+the "Cairo" development package can be found when hwloc is configured
+and build.
+
+The hwloc core may also benefit from the following development packages:
+<ul>
+<li>pciutils (libpci) for I/O discovery.</li>
+<li>libnuma for memory binding and migration support on Linux.</li>
+<li>libxml2 for full XML import/export support (otherwise, the
+ internal minimalistic parser will only be able to import
+ XML files that were exported by the same hwloc release).
+ See \ref xml for details.</li>
+</ul>
+
+
+\htmlonly
+</div><div class="section" id="cli_examples">
+\endhtmlonly
+\section cli_examples CLI Examples
+
+On a 4-socket 2-core machine with hyperthreading, the \c lstopo tool
+may show the following graphical output:
+
+\image html dudley.png
+\image latex dudley.png "" width=9cm
+
+Here's the equivalent output in textual form:
+
+\verbatim
+Machine (16GB)
+ Socket L#0 + L3 L#0 (4096KB)
+ L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
+ PU L#0 (P#0)
+ PU L#1 (P#8)
+ L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
+ PU L#2 (P#4)
+ PU L#3 (P#12)
+ Socket L#1 + L3 L#1 (4096KB)
+ L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
+ PU L#4 (P#1)
+ PU L#5 (P#9)
+ L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
+ PU L#6 (P#5)
+ PU L#7 (P#13)
+ Socket L#2 + L3 L#2 (4096KB)
+ L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
+ PU L#8 (P#2)
+ PU L#9 (P#10)
+ L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
+ PU L#10 (P#6)
+ PU L#11 (P#14)
+ Socket L#3 + L3 L#3 (4096KB)
+ L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
+ PU L#12 (P#3)
+ PU L#13 (P#11)
+ L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
+ PU L#14 (P#7)
+ PU L#15 (P#15)
+\endverbatim
+
+Finally, here's the equivalent output in XML. Long lines were
+artificially broken for document clarity (in the real output, each XML
+tag is on a single line), and only socket #0 is shown for brevity:
+
+\verbatim
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000ffff"
+ complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff"
+ allowed_cpuset="0x0000ffff"
+ dmi_board_vendor="Dell Computer Corporation" dmi_board_name="0RD318"
+ local_memory="16648183808">
+ <page_type size="4096" count="4064498"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001111"
+ complete_cpuset="0x00001111" online_cpuset="0x00001111"
+ allowed_cpuset="0x00001111">
+ <object type="Cache" os_level="-1" cpuset="0x00001111"
+ complete_cpuset="0x00001111" online_cpuset="0x00001111"
+ allowed_cpuset="0x00001111" cache_size="4194304" depth="3"
+ cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000101"
+ complete_cpuset="0x00000101" online_cpuset="0x00000101"
+ allowed_cpuset="0x00000101" cache_size="1048576" depth="2"
+ cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000101"
+ complete_cpuset="0x00000101" online_cpuset="0x00000101"
+ allowed_cpuset="0x00000101" cache_size="16384" depth="1"
+ cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101"
+ complete_cpuset="0x00000101" online_cpuset="0x00000101"
+ allowed_cpuset="0x00000101">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100"
+ complete_cpuset="0x00000100" online_cpuset="0x00000100"
+ allowed_cpuset="0x00000100"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00001010"
+ complete_cpuset="0x00001010" online_cpuset="0x00001010"
+ allowed_cpuset="0x00001010" cache_size="1048576" depth="2"
+ cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00001010"
+ complete_cpuset="0x00001010" online_cpuset="0x00001010"
+ allowed_cpuset="0x00001010" cache_size="16384" depth="1"
+ cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010"
+ complete_cpuset="0x00001010" online_cpuset="0x00001010"
+ allowed_cpuset="0x00001010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010"
+ complete_cpuset="0x00000010" online_cpuset="0x00000010"
+ allowed_cpuset="0x00000010"/>
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000"
+ complete_cpuset="0x00001000" online_cpuset="0x00001000"
+ allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <!-- ...other sockets listed here ... -->
+ </object>
+</topology>
+\endverbatim
+
+On a 4-socket 2-core Opteron NUMA machine, the \c lstopo tool may show
+the following graphical output:
+
+\image html hagrid.png
+\image latex hagrid.png width=\textwidth
+
+Here's the equivalent output in textual form:
+
+\verbatim
+Machine (32GB)
+ NUMANode L#0 (P#0 8190MB) + Socket L#0
+ L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
+ L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
+ NUMANode L#1 (P#1 8192MB) + Socket L#1
+ L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
+ L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
+ NUMANode L#2 (P#2 8192MB) + Socket L#2
+ L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
+ L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
+ NUMANode L#3 (P#3 8192MB) + Socket L#3
+ L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
+ L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
+\endverbatim
+
+And here's the equivalent output in XML. Similar to above, line
+breaks were added and only PU #0 is shown for brevity:
+
+\verbatim
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x000000ff"
+ complete_cpuset="0x000000ff" online_cpuset="0x000000ff"
+ allowed_cpuset="0x000000ff" nodeset="0x000000ff"
+ complete_nodeset="0x000000ff" allowed_nodeset="0x000000ff"
+ dmi_board_vendor="TYAN Computer Corp" dmi_board_name="S4881 ">
+ <page_type size="4096" count="0"/>
+ <page_type size="2097152" count="0"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000003"
+ complete_cpuset="0x00000003" online_cpuset="0x00000003"
+ allowed_cpuset="0x00000003" nodeset="0x00000001"
+ complete_nodeset="0x00000001" allowed_nodeset="0x00000001"
+ local_memory="7514177536">
+ <page_type size="4096" count="1834516"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003"
+ complete_cpuset="0x00000003" online_cpuset="0x00000003"
+ allowed_cpuset="0x00000003" nodeset="0x00000001"
+ complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001" nodeset="0x00000001"
+ complete_nodeset="0x00000001" allowed_nodeset="0x00000001"
+ cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001" nodeset="0x00000001"
+ complete_nodeset="0x00000001" allowed_nodeset="0x00000001"
+ cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0"
+ cpuset="0x00000001" complete_cpuset="0x00000001"
+ online_cpuset="0x00000001" allowed_cpuset="0x00000001"
+ nodeset="0x00000001" complete_nodeset="0x00000001"
+ allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001" nodeset="0x00000001"
+ complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <!-- ...more objects listed here ... -->
+</topology>
+\endverbatim
+
+On a 2-socket quad-core Xeon (pre-Nehalem, with 2 dual-core dies into
+each socket):
+
+\image html emmett.png
+\image latex emmett.png "" width=7cm
+
+Here's the same output in textual form:
+
+\verbatim
+Machine (16GB)
+ Socket L#0
+ L2 L#0 (4096KB)
+ L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
+ L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
+ L2 L#1 (4096KB)
+ L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
+ L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
+ Socket L#1
+ L2 L#2 (4096KB)
+ L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
+ L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
+ L2 L#3 (4096KB)
+ L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
+ L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
+\endverbatim
+
+And the same output in XML (line breaks added, only PU #0 shown):
+
+\verbatim
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x000000ff"
+ complete_cpuset="0x000000ff" online_cpuset="0x000000ff"
+ allowed_cpuset="0x000000ff" dmi_board_vendor="Dell Inc."
+ dmi_board_name="0NR282" local_memory="16865292288">
+ <page_type size="4096" count="4117503"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000055"
+ complete_cpuset="0x00000055" online_cpuset="0x00000055"
+ allowed_cpuset="0x00000055">
+ <object type="Cache" os_level="-1" cpuset="0x00000011"
+ complete_cpuset="0x00000011" online_cpuset="0x00000011"
+ allowed_cpuset="0x00000011" cache_size="4194304" depth="2"
+ cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001" cache_size="32768" depth="1"
+ cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001"
+ complete_cpuset="0x00000001" online_cpuset="0x00000001"
+ allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000010"
+ complete_cpuset="0x00000010" online_cpuset="0x00000010"
+ allowed_cpuset="0x00000010" cache_size="32768" depth="1"
+ cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000010"
+ complete_cpuset="0x00000010" online_cpuset="0x00000010"
+ allowed_cpuset="0x00000010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010"
+ complete_cpuset="0x00000010" online_cpuset="0x00000010"
+ allowed_cpuset="0x00000010"/>
+ </object>
+ </object>
+ </object>
+ <!-- ...more objects listed here ... -->
+</topology>
+\endverbatim
+
+\htmlonly
+</div><div class="section" id="interface">
+\endhtmlonly
+
+\section interface Programming Interface
+
+The basic interface is available in hwloc.h. It essentially offers
+low-level routines for advanced programmers that want to manually
+manipulate objects and follow links between them. Documentation for
+everything in hwloc.h are provided later in this document. Developers
+should also look at hwloc/helper.h (and also in this document, which
+provides good higher-level topology traversal examples).
+
+To precisely define the vocabulary used by hwloc, a \ref termsanddefs
+section is available and should probably be read first.
+
+Each hwloc object contains a cpuset describing the list of processing
+units that it contains. These bitmaps may be used for \ref
+hwlocality_cpubinding and \ref hwlocality_membinding. hwloc offers an extensive
+bitmap manipulation interface in hwloc/bitmap.h.
+
+Moreover, hwloc also comes with additional helpers for
+interoperability with several commonly used environments.
+See the \ref interoperability section for details.
+
+The complete API documentation is available in a full set of HTML
+pages, man pages, and self-contained PDF files (formatted for both
+both US letter and A4 formats) in the source tarball in
+doc/doxygen-doc/.
+
+<strong>NOTE:</strong> If you are building the documentation from a
+Subversion checkout, you will need to have Doxygen and pdflatex
+installed -- the documentation will be built during the normal "make"
+process. The documentation is installed during "make install" to
+$prefix/share/doc/hwloc/ and your systems default man page tree (under
+$prefix, of course).
+
+\subsection portability Portability
+
+As shown in \ref cli_examples, hwloc can obtain information on a wide
+variety of hardware topologies. However, some platforms and/or
+operating system versions will only report a subset of this
+information. For example, on an PPC64-based system with 32 cores
+(each with 2 hardware threads) running a default 2.6.18-based kernel
+from RHEL 5.4, hwloc is only able to glean information about NUMA
+nodes and processor units (PUs). No information about caches,
+sockets, or cores is available.
+
+Similarly, Operating System have varying support for CPU and memory binding,
+e.g. while some Operating Systems provide interfaces for all kinds of CPU and
+memory bindings, some others provide only interfaces for a limited number of
+kinds of CPU and memory binding, and some do not provide any binding interface
+at all. Hwloc's binding functions would then simply return the ENOSYS error
+(Function not implemented), meaning that the underlying Operating System
+does not provide any interface for them. \ref hwlocality_cpubinding and \ref
+hwlocality_membinding provide more information on which hwloc binding functions
+should be preferred because interfaces for them are usually available on the
+supported Operating Systems.
+
+Here's the graphical output from lstopo on this platform when
+Simultaneous Multi-Threading (SMT) is enabled:
+
+\image html ppc64-with-smt.png
+\image latex ppc64-with-smt.pdf "" width=\textwidth
+
+And here's the graphical output from lstopo on this platform when SMT is
+disabled:
+
+\image html ppc64-without-smt.png
+\image latex ppc64-without-smt.pdf "" width=\textwidth
+
+Notice that hwloc only sees half the PUs when SMT is disabled. PU #15,
+for example, seems to change location from NUMA node #0 to #1. In
+reality, no PUs "moved" -- they were simply re-numbered when hwloc
+only saw half as many. Hence, PU #15 in the SMT-disabled picture
+probably corresponds to PU #30 in the SMT-enabled picture.
+
+This same "PUs have disappeared" effect can be seen on other platforms
+-- even platforms / OSs that provide much more information than the
+above PPC64 system. This is an unfortunate side-effect of how
+operating systems report information to hwloc.
+
+Note that upgrading the Linux kernel on the same PPC64 system
+mentioned above to 2.6.34, hwloc is able to discover all the topology
+information. The following picture shows the entire topology layout
+when SMT is enabled:
+
+\image html ppc64-full-with-smt.png
+\image latex ppc64-full-with-smt.pdf "" width=\textwidth
+
+Developers using the hwloc API or XML output for portable applications
+should therefore be extremely careful to not make any assumptions
+about the structure of data that is returned. For example, per the
+above reported PPC topology, it is not safe to assume that PUs will
+always be descendants of cores.
+
+Additionally, future hardware may insert new topology elements that
+are not available in this version of hwloc. Long-lived applications
+that are meant to span multiple different hardware platforms should
+also be careful about making structure assumptions. For example,
+there may someday be an element "lower" than a PU, or perhaps a new
+element may exist between a core and a PU.
+
+\subsection interface_example API Example
+
+The following small C example (named ``hwloc-hello.c'') prints the
+topology of the machine and bring the process to the first logical processor
+of the second core of the machine.
+
+\include hwloc-hello.c
+
+hwloc provides a \c pkg-config executable to obtain relevant compiler
+and linker flags. For example, it can be used thusly to compile
+applications that utilize the hwloc library (assuming GNU Make):
+
+\verbatim
+CFLAGS += $(pkg-config --cflags hwloc)
+LDLIBS += $(pkg-config --libs hwloc)
+cc hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
+\endverbatim
+
+On a machine with 4GB of RAM and 2 processor sockets -- each socket of
+which has two processing cores -- the output from running \c
+hwloc-hello could be something like the following:
+
+\verbatim
+shell$ ./hwloc-hello
+*** Objects at level 0
+Index 0: Machine(3938MB)
+*** Objects at level 1
+Index 0: Socket#0
+Index 1: Socket#1
+*** Objects at level 2
+Index 0: Core#0
+Index 1: Core#1
+Index 2: Core#3
+Index 3: Core#2
+*** Objects at level 3
+Index 0: PU#0
+Index 1: PU#1
+Index 2: PU#2
+Index 3: PU#3
+*** Printing overall tree
+Machine(3938MB)
+ Socket#0
+ Core#0
+ PU#0
+ Core#1
+ PU#1
+ Socket#1
+ Core#3
+ PU#2
+ Core#2
+ PU#3
+*** 2 socket(s)
+shell$
+\endverbatim
+
+\htmlonly
+</div><div class="section" id="bugs">
+\endhtmlonly
+\section bugs Questions and Bugs
+
+Questions should be sent to the devel mailing
+list (http://www.open-mpi.org/community/lists/hwloc.php).
+Bug reports should be reported in the tracker
+(https://svn.open-mpi.org/trac/hwloc/).
+
+If hwloc discovers an incorrect topology for your machine, the very
+first thing you should check is to ensure that you have the most
+recent updates installed for your operating system. Indeed, most of
+hwloc topology discovery relies on hardware information retrieved
+through the operation system (e.g., via the /sys virtual filesystem of
+the Linux kernel). If upgrading your OS or Linux kernel does not
+solve your problem, you may also want to ensure that you are running
+the most recent version of the BIOS for your machine.
+
+If those things fail, contact us on the mailing list for additional
+help. Please attach the output of lstopo after having given the
+--enable-debug option to ./configure and rebuilt completely, to get
+debugging output. Also attach the <tt>/proc</tt> + <tt>/sys</tt> tarball
+generated by the installed script <tt>hwloc-gather-topology.sh</tt>
+when submitting problems about Linux, or send the
+output of <tt>kstat cpu_info</tt> in the Solaris case, or the output of
+<tt>sysctl hw</tt> in the Darwin or BSD cases.
+
+\htmlonly
+</div><div class="section" id="credits">
+\endhtmlonly
+\section history History / Credits
+
+hwloc is the evolution and merger of the libtopology
+(http://runtime.bordeaux.inria.fr/libtopology/) project and the Portable
+Linux Processor Affinity (PLPA) (http://www.open-mpi.org/projects/plpa/)
+project. Because of functional and ideological overlap, these two code bases
+and ideas were merged and released under the name "hwloc" as an Open MPI
+sub-project.
+
+libtopology was initially developed by the inria Runtime Team-Project
+(http://runtime.bordeaux.inria.fr/) (headed by Raymond Namyst
+(http://dept-info.labri.fr/~namyst/). PLPA was initially developed by
+the Open MPI development team as a sub-project. Both are now deprecated
+in favor of hwloc, which is distributed as an Open MPI sub-project.
+
+\htmlonly
+</div><div class="section" id="further_reading">
+\endhtmlonly
+\section further_read Further Reading
+
+The documentation chapters include
+
+<ul>
+<li> \ref termsanddefs
+<li> \ref tools
+<li> \ref envvar
+<li> \ref cpu_mem_bind
+<li> \ref iodevices
+<li> \ref multinode
+<li> \ref xml
+<li> \ref interoperability
+<li> \ref threadsafety
+<li> \ref embed
+<li> \ref faq
+</ul>
+
+Make sure to have had a look at those too!
+
+\htmlonly
+</div>
+\endhtmlonly
+
+
+
+\page termsanddefs Terms and Definitions
+
+<dl>
+
+<dt>Object</dt>
+ <dd>Interesting kind of part of the system, such as a Core, a Cache,
+ a Memory node, etc. The different types detected by hwloc are
+ detailed in the ::hwloc_obj_type_t enumeration.
+
+ They are topologically sorted by CPU set into a tree.
+ </dd>
+
+<dt>CPU set</dt>
+ <dd>The set of logical processors (or processing units) logically included in an object
+ (if it makes sense). They are always expressed using physical logical
+ processor numbers (as announced by the OS). They are implemented as the
+ ::hwloc_bitmap_t opaque structure. hwloc CPU sets are just masks, they
+ do \em not have any relation with an operating system actual binding notion like
+ Linux' cpusets.</dd>
+
+<dt>Node set</dt>
+ <dd>The set of NUMA memory nodes logically included in an object
+ (if it makes sense). They are always expressed using physical node
+ numbers (as announced by the OS). They are implemented with the
+ ::hwloc_bitmap_t opaque structure.
+ as bitmaps.</dd>
+
+<dt>Bitmap</dt>
+ <dd>A possibly-infinite set of bits used for describing sets of objects
+ such as CPUs (CPU sets) or memory nodes (Node sets). They are implemented
+ with the ::hwloc_bitmap_t opaque structure.
+</dd>
+
+<dt>Parent object</dt>
+ <dd>The object logically containing the current object, for example
+ because its CPU set includes the CPU set of the current object.</dd>
+
+<dt>Ancestor object</dt>
+ <dd>The parent object, or its own parent object, and so on.</dd>
+
+<dt>Children object(s)</dt>
+ <dd>The object (or objects) contained in the current object because
+ their CPU set is included in the CPU set of the current object.</dd>
+
+<dt>Arity</dt>
+ <dd>The number of children of an object.</dd>
+
+<dt>Sibling objects</dt>
+ <dd>Objects which have the same parent. They usually have the same type
+ (and hence are cousins, as well), but they may not if the topology
+ is asymmetric.</dd>
+
+<dt>Sibling rank</dt>
+ <dd>Index to uniquely identify objects which have
+ the same parent, and is always in the range [0, parent_arity).</dd>
+
+<dt>Cousin objects</dt>
+ <dd>Objects of the same type (and depth) as the current object,
+ even if they do not have the same parent.</dd>
+
+<dt>Level</dt>
+ <dd>Set of objects of the same type and depth. All these objects
+ are cousins.</dd>
+
+<dt>Depth</dt>
+ <dd>Nesting level in the object tree, starting from the root object.
+ If the topology is symmetric, the depth of a child is equal to the
+ parent depth plus one, and an object depth is also equal to the number
+ of parent/child links between the root object and the given object.
+ If the topology is asymmetric, the difference between some parent
+ and child depths may be larger than one when some intermediate levels
+ (for instance caches) are missing in only some parts of the machine.
+ </dd>
+
+<dt>OS or physical index</dt>
+ <dd>The index that the operating system (OS) uses to identify the
+ object. This may be completely arbitrary, non-unique, non-contiguous, not
+ representative of logical proximity, and may depend on the BIOS
+ configuration. That is why hwloc almost never uses them, only in the default
+ lstopo output (<tt>P#x</tt>) and cpuset masks.</dd>
+
+<dt>Logical index</dt>
+ <dd>Index to uniquely identify objects of the same type and depth,
+ automatically computed by hwloc according to the topology. It expresses
+ logical proximity in a generic way, i.e. objects which have adjacent logical
+ indexes are adjacent in the topology. That is why hwloc almost always uses
+ it in its API, since it expresses logical proximity. They can be shown (as
+ <tt>L#x</tt>) by <tt>lstopo</tt> thanks to the <tt>-l</tt> option. This index
+ is always linear and in
+ the range [0, num_objs_same_type_same_level-1]. Think of it as ``cousin
+ rank.'' The ordering is based on topology first, and then on OS CPU numbers,
+ so it is stable across everything except firmware CPU renumbering.
+ "Logical index" should not be confused with "Logical processor". A "Logical
+ processor" (which in hwloc we rather call "processing unit" to avoid the
+ confusion) has both a physical index (as chosen arbitrarily by BIOS/OS) and a logical
+ index (as computed according to logical proximity by hwloc).
+ </dd>
+
+<dt>Logical processor</dt>
+<dt>Processing unit</dt>
+ <dd>The smallest processing element that can be represented by a hwloc
+ object. It may be a single-core processor, a core of a multicore
+ processor, or a single thread in SMT processor.
+ "Logical processor" should not be confused with "Logical index of a
+ processor". "Logical processor" is only one of the names which can be found in
+ various documentations to designate a processing unit.
+ </dd>
+
+</dl>
+
+The following diagram can help to understand the vocabulary of the relationships
+by showing the example of a machine with two dual core sockets (with no
+hardware threads); thus, a topology with 4 levels. Each box with rounded corner
+corresponds to one hwloc_obj_t, containing the values of the different integer
+fields (depth, logical_index, etc.), and arrows show to which other hwloc_obj_t
+pointers point to (first_child, parent, etc.). The L2 cache of the last core is intentionally missing to show how asymmetric topologies are handled.
+
+\image html diagram.png
+\image latex diagram.eps width=\textwidth
+
+It should be noted that for PU objects, the logical index -- as
+computed linearly by hwloc -- is not the same as the OS index.
+
+See also \ref faq_asymmetric for more details.
+
+
+\page tools Command-Line Tools
+
+hwloc comes with an extensive C programming interface and several
+command line utilities. Each of them is fully documented in its own
+manual page; the following is a summary of the available command line
+tools.
+
+\section cli_lstopo lstopo
+
+lstopo (also known as hwloc-info and hwloc-ls) displays the
+hierarchical topology map of the current system. The output may be
+graphical or textual, and can also be exported to numerous file
+formats such as PDF, PNG, XML, and others.
+
+This command can also display the processes currently bound to a part
+of the machine (via the --ps option).
+
+Note that lstopo can read XML files and/or alternate chroot
+filesystems and display topological maps representing those systems
+(e.g., use lstopo to output an XML file on one system, and then use
+lstopo to read in that XML file and display it on a different system).
+
+\section cli_hwloc_bind hwloc-bind
+
+hwloc-bind binds processes to specific hardware objects through a
+flexible syntax. A simple example is binding an executable to
+specific cores (or sockets or bitmaps or ...). The hwloc-bind(1) man
+page provides much more detail on what is possible.
+
+hwloc-bind can also be used to retrieve the current process' binding.
+
+\section cli_hwloc_calc hwloc-calc
+
+hwloc-calc is generally used to create bitmap strings to pass to
+hwloc-bind. Although hwloc-bind accepts many forms of object
+specification (i.e., bitmap strings are one of many forms that
+hwloc-bind understands), they can be useful, compact representations
+in shell scripts, for example.
+
+hwloc-calc generates bitmap strings from given hardware objects with
+the ability to aggregate them, intersect them, and more. hwloc-calc
+generally uses the same syntax than hwloc-bind, but multiple instances
+may be composed to generate complex combinations.
+
+Note that hwloc-calc can also generate lists of logical processors or
+NUMA nodes that are convenient to pass to some external tools such as
+taskset or numactl.
+
+\section cli_hwloc_distrib hwloc-distrib
+
+hwloc-distrib generates a set of bitmap strings that are uniformly
+distributed across the machine for the given number of processes.
+These strings may be used with hwloc-bind to run processes to maximize
+their memory bandwidth by properly distributing them across the
+machine.
+
+\section cli_hwloc_ps hwloc-ps
+
+hwloc-ps is a tool to display the bindings of processes that are
+currently running on the local machine. By default, hwloc-ps only
+lists processes that are bound; unbound process (and Linux kernel
+threads) are not displayed.
+
+\section cli_hwloc_gather hwloc-gather-topology
+
+hwloc-gather-topology is a Linux-specific tool that saves the
+relevant topology files of the current machine into a tarball
+(and the corresponding lstopo output). These files may be used
+later (possibly offline) for simulating or debugging a machine
+without actually running on it.
+
+\section cli_hwloc_distances hwloc-distances
+
+hwloc-distances displays all distance matrices attached to
+the topology. Note that lstopo may also display distance
+matrices in its verbose textual output. However lstopo only
+prints matrices that cover the entire topology while
+hwloc-distances also displays matrices that ignore part
+of the topology.
+
+\section cli_hwloc_assembler hwloc-assembler
+
+hwloc-assembler combines several XML topology files into a single
+multi-node XML topology.
+It may then be used later as input with hwloc_topology_set_xml()
+or with the HWLOC_XMLFILE environment variable.
+See \ref multinode for details.
+
+\section cli_hwloc_assembler_remote hwloc-assembler-remote
+
+hwloc-assembler-remote is a frontend to hwloc-assembler.
+It takes care of contacting the given list of remote hosts
+(through ssh) and retrieving their topologies as XML before
+assembling them with hwloc-assembler.
+
+
+
+
+\page envvar Environment Variables
+
+The behavior of the hwloc library and tools may be tuned thanks to the
+following environment variables.
+
+<dl>
+
+<dt>HWLOC_XMLFILE=/path/to/file.xml</dt>
+ <dd>enforces the discovery from the given XML file as if
+ hwloc_topology_set_xml() had been called.
+ This file may have been generated earlier with lstopo file.xml.
+ For convenience, this backend provides empty binding hooks which just
+ return success. To have hwloc still actually call OS-specific hooks,
+ HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that
+ the loaded file is really the underlying system.
+ See also \ref xml.
+ </dd>
+
+<dt>HWLOC_XML_VERBOSE=1</dt>
+<dt>HWLOC_SYNTHETIC_VERBOSE=1</dt>
+ <dd>enable verbose messages in the XML or synthetic topology backends.
+ hwloc XML backends (see \ref xml) can emit some error messages to
+ the error output stream.
+ Enabling these verbose messages within hwloc can be useful for
+ understanding failures to parse input XML topologies.
+ Similarly, enabling verbose messages in the synthetic topology
+ backend can help understand why the description string is invalid.
+ </dd>
+
+<dt>HWLOC_FSROOT=/path/to/linux/filesystem-root/</dt>
+ <dd>switches to reading the topology from the specified
+ Linux filesystem root instead of the main file-system root, as if
+ hwloc_topology_set_fsroot() had been called.
+ Not using the main file-system root causes hwloc_topology_is_thissystem()
+ to return 0.
+ For convenience, this backend provides empty binding hooks which just
+ return success. To have hwloc still actually call OS-specific hooks,
+ HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that
+ the loaded file is really the underlying system.
+ </dd>
+
+<dt>HWLOC_THISSYSTEM=1</dt>
+ <dd>enforces the return value of hwloc_topology_is_thissystem().
+ It means that it makes hwloc assume that the selected backend provides the
+ topology for the system on which we are running, even if it is not the
+ OS-specific backend but the XML backend for instance.
+ This means making the binding functions actually call the OS-specific
+ system calls and really do binding, while the XML backend would otherwise
+ provide empty hooks just returning success.
+ This can be used for efficiency reasons to first detect the topology once,
+ save it to an XML file, and quickly reload it later through the XML
+ backend, but still having binding functions actually do bind.
+ </dd>
+
+<dt>HWLOC_HIDE_ERRORS=0</dt>
+ <dd>enables or disables verbose reporting of errors.
+ The hwloc library may issue warnings to the standard error stream
+ when it detects a problem during topology discovery, for instance
+ if the operating system (or user) gives contradictory topology
+ information. Setting this environment variable to 1 removes the
+ actual displaying of these error messages.
+ </dd>
+
+<dt>HWLOC_GROUPING=1</dt>
+ <dd>enables or disables objects grouping based on distances.
+ By default, hwloc uses distance matrices between objects (either read
+ from the OS or given by the user) to find groups of close objects.
+ These groups are described by adding intermediate Group objects in the topology.
+ Setting this environment variable to 0 will disable this grouping.
+ This variable supersedes the obsolete HWLOC_IGNORE_DISTANCES variable.
+ </dd>
+
+<dt>HWLOC_GROUPING_ACCURACY=0.05</dt>
+ <dd>relaxes distance comparison during grouping.
+ By default, objects may be grouped if their distances form a minimal
+ distance graph. When setting this variable to 0.02, these distances
+ do not have to be strictly equal anymore, they may just be equal
+ with a 2% error.
+ If set to <tt>try</tt> instead of a numerical value, hwloc will try
+ to group with perfect accuracy (0, the default), then with 0.01, 0.02,
+ 0.05 and finally 0.1.</dd>
+
+<dt>HWLOC_GROUPING_VERBOSE=0</dt>
+ <dd>enables or disables some verbose messages during grouping.
+ If this variable is set to 1, some debug messages will be displayed
+ during distance-based grouping of objects even if debug was not specific
+ at configure time.
+ This is useful when trying to find an interesting distance grouping
+ accuracy.</dd>
+
+<dt>HWLOC_<type>_DISTANCES=index,...:X*Y</dt>
+<dt>HWLOC_<type>_DISTANCES=begin-end:X*Y*Z</dt>
+<dt>HWLOC_<type>_DISTANCES=index,...:distance,...</dt>
+ <dd>sets a distance matrix for objects of the given type and physical indexes.
+ The type should be given as its case-sensitive stringified value
+ (e.g. <tt>NUMANode</tt>, <tt>Socket</tt>, <tt>Cache</tt>, <tt>Core</tt>, <tt>PU</tt>).
+ If another distance matrix already exists for the given type,
+ either because the user specified it or because the OS offers it,
+ it will be replaced by the given one.
+
+ If the variable value is <tt>none</tt>, the existing distance matrix for
+ the given type is removed.
+ Otherwise, the variable value first consists in a list of physical indexes
+ that may be specified as a comma-separated list (e.g. <tt>0,2,4,1,3,5</tt>)
+ or as a range of consecutive indexes (<tt>0-5</tt>).
+ It is followed by a colon and the corresponding distances:
+ <ul>
+ <li>If <tt>X*Y</tt> is given, X groups of Y close objects are specified.</li>
+ <li>If <tt>X*Y*Z</tt> is given, X groups of Y groups of Z close objects are specified.</li>
+ <li>Otherwise, the comma-separated list of distances should be given.
+ If N objects are considered, the i*N+j-th value gives the
+ distance from the i-th object to the j-th object.</li>
+ </ul>
+
+ Note that distances are ignored in multi-node topologies.
+ </dd>
+
+<dt>HWLOC_PCI_<domain>_<bus>_LOCALCPUS=<cpuset></dt>
+ <dd>changes the locality of I/O devices behind the specified PCI hostbridge.
+ If no I/O locality information is available or if the BIOS reports
+ incorrect information, it is possible to move a I/O device tree (the
+ entire set of objects behind a host bridge) near a custom set of
+ processors.
+ <tt>domain</tt> and <tt>bus</tt> are the PCI domain and primary bus
+ of the corresponding host bridge.
+ </dd>
+
+</dl>
+
+<!-- not documented:
+ HWLOC_FORCE_FSROOT/XMLFILE/THISSYSTEM
+ force backend anyway (while variables without FORCE in their name do not
+ force the backend if the default was already changed)
+ HWLOC_LINUX_USE_CPUINFO
+ uses /proc/cpuinfo instead of sysfs.
+ may be useful in the doc for debugging?
+ HWLOC_DEBUG_CHECK
+ run sanity checks during discovery, as if --enable-debug was passed but
+ without debug messages
+ may be useful in the doc for debugging?
+ add a HWLOC_USE_x86_BACKEND?
+ to force testing of the x86 backend
+-->
+
+
+
+
+\page cpu_mem_bind CPU and Memory Binding Overview
+
+Some operating systems do not systematically provide separate
+functions for CPU and memory binding. This means that CPU binding
+functions may have have effects on the memory binding policy.
+Likewise, changing the memory binding policy may change the CPU
+binding of the current thread. This is often not a problem for
+applications, so by default hwloc will make use of these functions
+when they provide better binding support.
+
+If the application does not want the CPU binding to change when
+changing the memory policy, it needs to use the
+HWLOC_MEMBIND_NOCPUBIND flag to prevent hwloc from using OS functions
+which would change the CPU binding. Additionally,
+HWLOC_CPUBIND_NOMEMBIND can be passed to CPU binding function to
+prevent hwloc from using OS functions would change the memory binding
+policy. Of course, using these flags will reduce hwloc's overall support for
+binding, so their use is discouraged.
+
+One can avoid using these flags but still closely control both memory
+and CPU binding by allocating memory, touching each page in the
+allocated memory, and then changing the CPU binding. The
+already-really-allocated memory will then be "locked" to physical
+memory and will not be migrated. Thus, even if the memory binding
+policy gets changed by the CPU binding order, the already-allocated
+memory will not change with it. When binding and allocating further
+memory, the CPU binding should be performed again in case the memory
+binding altered the previously-selected CPU binding.
+
+Not all operating systems support the notion of a "current" memory
+binding policy for the current process, but such operating systems often still
+provide a way to allocate data on a given node set. Conversely, some
+operating systems support the notion of a "current" memory binding policy and do
+not permit allocating data on a specific node set without changing the
+current policy and allocate the data. To provide the most powerful coverage of
+these facilities, hwloc provides:
+
+<ul>
+<li>functions that set/get the current memory binding policies (if supported):
+hwloc_set/get_membind_*() and hwloc_set/get_proc_membind()
+<li>functions that allocate memory bound to specific node set without changing
+the current memory binding policy (if supported): hwloc_alloc_membind() and
+hwloc_alloc_membind_nodeset().
+<li>helpers which, if needed, change the current memory binding policy of the
+process in order to obtain memory binding: hwloc_alloc_membind_policy() and
+hwloc_alloc_membind_policy_nodeset()
+</ul>
+
+An application can thus use the two first sets of functions if it wants to
+manage separately the global process binding policy and directed allocation,
+or use the third set of functions if it does not care about the process memory
+binding policy.
+
+See \ref hwlocality_cpubinding and \ref hwlocality_membinding for
+hwloc's API functions regarding CPU and memory binding, respectively.
+
+
+
+\page iodevices I/O Devices
+
+hwloc usually manipulates processing units and memory but it can actually
+discover I/O devices and report their locality as well.
+This is useful for placing I/O intensive applications on cores near the
+I/O devices they use.
+
+\section iodevices_enabling Enabling and requirements
+
+I/O discovery is disabled by default (except in lstopo) so as not to
+break legacy application by adding unexpected I/O objects to the topology.
+It can be enabled by passing flags such as <tt>::HWLOC_TOPOLOGY_FLAG_IO_DEVICES</tt>
+to hwloc_topology_set_flags() before loading the topology.
+
+Note that I/O discovery requires significant help from the operating system.
+The pciutils library is needed to detect PCI devices and bridges,
+and the actual locality of these devices is only currently detected
+on Linux. Also, some operating systems require privileges for probing PCI
+devices, see \ref faq_privileged for details.
+
+\section iodevices_hierarchy I/O object hierarchy
+
+When I/O discovery is enabled and supported, some additional objects
+(types <tt>::HWLOC_OBJ_BRIDGE</tt>, <tt>::HWLOC_OBJ_PCI_DEVICE</tt> and
+<tt>::HWLOC_OBJ_OS_DEVICE</tt>)
+are added to the topology as a child of the object they are close to.
+For instance, if a I/O Hub is connected to a socket, the corresponding
+hwloc bridge object (and its PCI bridges and devices children) is inserted
+as a child of the corresponding hwloc socket object.
+
+These new objects have neither CPU sets nor node sets (NULL pointers) because
+they are not directly usable by the user applications.
+Moreover I/O hierarchies may be highly complex (asymmetric trees of bridges).
+So I/O objects are placed in specific levels with custom depths.
+Their lists may still be traversed with regular helpers such as
+hwloc_get_next_obj_by_type().
+However, hwloc offers some dedicated helpers such as hwloc_get_next_pcidev()
+and hwloc_get_next_osdev() for convenience (see \ref hwlocality_advanced_io).
+
+An I/O hierarchy is organized as follows:
+A hostbridge object ( <tt>::HWLOC_OBJ_BRIDGE</tt> object with upstream
+type <em>Host</em> and downstream type <em>PCI</em>) is attached below
+a regular object (usually the entire machine or a NUMA node).
+There may be multiple hostbridges in the machine, attached to
+different places, but all I/O devices are below one of them.
+Each hostbridge contains one or several children, either other bridges
+(usually PCI to PCI) or PCI devices (<tt>::HWLOC_OBJ_PCI_DEVICE</tt>).
+The number of bridges between the hostbridge and a PCI device depends
+on the machine and on the topology flags.
+
+\section iodevices_osdev Software devices
+
+Although each PCI device is uniquely identified by its bus ID
+(e.g. 0000:01:02.3), the application can hardly find out which
+PCI device is actually used when manipulating software handle
+(such as the <em>eth0</em> network interface or the <em>mlx4_0</em>
+OpenFabrics HCA).
+Therefore hwloc tries to add software devices (<tt>::HWLOC_OBJ_OS_DEVICE</tt>)
+below their PCI objects.
+These objects can be identified by their usual operating system-wide
+names, e.g. <em>eth0</em> or <em>mlx4_0</em>.
+However, this ability is currently only available on Linux for some
+classes of devices.
+It should especially be noted that proprietary graphics driver
+currently do not create any interesting software device for GPUs,
+they should therefore be manipulated as PCI device objects.
+On the contrary some PCI devices may contain multiple software device
+(see the example below).
+
+See also \ref interoperability for managing these devices without
+considering them as hwloc objects.
+
+\section iodevices_consult Consulting I/O devices and binding
+
+I/O devices may be consulted by traversing the topology manually
+(with usual routines such as hwloc_get_obj_by_type()) or by using
+dedicated helpers (such as hwloc_get_pcidev_by_busid(), see
+\ref hwlocality_advanced_io).
+
+I/O objects do not actually contain any locality information because
+their CPU sets and node sets are NULL.
+Their locality must be retrieved by walking up the object tree
+(through the <tt>parent</tt> link) until an non-I/O object is found
+(see hwloc_get_non_io_ancestor_obj()).
+This regular object should have non-NULL CPU sets and node sets
+which describe the processing units and memory that are immediately
+close to the I/O device.
+For instance the path from a OS device to its locality may go
+across a PCI device parent, one or several bridges, up to a
+a NUMA node with the same locality.
+
+Command-line tools are also aware of I/O devices.
+lstopo displays the interesting ones by default
+(passing <tt>--no-io</tt> disables it).
+
+hwloc-calc and hwloc-bind may manipulate I/O devices specified
+by PCI bus ID or by OS device name.
+For instance, <tt>pci=0000:02:03.0</tt> (respectively <tt>os=eth0</tt>)
+is replaced by the set of CPUs that are close to this PCI device
+(respectively software device).
+This enables easy binding of I/O-intensive applications near the
+device they use.
+
+\section iodevices_examples Examples
+
+The following picture shows a dual-socket dual-core host whose
+PCI bus is connected to the first socket and NUMA node.
+
+\image html devel09-pci.png
+\image latex devel09-pci.pdf "" width=\textwidth
+
+Six interesting PCI devices were discovered.
+However hwloc found some corresponding software devices
+(<em>eth0</em>, <em>eth1</em>, <em>sda</em>, <em>mlx4_0</em>,
+<em>ib0</em>, and <em>ib1</em>) for only four of these physical
+devices.
+The other ones (<em>PCI 102b:0532</em> and <em>PCI 8086:3a20</em>)
+are an unused IDE controller (no disk attached)
+and a graphic card (no corresponding software device reported
+to the user by the operating system).
+
+On the contrary, it should be noted three different software
+devices were found for the last PCI device (<em>PCI 15b3:634a</em>).
+Indeed this OpenFabrics HCA PCI device object contains one
+one OpenFabrics software device (<em>mlx4_0</em>) and two virtual
+network interface software devices (<em>ib0</em> and <em>ib1</em>).
+
+PCI link speed is also reported for some bridges and devices
+because lstopo was privileged when it discovered the topology.
+
+
+Here is the corresponding textual output:
+
+\verbatim
+Machine (24GB)
+ NUMANode L#0 (P#0 12GB)
+ Socket L#0 + L3 L#0 (8192KB)
+ L2 L#0 (256KB) + L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
+ L2 L#1 (256KB) + L1 L#1 (32KB) + Core L#1 + PU L#1 (P#2)
+ HostBridge
+ PCIBridge
+ PCI 14e4:163b
+ Net "eth0"
+ PCI 14e4:163b
+ Net "eth1"
+ PCIBridge
+ PCI 1000:0060
+ Block "sda"
+ PCIBridge
+ PCI 102b:0532
+ PCI 8086:3a20
+ PCI 15b3:634a
+ Net "ib0"
+ Net "ib1"
+ Net "mlx4_0"
+ NUMANode L#1 (P#1 12GB) + Socket L#1 + L3 L#1 (8192KB)
+ L2 L#2 (256KB) + L1 L#2 (32KB) + Core L#2 + PU L#2 (P#1)
+ L2 L#3 (256KB) + L1 L#3 (32KB) + Core L#3 + PU L#3 (P#3)
+\endverbatim
+
+
+
+
+\page multinode Multi-node Topologies
+
+hwloc is usually used for consulting and manipulating single machine
+topologies. This includes large systems as long as a single instance of
+the operating system manages the entire system. However it is sometimes
+desirable to have multiple independent hosts inside the same topology,
+for instance when applying algorithms to an entire cluster topology.
+hwloc therefore offers the ability to agregate multiple host topologies
+into a single global one.
+
+\section multinode_cpusets Multi-node Objects Specifities
+
+A multi-node topology contains several single-node topologies.
+Those are assembled by making their own root objects (usually
+Machine object) children of higher objects.
+These higher objects include at least the root of the global
+topology (usually a System object).
+Some intermediate objects may also exists, for instance to
+represent switches in a large fabric.
+
+There are actually three possible types of objects that have different
+properties with respect to cpusets, nodesets and binding.
+Indeed those cpusets and nodesets were designed for execution and memory
+binding within a single operating system. Binding on another system or
+across several different systems would be meaningless.
+
+<dl>
+<dt>Local objects</dt>
+<dd>
+ Any object that corresponds to the local machine may be manipulated
+ as usual.
+ Obviously, if the multi-node topology does not contain the local
+ machine topology, no such local object exists.
+</dd>
+<dt>Objects from other nodes</dt>
+<dd>
+ Any object that comes from inside another node is represented as
+ usual but its cpusets and nodesets should not be used for binding
+ since binding on another system makes no sense.
+</dd>
+<dt>Objects above single nodes</dt>
+<dd>
+ Any object above single-node topologies does not have any cpuset or
+ nodeset pointer because binding across multiple systems makes no sense.
+ This includes the glocal root object of a multi-node topology and possibly
+ some intermediate objects between this global root and the local root
+ of single-node topologies.
+</dd>
+</dl>
+
+It is important to keep this in mind before binding using multi-node
+topologies.
+To make sure binding on an object is possible, one should first check
+that its cpuset or nodeset pointer is not NULL.
+Then, one should check whether the object is indeed local.
+
+To find out which machine a given object correspond too, one may look
+at the info attributes of the parent Machine object. The <tt>HostName</tt>
+info is usually available in Machine objects, it may be retrieved with the
+following code:
+<pre>
+ hwloc_obj_t machine_obj;
+ obj = hwloc_get_ancestor_obj_by_type(topology, HWLOC_OBJ_MACHINE, obj);
+ if (machine_obj)
+ return hwloc_obj_get_info_by_name(machine_obj, "HostName");
+ else
+ return NULL;
+</pre>
+The hwloc assembler scripts (see below) also add <tt>AssemblerName</tt>
+and <tt>AssemblerIndex</tt> info attributes to the Machine objects to
+identify the corresponding host name and index during assembly.
+
+\section multinode_tools Assembling topologies with command-line tools
+
+One way to manipulate multinode topologies is to retrieve
+other nodes' topologies as XML files and combine them as a
+global XML topology.
+It may then be loaded with hwloc_topology_set_xml() or with
+the HWLOC_XMLFILE environment variable.
+
+The hwloc-assembler and hwloc-assembler-remote utilities
+offer the ability to combine XML topologies or remote
+nodes' topologies (see \ref tools).
+
+\section multinode_interface Assembling topologies with the programming interface
+
+The hwloc programming interface offers the ability to build multinode
+topologies using the <em>custom</em> interface.
+A new multinode topology has to be initialized with hwloc_topology_init()
+and then set to custom with hwloc_topology_set_custom().
+Topologies and objects mat then be assembled.
+Later, the custom topology is finalized as usual with hwloc_topology_load().
+
+A custom topology starts with a single root object of type System.
+It may be modified by inserting a new child object with
+hwloc_custom_insert_group_object_by_parent() or by duplicating
+another topology with hwloc_custom_insert_topology().
+Both of these operations require to specify the parent object
+in the custom topology where the insertion will take place.
+This parent may be either the root
+(returned by hwloc_get_root_obj())
+or an already-inserted object
+(returned by hwloc_custom_insert_group_object_by_parent()).
+
+Ideally, any existing object in the custom topology could be the parent.
+However, special care should be taken when traversing the topology
+to find such an object because most links between objects
+(children, siblings, cousins) are not setup until hwloc_topology_load()
+is invoked.
+
+\section multinode_example Example of assembly with the programming interface
+
+If the topologies of two hosts have been previously gathered in XML
+files <tt>host1.xml</tt> and <tt>host2.xml</tt>, the global topology
+may be assembled with the following code.
+
+<pre>
+hwloc_topology_t host1, host2, global;
+
+/* initialize global topology */
+hwloc_topology_init(&global);
+hwloc_topology_set_custom(global);
+
+/* insert host1 entire topology below the global topology root */
+hwloc_topology_init(&host1);
+hwloc_topology_load(host1);
+hwloc_custom_insert_topology(global, hwloc_get_root_obj(global),
+ host1, NULL);
+hwloc_topology_destroy(host1);
+
+/* insert host2 entire topology below the global topology root */
+hwloc_topology_init(&host2);
+hwloc_topology_load(host2);
+hwloc_custom_insert_topology(global, hwloc_get_root_obj(global),
+ host2, NULL);
+hwloc_topology_destroy(host2);
+
+/* load and play with the global topology */
+hwloc_topology_load(global);
+...
+</pre>
+
+If a intermediate object such as a switch should be inserted
+above one of the host topologies:
+<pre>
+...
+/* insert a switch object below the global topology root */
+hwloc_obj_t sw =
+ hwloc_custom_insert_group_object_by_parent(global,
+ hwloc_get_root_obj(global), 0);
+
+/* insert host2 entire topology below the switch */
+hwloc_topology_init(&host2);
+hwloc_topology_load(host2);
+hwloc_custom_insert_topology(global, switch, host2, NULL);
+hwloc_topology_destroy(host2);
+
+/* load and play with the global topology */
+hwloc_topology_load(global);
+...
+</pre>
+
+
+
+
+\page xml Importing and exporting topologies from/to XML files
+
+hwloc offers the ability to export topologies to XML files and reload
+them later. This is for instance useful for loading topologies faster
+(see \ref faq_xml), manipulating other nodes' topology, or avoiding
+the need for privileged processes (see \ref faq_privileged).
+
+Topologies may be exported to XML files thanks to hwloc_topology_export_xml(),
+or to a XML memory buffer with hwloc_topology_export_xmlbuffer().
+The lstopo program can also serve as a XML topology export tool.
+
+XML topologies may then be reloaded later with hwloc_topology_set_xml()
+and hwloc_topology_set_xmlbuffer().
+The XMLFILE environment variable also tells hwloc to load the topology
+from the given XML file.
+
+\section xml_backends libxml2 and minimalistic XML backends
+
+hwloc offers two backends for importing/exporting XML.
+
+First, it can use the libxml2 library for importing/exporting XML
+files. It features full XML support, for instance when those files
+have to be manipulated by non-hwloc software (e.g. a XSLT parser).
+The libxml2 backend is enabled by default if libxml2 development
+headers are available.
+
+If libxml2 is not available at configure time,
+or if <tt>--disable-libxml2</tt> is passed, hwloc falls back to a
+custom backend.
+Contrary to the aforementioned full XML backend with libxml2, this
+minimalistic XML backend cannot be guaranteed to work with external
+programs.
+It should only be assumed to be compatible with the same hwloc
+release (even if using the libxml2 backend).
+Its advantage is however to always be available without requiring
+any external dependency.
+
+\section xml_errors XML import error management
+
+Importing XML files can fail at least because of file access errors,
+invalid XML syntax or non-hwloc-valid XML contents.
+
+Both backend cannot detect all these errors when the input XML
+file or buffer is selected (when hwloc_topology_set_xml() or
+hwloc_topology_set_xmlbuffer() is called).
+Some errors such non-hwloc-valid contents can only be detected
+later when loading the topology with hwloc_topology_load().
+
+It is therefore strongly recommended to check the return value of
+both hwloc_topology_set_xml() (or hwloc_topology_set_xmlbuffer())
+and hwloc_topology_load() to handle all these errors.
+
+
+
+
+\page interoperability Interoperability With Other Software
+
+Although hwloc offers its own portable interface, it still may have to
+interoperate with specific or non-portable libraries that manipulate
+similar kinds of objects. hwloc therefore offers several specific
+"helpers" to assist converting between those specific interfaces and
+hwloc.
+
+Some external libraries may be specific to a particular OS; others may
+not always be available. The hwloc core therefore generally does not
+explicitly depend on these types of libraries. However, when a custom
+application uses or otherwise depends on such a library, it may
+optionally include the corresponding hwloc helper to extend the hwloc
+interface with dedicated helpers.
+
+<dl>
+
+<dt>Linux specific features</dt>
+ <dd>
+ hwloc/linux.h offers Linux-specific helpers that utilize some
+ non-portable features of the Linux system, such as binding threads
+ through their thread ID ("tid") or parsing kernel CPU mask files.
+ </dd>
+
+<dt>Linux libnuma</dt>
+ <dd>
+ hwloc/linux-libnuma.h provides conversion helpers between hwloc CPU
+ sets and libnuma-specific types, such as nodemasks and bitmasks. It
+ helps you use libnuma memory-binding functions with hwloc CPU sets.
+ </dd>
+
+<dt>Glibc</dt>
+ <dd>
+ hwloc/glibc-sched.h offers conversion routines between Glibc and
+ hwloc CPU sets in order to use hwloc with functions such as
+ sched_setaffinity().
+ </dd>
+
+<dt>OpenFabrics Verbs</dt>
+ <dd>
+ hwloc/openfabrics-verbs.h helps interoperability with the
+ OpenFabrics Verbs interface. For example, it can return a list of
+ processors near an OpenFabrics device.
+ Note that if I/O device discovery is enabled, such devices may also
+ appear as PCI objects and as OS objects in the topology.
+ </dd>
+
+<dt>Myrinet Express</dt>
+ <dd>
+ hwloc/myriexpress.h offers interoperability with the Myrinet
+ Express interface. It can return the list of processors near
+ a Myrinet board managed by the MX driver.
+ Note that if I/O device discovery is enabled, such boards may also
+ appear as PCI objects in the topology.
+ </dd>
+
+<dt>NVIDIA CUDA</dt>
+ <dd>
+ hwloc/cuda.h and hwloc/cudart.h enable interoperability with
+ NVIDIA CUDA Driver and Runtime interfaces. For instance, it may
+ return the list of processors near NVIDIA GPUs.
+ Note that if I/O device discovery is enabled, GPUs may also
+ appear as PCI objects in the topology.
+ </dd>
+
+<dt>Taskset command-line tool</dt>
+ <dd>
+ The taskset command-line tool is widely used for binding
+ processes. It manipulates CPU set strings in a format that
+ is slightly different from hwloc's one (it does not divide the
+ string in fixed-size subsets and separates them with commas).
+ To ease interoperability, hwloc offers routines to convert
+ hwloc CPU sets from/to taskset-specific string format.
+ Most hwloc command-line tools also support the --taskset
+ option to manipulate taskset-specific strings.
+ </dd>
+
+</dl>
+
+
+
+\page threadsafety Thread Safety
+
+Like most libraries that mainly fill data structures, hwloc is not
+thread safe but rather reentrant: all state is held in a \ref
+hwloc_topology_t instance without mutex protection. That means, for
+example, that two threads can safely operate on and modify two
+different \ref hwloc_topology_t instances, but they should not
+simultaneously invoke functions that modify the <em>same</em>
+instance. Similarly, one thread should not modify a \ref
+hwloc_topology_t instance while another thread is reading or
+traversing it. However, two threads can safely read or traverse the
+same \ref hwloc_topology_t instance concurrently.
+
+When running in multiprocessor environments, be aware that proper thread
+synchronization and/or memory coherency protection is needed to pass hwloc
+data (such as \ref hwloc_topology_t pointers) from one processor
+to another (e.g., a mutex, semaphore, or a memory barrier).
+Note that this is not a hwloc-specific requirement, but it is worth
+mentioning.
+
+For reference, \ref hwloc_topology_t modification operations include
+(but may not be limited to):
+
+<dl>
+
+<dt>Creation and destruction</dt>
+ <dd><tt>hwloc_topology_init(), hwloc_topology_load(),
+ hwloc_topology_destroy()</tt> (see \ref hwlocality_creation) imply
+ major modifications of the structure, including freeing some
+ objects. No other thread cannot access the topology or any of its
+ objects at the same time.
+
+ Also references to objects inside the topology are not valid anymore
+ after these functions return. </dd>
+
+<dt>Runtime topology modifications</dt>
+ <dd><tt>hwloc_topology_insert_misc_object_by_*</tt> (see \ref
+ hwlocality_tinker) may modify the topology significantly by adding
+ objects inside the tree, changing the topology depth, etc.
+ <tt>hwloc_topology_restrict</tt> modifies the topology even more
+ dramatically by removing some objects.
+
+ Although references to former objects <em>may</em> still be valid
+ after insertion or restriction, it is strongly advised to not rely on any such
+ guarantee and always re-consult the topology to reacquire new
+ instances of objects. </dd>
+
+<dt>Locating topologies</dt>
+
+ <dd><tt>hwloc_topology_ignore*</tt>, <tt>hwloc_topology_set*</tt>
+ (see \ref hwlocality_configuration) do not modify the topology
+ directly, but they do modify internal structures describing the
+ behavior of the next invocation of <tt>hwloc_topology_load()</tt>.
+ Hence, all of these functions should not be used concurrently.
+
+ Note that these functions do not modify the current topology until
+ it is actually reloaded; it is possible to use them while other
+ threads are only read the current topology. </dd>
+
+</dl>
+
+
+
+\page embed Embedding hwloc in Other Software
+
+It can be desirable to include hwloc in a larger software package (be
+sure to check out the LICENSE file) so that users don't have to
+separately download and install it before installing your software.
+This can be advantageous to ensure that your software uses a
+known-tested/good version of hwloc, or for use on systems that do not
+have hwloc pre-installed.
+
+When used in "embedded" mode, hwloc will:
+
+- not install any header files
+- not build any documentation files
+- not build or install any executables or tests
+- not build <tt>libhwloc.*</tt> -- instead, it will build
+ <tt>libhwloc_embedded.*</tt>
+
+There are two ways to put hwloc into "embedded" mode. The first is
+directly from the configure command line:
+
+\verbatim
+shell$ ./configure --enable-embedded-mode ...
+\endverbatim
+
+The second requires that your software project uses the GNU Autoconf /
+Automake / Libtool tool chain to build your software. If you do this,
+you can directly integrate hwloc's m4 configure macro into your
+configure script. You can then invoke hwloc's configuration tests and
+build setup by calling an m4 macro (see below).
+
+\section embedding_m4 Using hwloc's M4 Embedding Capabilities
+
+Every project is different, and there are many different ways of
+integrating hwloc into yours. What follows is <em>one</em> example of
+how to do it.
+
+If your project uses recent versions Autoconf, Automake, and Libtool
+to build, you can use hwloc's embedded m4 capabilities. We have
+tested the embedded m4 with projects that use Autoconf 2.65, Automake
+1.11.1, and Libtool 2.2.6b. Slightly earlier versions of may also
+work but are untested. Autoconf versions prior to 2.65 are almost
+certain to not work.
+
+You can either copy all the config/hwloc*m4 files from the hwloc
+source tree to the directory where your project's m4 files reside, or
+you can tell aclocal to find more m4 files in the embedded hwloc's
+"config" subdirectory (e.g., add "-Ipath/to/embedded/hwloc/config" to
+your Makefile.am's ACLOCAL_AMFLAGS).
+
+The following macros can then be used from your configure script (only
+HWLOC_SETUP_CORE <em>must</em> be invoked if using the m4 macros):
+
+- HWLOC_SETUP_CORE(config-dir-prefix, action-upon-success,
+ action-upon-failure, print_banner_or_not): Invoke the hwloc
+ configuration tests and setup the hwloc tree to build. The first
+ argument is the prefix to use for AC_OUTPUT files -- it's where the
+ hwloc tree is located relative to <tt>$top_srcdir</tt>. Hence, if
+ your embedded hwloc is located in the source tree at contrib/hwloc,
+ you should pass <tt>[contrib/hwloc]</tt> as the first argument. If
+ HWLOC_SETUP_CORE and the rest of <tt>configure</tt> completes
+ successfully, then "make" traversals of the hwloc tree with standard
+ Automake targets (all, clean, install, etc.) should behave as
+ expected. For example, it is safe to list the hwloc directory in
+ the SUBDIRS of a higher-level Makefile.am. The last argument, if
+ not empty, will cause the macro to display an announcement banner
+ that it is starting the hwloc core configuration tests.
+
+ HWLOC_SETUP_CORE will set the following environment variables and
+ AC_SUBST them: HWLOC_EMBEDDED_CFLAGS, HWLOC_EMBEDDED_CPPFLAGS, and
+ HWLOC_EMBEDDED_LIBS. These flags are filled with the values
+ discovered in the hwloc-specific m4 tests, and can be used in your
+ build process as relevant. The _CFLAGS, _CPPFLAGS, and _LIBS
+ variables are necessary to build libhwloc (or libhwloc_embedded)
+ itself.
+
+ HWLOC_SETUP_CORE also sets HWLOC_EMBEDDED_LDADD environment variable
+ (and AC_SUBSTs it) to contain the location of the
+ libhwloc_embedded.la convenience Libtool archive. It can be used in
+ your build process to link an application or other library against
+ the embedded hwloc library.
+
+ <strong>NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is used, it must
+ be invoked <em>before</em> HWLOC_SETUP_CORE.</strong>
+
+- HWLOC_BUILD_STANDALONE: HWLOC_SETUP_CORE defaults to building hwloc
+ in an "embedded" mode (described above). If HWLOC_BUILD_STANDALONE
+ is invoked *before* HWLOC_SETUP_CORE, the embedded definitions will
+ not apply (e.g., libhwloc.la will be built, not
+ libhwloc_embedded.la).
+
+- HWLOC_SET_SYMBOL_PREFIX(foo_): Tells the hwloc to prefix all of
+ hwloc's types and public symbols with "foo_"; meaning that function
+ hwloc_init() becomes foo_hwloc_init(). Enum values are prefixed
+ with an upper-case translation if the prefix supplied;
+ HWLOC_OBJ_SYSTEM becomes FOO_HWLOC_OBJ_SYSTEM. This is recommended
+ behavior if you are including hwloc in middleware -- it is possible
+ that your software will be combined with other software that links
+ to another copy of hwloc. If both uses of hwloc utilize different
+ symbol prefixes, there will be no type/symbol clashes, and
+ everything will compile, link, and run successfully. If you both
+ embed hwloc without changing the symbol prefix and also link against
+ an external hwloc, you may get multiple symbol definitions when
+ linking your final library or application.
+
+- HWLOC_SETUP_DOCS, HWLOC_SETUP_UTILS, HWLOC_SETUP_TESTS: These three
+ macros only apply when hwloc is built in "standalone" mode (i.e.,
+ they should NOT be invoked unless HWLOC_BUILD_STANDALONE has already
+ been invoked).
+
+- HWLOC_DO_AM_CONDITIONALS: If you embed hwloc in a larger project and
+ build it conditionally with Automake (e.g., if HWLOC_SETUP_CORE is
+ invoked conditionally), you must unconditionally invoke
+ HWLOC_DO_AM_CONDITIONALS to avoid warnings from Automake (for the
+ cases where hwloc is not selected to be built). This macro is
+ necessary because hwloc uses some AM_CONDITIONALs to build itself,
+ and AM_CONDITIONALs cannot be defined conditionally. Note that it
+ is safe (but unnecessary) to call HWLOC_DO_AM_CONDITIONALS even if
+ HWLOC_SETUP_CORE is invoked unconditionally. If you are not using
+ Automake to build hwloc, this macro is unnecessary (and will actually
+ cause errors because it invoked AM_* macros that will be undefined).
+
+<strong>NOTE:</strong> When using the HWLOC_SETUP_CORE m4 macro, it may
+be necessary to explicitly invoke AC_CANONICAL_TARGET (which requires
+config.sub and config.guess) and/or AC_USE_SYSTEM_EXTENSIONS macros
+early in the configure script (e.g., after AC_INIT but before
+AM_INIT_AUTOMAKE). See the Autoconf documentation for further
+information.
+
+Also note that hwloc's top-level configure.ac script uses exactly the
+macros described above to build hwloc in a standalone mode (by
+default). You may want to examine it for one example of how these
+macros are used.
+
+
+\section embedding_example Example Embedding hwloc
+
+Here's an example of integrating with a larger project named sandbox
+that already uses Autoconf, Automake, and Libtool to build itself:
+
+\verbatim
+# First, cd into the sandbox project source tree
+shell$ cd sandbox
+shell$ cp -r /somewhere/else/hwloc-<version> my-embedded-hwloc
+shell$ edit Makefile.am
+ 1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
+ 2. Add "my-embedded-hwloc" to SUBDIRS
+ 3. Add "$(HWLOC_EMBEDDED_LDADD)" and "$(HWLOC_EMBEDDED_LIBS)" to
+ sandbox's executable's LDADD line. The former is the name of the
+ Libtool convenience library that hwloc will generate. The latter
+ is any dependent support libraries that may be needed by
+ $(HWLOC_EMBEDDED_LDADD).
+ 4. Add "$(HWLOC_EMBEDDED_CFLAGS)" to AM_CFLAGS
+ 5. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
+shell$ edit configure.ac
+ 1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
+ 2. Add "HWLOC_SETUP_CORE([my-embedded-hwloc], [happy=yes], [happy=no])" line
+ 3. Add error checking for happy=no case
+shell$ edit sandbox.c
+ 1. Add #include <hwloc.h>
+ 2. Add calls to sandbox_hwloc_init() and other hwloc API functions
+\endverbatim
+
+Now you can bootstrap, configure, build, and run the sandbox as normal
+-- all calls to "sandbox_hwloc_*" will use the embedded hwloc rather
+than any system-provided copy of hwloc.
+
+
+
+\page faq Frequently Asked Questions
+
+\section faq_xml I do not want hwloc to rediscover my enormous machine topology every time I rerun a process
+
+Although the topology discovery is not expensive on common machines,
+its overhead may become significant when multiple processes repeat
+the discovery on large machines (for instance when starting one process
+per core in a parallel application).
+The machine topology usually does not vary much, except if some cores
+are stopped/restarted or if the administrator restrictions are modified.
+Thus rediscovering the whole topology again and again may look useless.
+
+For this purpose, hwloc offers XML import/export features. It lets you
+save the discovered topology to a file (for instance with the lstopo program)
+and reload it later by setting the HWLOC_XMLFILE environment variable.
+Loading a XML topology is usually much faster than querying multiple
+files or calling multiple functions of the operating system.
+It is also possible to manipulate such XML files with the C programming
+interface, and the import/export may also be directed to memory buffer
+(that may for instance be transmitted between applications through a socket).
+See also \ref xml.
+
+
+\section faq_privileged Does hwloc require privileged access?
+
+hwloc discovers the topology by querying the operating system.
+Some minor features may require privileged access to the operation
+system.
+For instance PCI link speed discovery on Linux is reserved to root,
+and the entire PCI discovery on FreeBSD requires access to the
+/dev/pci special file.
+
+To workaround this limitation, it is recommended to export the
+topology as a XML file generated by the administrator (with the
+lstopo program) and make it available to all users
+(see \ref xml).
+It will offer all discovery information to any application without
+requiring any privileged access anymore.
+Only the necessary hardware characteristics will be exported, no
+sensitive information will be disclosed through this XML export.
+
+This XML-based model also has the advantage of speeding up the
+discovery because reading a XML topology is usually much faster
+than querying the operating system again.
+
+
+\section faq_onedim hwloc only has a one-dimensional view of the architecture, it ignores distances
+
+hwloc places all objects in a tree. Each level is a one-dimensional
+view of a set of similar objects. All children of the same object (siblings)
+are assumed to be equally interconnected (same distance between any of them),
+while the distance between children of different objects (cousins) is supposed
+to be larger.
+
+Modern machines exhibit complex hardware interconnects, so this tree
+may miss some information about the actual physical distances between objects.
+The hwloc topology may therefore be annotated with distance information that
+may be used to build a more realistic representation (multi-dimensional)
+of each level.
+For instance, the root object may contain a distance matrix that represents
+the latencies between any pairs of NUMA nodes if the BIOS and/or operating
+system reports them.
+
+
+\section faq_smt How may I ignore symmetric multithreading, hyper-threading, ... ?
+
+hwloc creates one PU (processing unit) object per hardware thread.
+If your machine supports symmetric multithreading, for instance Hyper-Threading,
+each Core object may contain multiple PU objects.
+\verbatim
+$ lstopo -
+...
+ Core L#1
+ PU L#2 (P#1)
+ PU L#3 (P#3)
+\endverbatim
+
+If you need to ignore symmetric multithreading, you should likely manipulate
+hwloc Core objects directly:
+\verbatim
+/* get the number of cores */
+unsigned nbcores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
+...
+/* get the third core below the first socket */
+hwloc_obj_t socket, core;
+socket = hwloc_get_obj_by_type(topology, HWLOC_OBJ_SOCKET, 0);
+core = hwloc_get_obj_inside_cpuset_by_type(topology, socket->cpuset,
+ HWLOC_OBJ_CORE, 2);
+\endverbatim
+
+Whenever you want to bind a process or thread to a core, make sure you
+singlify its cpuset first, so that the task is actually bound to a single
+thread within this core (to avoid useless migrations).
+\verbatim
+/* bind on the second core */
+hwloc_obj_t core = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 1);
+hwloc_cpuset_t set = hwloc_bitmap_dup(core->cpuset);
+hwloc_bitmap_singlify(set);
+hwloc_set_cpubind(topology, set, 0);
+hwloc_bitmap_free(set);
+\endverbatim
+
+With hwloc-calc or hwloc-bind command-line tools, you may specify that
+you only want a single-thread within each core by asking for their first
+PU object:
+\verbatim
+$ hwloc-calc core:4-7
+0x0000ff00
+$ hwloc-calc core:4-7.pu:0
+0x00005500
+\endverbatim
+
+When binding a process on the command-line, you may either specify
+the exact thread that you want to use, or ask hwloc-bind to singlify
+the cpuset before binding
+\verbatim
+$ hwloc-bind core:3.pu:0 -- echo "hello from first thread on core #3"
+hello from first thread on core #3
+...
+$ hwloc-bind core:3 --single -- echo "hello from a single thread on core #3"
+hello from a single thread on core #3
+\endverbatim
+
+
+\section faq_asymmetric What happens if my topology is asymmetric?
+
+hwloc supports asymmetric topologies even if most platforms are usually
+symmetric. For example, there may be different types of processors
+in a single machine, each with different numbers of cores, symmetric
+multithreading, or levels of caches.
+
+To understand how hwloc manages such cases, one should first remember
+the meaning of levels and cousin objects. All objects of the same type
+are gathered as horizontal levels with a given depth. They are also
+connected through the cousin pointers of the hwloc_obj structure.
+Some types, such as Caches or Groups, are usually annotated with a
+depth or level attribute (for instance L2 cache). In this case, this
+attribute is also taken in account when gathering objects as
+horizontal levels. To be clear: there will be one level for L1
+caches, another level for L2 caches, etc.
+
+If the topology is asymmetric (e.g., if a cache is missing in one of
+the processors), a given horizontal level will still exist if there
+exist any objects of that type. However, some branches of the overall
+tree may not have an object located in that horizontal level. Note
+that this specific hole within one horizontal level does not imply
+anything for other levels. All objects of the same type are gathered
+in horizontal levels even if their parents or children have different
+depths and types.
+
+Moreover, it is important to understand that a same parent object may
+have children of different types (and therefore, different
+depths). <strong>These children are therefore siblings (because they
+have the same parent), but they are <em>not</em> cousins (because they
+do not belong to the same horizontal levels).</strong>
+
+
+\section faq_annotate How do I annotate the topology with private notes?
+
+Each hwloc object contains a <tt>userdata</tt> field that may be used by
+applications to store private pointers. This field is kept intact as long
+as the object is valid, which means as long as topology objects are not
+modified by reloading or restricting the topology.
+
+Each object may also contain some <em>info</em> attributes
+(key name and value) that are setup by hwloc and may be extended
+by the user with <tt>hwloc_obj_add_info()</tt>.
+Contrary to the <tt>userdata</tt> field which is unique, multiple info
+attributes may exist for each object, even with the same name.
+These attributes are also exported to XML together with the topology.
+However only character strings may be used as key names and values.
+
+It is also possible to insert Misc objects with custom names anywhere
+in the topology (<tt>hwloc_topology_insert_misc_object_by_cpuset()</tt>)
+or as a leaf of the topology (<tt>hwloc_topology_insert_misc_object_by_parent()</tt>).
+
+
+\section faq_upgrade How do I handle API upgrades?
+
+The hwloc interface is extended with every new major release.
+Any application using the hwloc API should be prepared to check at
+compile-time whether some features are available in the currently
+installed hwloc distribution.
+
+To check whether hwloc is at least 1.2, you should use:
+\verbatim
+#include <hwloc.h>
+#if HWLOC_API_VERSION >= 0x00010200
+...
+#endif
+\endverbatim
+
+One of the major changes in hwloc 1.1 was the addition of the bitmap
+API. It supersedes the now deprecated cpuset API which will be removed
+in a future hwloc release. It is strongly recommended to switch existing
+codes to the bitmap API. Keeping support for older hwloc versions is easy.
+For instance, if your code uses <tt>hwloc_cpuset_alloc</tt>, you should use
+<tt>hwloc_bitmap_alloc</tt> instead and add the following code to one of your
+common headers:
+\verbatim
+#include <hwloc.h>
+#if HWLOC_API_VERSION < 0x00010100
+#define hwloc_bitmap_alloc hwloc_cpuset_alloc
+#endif
+\endverbatim
+
+Similarly, the hwloc 1.0 interface may be detected by comparing
+<tt>HWLOC_API_VERSION</tt> with <tt>0x00010000</tt>.
+
+hwloc 0.9 did not define any <tt>HWLOC_API_VERSION</tt> but this very old
+release probably does not deserve support from your application anymore.
+
+*/
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/HACKING
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/HACKING (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/HACKING 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,3 @@
+To update PNG file, run
+ export LANG=C
+ lstopo -i XXXX.xml --no-legend --whole-system XXXX.png
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.pdf
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.pdf (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.pdf 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,204 @@
+%PDF-1.5
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+ /Filter /FlateDecode
+>>
+stream
+x½XÍnÛ0¾û)ôiEJ²l`Ø¡À0`ÀÛrvH¦@±Ööú#)ù'lÓ[S4l'>H¿*0ü÷òhnwÖ<þ®¬±¦ÑgÍË9Êk¾~¤_ý¡Hªï?½±æP5ékþ5km²Ú·¬FóÞmùGüò
+$Ûçêö¸±z`¶ÇêµHÄx@RD¤%ÙÜìI$ï·OÕmeot[ÂÔÚÐ4HÚ;pÐâÖÓ·ót[1Ri¢ ï<É*i¸T]§Y´¾õ±há1Éÿ òg²Ü`%å@¡¬-ßWf'¤sìpþ
+.w%ðÐ$°h`ØWO©ÏK0È%÷y~Pàa?rË!¹{àxæ"
+×XÓh@¸z
+Ý2½ ൠpÒ£-!)Yoo̶eJÎÙ(.!¦114tÏG+Ö® æb(ºÂçý¤[0*£îJáªø7!`R11ý¦L¨â ø5$°»É%s¡97DIzÁ<ôiôÊWA7t^·tGïëRh¨ùÓ½3×y×»é¼ìûÑgÄ\"ó;ôLJTÁz]íp9sŹÉÌÝ×
+?Ú [ÛÎ
âÎ
å)
à*G±_µ1p¼vØ»ºÓÆIb).t1àÑ|&²ãE.cÜÄówÛí9mÙÈóî_üýô®)sï\$ܹ¬¦c
+%Ö°-`a¼sô¬Áw¯5Xô-6ùx¥&÷/âcÊ
c1¾O\¹¡öÐvÜàÑZn@âÆß]:ë¹!ç7øì ¥ø$Og{5W&*QcøO*äDr1lo»b¹`BoÂlªbbÀlªRá
+pØèù`ÙÅ»n)¼r¬sC±B+/|ë4[iRÜ9|ý8«³*vôù¥ãz«kîBh.§;:O#o±û\¸÷°ÈÀrAÞeçΣýüº§ÏÜãà´Áu=ï£49¤Q°p?
+ñ5ºã{Ìÿv9½²Í!ðÿ½Ï1s«å:^¯ÓÁ8qË®@Ð5;Â\v®ÝA^·ßÁª.»>Æ5éûuðZp% Â@0©HÀ^µã!êº^õ*ìó_ª¿¯cÓÕ
+endstream
+endobj
+4 0 obj
+ 985
+endobj
+2 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+ /Font <<
+ /f-0-0 5 0 R
+ >>
+>>
+endobj
+6 0 obj
+<< /Type /Page
+ /Parent 1 0 R
+ /MediaBox [ 0 0 657 530 ]
+ /Contents 3 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /CS /DeviceRGB
+ >>
+ /Resources 2 0 R
+>>
+endobj
+7 0 obj
+<< /Length 8 0 R
+ /Filter /FlateDecode
+ /Length1 10312
+>>
+stream
+xÕz{|TÕÕöÞ{}ÎÜoI2É\L.KHH¸FD°6JDP! j D@4!ä«)&H%¨VÀ¶¾¨`ú¢Øì¼ëLÐöí÷ýùý¾vÎ=ç½×ÚÏzÖ³ö@(!DGJßSÏM*`ñßýØØûòSs÷§cûây*ò¦>7³Ïéøðìúì¼|Óãø=Ù÷h¦Mw«æøýØ5
+;uòoñ§áy´çáãiÎßáy|vÆS«¨%$NçuÏMz¡@Ú ÏÄócxî+5¥` òü÷!|a$_TKù|ÎV!1AtÈ·©3ôj8ßÔXÎ7oJ°ú¿Õ/ÖBpµ^ÕéÇïfÉ)ÓÈ^~È;Á>`U4
+³R¦QÀ´:-µêtÚ¡:
Èë=×jQ®ÝÒ`HFKkSk5ªoÒkPCS:~J=fbáß(Mgãß;P`¢tBp,(fYËtfW"t,Qñ):®©{-`EÊ<] +UJu«X¤DõA]O»C&YÛ±ñÚ)éÚ9yÚEt%TÑ`@&DøµÔo·Òxj?M{Ð
´ö8!Eq¿Ðª[R¹·H¤åst##Eí¥R®x &9½ú(¼%׬¾2ïaw}|uEDA´Q«Ñ{Ac9ßní¯ÚÜpåfëÍ&ËÉÖþÖþ¶þiÁ_§Å¦yÒ¼i¾4Zܤ`lÐô}A0.;6ÛíÍöeû³ã²
+Ä{ʽå¾rÿ¸UI¡¤æ$O×]7uÝëÉõæúrýo¯À_â)ñøJüÑè';ìéY¿ }ñ&Ù'+ÃÙ'1>NV2ÓôHvôÒ¾E3Ö××Õ
+9²t_cÛmÊ^Y{(gÊÑÇþ»eäM.¼x0å¶E{ò'½»í÷ÇlÅË{öÜÔp'3Û/Ã5ô ºH]*ÊKuõV©>
+£Ød¤}x¥õJº¼+èqóåûiA½Ùeq¸V¹B.uôÄùuN¸¯C,±Z?=®=¸9ûÍ'ßÌÞüà/wNhà*Êl2÷¥¦^>{örjê:¨'ê¼"åÉvAú %`¢r¹ÉZgX§CÕuaÇ5K¿Ù¤B´éfCÕ =ë@<"T¬a9ðC5ì')¯nÁª}õõCßýîI¶£í V³¥æè¶rÙÞV3%ï[;ïâàóp\5öR&ù¨ô9Â8ÕHdÆÒ:¨)G»ÒÚÖ[´Am¶6W[ Eë#2ÔñïÖáKʽí_ݱýA²~nÇÿÝ+]vÌu|è`ÿjãÿb»_5©ë*ã¸vâ"Áâ Ú2ÍRîxòz};ºÞVgXáv9Æ¡!£Í<ܸÙÔ`µõïXæ+ľåæ
+«ý!±±¡Øbcù2aCC\¼»ÒKÓKÛ]7Ì 3ØÇvÂL
+~íBOEAF:QÂðP¤âÖ³oM?5ù©7Å)ÒúUêØÎ¥êMìÉÇêÓg·î´ÕÑz¯ø´aÝÁý5ª/kÅw¬H¶#é4Ë/u&£BÀ&Éò·Ñµ9ãê®ýX¿ñ£kÍáÏ$Øo<â6Òh^ÃnOd}l}YQYéâ%¡êªµëdÛbðµkbàÕ¯éÉÏ.Ñ&¯×no&n²Y$ÆÑn+si¨e«u1d¯HQ;Êr¬¥ut#gtmdÎã£kí9ã,@òö±caßöRúfÓ6åß ·£ÁôG¤±|¬2_Ïç¸ÊD$§#¹¸ûy2GSèzÞ]JÊ¥1¥®R÷n²ÛeEzøþÌ,Òw0ý))H»¬È.cï¶>PHWfLúå+eϽ0ÿü¸ëÔ>üq§¸¹gϹ´rÀsëî[=ôÞ3½Ó¯¿÷ÄÎXñuCóÐö?z{Q0ÁH C è§°HK
+:â5!ì{=ÚlkPÍ=ΪµWÎcÌØ:tM>ÛMOºd<yÌ%/%¦D
+YôAú+ïci>MçÃjD#1@^þL£"S\¸pºíIh½g[3vÍ=æÂöË|9®[,éôî¢UàªÒضZ÷;ªLFÜÖ>RF´Soñ¨yîJkCæUr;ß?-ãø²Ô_º¥Ò[çIt\b¶ÙâËØ&fÓåôÉÕTQк\Üß jmÏì¾@+wµy®§ÏÑ_Óõ#Güib®øø£øXü!ó5GKMèc
+±¹7ï$U:mmÒ½æµê5,ÂéåÄääNwO-qÛ$¿Êý3á<Õ¤ÎùÒ9.L{89w>U,x¨Ã.Åûé:lûæÍÛź¶²rÐ3éZKɪ¢ùvÛuvºíÓòå+°|1xƬ»½±lÝ×øòûA¿îÀø?oЬ¨ñ§P¢·ItónEdDÚv¦ÄgÙ2û°bUÕ¡%˶&1èÒgbÀ×Wék×è{áõB?ðôÌz)Y½CQ 4á2U[ÊRPè:TIØrUÿ.X}£6Ô"^½ªEÒ²X?e$»Oyå+%L©VvÐy½_~§Ð§åyòú¢\E7È[ô°Ê 'üaaaÕ
+¢¹m:ªÛ^éóTéóÛ^çÄU
+ÎÓJÁH
+³ê ¯2ÐE6[׺É=65ü-*õ5
+p®*®ÒÃÁÉÒCÞ- ¦pÌÄAQ«û¿·¿Q\_«â
+ÙÍçÎ5ÃòÖ'Äß0cv£ j\ZTKy/x±R"q©tÄÊ0Nu
+¬vj Ó¨_`ä*UjÜ¢ÒSd ÅÑrÞr¾¡Cã]9ßdëÿRºsèz]Âì3¨Nj¦ffVEGæ²hªa2h¥Hêdcé8mJ§±è¶ fIs4åt)+1¼ÌÖCµÕØ4ÆâÙqDÑUÖÿã¥m^à¦6'ìoI¥ÅbQÔ6sDQÁ¹ÞFê
+u¶ÑZù!°9GSX§JA?ÄYDäb¥XS¬-ÖëÅÆbS±¹ØRl-²
ÍNëOTÆKRºáÊ
®Ý··j;}k©MÜhþøZáÒµÓ§¯]ÿÔWÄû¢I| ¬?F¼ö»3ÇÇP?X0kô:cêÉ^Ï5+LutDIDÃî³ÚôÃcÃ3MWÅDò-
+7ÒåzJ<!¨aÑ)÷X8wFÒ®ù!Áöººo,hl'íÞh;õÊêÕ»w¯^ý
+bOþ³iwÞ$:jð=lp4^»Ö
+ç¥rÍÊ0×DÁhZe!UÚE6NUwX[+Ù;è¥CößTy¯cc¢ãuÏì¯`R1`è±râ}ÿ6¥¢ý¶ø÷jûpuyÙê]ÿúém»q|Làr?¬ç%¹ÁÞ.=)W¤X-ÌÊ£"Ì«×ãvÅD!WEØ¬Ñ ¢a£}Ö38=?hPë õoC:ú/-hÕS=ÓôF»c±Ù½¥üzêÈ Lánþp¢Ä§940lMx:4ö[¦ÅÆi¡©â¯S·N'hn8JÎ%â It´AX/&Óµ§n [Ôõ.Çõ®À\£b21²¡RŤÛì·Ãõ/¤êÚ2ÒÑHö3°-ß´y3þÛ¼ù6Õ[·o[T˳ÅYqÛYÚfD¡(åS:GçÓ*bÕ#=kr'è
+!
ø"
´¯ìFSòNEDUEÔÔ òRXëLÈÍ`ؾ~+Ï :üëéè¨Ö{¤Âu#[.ì óµjó6´9ü&8Èh`&=óx=-StÌëõÕé=^ÉAc«}mtUª"kÖÉÞëRHËiê¡8íqÉ¿5 E^AYNfè¢+è£nXNÞ)7Mª:ê< ÷S{ySz¥ü*~Rrxi8Áùã2ÃÒ1ÚöDM êå
g&î|sî®ù_üI|*®Mÿ¶¤¨iÖkGÊ7}ñúþé¿ð'úfÌyj×zñÐÅÏÒz}4|ÄÒßüz7ºÇ±½'¯$viùMÛ:¬*S4V.sÅ*ˬ]<TÃÀ²N+s*É
d^
+©ó
+Öu%ê')«UéËfÕÓi"YKᩱ,MÕ²¹¼-ã/iÖ°j¾N³ÙÃe¦GO$)§Ê©JÐ0
+r
+Ë`´¯+
+°NÙ¯ðCÊ åå4Ã-©Y0¨¹fhÃåôázøºm?{¦¹íT½lo}^n»Ù¶Å·}ööEÇk1ÉL\cW1ßÑëô¸ØÈeI]5à¿ô9r³Cø¡ y½£C$aªHjí¬Ï¥EbÉèÂßÿþ¶òr^#Þ«h-{pÃYnLº441ÍI h`UdDÝ0H2ºSï¤&m@$
ë/éôìOù©lB"N±êIº2·ÌrCÚ5²;ä[_)¯plOtG°;Ý>ì^¢æñÈ.¯
++xð7úÚê7Â5R¸D¢Amgw/Ï/ ÿSiæ¿+ÒaHåvñ¸þä©é9ï?wôTýÎýªj¶¿<æè¬ÂÓ㿤 àmXõéwÀñÞéÕ¿Ú5· °(!ñ Ï÷Çöª:r9Ú¹<ÌAñ¤êÈ@´ä§GÈVéY´=-ÚÐÍíHpµÈHHKf¿+ÍÒÚ ÍáùwÙ>S
ÊORb +îÊȸÌ>Y?ÉIlùª;WÚµSì,$íÿuIT.Z½]ܺuKÜÚ1²rqé5¥+Ù
+åå6oë;PòæG½YrÀw²ââõë+NÒIÏ>-G¡MåhS4I ãñ×IË3¤Û)
ȲHoÈR¹" ¸Ýþs]ÐÅ´_ï;
&Ùà|/æëûXì{¯²ÇvÄö
+ÙcBßðâØ"Â{}HF¾K¤]¡>`Óè÷Ïxö3qZ¾ @â
+qõMtðÒ-[bóÖ%$R#µ}¿þFIzxÜÃÖÞ¶õí··n;Ü¥s§yúÛ`òæòz} âý9}¤ÿGúÐJ«íJLÌ5}Yà÷jaSÙdÅl)¯Ð¬e5×µ2
+G
¨DÊ%Ý,)gÉJáJÃyP"¿L\iªÌåå°¿,SaØ åÍÊ!ørN(Oëðtÿ]¾?òÊÝUÆ©Rº§ÊëX
+Ú\#~hËø_h[Ææ¶l½Ì>lëÝû5¸öyè§Xòd0^Q¬eØbYY,2®Pvx¢ÜTn¢³ÈXÂÑF«å'; 5ßaࢾRFÆ
+hèFJNj$ü,XÕým¡î㺷Ðq^|ûäñi{æµ>xí¡9ü±Úl7þþñ½Ïר;íЦMÃØÀùWãQÅnBLerȹÓ2,«t¯â´n§'Â
+~o¼H.W:r`ë»´´7Fz
³R#oÑò6á窵#2è2¥«Nd;:Jµl| Q<ðÀ3S.¿mâͦ®6ÂÀ.²ycñøöÑ âÛ¯¿Ét§Ü©«Ð.'É
+Æ·ö몬t+Ù/UEUª[
N#I³[bTÄ6Ý©§1§4»¼.Ö¹EØUCßÝÂò¤ük¥íD4S%¥×ò§ó[ñOËè²oøä§ÄÅEqêÉçF¤[(VtË}]{
0
+ë+AwÉz
XõPnªÓQt²hFØTªïÛÝlj8FuëÁl,ÃÔu»[kQ0Ê{÷M¯Ô×8¼$¢§Ú¬GÛH¹ûóâ¼+7Ñ5O =ß"¯35L¥»
_Xa©©S1y6Ïå|ç?@Ì·¤ª8iÆçâÃ{î I^,í"§ è;{êVQ_uççÎ !Å0Î#Îv ÑwÔPo0kë£+Ìu®uNb³Ým51#ÔZ#½c{±£Ö8ù³Z£çJ4 T¦«Ô!á*V¯¨í¥o!íígÞP_Ïzuìá¼IâøßG&åíÆÙ¨ñk£ÇÀÜí ,A¢Næîóg:vÐ$äÍçv,zXìÇhïÑ~Ná:&kºrL§¬sWV2ºL²9E«{Ôº»ºòaƤhìqÃÕõ>ÿ3]ÙdQóÁ÷7l?×]²$©ìù[çÖ»
+=µÝuÝõÝ
+µuõ
+zñѬKÖwèeïåèìIö¦øRü Ieº2}¡ÌhSÁ¬õ` #ÀpB¸À
NR¯!)SSJRV¥RS¢±úù¯Vÿw
¨åî~lÙ²Ék4ì¼õçÇ?rRé){{_þìù¥!ûsr÷ûMÝÖ/Ût(>þhfæøFgÌ U¥5û:ããDEÿÆÇ²Mm&r¬â0Çú ÎuÄiÁÈ1k4r¶UcÎvG#tâÃõ`+VáËA®tè;ÕÁ´ìU !|¿p)¡=Ax
+ã§»Öÿ¶}2üXéëGëgÍ®ØU?kîÊ]õõCjçÍßËÌùþu3{ë&u3ÕlÛøÎöð¦öÔÉ:l¸»?÷YÇT
±×oA£¥3Ü
+x3;6åß«íÿlRïrKôôÞà®n1IVõÀ%Ê(X£z+^©³juT=èuFÑZ5e¨N¨¤!ïpÖùidZXérÔdó¸ÿøÇÎA²ÊjBR?wìÿ6tþv7ÿü§´ÿi_ÖI.Frèu¿zëUÆéòusè|iò¼n¥Tª[/mÖ)«u«t»è«ÒëÒNe».¤së@â\«ÓÇ;´1úHäm7½Ï8ö¾¼¥í¯O3Þ#øpí(}Ð8¥ãÙxxÇ+c5cµãõÙÆÆh±q#]«ì¥;ZãÆKÆvc/uëÅc¡UK )O<C÷\ÅáôM1ë"M¡)RnÛ¥¶wiÉF±H1Và´7XÉ.öáúG^¥IÞëPêðgJöÛû**HøÅð*õ¥rúêC$âãoìiîÞÞ,¤ó
+YÝ·ÆW0VÔû%d!ùUC´¨»ôÄ@ÄDÌ(¬Ä8H$ÖîÑÕb4xÇñcÄcDd¤dBºTÒf:9¸l¢»ð,G=!v,!³±ç8m¤ËXìÛ
<WFØÓE2°4Ägô§vÚQH¤¥ÒÃRtM:KúJ
ÒY)W*¤°å»°õÌùÇKêè%RHÃWG¤a\³°\ÅQ$|~#© ;HÎÅNgbVÄÆSü,ÙïøýYZCÏáìÓÅäy$6ÔÐhW#ù,Vy5åãüOá³ÎâýH!:ôÕÁR±gcMÿ
üBøÝLqä²CÆÐSâqÕc»èqÚ$¯!!rðWºDvK#IE Tà³7¨÷Èù#5ü.RÎæJ¹tùJÊU&ã³O¨©¿®³Ñ¢|rÛ\Ù6
+¤K`ÎTý6UFI½ð~|²&ddéø©ì'H¨&ø¤°½r_þÞ¹Iúm® +Ùä,ÃuÏn ¯*ê/BoumKu÷YjYàþ¼ÚàCã|ï÷÷èþ/§>â«%ÙµÆy¾ºööìq¯åîZhj¥@üçÿéËÏ{t=ÎWÛ6|XçSçþ1ãð£zÝØ?|Xø;uÐZÀ÷çÖúæ{Ñòbü-Sôè
+3wÍDó ïWÓJî:Þú¤u¿qö<Õ®8¿Ês"ã·>iyÈ8«³ÿî«"4_¾FNK×HOfr9ÌúwÕ£ÔDf²å/©åQ¤[A
+ùBrûvðVrÿàóEº÷ÚÉLé9-$5xm9¶Ï±¯\ÚÇH×GMØc[ÄÏÕk+x5)Q8öä4Æ_3ÞwÇ®RÉ¥±cNÒ2P"íMsÑ1Ïâ1V SAZÁ~ÝÙ"ü½×)×Ñ5/cC½¦Å£ÎM¯Ñ!Äí<úi!¦4l!BÌxï·â³# ±a~ø3A²ÁvH¼&
+û£ðú(|~4®G4öGÿHHÌ8B\8î¿©ÿç$ìýü3
+Lý`½ºZEâQªc%ÁöÛZìðÏ ü·ªá|/à¦ÿÀw&øG54àÛïáß
+¸Q
+ßTCS|ÝðÕ ¸>® ø2®^ïVüðʸüE/~¹¾èøLÀ¥tø/;|Z
+ðWüe!\|þ,à¼ü
páü}üÂB8ûØÅÏ øØðüAÀÙj8Óèág4zàt8-àä+?éÐ à¸÷¼+àwð{G¼-à°ê˼^@Ý[oó:oÀßzÞ*ý.ÀM¶Ã¡ ô» ðf5ðZ¯Ø¯`ßÞ ß{÷ØøÞ ì±Á«8éW[`·Wì°Ó;lßfâÛÓa ¶æA/ UÃ5
+¼FÀflÚèäò`ãßè
+X¯¬«6òuªP
7UUÃÚ5&¾6Ö`uT®zW
+XU1¯zVH/xŨJ/`¥Ë{ò÷ÑÌïeKõ|b)åyP*À+üVÀâR+_, Ô
+(lÿÍÂ
ü7.yPãàE/`L0× st0[Àó-PسZ`f!à×õÃ3¦[òécàiÓÂT<É0E@§L0i ä¶À àq ?NÇÇ·À8<éä¦ÃXàÈ
¡>&¶ÃC£"øC²õð+þÒÂðK< `4~3ZÀ¨û-|TÜkä÷[`¤î0¢WÃ0÷²üÞú6Ü3ül_2ó_Ø`Ð@#l7Ã@#Ð_@¿¾vÞ¯úfYx_;deêy2õÐÇFHïçézë!§¡zöÐòè¡
îéÚ-ÀSó [w@
+<ùH
+ at b@ÏÍÐCxqfð£~øòÀÛ4Á±Fp£Ý\-3xâQè©(xS¤ì"Øð@
+Ú[e!óÀ$ÀhäF¼Ú z:hhð2 ÅrVW.!½ 0;Y8ëÔD £yKVÒÔÿ^äÿõþ¯Øÿ>lM£
+endstream
+endobj
+8 0 obj
+ 7698
+endobj
+9 0 obj
+<< /Length 10 0 R
+ /Filter /FlateDecode
+>>
+stream
+x]Ëj@÷>Å,ÓEй¨
+¡¤,z¡i@g©Ð2EÞ¾ãü*$ðåÜæ3gòÃñùèEäïa´'ZD?xh¯Áèè<øL*á»0¥o{i§,ŧۼÐåèû1ÛïEþónbóäÆ2!Dþ
ÁÅæëpÂO§ë4ýÐ
ü"¬i£>¶{i§×öB"OÅÛ£ña¹mcÙ_Æçm"¡KÉæ©µZ¦l_ħû>>MFÞý²®·ßmHé2¦
qM"¨
+Ò z ¨¨ ÇDª í@Ü¥M¤¨ÅÉjq&¡OïÃtY$*1]²$ûõ öÃ< ¿çðSpðÓæð+9~U_Íàg,~ëà§ñ^$ü4ü$û¡§®@ð3è©àWã)øôTðÓ-ÿ?ÎÂ9üjîÉ~Ø¿3áWÃAÁ¯Ä"òÆ+¹Þû¾ÛkqÕÓ%K;¾n÷àé~§qZ«ÒçÊè
+endstream
+endobj
+10 0 obj
+ 409
+endobj
+11 0 obj
+<< /Type /FontDescriptor
+ /FontName /VERKJI+DejaVuSans
+ /FontFamily (DejaVu Sans)
+ /Flags 4
+ /FontBBox [ -1020 -415 1680 1166 ]
+ /ItalicAngle 0
+ /Ascent 928
+ /Descent -235
+ /CapHeight 1166
+ /StemV 80
+ /StemH 80
+ /FontFile2 7 0 R
+>>
+endobj
+12 0 obj
+<< /Type /Font
+ /Subtype /CIDFontType2
+ /BaseFont /VERKJI+DejaVuSans
+ /CIDSystemInfo
+ << /Registry (Adobe)
+ /Ordering (Identity)
+ /Supplement 0
+ >>
+ /FontDescriptor 11 0 R
+ /W [0 [ 600 862 612 549 633 277 633 615 317 390 636 636 774 686 390 748 731 684 611 634 603 837 636 636 634 579 392 557 636 636 636 655 636 636 698 411 294 336 634 317 520 974 277 591 500 ]]
+>>
+endobj
+5 0 obj
+<< /Type /Font
+ /Subtype /Type0
+ /BaseFont /VERKJI+DejaVuSans
+ /Encoding /Identity-H
+ /DescendantFonts [ 12 0 R]
+ /ToUnicode 9 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 6 0 R ]
+ /Count 1
+>>
+endobj
+13 0 obj
+<< /Creator (cairo 1.10.2 (http://cairographics.org))
+ /Producer (cairo 1.10.2 (http://cairographics.org))
+>>
+endobj
+14 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000010570 00000 n
+0000001099 00000 n
+0000000015 00000 n
+0000001077 00000 n
+0000010411 00000 n
+0000001208 00000 n
+0000001408 00000 n
+0000009201 00000 n
+0000009224 00000 n
+0000009711 00000 n
+0000009734 00000 n
+0000010004 00000 n
+0000010635 00000 n
+0000010763 00000 n
+trailer
+<< /Size 15
+ /Root 14 0 R
+ /Info 13 0 R
+>>
+startxref
+10816
+%%EOF
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,177 @@
+PNG
+
+
+IHDR mê bKGD ÿ ÿ ÿ ½§ IDATxìÝ{\éÿ?ðkÊ:ëJ±:RTRÃ*ì¢HRØd;8%VIR¶¢6%dÉaËXi£øT¤OµFäB?§5¿?îÝùΧ³»»y=ÿð¸çº¯ûºß÷eîë=÷1Ã! Åx<^Ãår% 4ËåÊI: häl f@Î `äl f@Î `äl f@Î `äl f@Î `äl f 7g³X¬KZ$ÄQ}¦Æ ĨåÍb±?.ü¸{÷î6ä]¡6$ȳgÏêêêRÓ©©©FFFªªªöööÂ:\.WÕ§OBCCuttz÷îmhhxâÄ á°X¬®]»r8K.Q
:::çÎkóæ tVgÿôÓOT®ýðáC\\Í!ÕwäÈkkkjúðáÃÅÅÅÆÆÆóæÍ£
+sss:$¬±aÃÄÄÄ$$$g ºººåË{{{S%666ÑÑѵ) mתmddJ9vìØôéÓEg±X,yyykk묬,BÈ;wÌÌ̺uë&<ê
+ 8p ÉùóçÉ?çÆY,V½òÒÒÒ'*((ØÛÛß¾}[twîÜ2d5:fÌ%%¥9sæôêÕòöí[WW×cÇ ë¯_¿~ÁÊÊÊÉÉÉ
+·¨{÷îÔººzaaak: @²Z³½¼¼ÁÞ½{W¬X!:K ¼{÷nÅWW×I&={öLx¼¶¶6??ÕªU¢Ö+wss9sfYYÙìÙ³7oÞ,Z³¼¼\UUU´¤¢¢ÂÁÁaÏ=µk×.^¼xâĹ<<y2ùçd¸è|Õ[7WW×ððpªDMMíáÃé 4"f͵bÅ
+á[Ô¬ääd33³={Bºwï.zôèñôéSÑeß½{'>}úDþ¹Ýh9uÐLéÚµ«h #F(//~¼~ýú°aÃ=J}¬wq] 9òÄõâN|øð!99ÙÐÐ*|øðáÈ#ï hí}ãkÖ¬9pàÀwß}'ZèçççååU^^óöí[B¾¾þþýûkkkE0iìvñzå!!!Ôú»wïDkêééSÓß~ûí¡C,X@|úôÚᯥKnÛ¶íÄuuuÅÅÅõÖKR^^.¼Á
+ @µ6gO0A ?^´Ð××wíÚµzzzTÉáÃûí7UUÕϽ·<..®¬¬ÌÔÔ´ÞÙlBÈâÅ/^¼HM/[¶ìÙ³g666TµºººM^½ÚÑÑqݺuýû÷_°`ÁéÓ§
³¨sã!!!!!!TÉÅ]]]?+T `p¹\IÑ@0oÞ<ÑçÍÄÈÁÁ!11±=O¯ t .ÛEÒ1´¬ÞââE_Ë â
w 0r6 3 g 0r6 3 g 0r6 3 g 0CsÏgóx<×Q t4Ãáp
$¢ï$i1g½xÜÄ|ø ´¬"BH39 t°æ¿¤ùM11åác'Þ ¤BpJóó1 BGké;ëÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ ÌÐÂóÙÍÈÉ*ÊÍ*c( bgl>÷¢` 6kÏw²í9;7«¨ ó±
©i[ Ufv6!Ú¦ßɶçlB
©éÚÕ^íi >;öW¤¦Æ1 B´ó;ëÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ À²³54;fE`±çJ_ì¹R ÐÔ8 tV Þ¨¡,ú±ÞDÃògÏ
+ËC#ÖüÇSÔÐ<Þbûí[QCs°®Þ<7·ë¹7Egò÷¿STôáãGk;{ªäyUÝBgu=}»
ÎÏ«ªD+_¼|ù«Ú¢mFöÛoV3¾Ñ2ãìáKùôéSdlì8kAºz¶3RÓÎ.«¦=bã¿.gfR
#µµ/]æe{²0 6Ù0 Òöãì_RN?~Üúú?ÿLýzúðñcâÉ¢³"ãâ¾:åpÜÑö´ßJ5÷ù¥¹9ßLº10P´üÓ'\Î[cF¦J6ïÜ¥¢¢|åì¯**Ê[ví|,)i¢Åa5÷ù¢scIÜ·}{NFº¡¾Áâ«!±±GÅûxzÞμ¾;øÄTÑxÝ-t]0ý?R%&L8t\ÜÛ
+ âÔéÀ#@:г6s½7lüôéS+ëÖÕKûí7BHÒ©SÖ9Âòåå?
+}òôiÙÃÍ·ÿÒ¯gΨ£;yÖì¢BÈ¢"ó)S Ú¿ªs¯¬ìÍ¢oàìáq·¸¸a$,K^^üsú%<:úU;~ê4Ûy?ÿLýf̸zÕÓÍMsèЮnW3E[(*.<h`S[p8¯§Ø¯ß·Ó§õêÑuôØ÷sgÍTRTÔýê«.Õ½[7jbÐÀÿ))mªq ~ l@:гGjkO0á@Tt+ë/_¼8$ì@ >²dáBayôÑc¾ßê"/ïçõ]ôÑcÍ·¿û@ØDË yWx «üü !{3uê/¼{ÿª³ÊϺõäÌ«3¦LÙ¹o_½0541>zfËúuT«ëý¼[7¯¹Ï·o~ïÖMêgã/´45 !ZÕÕÕ¢<zúTYI©ùí}^Y¹Øseà?BÊ?¶²O;¤¨¡ùå~þ»·n¥JTË<i¡7@¢:ý Øtè{Ð<\ó®]ýMÔ§wïRþßÿߥ|~ß>}³4éÿå¾Úû÷§
+ß½{w4)i±çJE
+ÍÅ+&%½{÷®ö¯d^[æâ¢¦ªºÌÙùnI !ä÷¬¬%ÎÕTT¹¸Può×ÿ¸Umèî½æüoÿwRsÿ¸ðNrÌÏf&&T¢¦Ûðʵ,E
+Í+ײ%())ýÉçBþäßWVVmdðÕ/^4Ó37óóíìW-]j3i"!D}àÀ?näÆÎ#ÕÜçWþYâ½~URU]>°Éß° %:÷ ØtèÍb±ölÛúý?KÌÇ
+ ;PÊçòù!aÆ'Zßs[TÜQ÷E%'Î1=ú¬¹ÏÃf8s¦ö,Æ9vìyUÕ¡ØØQÚÚKsóè£G+««£þ¹d £³mãÆÜûüg%ª§æ>
믿$\ùõó¼y5÷ùK !-,¢¢î?xx :j¢
è"£FxÜô/Á_~¿déÞísgͤJw
¥¦ÿï7Â]úÿ6BÈÛöÕÇO
+ïï ©Õ¹Àf` ¤C=ë¥>hйsC¶m}õúµ½ý뺺Ý?nlfbRs?Îx°äplÜ2ïÇ2gç¨ÿ½£^û¾+Wþyÿ¾ÅÔiÊËÃ!Þ+<NK7ÙºKyªNÄY϶kê¦ÇnܼebdTSûR±_?a!×ßïyeåéÓWVøùÖ_0wnÆÕ«Ô´p-ÂÕëÖS÷S%ÿ}óÆÃu±Ý73¶ìÚ5Âdì²Õ«ã# RÔÐüräWaQ7þý33ãêU§¹ $«
+G6!t`p¹ÜFçq¹Üçu·=|ìÒ÷£úÚÕ^4FÇpÀuåª#a¡t4¾Øsetè~EGã ýû^u)ofSë& ÕÎïdCy,¦ï+!¾ Ú dñ=h L
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ ÌЮç³3³³wìW$ bm`1¾Æ1 Âçjçw²í9ÛØ|!ä)os ´2°DTbÚ¦ßɶçlóQ&ôì R H®g 0r6 3 g 0r6 3 g 0r6 3 g 0CÛÏÎÉ*ÊÍ*c( ;ñl«8`l
+¾lè|h³ö|'Û³s³ne>655ms ²³³ !ÈÙíUuå6ÛD[ÒH¯¼RBÏ
+ ´M;Àv½oÜÔÔÔËË«=-lz7> ÛDÛÅÃVÒQH³³ô5Ú¦= ®g 0r6ÈêÊî;Ì´¸;|Ù°BxpÁ 'éwáõFK]5nûþ}£¸ ©
+²eï¶D%e
ÄÛö&Ö[?ùhTEu"ÇÝívæZÎh
+÷Ð
+ ¤r6Ȭ+·O¢ñåB÷©Y¼Û¢³Þ½û°ÉûÐö°RÕþ5:
+ýzÛÌÛ£g·
+ ¤r6ÈÚê×C5ûBj¨©~-:kï¶_f9Z¯#UQQª¿ôY¶ßosG´ ©
+²¥rü
+BÈþSEå>¢³â_
+8F]ÌîàKÚÍDE¹óï{N3¸.+¦[NfwdT m³A¶YêÅL+/{qÞÌJ_tVþ¸§G%PÿJCT']^åäfk7¾#C )Ô®ç³Ä®Å×KµóµV«78®[y`îä
+úF÷® pj1CK0ªÍ>QwÇTÍì?÷ìÕ½Í+ FCÎéUt7·Ãá4:ÇãRÔ쨢¦y|]óu¦p FÕÁGü ͳAêp8.Ûè,.û¼îv£³Ú¬IQ:£ "׳555% HI¡ã` fг³³³/_>fÌ[[Û.«ÙF¿Ózzznnn7oÞåïï_TTôñãG{{{ÑÊØ7 Ódà9ÉÀÓÖtÍúáwþͧücÉÀéã¼Ýì¶ñ.ÜVntñå1ág[Ì£ÖiØ ààøÏ¿-Áý½*ÏÌÈ_:7p¶¥ÀÈÛ·þüÍ.R; VUU9;;ëëë;;;WUU+0è ô_½zõ%K¶oß^YY¹gÏ)S¦Ðº:>ÿÿþßÿûõ×_O8!,rrr·nÝ=z´°&ÁïYfÊÉ*"Á)¿R[ýæ+H$*]¶FÕ2
+ÂÞ½}vóàîУ>3I'ãy&ZêÕT¿HãL1jjYÒ >ü5ùZó+mªNÃSâyg37ît1J%Ç"d¤å/éÝ·gƹÜ-¾ÑIé-n£tÚp×®]ÊÊÊ¿þúëÞ½{wíÚµk×.Z1¢÷8{È!ÿýïù|¾Fxx8UXZZ:kÖ,]]ÝÙ³gBJJJìííG)D¯]»6vìØãÇÍ?ßÀÀÀÃ㸸ªÓÔQ2ÅÔÇèèhMMÍäääiÓ¦9::þüóÏÈÓXNVQôýIc©Åg ÷xÿVç©3Mû)öÖи)Èõ-½÷!hSÜí%>_ã¶wù÷k"ù¥OÓÌAyêñ«îÞ³Gê¡6!dSÛà¡jòòr_tí2P]*Heéçf·_ò¸õÑJÔW¯^uss:t¨[ff&Ýý bDïqöO?ý¿yóæÚÚÚ-[¶P·Ý
M0!22266ÖßßÿäÉ~~~GéÛ·/µàÉ'ÃÂÂ9¢««;oÞ¼)S¦_¾|yß¾}|>_SS:P®GSS³gÏÆÆÆëÖý}®«««½½½§§çÑ£Göï߯¨¨Hë&ÝLÌGyøØ5>/8
ÒäÜöhéZRQ½yó¶ÅZ<»÷èªo8|ù÷³©ÇÕÃ÷oÛ:#÷:Ë=v°$hÓ1ËÉìÍ{eÿ~'6ü,7diÃ:Ôáu£*TæóC¶Ä9ØÙcº¾ápòOWVUØ{Īö×_üád</þð
»\Û|ÚðÅTòÖÐШ®®îÞ ± 7g÷ïßÍ5kÖ¬¹uëË¥¾²×®]KKKSQQqvv&DFF
+¿¯ÿCéêêB
+srr¶nÝJùâ/Y]Ãï±ð§(51fÌ.ëìì,Æmr
+óeÿAÊe÷*FêiCk)ñ<@p è!dgFAXiÑÃÛ·þÛLéòEFë4Ó`_
^ôÄþʽv9ÿ`pJØ1_*æÚºËi¹?úEüÅ2ËѲRÙó9nöÛÚ¶DHí ¨¤¤Äçóõôôîß¿¯¬¬,ÆMºÑ{n|ÅÅÅÅ/_¾,((xúô)U8~üøcÇUUUÅÆÆjkkBFóêÕ+á¾¾¾Ô]:::7nÌÉÉáóùÅÅÅ´& >ïêêpæÌyóæñù|$l »ùc/¤f¿¬»ÿç-¾Q_6=?4£ JÃÔ¿Ú_©¯ðµOáíÈ(»xs_£u1ÖBÂbBuz<dKÂó§/¨Ú:ªÚéÄ«µ/^NüÝHäð]ÊIí haaõðáè¨(±o8ÐÞãì3gz{{?}úÍfQ
+W®
+
+6mÚøñã©Â;v¬]»6""⯿þ¢~*ZYYÅÄÄ,Y²äÉ'!!!ÑÑÑvvvååå>¿`Á[[Û7oÞ4z¨[·nùûûçääôë×OXXïçgkÚÃãñzÇãéKæ°@:£joæZÈËË%ŤïÛ8p°ÊB÷iMÕ^¦&MÀë¶»$Çex.zú¸º©:£í
+.õ¹cc\èdÝÑ+|í !úFýÝö}üðQÏpø¦ ¿OËɱ\fþ¨¢ª°^ä2¹ÚÐÏÏÏÛÛ{úôél6{Ï=´l<ÐÐü"ºÒõ£ºÑAg´oß¾÷]Êú^µç-¡á´]9ΨÂSÞ¼yëâa+ö;ð³={vofSë:Ró`ßI¼
+¤Iû^ÜMé
+ d4¾
+ BÎ `äl f@Î `äl f@Î `äl f ëùììììëׯÓÔ8H¿qãÆJ:
+S["é(1ÚxÛD[ÒQÐ £o ¤+g_¿~=//z'>ÈGAάüÜÿܪ¶ÿ
ììlBJ:}ÎÆ (Ëh i|Ãiêlйq¹ÜÚÚZIGÄÔÔT
+_®Yû¾TÒ!t2Ö׳ 9 ³ 9 ³ 9 ³ 9 ³ 9 ³¤Öîàà $µv ÐÔÔtð7@dÎf±XõJN:Åf³UUUííí¯^½*:ëìÙ³ºººÔtZZÚ)S¦LF5EÖÏÎÎ>}º¢¢â3ª«« !©©©FFFTã¢jkkêÚµ+ùtéUAGGçܹsttTi>OWUU9;;ëëë;;;WUUuXT@hé:ÎNHH8~üøÝ»w¬¬æÍ':ëÈ#ÖÖÖÔ´Óýû÷çÏïââBõ~®Y³fÞ¼y÷ïß;wîºuë!,..666m<##cÖ¬Yöðð JA]]Ýòå˽½½©èèhÚ¶víÚ¥¬¬ü믿*++ïÚµKÒát6 ¡EÒ³GÑ¥KnݺiiiκsçÎ!C¨é#G
+Ë
¿=ëùøñ#ùç7#õS455uÌ1JJJsæÌéÕ«U-&&ÆÏÏïÒ¥KVVV
+éÞ½;5¡®®^XXØÞÍ2eeeóçÏ700ððð(..¦²555
GÛQQQ¦¦¦3gμrå
+!äêÕ«nnnCuss£Õ@0 Bhü[mC®0`Àï¿ÿ.Z^^^®ªªJMÿüóÏãÇwvvþòË/³²²m'88xóæÍ>>>-=WQQáàà°gÏêãªU«:4lذ1ôèѧ!jjj>ËHÿ)S¦_¾|yß¾}|>_SSÏç+¼zõêܹs<oïÞ½VVV/^¼ Ò¹uÆÄ 4Oº³ !àùóçëÖstt-WWW¯¬¬¤¦jkkwîÜY便ezzzeeåøñã544¨Â7nùøøØÚÚR%ééé«W¯NHH¨ÃâââÜÝÝ©çÏät
[·n544\³fMzzzÃ
++W®TRR={v~~>!DIIÊè÷ïßWVVîèpe @htålww÷R¿ò_P^yy95ý×_ ˹ñÓ§O7oÞôóó£®ÓDFF~ûí·Z°`°Izzº_DDè²Toß¾¥>7u
+¹ttt6nÜÃçó !***<Vøâ/ÈÍJQQQ>²°°HÌ@hÏÞè(&L0qâÄ÷ïß?>11Q´æâÅ/^¼hffF Ù¶mÛwß}gll"Ú5!X,§§'!dÙ²eªæëׯ© ]]Ý+W®X[[×ÖÖúûûSÈËË7jrñâEWWW;@BBB¢££íìì¨|Àçó,X`kkûæÍÑ3äB~~~ÞÞÞÓ§Og³ÙÂó«Ðf ásI2g7ü
èäääääÔhe[[ÛØØXjÃáp8æú¬MMÍ{÷î5Ur÷îÝF`®ÁoÚ´iÓ¦MÂ//////jZ4mSÓªªªGíà ;+ÐRwZSX,ÖñãÇ%µv ® P¤ëz6 49 ³ 9 ³ 9 ³ Æç³y<Ë¥¯}Z<ÍfK:
+ ÙÙÙ¡¾ììì¯dâEå e ]9{ܸqÚÚZÚiÆf³©/ HÐhãÔ¾/t ÿã+#åÑÆ#$í0 Ê2Z@ºr¶©©©©©)M@Ø&ÚlmIG!£0 Mp= ³ 9 ³ 9 ³ 9 èz>;;;ûúõë45.Æ×Ôè
+ I^N)!g%
ôÊË)5·Òïøõb
Þ#ºröõë×óòò8MíKGiê? ½t06%餹¾Dz »¼(ôÑø¾q#;¯Ûår¹Í¿§½bgb>Êi[Za
Þ\Ï `äl f@Î `äl f@Î `äl f@Î `Ï ZådåfI:
+ig§Ø¡AÎ`ªÜ¬¢¬+·Ù&ÚDzååB³¡Ó@Î`0¶¶¤£fx;t*¹-:f] cÖÕ6è
+ ]^,÷$s6ŪWjdd¤ªªjoo):ëìÙ³ºººMUc ê|úô)88X[[[^^*Î*,,ÔÖÖ.صkWséÒ%ªÎ¹sçèÚì& 7dYuåKwÇfÚKÜwTW¾Å»pËÁz£¥®Ç·}ÿ¾Q,©Aì°ËBo´tg>|822²¸¸ØØØxÞ¼y¢³9bmmÝL5Á?¨?ýôSDDDBBÂD%eddÌ5ëðáÃÂëêê/_îííMØØØDGGÓº¥Þ{·%*)+$^ܦ¤¬°/0QtÖxw·ÛkA:£5|ÜC%!t ìò¢Ð®:fÌ%%¥9sæôêÕKtÖ;wÒL5EEEeee{{ûGB<¸k×.ccc9¹ÿÛÆ??¿K.YYY5\{÷îÝ© uuõÂÂB:6ð³ 7dGÖÛÎ˧
+Ñør¡ûÔ,ÞmÑYûcÖèh(ôëm3clÝ$!t ìò¢Ð®M©¨¨pppسghayy¹ªªjSÕAMMÍï¿ÿÞ«W/BHYYÙ\¡ IDATü¡¦¦fmm-<¯²jÕ*aöÃb±ºuëæêêJ!¨©©=|ø¶íû<è
+YP[ýz¨fBÈPÍ5Õ¯V¨zþÒgÙ~¿ÍNt4ìò¢ÐõH]ξqãíÿÜ
+«®®^YYÙ|5]]Ý-[¶Ü¸q¢¬¬¬««[RRâäääããCUHOO_½zuBBhËàÃqqqîîîTÉóçÏ
?â$½!#ú)÷yÀ¯ <à?UTîSoîßsÁuY1Ýr2[ÑAÇÁ./
+½ÑtåìÈÈÈo¿ýöСC,¨7KOO¯¼¼¼ùj÷ïßß¶m¡¡!!dêÔ©ä
+çCLLLÒÓÓýüü"""D¤ª½}ûúX^^.¼ÁAвÃÌR/ö`ZyÙ³¸ófVú¢³N»¼Ê%$ ÈÍÖn¼¤Â]^z£QÎÙõnð[¶lÙ³gÏlll¨ºº:aÍÅ_¼xnX°¶¶îÝ»wll,!dûöíCýå_BBBíèêê^¹re×®];wîÆÐ[·aµ/ºººvLBoȬի*kçNÞPUYëµ~!Ä`Àß§Á7ûDQwp2àôæ¿o%)vyQèÖä;U>ôÖÌcp¶¶¶Tï·rA55µz7èëhjjÞ»w¯5Þ½{7
èÅ
+½!ËTÔ"¯ktVÁÓ£tìò¢ÐÄ÷ ±X¬ãÇw̺:lEmÞèôªAvyQ²ÜÒu= ¡I@*0æ8 ÚÊv=zvm¬=ßm¡&UvòÇ.?)¯0He¡û4Î#ªrFAXÃÅ !õÊcÂÏÆ«WXO£u6(ø$HM?ùäQà £ ,3#?&ülÕ³ÆZs&êiµyó:äl Úådà:Õek´X-£ ìÝÛ÷i7îN =êC9y2ç°h²©¥^Mõ«¸4*g7º,ip[\øð×äkͯ´©:
+LçIÎܸÓuÄ(u¼¤wßçr·øF'¥¶¸ 2çÆèåác'ù¿ÉbÉɳ·Ø¤Äóü·:OiÚO±·ÖÀMAnoéý»Aâ6l_$,yôðù·½3Ì¿XÉ/}ÒhfNn§¿êî={¤î*aB6¹
+ª&//÷E×.Õÿ~uF\DÚ,K?7»müÇ Áq6 í<|ìhi78åÍýdàÙ½GW}ÃáË¿MT<®6¼ÛÖ¹÷ôÔYfì±#%AYNfoÞ³,û÷;±ág¹!KÖiæ,zÅêÂ|~Èøá#;{L×7NþÉñʪ
+{üýÚç¿þútää'ãyñ/lÜ%EÏÞ t$älN®a¾ì?H¹ì^ÅHݶ¼Ý)%' ÿ\ÿ.-zxûÖa» !]¾èÒhfì«ÐkÖØ_¹×.çN ;æKÅ\[Sw9-÷G¿è¿øBf9ZöSê3{>ÇÍ~[Âè³dÝ|ÎαóO6µÔ{Qõ*."õ§ÇÓóÿþÛbÂd¬ýúÉìɶ&ýú4U§c-t!ÔF¤NlIpZ:¥[®Ú¿ß¤q:ñêÌyN'þn$rø khÌÙ<ËåÒ×¾TáñxlvsïFoôøf®
¼¼\RLú¾m«,tÖTMáuhj¢Ñ¼n»Kr\ç §«ª#LÞ
+\ê5sÇÆ¸Ðɺ£5VøÚBô{»íûøá£áðMAc¹ÌüQEUa½Èeri]¾^ôXгÇG©¥©}iÃf³©Mnz$¥©ÃÜévæÓíÌ[¬ÜÌQ²pVÿÊ+ýç®ôÛLBýúì8°B´ÄzÆXëc¶ÓÌoi]^zCèÊÙ¦¦¦¦¦¦45Î8è
+ ]^zCð¬ 3 g 0r6 3 g 0r6 3 g 0r6 3Ðõ|vvvöõë×ij\:7®©gÑÐñòrJósK$E#F`hK:
+za
Þ#ºröõë×óòò8MíKGiê? ½/?·ä?·ª¥í!;;N³±ËBoïçp8²óY.ÛüùÐÐñLMM½¼¼$E}µïK%BGÀ./
+½!.¸
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ ÌÀ-èhÙÁÁA ÐÑ2}ÐÐ455%ü
+»¼(Yî
+IælÕ°Ò°òÙ³guuu©éS§N±ÙlUUU{{û«W¯BRSS¨ÌÌLÑÆµµµÃÃÃ
íwíÚÃá\ºtª ££sîÜ9z6ñ3 7@4§5ÿÑañtbØåE¡7ZIº³AS¿q9bmmMM'$$?~üîÝ»VVVóæÍ#>|822²¸¸ØØØ*¡dddÌ5ëðáÃÂUÔÕÕ-_¾ÜÛÛ*±±±¦q«Ú
+½ÒÏçóù|IGÑia
ÞhtåìfܹsgÈ!Ôtbbâ#ºtéÒ[7---BHjjê1cæÌÓ«W/ªZLLߥK¬¬¬6ؽ{wjB]]½°°°C6BlÐ eeeóçÏ700ððð(..¦ E¤£¢¢LMMgÎyåÊF*ë°ËåÞ ñoqWyy¹ªªªð#u®cÀ¿ÿþ»°°¢¢ÂÁÁaÏ=ÔÇU«V:thذa¢íPöèÑC8©©©=|øæðŽbáïï?eÊðððË/ïÛ·ÏçkjjI¿zõêܹs<oïÞ½vÐ1°ËåÞ`Ìq¶ººzee¥ð£@ xþüùºuë©7nùøøØÚÚR%ééé«W¯NHHmG |øð!..ÎÝÝ*yþü¹ð'S 7@,
+·nÝjhh¸fÍôôôV®\©¤¤4{öìüüü°ËåÞ`LÎÖÓÓ+//§¦ÝÝÝ>|HýD¢þç"##¿ýöÛC-X°@¸Izzº_DDhSÔoß¾¥>og`
+ô
ÎÆsrrø|~qq1!DEEåÁÂ
+_|ñiìþ è`ØåEÉroHøÜ¸èX © Ñ/^|ñâE333BÈ &NøþýûñãÇ'&&B-[F±±±¡*¿~ýÐÕÕ½råµµumm¿¿?Õ²¼¼ü¸qãBBB¨:/^tuu¥yC[½,$$$::ÚÎÎù|þlmmß¼yÓè½fÂëÜÔîGk'ìò¢Ð!ÉÝðÀf³µµ¥¦ZÙ¦¦æ½{÷iÿîÝ»8-ÐÐñ¼iÓ¦M6 K¼¼¼¼¼¼¨iÑLM#IvyQèVbÌ=h,ëøñãt´LS³´Bo Èìò¢d¹7s= @Æ!g 0r6 3 g 0r6 3 g 0r6 3Ðø|6Çãr¹ôµ/Ux<Ín¾z:Xvv¶¤C¨/;;û+#eIGѰË׫޺rö¸qã!µµµ4µ/mØl6µÉBo@Çm<Ú÷¥ä|e¤<Úx¤£ vyQè
+1¢+gÒÔ8ã 7 ã±M´Ù&ÚBFa
Þ#\Ï `äl f@Î `äl f@Î `äl f@Î `ºÏÎÎξ~ý:MK§qãÆ5õ"zhSJÈYIG!½òrJÍô;~½ØåE¡7Ä®}ýúuze^^!¤©ÿ$ôÐÁØ|¤CvæVúé%ìò¢ÐbDãûÆÙl¶}í3zÄÎÄ| Ò¶´Â./
+½!.¸
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+ À4>
+ ´ÊÉ*ÊÍ*tÒÎO±C'
+ÀT¹YEYWn³M´%ôÊË)% gC§
+À`lm[IG!Íð2vèTp= $³ÓÒÒ,Y2}út777×ÎÖ&M4iÒ$[[Ûõë×ß¹sGtVPPн{÷>~ü¸råJª¤¦¦Æ××wƾ¾¾555í\µXH°7&ý£+~Õ/Ýwi/qwÜQ]ùRtïÂ-ëºkÜöýûF1¢ºa
°5$³Ï94gÎøøø7þþûïío3###%%e -,ëîÝ»_}õU©¨¨¡¨¨ÙþU·d{######£ýk~{·%*)+$^ܦ¤¬°/0QtÖxw·ÛkA:£5|ÜCÐ
+ ($ÉëÙ)))k×®9r$!¤_¿~6m¢ÊËÊÊvîÜYVV¦¡¡áëë«¡¡1iÒ¤ùó秤¤;wîÑ£G!!!%%%cÆqqqÑÔÔlز@ ¦O8F9þ¼p½999
+3gÎÆ;b%ÙÞè-YWnÆ~?DãË
îS¿s µ?f
+5a3cì©D1L
+h
PÀVäqvEEŰaÃ;vÌÄÄ䨱cÆÆÆAAATaïÞ½SSS !AAAãÇOHH°°°·ì¤Ifϱ|ùrªÄÞÞþôéÓFFFFFF§N¢þ^¾|9xð`BÈàÁkkkiÛÊÖloÈÚê×C5ûBj¨©~ݰBÕó>ËöûmvBT at +¢0 ¶$³û÷ï_VVFý°uóæÍ¨¨(EEÅY³f%%%Q
³gÏîÒ¥!¤´´ôöíÛÔo%ªDTÃÿ á%
+jbÖ¬Yß}÷ݬY³=z¤ýèÑ£~ýú{ã>d{CÜ[#½ú)÷yÀ¯¥?ìÿ©¢rzsïüû{誵s,'³Ð
+ ($Émgg·sçÎyóæ¾xñ"..:2fÌÔÔÔo¿ýöÔ©SÂ_^ݺu£&´µµ'L0yòäV~Ï22280~üø={¦¦¦~ÿý÷T¹±±qRRÒ¢EÅ¿yI²½!;Ì,õb¦ðµ8of¥/:ëıˡ;÷{Yé!* @Q [I9ûo¾OJJÚ·oßÀ.\H;99=zÔÍÍmÌ1þþþõZ·n]rr²§§çÓ§OIc¿¤*,,\¶lYAAA>ÿw³téÒÀÀÀ¥K5jýúõâÛ¬6loÔûùɸóE·zãºæNÞ o4|{è
+BÁ §§G !}¢!î;¨ÙîÙ«;5ÝâÇÚù²¶EPÀVð;U¦O>}úôz
CݰahhöïßåÊÂ{ôª&:sbddddd$,TRR
+nsät`oHówT¼TÔ"¯kt#Ut7·Ãá4:ÇãRÔݶ¨é0  ØxȺV&EÃårÅår×ÝgLHÕ Ð¼
+ p
+ÐM2ð$ôèÙm´±ö|·)z?ÀvòÇ.?)¯0He¡û4Î#ªrFAXÃÅ !Âòê×ë.*(e0l}à"Eå>)6ØÊO¤Øô3ÉOU > 2
+Âi@¦ gC§UDSèhÖÖF¿ù
+t¬·y9YEºl«e½{û>#íæÁÝ)¡G}!g2OÆóM6µÔ«©~FåìF%"¹÷¢Rĵ1ág#÷öÛâÔÏZ<%w&9sãN×£ÔYr¬Fjg×0ÎÈ KN%|TJ<Ï«óÔ¦ý{kh
+ÜäÖúr²æ:=hê
¨{é[S"Ìú©züª»÷ìºC¨Ýh ÙãlèTLÌGyøØ¿Ý¡éZoóSÞ¼yÛbIÝ{tÕ7¾üûÙTIÅãêaÃû·m/kÿ;x¨!dðPµÚºVO·¦rÅêÂ|~Èøá#;{L×7Þ°lÂq6@'QvîúWêiQ%ý)Ý«h[k
+ýz=zðòèÁó~½[YòY÷Uè5Lk@ì¯ÜÉ3L§4ß LAÎ9vó9;7Æ^HÍ~Y[wÿÏ'[|£Z¿¬±Ù¨¤Øô'åUÉqÆf_µ²ä³k¡Ca±!:=ÞL 2E2çÆóòòòóó%²êö=z4-þ>£7Çã5õ|6ÇÓ1VîØpÚå¹òòrI1éû¶%¬²Ð}ZS5
ס©°¥«g®ûyéÜÀQúÃÖo_DiMðôV-î5sÇÆ¸Ðɺ£5VøÚ7ZѰËBo|Éäìüüü²²²¦Þ*%¨¿ÁNÇzCú"¤¨©§è+·ã%h´ª÷ìÐt;óévæ-VnX¢¤Ò78ò»Ï-¶ÓÊýúì8°¢ù:]^zã³Hì´fÞ*%¸\nYYM£7¤Iû^'PvyQèÖÃõl f@Î `äl f@Î `äl f@Î `äl fÀßèòrJósK$Àhãlm Ðù gtNù¹%ÿ¹Umjj*µgggR
+ ^ÈÙ ©©©¤Ö^û¾TR«è¬p= ¤7g³X,Õ§O3f\»vMXX¯Nk¢¸¹¹åççøðÁÌÌ*yöìMß¾}mll={FÛ¦AôFjjªªªª½½}ff&m -ë]õÚ6Bl: 7N:Åf³©ðêÕ«´mJ{IoÎ&gÏÙÙÙùøø´©O>ÉÉÉýñÇcÇ¥JÖ®]«¦¦vëÖ-55µuëÖ3tÐÝ,..6667o8CÏG÷./8#¦Ý½püøñ»wïZYYIó (í׳Y,¼¼üç~±ê-µwï^oooBÈÏ?ÿLüôÓOàâÅgÎÑÒÒòöö9s¦X§½J}3gÎ#GÄ4 ´»¼X#í´öFbb"!¤¦¦¦[·nZZZâ[¬¤ú8Åb©ªª&$$µg©Õ«W¿xñâ믿_ýuUUõÿWUU5bÄBÈ#*++éØ1¢»7({öìsô ð:fgè
+¥¤¤´yóæèèhñoHõqvÃ/Vß¾}GI)..VPPhÍRÂëÔÊþýûW®\©¢¢RRRbddTRR¢ªª*þ
++º{rãÆyóæmݺÕÖÖV
ìñÀgé]A: 7Aeeå/¿üâèè+öM©>ÎnÈÒÒ200°¸¸¸¸¸800ÐÊʪ5K ooowëÖ%KêÈÚÚ:$$äÞ½{{öì±¶¶¦9vñooDFF~ûí·Z°`Í@[wg:ñö»»ûéD.ͧ]³ÃÃÃ_¾|iffffföêÕ«´rÁ¬¬,33³/^()) wìØQQQÁf³+**¶oßNOÈ4oo,[¶ººÙ²®®¨ Ä»ËogÊÝãõ·7&L0qâDCCÃk×®Q×¶¥ôoôËàÁO:õ¹K¿ßÊD¾þú믿þZXØ¿ÿß~û}avè
+&^â謰ËêÞprrrrrj_aÇÙ 29 ¡©©)é >äl f@Î `äl Ù`cc3|øpêLxQQÑÔ©Sdzÿ~aMMM--
ÞºuKr !ÈÙ ²,44ô_ÿú×;wø|>!$<<|êÔ©.\xÿþ½°Ï/..vrr
+\¤ @r6,Û¼yóùóç'LCÉÊÊZ¸p¡UáüùósæÌ100ðððÈÊÊh°
+ Ã&OA177?zôhuuõÑ£G©
+;vìX´hѵk×ß½{'Ñ`@rïTáñx\.WRko7lØ0úGo@Ç£.ckjjzyyB<<<¼½½cbb/^LUXºté®]»¶nݺdÉIÚé`¯×8z£$³GM)++ÈÚÛfذaTØbÞ I¡.c5êüùóÔôªU«!,¾i[\°ËBo|Éäl6Íf³%²j)Þ )ØåE¡7>®g 0r6 3 g 0r6 3 g 0r6 3 g 0ÏgçååÑ׸´ÉËËãp8ÍWè¨X$¯ÅÞ-ÁUe¤,©µKìòõ*tT,Gë HWÎ7nM-K'ÓÌ&£7 ã6AHIíûR¬ý+#åÑÆ#$²ji kߢh éÊÙ¦¦¦¦¦¦45Î8è
+èxlm¶¶¤£QØåE¡7Ä׳ 9 ³ 9 ³ 9 ³ ¡]ÏgKð-KÀ\ÙÙÙF$E'SJÈYIG!½òrJÍôij ´A;À¶çlcóQ÷¤¼Í-l2²D}y Ð-2·Ò§©0 BÛ´s l{Î61e!@r°J:$׳ 9 ³ 9 ³ 9 ³ ¡]ïA ÊÉ*ÊÍ*tÒθRçdàñÆÐ¬"[æÞÜ
+ÀT¹YEYWn³M´%ôÊË)%´-gs81GÐ[ýæ¿xÈÙ Æ6Ñvñ°tÒ¬í/cçp8HÛ mp= ³ 9 ³ 9 ³ 9 ð|6@ËZ|ãX{^¶ ÐJÈÙ -ËÍ*º[ÝÔ6x<!EÈÙ @7älVáp8\.·ÑY\.÷yÝí
+ d®gM2ðt ³:3*}öèÙm´±ö|·)zTyÚÉ?N»ü¤¼rÀ
îÓ8S¨Êa
+'Ëkª_®ÿ¹¨ lÁ°õûdñ
+b{^Qc`¬5gá$}ÃáÍÄÓpqÑO%3#?&ülÕ³ÆZs&êi}Ö* :1älèThúã-þ<üÑÆ¬"]¶FÕ2
+ÂÞ½}vóàîУ>3I'ãy&ZêÕT¿H£rv£Ëÿ=nÜ{JQ©ODâÚð³ûNûmq:{"ë{îüÏ$enñJJl&¯4-7 xIï¾=3ÎånñNJü¬U tb87 X,9y@ >¥Äóü·:OiÚO±·ÖÀMAno)'«h®óרÎY8º~Ûþå#tôQèeicØ£G7ªZ\DÚ,K?7»müÇD$ë7\òíxüÖDV>«%l
+r<TM^^î®]ª«6µ
+ ãlèTLÌGyøØ¿Ý¡éZoóSÞ¼yÛbIÝ{tÕ7¾üûÙTIÅãêaÃû·m/kÿ;x¨!dðPµÚ:aùªW[|¢VøÙSÿúëÓ?çž°q«ðHºáâÔ¬²{O¢/îØ»ûðw䯬ª°÷wS« A8Îèä2
+ÂÎ]ß³óàJ}#-ª¤ÿ å²{mkM¡_¯GB=xÞO±7Uø;e+\&ZêQ%³-ûÌϹu£¤ÅÅ !ÃXì9ã?wÊ1§\Ù9ßÍæG¿è¦V ³dÝ|ÎαR³_ÖÖÝÿóÉߨÖ/kl6*)6ýIyUr\±ÙW³'®mXuðûùmMÕN'^}ñútâïFcG4¿8åéãêcÎk}¥N ÙðüéB¨cñFW pn Ux<^SÏgóx<cå
+§]¾k!//¾o[âÀÁ*ݧ5USxÈ([ºzfàºÎ
+¥?lýöEÝã !¾îû©g³C!rr,?ª¨*Puw¤7\jy ºþº@gB¾Ñpo·}?|Ô3¾)ȵÑUôè«Ú ³Zfl>¢¦^¢c¬l,/A«wK¶Ðt;óévæ-VnX¢¤Ò78ò»Ö,%úS at X§5[Ïk=clk¶@Ö g´Ì¯ )ëÙ Ì
+ ÀÈÙ Ì
+ ÀÈÙ Ì
+t
+ ëIDAT ÀÈÙ Ìç³,/§³Bzåå[5÷GT9©¤öåkÒÃÜJ½ r6 Sáíl ²×³ 9 ³ 9 ³ 9 ³ Ïg´,'«(7«HÒQH;c</@3älåfe]¹Í6Ñt Ò+/§
+ at +älVah»xØJ:
+i×Ð׳ ÇÙ [ª+_®_^póO1Zû=U³8QOJ(: æà8dËÞmJÊ
+·))+ìLUðô(²5 H3äl-YWn;/6DãË
îS³x·% Àg@ÎÙR[ýz¨fBÈPÍ5Õ¯% Àg@ÎÙÒO¹Ï~!äÿ©¢rI ð³A¶YêÅL+/{qÞÌJ_Òá |äl-«78VUÖμ¡ª²Öký<"r»¸Á 'jZ8 Uð¬È5
Èãë
Æ@Êá8dR5 0r6 3àÜ8xL2ð$ôèÙm´±ö|·)zTyÚÉ?N»ü¤¼rÀ
îÓ8S¨Êa¢ßÈ,L>z¹øÎzCç8Mk¡[Sý:pýÏEe£\¤¨Ü§aÁ'ARlúäÌ'ª¢mffäÇzöÒÀXkÓD}#1gñ
+b{^Qc`¬5gá$}Ãá
+WJcÀgBÎN%'«§ÐѬ.[£ÅjaïÞ¾ÏH»ypwJèQBȤÌñ<EM-õjª_ÅE¤Q9»¡b=|ìÝ23òwlM¹²3rï)E¥>kcÂÏFî;í·Å©axÞäÌ;]GRgɱþ'´Üà%½ûöÌ8»Å7:)=°áJÏÈú;À å3I[|¢Ò®´M ´À¹q ±b±ääYúÏóßê<u¦i?ÅÞZ7¹5µú°/
ÓôBr²æ:=hê
¨¿ÞݰNêñ«îÞ³Gê&lêp²)ÈmðP5yy¹/ºv¨®*û5{¥ï²ý
y|BȶýËGèé£ÐËÒÆ°Gn® ¤³¡S11åác'þvSÞ¼yÛbIÝ{tÕ7¾üûÙTIÅãêaÃû·f
+þ[W9oߣ¨Ü'4Îò²ö¿ªBU«©k´NÅêÂ|~Èøá#;{L×7.zzÊßʪ
+{xS%aýõéÞíc/zP
/ª^mñZágßèJ@z gM½KÔþËîUÔÒâ²?úE-_cg>Q?3#oTx¿B¿^<×¥þèÁó~½ÓW¡×0±¿r¯]Î?vÌ·^<µ5uÓrô>øÿï¿åùí^ñãwoßwíöUç?wʶøD»®úÆÔRÒp¥ =pnFvó9;7Æ^HÍ~Y[wÿÏ'[|£ªùé/p:³nl6*)6ýIyUr\±ÙWÖk¡Ca±!¤Þõì- Ͼ fQGÌ!'íL<~iëÚmÎïß} =qmêßÌlkB-Õp¥ =³hôÍ\9'%ŤÿkÊÛüXY6UÓÃ×þâëÿòÃo¿æ¬ðµ',]=óEÕ«¥s_T½Zâ5³ñ:^3/¿åhóÃå´Tðz¶¾Ñpo·}Ëæn¿ÇßäJq\49rïiW»mµ/þ>é½{s|Mõk_÷ý<'xþ¿7ï® ¤ÎGÃãévæÓíÌ[¬Ì6Ñfh(©ô
+ü®ù:ýúì8°¢Ñgµ1VtÖ7¾q@M;¸|Ýh=zv«·R 8Î `äl f@Î `äl f@Î `äl f@Î `äl fÀ;U Z%/§³Bzåå[éK:
+N9 eÆæ£$´3·ÒG/Ð
+9 e&æ£L @Òp= ³ 9 ³ 9 ³ 9 ð|6@Ër²r³$E'dß>r6@Ër³²®ÜfhK:N%/§
+ÐzÈÙ Â6Ñvñ°tÞßðyp= ³A¶ð.Ür°Þh©ë±Æmß¿oΪ®|éî¸ÃL{»ãêÊ )ÈÙ [NÄó¸»ÝÎ\Òáã*:kï¶D%e
ÄÛö&J*B ¦ glÙ³FÇ@C¡_oc{ôì&:+ëÊmçåÓh|¹Ð}jﶤ" h
+r6È¢ªç/}í÷Ûì$ZX[ýz¨fBÈPÍ5Õ¯% @³AæÜù÷=§\Ó-'³EËû)÷yÀ¯ <à?UTî#¡è
+²åı˫\BÜlíÆ×ef©{0¼ìY\Äy3+} Ðäl-}¢¨ûÃ
+8pzóß·þ>C¾zcUeíÜɪ*k½ÖÏl
+á* [
+mjBäñu ÀgÁq6Ⱥf²8 TAÎ`I $ çÆÄJ¨=zvm¬=ßm¡&UvòÇ.?)¯0He¡û4Î#ªrFAXÃÅ !ÂrÑ]¯²PfF~LøÙªg/
+µæ8MÔ7ÒÎ|$ŦIÎ|ò¨JðIQÖTåð³1áçZ HälèTr²Hp
+Íê²5Z¬Qöîíû´w§õ!IÊ<ÏsX4ÙÔR¯¦úU\D³]48n1f¤å/éÝ·gƹÜ-¾ÑIéÂY)ñ¼3Éwº¥Îc5U¹¸ðá¯É×ZÜ4 87äÿ°#%'ÏÔ§xÿVç©3Mû)öÖи)Èí³ûv¼ÏÌ ~k"+ÕR%qi³,ýÜì¶ñKB6¹
+ª&//÷E×.ÕUHÖO=~ÕÝ{öHÝ!TÂn´òûw6ÅmؾHt¥<¿f¯ô]¶¿0ßæn :à8:;ZÚ
+Nyóæmµ&xvïÑUßpøòïgS%«
+ïß¶uRÙe÷&D_ܱ!v÷áï!ýõéÈÉNÆóâ_ظËü¤Uöñ&"æOªóù![âìì1]ßpxÃÊ{OOeÆ;¢ÞzÿúëÓ¼ÛÇ_õh[ð @äl ±ix*»ÿ å²{#u´¹ÍaÃ,öáf·ú8ËѲRÙó9nöÛ+©»û£_ôÁ_ü
öUè5Lk@ì¯Ükó§ómX9%' ÿ\bÿý·¼ã1¿Ý+~üîíû®Ý¾hsØ @ Ý|ÎαR³_ÖÖÝÿóÉߨÏmáéãêcÎk}¥N}<xµöÅëÓ¿A ÙðüéBjkêDk¡C¡fQ§ÇVNÏÍ(£~jPÿF´_0ñø¥k·9¿÷¡í[ 4Àq6 ¾k!//¾o[âÀÁ*ݧ5USxÈ(£&ª«Yé¯t¦æÊɱ\fþ¨¢ª°~û"B¾Ñpo·}?|Ô3¾)èïSåTö]ê5sÇÆ¸Ðɺ£5Vøþÿöî($ª=àø¿ÁrÙ''{
¤û I) »] %ئ%¡\0¬|
+ziV°ÖMiAèi
+¢QãbôpCÉ ÇÕ%¶"Øa¥í:Wï9çßý|aÎ8óAæË¿çøuïüSüÓïÿvõýË?Nä·uo°5¶
+
+
+»mhhè_ÿ~òK-B<Fo¿~ýS>ö _¿ÞýöÛߤø 3:|{ço+} BÖ
+
+Ù7 qÐl f@4 â Ù Í8h6 ÄA³ Î5?·øøÑBìinhjÙµî¦,ÏlfÃf=~´ð
ôRkkk*Ï^,CX¨ÔÅ,ÏlfÃhmmíëëKëÙ_¾]üÄÖ,Ïlõl f@4 â Ù Í8h6 ÄA³
+ qÐl f@4P__¿v5Y
+øfCÖ½}ee%Ï766æóù§*«4[ýÿ$<PfC
+
B.Ìår
B!íqþÏÒÒR¥©ÐlHÂÚ·ÕëׯïÛ·ïðáÃO>
+!ÌÌÌtww×ÖÖvwwÏÎÎfj6 k4õþýûû÷ï:thtt4°ººZNf]]]©TÊÔl@Öh6$êäÉ;vì8uêÔÃCÕÕÕåýÏÏ?Ïår
+ÈÍDMLLJ¥¶¶¶B{{ûØØØ/ÆÆÆÚÛÛ355Ui ¿.ß|óÍ¡CvîÜ922Bèïï¿páBWWWSSSùì̶¶Î]¾âïÑ u
+I(¯|yîܹµÛkjj&&&R+Py6¬±o â Ù Í8h6 ÄA³
+ qÐl f@S¶@±XLñ©wïýÔʳ<°!
+µ§¹!
oSyöÝ{s{*mÍòlÀFi6lVSË®¦]iO±¾,Ïlõl f@4 â Ù Í8h6 ÄA³ ÏÍ[|üh!í)6kOs#¹!ã46ëñ£
§?Z[[Óäç+!,h6dfÃhmmíëëK{MIëü¦À³
+ qÐl f@4 â Ù Í8h6 ÄA³
+ qÐl fCúêëëÓfCÖ]»vRÔWVVòù|ccc>_YYIx0 a
+öäÉ[·nUÚZ(r¹Üääd.+
+I$O³! õõõãããmmmSSS7nÜ8pàÀÑ£G§§§×î300pïÞ½ÂÝ»wBoÞ¼éïï©ô°333ÝÝݵµµÝÝݳ³³ ¼ Eþ'$äÕ«WSSSgÏíéé¹sçÎôôôÕ«W;::Êw<}út©TzðàÁøøx¡P(8qbÿþýsuuµ¼Û¼®®®T*%óB´ø
+ éíí®®>~üø»wïz{{s¹Ü±cÇæçç×îPUUÕÓÓ388xþüùªªªÂÍ7/_¾\®òºKÚÕÕÕKKK!çÏçr¹¤^
+Ílß¾=°mÛ¶®¯yýúõÈÈÈÍ7ß¼yBxöìÙÒÒR¹ÊåË´··½xñbll¬½½=W¤H³!+.]ºÔ×××ÑÑqæÌ¡¡¡/ùþþþååå®®®ååå/þÂ)³
+Iøð[òO¯/¯\¹R¾±³³³³³³Ò¨¦¦fbbb«2J³!-iW
+9ðµÒlHïõl f@4 â Ù Í8h6 ÄÁ±^°ÅbÚ#lJ±Xܽ×éÊ!ë46kOsC/ß.¦=ÈÏ·{onOsCÚS ¡Ù°YM-»Zv¥=ðõ³
+ qÐl f@4 â Ù Í8h6 ÄÁñÙðEæçC¸ö_ù¹Å¶iO1Ñlø¼æ¶ïÒá+Ôv°Ñ¢Ùðy-mßµ¨6ëÙ Í8h6 ÄA³
+ qÐl f@>s|öÜÃÃðídFHÒÜÃ|ïDlÄäSÍîììLj¤ù¾Ñ§qùL³ýB@FXÏ8h6 ÄA³
+ qÐl f@4 â°íàÁÂú/#0ZÕ»Rb IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/devel09-pci.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
+ <page_type size="4096" count="0"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="PowerEdge R410"/>
+ <info name="DMIProductVersion" value=""/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0N051F"/>
+ <info name="DMIBoardVersion" value="A01"/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="DMIChassisVendor" value="Dell Inc."/>
+ <info name="DMIChassisType" value="23"/>
+ <info name="DMIChassisVersion" value=""/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Inc."/>
+ <info name="DMIBIOSVersion" value="1.0.5"/>
+ <info name="DMIBIOSDate" value="04/14/2009"/>
+ <info name="DMISysVendor" value="Dell Inc."/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="2.6.27.39-0.3-perfctr"/>
+ <info name="OSVersion" value="#1 SMP 2009-11-23 12:57:38 +0100"/>
+ <info name="HostName" value="devel09"/>
+ <info name="Architecture" value="x86_64"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="12884901888">
+ <page_type size="4096" count="3145728"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-04]">
+ <object type="Bridge" os_level="-1" os_index="16" name="Intel Corporation X58 I/O Hub PCI Express Root Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[01-01]" pci_busid="0000:00:01.0" pci_type="0604 [8086:3408] [0000:0000] 13" pci_link_speed="0.400000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 1"/>
+ <object type="PCIDev" os_level="-1" os_index="4096" name="Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet" pci_busid="0000:01:00.0" pci_type="0200 [14e4:163b] [0028:008c] 20" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5716 Gigabit Ethernet"/>
+ <object type="OSDev" os_level="-1" name="eth0" osdev_type="2">
+ <info name="Address" value="00:24:e8:7f:92:68"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="4097" name="Broadcom Corporation NetXtreme II BCM5716 Gigabit Ethernet" pci_busid="0000:01:00.1" pci_type="0200 [14e4:163b] [0028:008c] 20" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5716 Gigabit Ethernet"/>
+ <object type="OSDev" os_level="-1" name="eth1" osdev_type="2">
+ <info name="Address" value="00:24:e8:7f:92:69"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="112" name="Intel Corporation X58 I/O Hub PCI Express Root Port 7" bridge_type="1-1" depth="0" bridge_pci="0000:[03-03]" pci_busid="0000:00:07.0" pci_type="0604 [8086:340e] [0000:0000] 13" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 7"/>
+ <object type="PCIDev" os_level="-1" os_index="12288" name="LSI Logic / Symbios Logic MegaRAID SAS 1078" pci_busid="0000:03:00.0" pci_type="0104 [1000:0060] [0028:000b] 04" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="LSI Logic / Symbios Logic"/>
+ <info name="PCIDevice" value="MegaRAID SAS 1078"/>
+ <object type="OSDev" os_level="-1" name="sda" osdev_type="0"/>
+ </object>
+ </object>
+ <object type="Bridge" os_level="-1" os_index="480" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[04-04]" pci_busid="0000:00:1e.0" pci_type="0604 [8086:244e] [0000:0000] 90" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="PCIDev" os_level="-1" os_index="16432" name="Matrox Graphics, Inc. MGA G200eW WPCM450" pci_busid="0000:04:03.0" pci_type="0300 [102b:0532] [0028:008c] 0a" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Matrox Graphics, Inc."/>
+ <info name="PCIDevice" value="MGA G200eW WPCM450"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="498" name="Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller" pci_busid="0000:00:1f.2" pci_type="0101 [8086:3a20] [0028:008c] 00" pci_link_speed="0.100000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801JI (ICH10 Family) 4 port SATA IDE Controller"/>
+ </object>
+ <object type="PCIDev" os_level="-1" os_index="331776" name="Mellanox Technologies MT25418 [ConnectX IB DDR, PCIe 2.0 2.5GT/s]" pci_busid="0000:51:00.0" pci_type="0c06 [15b3:634a] [00b3:004a] a0" pci_link_speed="2.000000">
+ <info name="PCIVendor" value="Mellanox Technologies"/>
+ <info name="PCIDevice" value="MT25418 [ConnectX IB DDR, PCIe 2.0 2.5GT/s]"/>
+ <object type="OSDev" os_level="-1" name="ib0" osdev_type="2"/>
+ <object type="OSDev" os_level="-1" name="ib1" osdev_type="2"/>
+ <object type="OSDev" os_level="-1" name="mlx4_0" osdev_type="2"/>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="12874317824">
+ <page_type size="4096" count="3143144"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="8388608" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/diagram.fig
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/diagram.fig (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/diagram.fig 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,452 @@
+#FIG 3.2 Produced by xfig version 3.2.5b
+Landscape
+Center
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+6 3060 3060 4590 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3060 3330 4500 3330
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 4500 4500 4500 3060 3060 3060 3060 4500 4500 4500
+4 0 0 50 -1 0 14 0.0000 4 165 645 3150 3285 Socket\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 3150 3510 .depth = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1440 3150 3735 .logical_index =0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 3150 3960 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 3150 4185 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 3150 4410 .arity=2\001
+-6
+6 4500 3375 8505 3915
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4500 3600 8415 3600
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 8415 3690 4500 3690
+4 0 0 50 -1 0 12 0.0000 4 180 1035 4545 3510 next_sibling\001
+4 0 0 50 -1 0 12 0.0000 4 180 1035 7470 3870 prev_sibling\001
+-6
+6 7290 2250 8640 2610
+4 2 0 50 -1 0 12 0.0000 4 165 810 8640 2565 last_child\001
+4 2 0 50 -1 0 12 0.0000 4 165 900 8190 2385 children[1]\001
+-6
+6 2205 4590 3285 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 2385 4725 children[0]\001
+4 0 0 50 -1 0 12 0.0000 4 165 840 2205 4905 first_child\001
+-6
+6 4185 4590 5265 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 4185 4725 children[1]\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 4455 4905 last_child\001
+-6
+6 7605 4590 8685 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 7785 4725 children[0]\001
+4 0 0 50 -1 0 12 0.0000 4 165 840 7605 4905 first_child\001
+-6
+6 4275 2250 5625 2610
+4 0 0 50 -1 0 12 0.0000 4 165 840 4275 2565 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 4725 2385 children[0]\001
+-6
+6 4770 810 5445 1440
+4 0 4 50 -1 0 12 0.0000 4 135 720 4770 945 Machine\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 4770 1170 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 4770 1395 depth=0\001
+-6
+6 2115 3150 2790 3780
+4 0 4 50 -1 0 12 0.0000 4 135 555 2115 3285 Socket\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 2115 3510 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 2115 3735 depth=1\001
+-6
+6 3105 5625 4455 6795
+6 3105 5625 4455 6165
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3105 5850 4365 5850
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4365 5940 3105 5940
+4 0 0 50 -1 0 12 0.0000 4 180 1035 3150 5760 next_sibling\001
+4 0 0 50 -1 0 12 0.0000 4 180 1035 3420 6120 prev_sibling\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3105 6480 4365 6480
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4365 6570 3105 6570
+4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 6390 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 6750 prev_cousin\001
+-6
+6 5805 6255 7110 6795
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5805 6480 7065 6480
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7065 6570 5805 6570
+4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 6390 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 6750 prev_cousin\001
+-6
+6 765 5490 1440 6120
+4 0 4 50 -1 0 12 0.0000 4 135 510 765 5625 Cache\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 765 5850 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 765 6075 depth=2\001
+-6
+6 4230 6930 5130 7560
+4 0 0 50 -1 0 12 0.0000 4 165 840 4230 7290 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 4230 7515 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 4230 7065 children[0]\001
+-6
+6 6930 6930 7830 7560
+4 0 0 50 -1 0 12 0.0000 4 165 840 6930 7290 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 6930 7515 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 6930 7065 children[0]\001
+-6
+6 1530 6930 2430 7560
+4 0 0 50 -1 0 12 0.0000 4 165 840 1530 7290 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 1530 7515 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 1530 7065 children[0]\001
+-6
+6 9765 7740 11340 9180
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 9765 8010 11205 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 11205 9180 11205 7740 9765 7740 9765 9180 11205 9180
+4 0 0 50 -1 0 14 0.0000 4 165 465 9855 7965 Core\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 9855 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 9855 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 8415 .logical_index = 3\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 8640 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 8865 .sibling_rank=0\001
+-6
+6 5805 8595 7110 9135
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5805 8820 7065 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7065 8910 5805 8910
+4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 9090 prev_cousin\001
+-6
+6 765 7830 1440 8460
+4 0 4 50 -1 0 12 0.0000 4 135 390 765 7965 Core\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 765 8190 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 765 8415 depth=3\001
+-6
+6 4230 9270 5130 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 4230 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 4230 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 4230 9405 children[0]\001
+-6
+6 6930 9270 7830 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 6930 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 6930 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 6930 9405 children[0]\001
+-6
+6 1530 9270 2430 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 1530 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 1530 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 1530 9405 children[0]\001
+-6
+6 9630 9270 10530 9900
+4 0 0 50 -1 0 12 0.0000 4 165 840 9630 9630 first_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 9630 9855 last_child\001
+4 0 0 50 -1 0 12 0.0000 4 165 900 9630 9405 children[0]\001
+-6
+6 9765 10080 11340 11520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 9765 10350 11205 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 11205 11520 11205 10080 9765 10080 9765 11520 11205 11520
+4 0 0 50 -1 0 12 0.0000 4 165 1095 9855 10980 .os_index = 3\001
+4 0 0 50 -1 0 14 0.0000 4 165 315 9855 10305 PU\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 9855 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 9855 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 9855 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 9855 10755 .logical_index = 3\001
+-6
+6 3105 10935 4410 11475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3105 11160 4365 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4365 11250 3105 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 11430 prev_cousin\001
+-6
+6 5805 10935 7110 11475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5805 11160 7065 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7065 11250 5805 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 5850 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 6075 11430 prev_cousin\001
+-6
+6 8505 10935 9810 11475
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 8505 11160 9765 11160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 9765 11250 8505 11250
+4 0 0 50 -1 0 12 0.0000 4 165 1005 8550 11070 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 8775 11430 prev_cousin\001
+-6
+6 765 10170 1440 10800
+4 0 4 50 -1 0 12 0.0000 4 135 240 765 10305 PU\001
+4 0 4 50 -1 0 12 0.0000 4 135 405 765 10530 level\001
+4 0 4 50 -1 0 12 0.0000 4 180 675 765 10755 depth=4\001
+-6
+6 9540 4590 10620 4950
+4 0 0 50 -1 0 12 0.0000 4 165 900 9540 4725 children[1]\001
+4 0 0 50 -1 0 12 0.0000 4 165 810 9810 4905 last_child\001
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 5715 990 7155 990
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 7155 2160 7155 720 5715 720 5715 2160 7155 2160
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 9036 4488 7686 5388
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 9135 4500 7785 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 8415 3330 9855 3330
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 9855 4500 9855 3060 8415 3060 8415 4500 9855 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 6435 2160 3735 3060
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 6210 2160 3510 3060
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4500 4050 8415 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 8415 4140 4500 4140
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3831 4492 5181 5392
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3636 4488 2286 5388
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5085 5400 3735 4500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 3735 4500 2385 5400
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 6660 2160 9360 3060
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 6435 2160 9135 3060
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 10080 3015 2835 3015 2835 4545 10080 4545 10080 3015
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 7380 675 5490 675 5490 2205 7380 2205 7380 675
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4365 5670 5805 5670
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 5805 6840 5805 5400 4365 5400 4365 6840 5805 6840
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7065 5670 8505 5670
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 1665 5670 3105 5670
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 3105 6840 3105 5400 1665 5400 1665 6840 3105 6840
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 8505 6840 8505 5400 7065 5400 7065 6840 8505 6840
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 2340 6840 2340 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 2430 6840 2430 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5040 6840 5040 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 5130 6840 5130 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7740 6840 7740 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 7830 6840 7830 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4365 8010 5805 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 5805 9180 5805 7740 4365 7740 4365 9180 5805 9180
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7065 8010 8505 8010
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 1665 8010 3105 8010
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 3105 9180 3105 7740 1665 7740 1665 9180 3105 9180
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 8505 9180 8505 7740 7065 7740 7065 9180 8505 9180
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 2340 9180 2340 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 2430 9180 2430 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 5040 9180 5040 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 5130 9180 5130 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 7740 9180 7740 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 7830 9180 7830 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 10440 9180 10440 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 2
+ 1 1 1.00 60.00 120.00
+ 10530 9180 10530 10080
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 4365 10350 5805 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 5805 11520 5805 10080 4365 10080 4365 11520 5805 11520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 7065 10350 8505 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 8505 11520 8505 10080 7065 10080 7065 11520 8505 11520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 1665 10350 3105 10350
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+ 3105 11520 3105 10080 1665 10080 1665 11520 3105 11520
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 11385 10035 1485 10035 1485 11565 11385 11565 11385 10035
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 3105 8820 4365 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 4365 8910 3105 8910
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 8505 8820 9765 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 9765 8910 8505 8910
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 8505 5850 9765 8190
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 1 1 1.00 60.00 120.00
+ 9765 8325 8505 6030
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 8685 5355 1485 5355 1485 6885 8685 6885 8685 5355
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+ 1 1 1.00 60.00 120.00
+ 9231 4492 10530 5400 10530 6840 10530 7740
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 1 4
+ 1 1 1.00 60.00 120.00
+ 9135 4500 10440 5400 10440 6840 10440 7740
+2 2 0 1 4 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 11385 7695 1485 7695 1485 9225 11385 9225 11385 7695
+4 2 0 50 -1 0 12 0.0000 4 165 510 8415 2970 parent\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 5805 1170 .depth = 0\001
+4 0 0 50 -1 0 14 0.0000 4 165 825 5805 945 Machine\001
+4 0 0 50 -1 0 12 0.0000 4 165 1155 5805 1620 .os_index = -1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 5805 1845 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 5805 1395 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 5805 2070 .arity=2\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 8145 5310 parent\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 8505 4410 .arity=2\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 8505 3735 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 8505 3960 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 8505 3510 .depth = 1\001
+4 0 0 50 -1 0 14 0.0000 4 165 645 8505 3285 Socket\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 8505 4185 .sibling_rank=1\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 4455 2970 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 4545 3960 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 7470 4320 prev_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2745 5310 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 4275 5310 parent\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 7155 6750 .arity=1\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 1755 5625 Cache\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 4455 5625 Cache\001
+4 0 0 50 -1 0 14 0.0000 4 165 600 7155 5625 Cache\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 6075 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 6075 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 6300 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 6525 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 1755 6750 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 4455 6750 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 1755 5850 .depth = 2\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 4455 5850 .depth = 2\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 7155 5850 .depth = 2\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 6075 .logical_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 6300 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 6525 .sibling_rank=1\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 6300 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 6525 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2475 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 5175 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 7875 7650 parent\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 7155 9090 .arity=1\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 1755 7965 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 4455 7965 Core\001
+4 0 0 50 -1 0 14 0.0000 4 165 465 7155 7965 Core\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 8415 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 8415 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 8640 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 1755 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 4455 9090 .arity=1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 1755 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 4455 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 7155 8190 .depth = 3\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 8415 .logical_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 8640 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 8640 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 8865 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 2475 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 5175 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 7875 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 10575 9990 parent\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 1755 10980 .os_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 4455 10980 .os_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 165 1095 7155 10980 .os_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 1755 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 14 0.0000 4 165 315 1755 10305 PU\001
+4 0 0 50 -1 0 14 0.0000 4 165 315 4455 10305 PU\001
+4 0 0 50 -1 0 14 0.0000 4 165 315 7155 10305 PU\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 4455 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 1290 7155 11205 .sibling_rank=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 1755 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 4455 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 630 7155 11430 .arity=0\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 7155 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 7155 10755 .logical_index = 2\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 4455 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 4455 10755 .logical_index = 1\001
+4 0 0 50 -1 0 12 0.0000 4 180 810 1755 10530 .depth = 4\001
+4 0 0 50 -1 0 12 0.0000 4 180 1485 1755 10755 .logical_index = 0\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 3150 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 3375 9090 prev_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 165 1005 8550 8730 next_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1005 8775 9090 prev_cousin\001
+4 0 0 50 -1 0 12 0.0000 4 180 1035 8820 8280 prev_sibling\001
+4 0 0 50 -1 0 12 0.0000 4 180 1035 8730 6120 next_sibling\001
+4 0 0 50 -1 0 12 0.0000 4 165 510 9945 7650 parent\001
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,90 @@
+PNG
+
+
+IHDR  : ´1H¬ bKGD ÿ ÿ ÿ ½§ IDATxíÝTTuþ?ðç)|Rü«®Jl
"b(&~Ø'Ë5ú}Ä_kþBtÝÓ'û±bg ÖäZúA0+³ÜÕÀü±XØI#»z¾³¦
Üïî22À wæÞ÷óq§áÞ;ïû¾óäÕëÎÜA(
H4¸Ç`0 99Yí¹Ù\JJ
+ôjOHMlDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$4U¡N§ëÕr"""¥õªêt:,{óÍ7o\$):QWzý0##CnT?ÿü3Þ{ï=Å'EDDd+½nþþþøøã ûöíìY³:m£Óé Óéðë_ÿ 9sþþþ¸ç{LA¾þúë2dwß}W¾ûÍÿæoðè£bàÀ0a;ÖÛà ""ÐF¸nÝ:lݺ$!==/¾øb§m$IÂ;w°oß>¬[· ðßÿýßxá
ð¯ýËä¥O777ü¿ÿ÷ÿ°wï^lذ¡ÓXæÖ¿ðÂX±bnܸôôt,Y²¤·ADD ÐmÚ´I²ôïêt:H9sæ`ôèÑhhh at AA¼ Þzë-¼ùæ¸rå
+ÚÚÚ ÓéÐÖÖ ¹¹
+2ïÎ;Ðëõ&ãwü¯¹õ@kk«É8mmmJ=&DD$>ÿ=¼ýöÛX»vm§u6mÂÿþïÿÂh4âã?¤vîÜÛ·olßÞäºbn½vïÞ-?»d$"¢¾êS# $Ixì±Ç:KJJÂüùó1jÔ(>}Z^¼¼<üÇüG¿ßeúÿ÷xï½÷0lØ0ùz$Q_ôê¥Q"""GÒçF! ÆFHDDBc#$""¡±ÐØHhlDD$´{,Ù¨²²ÖÃDhhh·Û°ÞaI½6ÂòòrbÆý¨Î9¦¦¦õFÔÖ`a#3f ))©_#YVVÅÛ²Þú§7õÆkDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$46B""¦¡§§§ÚS ëDeFXQQ'|ÞÞÞÇÇlÝè®===áéé|aaa(..î´ÍÆñÍ7ß µµóæÍÿý÷?>&Lùóçãûï¿·ÊüúÊêý¾lÊdKVi X¶l¾úê+äå塬¬Ì»éÚÚZ|ûí·Ø¼y36mÚÔi½$IÐëõ8}ú4¦L"/ONNF@@ Î= $''ÛrÚD=r¤z«Emm-§JdF8dÈÔ××£¦¦#F@zzº¼î믿ƬY³àåå
Y³f¡¦¦ PSSÙ³gÃËË«ÓÙà±cÇ0}útâ»ï¾Ã³Ï>+ý:uJÞÞ3I'''óòòàéé÷ßO>ù$bbb°{÷ny¿ýío³³3âââð·¿ýß©ÞÔ`FË/ãµ×^CPP>øày]bb"¢££Q]]èèh$&&ÊËçÎ3Â?ü¯¼ò
+víÚ
`Ã
+Å×__~7n·ïîlÒÓÓ&LÀ«¯¾[·ÊËãââpæÌ<ú裨ţ>S§NÉã477cèС 777´´´(û`õ#Õ,þ{½ñÀàõ×_ ?±±±;w. à»ï¾Ctt4\\\0þ|¼ñÆ . &&4kãÆÈÉÉ_ÎdåÖétÍ©»½ûö´iÓ°eË,Z´Fcc#ëׯãþûï·ôa ² Gª7"5XåáúõëqéÒ%üôÓOøöÛoÑÖÖ&¯ûÍo~âÇÄàåå ðööÆþýûñÓO?µsçN$&&¢¨¨ ððÃ#--M>½xñ" à{îÁ?üÐë¹ÖÖÖ"..ùùù8|ø0¢££Q[[+åc=¼¼<ܾ}yyyxì±ÇúôY#Õ¬ÒðdÉøøø ==Ýä
+&©©©xï½÷àëëýû÷cÛ¶mòòà¡29k
+
+Å={ðꫯb×®]xë·ðáÂßßßäÅsÏ=ÁЧk
+§O¿¿?1dÈu¿ÿýïqâÄ L<'NÀæÍûòY#Õ[Ç}ðÝ£d+ºM6I=½2%%uuuHJJ²Ñ´OVVôz}ï<f½õ_oêMÓ¨'""²66B""! ÆFHDDBc#$""¡±ÐØHh~×è3gPUU¥äDvaêÔ©1cM÷Éz#Q)]o6ªª*=z¡¡¡JK¤ihii±y#d½¬Qoÿõ ÁÀ?^KBiÿJ45°ÞH4Ö¨7^#$""¡±ÐØHhlDD$46B""! ÆFHDDBc#$""¡±Ðì¶¶¶¶"::Zíiô(::jO¨_XoäÈTm:ÎìòL8JJJ:mSXXGy¤Óò-[¶{åÊÃÙÙÁÁÁ¸rå
+ àÈ#ðòò³³3ÂÂÂpõêU @[[¶lÙ1cÆ@¯×Ëcu³¦¦^^^xçwäu:z½ãÆÃÞ½{åm§MÂÂÂÞ>4Dc½§Ég~ú)ÐÜÜÍ7#&&¦Ó6ùùù0&ËN<e6l at HHÄÄD ÀâżôÒKòòääd ¨¨wîÜ$I&ã!**
+¹¹¹X¹r¥¼\$´¶¶"//«Väçç÷ëñ ²&ÖNñ¿>¡wß} pûöm899aÌ1¶9qâ¼½½åoݺ
¸¸8ìÛ·aaaòò|ýõ×pqqA||<&Mà3Qàßg}ö `çÎØ±c¼]G{öìAff&áááÑåüG)ßöööÆ_~ié¡ÙëD§ÉFü»`ÜÜÜpäÈNëáêê*ÿ¼iÓ&,^¼?þx§íF >|8®_¿ ÈÎÎÆ/¾úúz,_¾\^~ùòe`þüùpwwÇ[o½
ßþö· 5kÖ ''ÇlQ¶ÏwÀ8xð ¼ÜÕÕ×®]ëëÃ@d¬7&_~yéãæÍÈÊÊÂóÏ?ßiýСCa4å322Ðéêëë
+
+
+pss Ì;uuu¸yó&fÎ_ÿú×òö¸~ý:vìØeËÉû(--E||¼Ù^$IB[[±~ýzy¹ÑhİaÃúûpYëD¦ÉF/^¯Ç7:m3}út?^þ¹
+$É×Úÿôôtܺuéééï#IÎ;ÄÄD¬X± f/Ú ´´IIIÈÎÎîrþís. w
+±ÞHtª¿4z÷;Ù$I¯¯/üüüÐÐÐ ___ìß¿¿ÓýbbbPQQÑã/}ZZ¢££qÿý÷# &û5jV¬X¤¤$ ÀöíÛñÜsÏaÎ97nvíÚe2***¦¦&lܸ±ÓxòöåååíÍCBd5¬7¢ÎTmw¿C¬]\\ââ⺽ï°páÂÇ;v,?nñ¾Gòòòn·÷ôôÄÅ{øåu_º!RëÈ<ÕöÕä³M-³9õõFL×l
ÆFHDDBc#$""¡±ÐØHhlDD$4Å?GXYYÔÔT¥%Ò¬nÿ:5±ÞH4Ö¨7E¡ZZZpéÒ%%%Ò4Ì1Ãæûe½¬Qo6ÂÀÀ@*9$uõF¤^#$""¡±ÐØHhlDD$46B""! ¦èçÏ9ªª*%¤.L:µÇ2Û±$¥1_Ûa½iÒõ¦h#¬ªªÂÑ£G
ªä°tÊÊJ´´´ôøÀ<lÃÒ<Æ|mõ¦-Ö¨7Å¿kÔ`0 99Yéa©ÔÕÕY´-ó°¾Þä¡4æk}¬7m±F½ñ! ÆFHDDBc#$""¡±ÐØHhlDD$46B""! f·°µµÑÑÑjO£GÑÑÑhmmU{VÇ<óÕæ¡,U¡N§3»üÀðññÁÀáççNÛâG1«ý_GW®\App0+W®X´-[¶ÕñvMM
+¼¼¼ðÎ;ïì[¯×cܸqØ»w¯¼í´iÓPXXhéC¢*æáد¶0íÐä3 ---X½z5bcc;mÁ ÿ,I$Iê´Ý
+ææf 11±Ç}<y999fçVVV¨¨(äææbåÊ&ûommE^^VZ%/7ÈÏÏïõc %Ìñ1_ma¶§ÉFXXXI&ÁÅŸ÷Þ{;msâÄ x{{÷8VII âããáââøøxw»[·n!..ûöíë4Ö={ââânÿÔÊÈ#åÛÞÞÞøòË/{§1ÇÆ|µ
yØâIIßÿ=æÍNëáêêÚã1b `øðá¸~ýz·ûØ´i/^ǼÓXkÖ¬ANN<<<:ké`À8xð ¼ÜÕÕ×®]ëqöy86æ«-ÌÃv4ùøå'((ñññxæg::t(Fc㸹¹¡¾¾ ÐÐÐ 77·n÷9د">>ÞìS}IÐÖÖââb¬_¿^^n41lØ0Z»cc¾ÚÂ<lKpçÎ={6²³³±páB³ÛL>çÏïq¬¤§§ãÖ[HOOGxxx·ûhkk3y½½ãëî(--ERR²³³»Ügû/ \¸p=ÎSËcc¾ÚÂ<lOõFï~$IX¾|9 à'߸qÃä¥TTTȲ¹w8I´´4DGGãþûïG@@
+
+
+ À¢}ããã
+DFF¢©© 7n4Ùç¨Q£)o_^^nöb·V1ÇÆ|µ
yhªÐÜ»º[ÞÑLÎdººÏرcqüøñ>í£ã6o{zzââÅuòäI
+´y86æ«-ÌC;TFØWÏn´Ìæ¨æáØ¯¶0eiò!°ÐØHhlDD$46B""! ¦øç+++ªô°ÔAEE
Ù/¾5yX_oòPóµ>Ö¶X£Þm~~~hiiÁ¥Kîâáá3fô¸ó°
+KóPóµ
+Ö¶X£ÞmTrHêæáد¶0ûÅkDD$46B""! ÆFHDDBc#$""¡±Ðýá3gPUU¥äÔ
©S§öø¡Ræa;ä¡4æk;¬7mQºÞmUUU8zô(BCCîRYYmXÒ¯m°Þ´Åõ¦øw$''+=,uºº:¶eÖ×<Æ|õ¦-Ö¨7^#$""¡±ÐØHhlDD$46B""! ÆFHDDBc#$""¡±Ðì¶¶¶¶"::ÚæûFkk«Í÷«uÌñ1_maÊRµêtº.·ÿëJaa!yäïÓÖÖ-[¶`Ì1ÐëõòúÛÕÔÔÀËËï¼óÉXz½ãÆÃÞ½{åm§MÂÂÂÞ¬`ùjóÐM>#$ $u»M~~>C÷INNFAApçÎNÛ!**
+¹¹¹X¹r¥ÉxÈËËêU«äåùùù}<2ûÄ<óÕæa{ÿõ [9qâ¼½½{ÜnçÎØ±c&MÔiÝ={ââbxxxt9ÆÈ#åÛÞÞÞøòË/û4gGÆ<óÕæ¡,M>#´Dcc#\]]{ÜîòåË())Á AàááCÉëÖ¬Y
+6ý%Ðétprr¬Y³ðæoÊË]]]qíÚ5EÁ0ÇÆ|µ
y(ËnáСCa4{ÜÎÍÍ
+¸~ý:vìØeËÉëJKKoö©¾$IhkkCqq1Ö¯_//76l2á@cc¾ÚÂ<e·púôé8þ|ÛEFFÙÄ(--ERR²³³»£¾¾^¾}áÂôuÚy86æ«-ÌCYª_#¼û]N$,k¿}÷EÞTTTÈ¡tuíÛ·ã¹çÃ9s0nÜ8ìÚµËdTTT 22MMMظq£É£FBff¦¼}yy9bccûuÌZÆ<óÕæ¡
+ª6®ÞÕÓ;¦ `ÁX¸pa÷=z4ÊË˻ݧ§'.^¼hÑþO<iòR#aùjóÐÕöÕPPP`óýª±O{À<óÕæ¡,»½FHDD¤6B""! ÆFHDDBc#$""¡±Ðÿaee%RSS:¨¨¨èöÛâ;bÖ×<Æ|õ¦-Ö¨7E¡ZZZpéÒ%%¥»xxx`Æ=nÇ<lÃÒ<Æ|mõ¦-Ö¨7Ea`` úy86æ«-ÌÃ~ñ! ÆFHDDBc#$""¡±ÐØHhlDD$4E?GxæÌTUU)9$uaêÔ©=~¨yØ%y(ùÚëM[®7EaUU>ùäL2EÉaé.çÎCKKK¿ÌÃ6,ÍCiÌ×6XoÚbzSü»F§LeË)=,uoñ¶ÌÃúzÒ¯õ±Þ´ÅõÆkDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$46B""! MÕF(I<EaæÌX¸p!>ûì3«ì+,,aaaÇ¢EpìØ±NÛ¤¥¥áâÅhmmÅêÕ«åå
+
+
+X»v-fεk×¢¡¡Á*sT½äÑ~ß°°0«ÌÍQÙ
K¾¬7å±Þº§j#<pà ñòË/ãÈ#ضmÎ=kµýáóÏ?Çï~÷;lß¾½ÓzI ÓépîÜ9L8Q^
É'ãO>ÁäÉeµ9ªÉ^ò(++CYYÕæå¨ì%_Öu°Þº¦ø_è>úo¼ñ<== £GFRR¼þüùóضmêêê0~üxlܸ^^^Ã9spøða|þù稫«CZZÎ?_ýêWHJJ¤IºÜ¯^oÚÿ<;v ÉÙ|²²2:u
+yyy8p }öYÄÅÅ)ù0h½äA}c/ù²Þ~¡<D ê3Âúúz?¾ËõÛ¶mÃSO=
Ãã©§Bjjª¼n rh)))={6>ýôS¬^½iiifÇÃÌ3ñç?ÿ òòyóæáСCð÷÷GYYüýýñÑGÉ¿---2d `ðàÁ¸qãF¿]ì%ê{Éõöä!U1ÿøÇ?ðÀ]_WWY³fÁÙÙO>ù$Þ~ûmy]xx¸|fóÝwß!55UþEÑétfÇë*د}·ßÂÚµk
ûî»MMMpssCss3î»ï¾Þ¬°<¨oì%_ÖÛ/´TmQQQضmàéé«W¯bïÞ½òËãÆÃç3gâ/ùÉÙ|ûÁDTT{=²²2¼ýöÛxì±Ç0hÐ |üñÇxé¥äõÓ¦MÃûï¿^xï¿ÿ>üýýûqÔÚe/yPߨK¾¬7må!Uáüùóáää×^{
+W¯^ÅÈ#±páBy}bb"ÒÒÒñãǼ~ÞÑþ𤧧ãOú~úé' ]ýt¥¦¦Ë/ÇÙ³g;®X±¯½ö~úiL0ÿó?ÿÓË#µö¹3X^Æé+{Éõöä!B½é6mÚ$%''w»QJJ
+êê꺢]VVþùÏbÙ²eJÎî'''桽ÉC¯×õf_XoÚbzãêHhlDD$46B""! ÆFHDDBc#$""¡±ÐTùfsçΡººZ]kÞÃ?)S¦ØtÌ£kjä¡4æÛ5Ö¶¨Uoª4Âêêj|õÕW
+
+Uc÷UYY £Ñhó_æaZy(ùÇzÓ5ëMµï5=~õhRRR¬ú9»Ã<:S3¥1ßÎXoÚ¢f¼FHDDBc#$""¡±ÐØHhlDD$46B""! ÆFHDDBc#$""¡±Ðì¢êt:èt:899ÁÛÛ2YgnûÞÓnÉ%¨®®ÆÏ?ÿ yù+WgggãÊ+
+}ÒBí¶lÙÒåøÔ7ZÈ·ý¾ÌV{y8b&vÑ@$ܾ}Û·oÇÒ¥K6N[[ôz=¾øâL>]^¾aà ¹¹!!!HLLìóÚy ÀÉ'Óç}S×ÔÎW$HÔçý:µóh¿¯£æb7°UÆIOON§ÃîÝ»áëëÐÐPdddÈg?%%%âããQ\\¬È<ìZyܺuqqqØ·o"û'óÔÊÌS3ÁÃÕÕO?ý4êêêVØM#Ôétpvvƺuëø8ñññhllDxx8$IBxx8䳯ÆF1 0|øp\¿~½dçÔÎcÓ¦MX¼x1üñ~u¦v¾dJí<$IBss3jkkñðÃ#66¶ßǤ%ªý=ÂÞêª@a4áêê
+ 0pqqéõ8Ï|Úo>X½z5ÜÜÜP__#G¢¡¡nnn}= v$ ò6ü¨rÔÎLi%www¼úê«<xp¯AËìæaW±uëVFFlݺ!!!½G$¬_¿ååå8}ú4.]
+Iä_¤§§ãÖ[HOOGxx¸ÒâlG[[Éõ
+6AÛ°U¾d[çÑÔÔ[·ÂÏÏO©Cлo¹¹¹8uêÜÝÝáîîÓ§O#77·Oc?~AAAhllÄСCMÖ¥¥¥¡¢¢÷ß?=íÛ·+1}c«<H¶Ê·ã»õJ°u£FÂ_|áp׿íâ¥ÑîÎö=<<PTTÔïq ²² Þéߨ±cqüøqöãè´GoÆ¡ÞÑB¾ÌôßõÙý3B""¢þ`#$""¡±ÐØHhlDD$46B""! ¦Êêøá¢ººZÝkÖÅ1vìXïy§VJc¾æ±Þ´EÍzS¥¶¶¶ÂÝݾ¾¾jì^³nÞ¼;wîØ|¿ÌÃ<µòPó5õ¦-jÖ*pôèÑ<y2ÕØ½f¥¤¤àìÙ³6ß/ó0O<Æ|Íc½iõÆkDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$46B""! Í.¡N§N§¼½½qèÐ!uæ¶ïí8í,YêêjüüóÏ
+
+ðÁxðÁqÏ=÷à7¿ù
+>øàÌ>i!öûÞ=öàããÂÏÏ%%%}=Lai!ß#GÀËËÎÎÎÃÕ«W82û¤
<ºª·L8ÑîëÍ.! HÛ·ocûöíXºt©ÕÆikk^¯Ç_|éÓ§ËËãââýë_ÈÈÈÀ%Kú<G v$A¤NÛ8p hiiÁêÕ«Ûç¹Lí|/^ôôt´´´à¥^BbbbçàÔΣ«zûôÓOQTTææflÞ¼111}즶srr²Ê8ë7 IDATéééÐétؽ{7|}}ùhüøñ þ}¶åáá¡È<ìZyt¥°°&M"##qï½÷*2?Q©o[[×Ûg}¦È<ìÖêíÝwßÅøñã¡×ëáää1cÆ(2?[³F¨ÓéàììuëÖ!;;[ñqâããÑØØððpHððp444ÈgA999
³³3þë¿þYYYý>&{¦v=ùþûï1oÞ<dddôyn"S;ßììl¼øâ2dqýúõ~=S;ÆtqqÁ²eËú575©ò÷û¢«@a4áêê
+ 0pqqéõ8Ï|Úo>X½z5þyäçç#,,%%%X´h¾ýöÛ¾ÝS;î8qÑÑÑxýõ×ñÌ3Ït»-§v¾sçÎÅܹsür½ÐÜõ,¨GOsûñÇqøða<ÿüó¸páB·ÛkÝ<#ìJpp0¶nÝ
+£Ñ£Ñ[·"$$¤×ãHõë×£¼¼§OÆÒ¥K!IüKÐÐÐ àß¿$í?)[åÑ;wböìÙÈÎÎÆÂ
ûzÔ[æ+IÎ;ÄÄD¬X±BÉÃpj×[||<êëë z½7nÜèÓq¨Íîann.N:www¸»»ãôéÓÈÍÍíÓXÇGPP1tèPuí/Õ4kÖ¬ANNÓw8¶Ê£ã;Ø:Þ^¾|9~øá<ñÄòr£ÑØ¿"-óÕëõÀ¤ÄôÚõæëë???2©©©Ø¿ÿH%vñÒhw¯S{xx ¨¨¨ßã @ee% <<ááá&ëæÏùóç[´G§
<ºº¯¥×©kZÎWDZÎ#..qqqí_Ëìþ!Q°ÐØHhlDD$46B""! ÆFHDDBSíõHMMUk÷TQQ777UöÍ<:S3¥1ßÎXoÚ¢fª4ÂzF£ÕÕÕjì^³ÜÜÜ0eÊïy§VJc¾æ±Þ´EÍzS¥úùùÁÏÏO]Ìñ1_maÚÃkDD$46B""! ÆFHDDBc#$""¡±Ðÿá7ß|üü|¥¥ª««áïïoѶÌÃúzÒ¯õ±Þ´Åõ¦h#ôóóCKKCþþþ1cFÛ1Û°4¥1_Û`½i5êMÑFÀÀ@%¤~`ùjó°_¼FHDDBc#$""¡±ÐØHhlDD$46B""! ÍâÏþýïGVV5çBäЪªªdѶ¬7¢þéM½YÔÑÔÔÔ¯I.00¡¡¡mÇz#êKë
+°°þÌ,Äz#²-^#$""¡±ÐØHhlDD$46B""! fÑç+++QQQaí¹9<K>äËz#R¥ª·¨£°°3fÌè÷ÄDuæÌ455õX¬7¢þ³´Þ^|×è3Ô¯¬7ßÊz#êÞÔ¯ÐØHhlDD$46B""! ÆFHDDBc#$""¡±ÐØHhnjOH¬7UaEE|òIx{{#<<ü±5vc¢»"öôô§§'|ðA
¡¸¸
¸Ó67nÄ7ß|ÖÖVÌ7O^~äÈ<ñÄðööÆSO=
cÇYeþD}åHõöÉ' ""õF6eFeË᫯¾B^^ÊÊʬ±^©Å·ß~Í7cÓ¦MÖK½^Ó§OcÊ)òò#G 33_}õ-Zµk×ÚrÚD=r¤zûë_ÿ={öàìÙ³xñÅYodViCA}}=jjj0bĤ§§Ëë¾þúkÌ5^^^5kjjj 555={6¼¼¼:m;vÓ§OGaa!¾ûî;<ûì³òÙï©S§äíÛÏD»ãäädòs^^<==ñþûïãÉ'DLLvïÞ-óç?ÿÞÞÞpvvFpp0
+ÔïÇHIToo¾ù&ƽ^'''9²ßQO¬Òsssqùòe¼öÚk
+
+Â| ¯KLLDtt4ª««ÄÄDyùܹsQSSÚÚZyû?ü¯¼ò
+víÚ
`Ã
+Å×__~7n·¯5¹oG0a^}õUlݺU^3gÎàÑGEmm-}ôQ:uªÓ8õõõX¹r%^yåÅ'"%8Z½yzzbâÄøýï?þñ>VDæXü÷{ãÀ믿 8þ<bcc1wî\ Àwß}èèh¸¸¸`þüùxã7 .\@LLh2ÖÆ ¿É&&&ÊÓé,Sw{÷íiÓ¦aË-X´h ººkÖ¬ABB""",Ú8Z½ÕÖÖâÖ[(--EBBþú׿Z´O¢¾²Ê3Âõë×ãÒ¥Køé§ðí·ß¢M^÷ßüÄ?þÀËË àííýû÷ã§~2kçÎHLLDQQ àáFZZ|&{ñâE À=÷Ü~ø¡×sE\\òóóqøðaDGG£¶¶V.Êýû÷céÒ¥øãÿ¨¨¨>=DÖäHõöú믣±± ×ëñ¯ý«÷Q/Y¥
aÉ%ðññAzz:åu©©©xï½÷àëëýû÷cÛ¶mòòà¡29k
+
+Å={ðꫯb×®]xë·ðáÂßßßäÅsÏ=ÁЧ·>}þþþhnnÆ!CLÖmÞ¼×®]Ã/¼ ïïæÍ}yX¬ÂêmâÄxê©§0eÊdee!##£/ Q¯è6mÚ$u,sRRRPWW¤¤$MÈñdeeA¯×õFd}½©7M ÈÚØHhlDD$46B""! ÆFHDDBc#$""¡)ú]£gÎAUUCÙ
©S§bÆ6Ý'ëD¥t½)Ú«ªªpôèQ*9,¦UVV¢¥¥ÅæõF"²F½)þ×'C_iCäHÚ¿M
+¬75ê×HhlDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$4»mV{=Fkk«ÚÓ êÖ92U¡N§3»¼ 'NÄÀáççNÛâGé´|Ë-&ã^¹rÁÁÁpvvFpp0®\¹ 8rä¼¼¼àìì°°0\½z ÐÖÖ-[¶`Ì1ÐëõòXǬ©©ÞyçyN§^¯Ç¸qã°wï^yÛiÓ¦¡°°°·
+âXoDæiòá§~¢¢"477cóæÍé´M~~>ɲ'O"''ÇdÙ
+ææf 11 °xñb¤§§£¥¥/½ô¼<99(**Â;w IÉxeeeBnn.V®\)/$ ÈËËêU«äåùùùýz<¬õF¢Sü¯O(áÝwß Ü¾}NNN3fL§mN8oooùç[·n!..ûöíCXX¼¼¤¤_ý5\\\I&øåLø÷çg} عs'vìØ!o×Ñ={ââbxxxt9ÿ#GÊ·½½½ñå_ZzèD6Çz#Ñi²ÿ.7779r¤ÓúÆÆF¸ººÊ?oÚ´ /Æã?Þi»#F ëׯ ²³³ñâ/¢¾¾Ë/_¾|%%%?>ÜÝÝñÖ[oá·¿ý- `Í5ÈÉÉ1[íó0` <(/wuuŵk×úú0ÙëD¦ÉF_^ú¸yó&²²²ðüóÏwZ?tèPFùç$$$tºÆàææúúz @CCÜÜÜ sçÎE]]nÞ¼3gâ׿þµ¼}DD®_¿;v`Ù²eò>JKKoö¥IÐÖÖââb¬_¿^^n41lذþ>DVÅz#i²ÆÇÇËŤ×ëqãÆNÛL>çÏnkk$Iò5öÿFDD ==·nÝBzz:ÂÃÃåûHsçÎ!11+V¬ DFFÙö(--ERR²³³»ûÜàÂ
èÝ@dC¬7ê/ÞýN6Iàëë???444À××û÷ïït¿TTTôøKèèhÜÿý@AAÉ~G
+V )) °}ûv<÷Üs3gÆ]»vçãã
+DFF¢©© 7nì4^ff¦¼}yy9bcc{óY
+ë¨3UáÝïk¸¸¸nï»`Á,\¸°ÇqÇãÇ[¼ïÑ£G£¼¼¼Ûí===qñâÅÇ~yg]ÇnÔÂz#2Oõg}5`À ùlSËìaD=a½#Óä5B"""[a#$""¡±ÐØHhlDD$46B""! MñÏVVV"55Uéa4«¢¢¢Û¿`M¬75êMÑFèçç\ºtIÉa4ÍÃÃ3f̰ù~Yo$"kÔ¢000JID]`½)×HhlDD$46B""! ÆFHDDBc#$""¡)ú9Â3gÎ ªªJÉ!©S§NíñC¥ÌÃv,ÉCiÌ×vXoÚ¢t½)Ú«ªªpôèQ*9,Ý¥²²---=þ"0Û°4¥1_Û`½i5êMñï5HNNVzXê %%uuumË<¬¯7y(ùZëM[¬Qo¼FHDDBc#$""¡±ÐØHhlDD$46B""! ÆFHDDBc#$""¡Ùm#lmmEtt´ÚÓèQtt4Z[[ÕÕ1ÇÆ|µ
y(KÕF¨ÓéÌ.?pà |||0pà@øùù¡¤¤¤Ó6
xäGLÆjÿ×Ñ+WgggãÊ+ícË-&cu¼]SS///¼óÎ;&ûÖëõ7nöîÝ+o;mÚ4Zú¨y86æ«-ÌC;4ùðÀ(((@KKV¯^ØØØNÛäççÃ`0È?KI:m·aà ¹¹!!!HLLìq'ODNNÙ¹!**
+¹¹¹X¹r¥Éþ[[[U«VÉË
+òóó{ýh óplÌW[íi²bÒ¤IpqqAdd$î½÷ÞNÛ8qÞÞÞ=URRøøx¸¸¸ >>ÅÅÅÝîãÖ[þ}û:µgÏ$%%¡¸¸¸Û?µ2räHù¶··7¾üòËç©eÌñ1_ma¶§øaRÒ÷ßyóæ!##£ÓºÆÆF¸ººö8Fcc#F >|8®_¿Þí>6mÚÅãñÇï4Ö5kNëÚ_:0` <(/wuuŵk×z§=`ùjó°M>#~9ã
+
+B||<yæNë
+£ÑØã8nnn¨¯¯ 444ÀÍÍÛ}ddd !!A¶ãk㥥¥7ûT_$´µµ¡¸¸ëׯF6Ì£Ö.æáد¶0ÛÒd#ܹs'fÏììl,\¸Ðì6Ó§OÇùóç{+""ééé¸uëÒÓÓÞí>ÚÚÚL^oïøº{@@ JKKììì.÷Ùþ .\@@@@óÔ2æáد¶0ÛSý¥Ñ»ßå$I/_ xâ'äå7nÜ0y) &&òlîN$!--
+ÑÑѸÿþû °hæøøø ¢¢hjjÂÆMö9jÔ(dffÊÛ½ØUÌñ1_maÚ j#4÷.§îw´`Á3®î3vìX?~¼Oûè¸MÇÛ¸xñ¢Ec<yÒä¥-cùjóÐÕöÕä³-³9*y86æ«-ÌCY¼FHDDd+lDD$46B""! ÆFHDDBc#$""¡)þ9ÂÊÊJ¤¦¦*=,uPQQaöoÍaÖ×<Æ|õ¦-Ö¨7E¡ZZZpéÒ%%¥»xxx`Æ=nÇ<lÃÒ<Æ|mõ¦-Ö¨7Ea`` úy86æ«-ÌÃ~ñ! ÆFHDDBc#$""¡±ÐØHhlDD$4E?GxæÌTUU)9$uaêÔ©=~¨yØ%y(ùÚëM[®7EaUU=ÐÐP%¥»TVV¢¥¥¥Ç_æaæ¡4æk¬7m±F½)þ]£ÉÉÉJK¤¤¤ ®®Î¢mõõ&¥1_ëc½i5ê×HhlDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$4»m¶ù~£££ÑÚÚjóýjóplÌW[²Tm:®ËåíÿºRXXGy¤Çû´µµaË-3fôz½¼¾ãv555ðòòÂ;ï¼c2^¯Ç¸qã°wï^yÛiÓ¦¡°°°÷kcc¾ÚÂ<´CÏ%I$IÝnÁÐã}QPP¢¢"ܹs§Ó6eeeBnn.V®\i2^kk+òòò°jÕ*y¹Á`@~~~Ì>1ÇÆ|µ
yØâ}ÂVN8ooï·Û¹s'vìØI&uZ·gÏdff¢¸¸]1
räHù¶··7¾üòË>ÍÙ1ÇÆ|µ
y(KÏ-ÑØØWW×·»|ù2JJJ0hÐ xxxàСCòº5kÖ`Ã
+f t:0kÖ,¼ùæòrWWW\»vMcp$Ìñ1_maʲÛF8tèPÆ·sssCDD®_¿;v`Ù²eòºÒÒRÄÇÇ}ª/IÚÚÚP\\õë×ËËF#
+¦ÌA8æáد¶0eÙm#>}:Î?ßãv `ö"q@@ JKKììì.Ǩ¯¯o_¸p}¶ÃbùjóPê×ï~$I&ËÚoß}7&&r(]Ýgûöíxî¹ç0gÎ7»ví2ÇÇÇDSS6nÜh2ƨQ£)o_^^ØØØ~³1ÇÆ|µ
yhª°«wFõô) X°`.\Øã}Fòòòn÷áéé/Z´ÿ'O¼TàHcc¾ÚÂ<´Cõg}5`À Ø|¿jìÓ0ÇÆ|µ
y(Ën¯)ÆFHDDBc#$""¡±ÐØHhlDD$4Å?GXYYÔÔT¥¥***ºý¶øõõ&¥1_ëc½i5êMÑFèçç\ºtIÉaé.1cFÛ1Û°4¥1_Û`½i5êMÑFÀÀ@%¤~`ùjó°_¼FHDDBc#$""¡±ÐØHhlDD$46B""! MÑÏ9sUUUJI]:uj*e¶cIJc¾¶ÃzÓ¥ëMÑFXUU
O>ùS¦LQrXºË¹sçÐÒÒÒã/ó°
+KóPóµ
+Ö¶X£Þÿ®Ñ)S¦`Ù²eJKäçç[¼-ó°¾Þä¡4æk}¬7m±F½ñ! ÆFHDDBc#$""¡±ÐØHhlDD$46B""! ÆFHDDBSµJbÑ¢E9s&.\Ï>ûÌ*û
+CXXÂÃñhÑ";v¬Ó6iii¸xñ"Z[[±zõjyyCCÖ®]3gbíÚµhhh°ÊÕf/y´ß7,,Ì*ssTö/ëMy¬·î©Ú8ââb¼üòË8rä¶mÛ³gÏZmeeeøüóÏñ»ßýÛ·oï´^$èt:;w'NgeeaòäÉøäO0yòddeeYmj²<ÊÊÊPVVfµy9*{Éõf¬·®)þ×'zã£>Âo¼OOO ÀèÑ£$¯?þ<¶mÛºº:?7nÂÂÂ0gÎ>|þ9êêêóçÏãW¿ú0iÒ¤.÷«×öÿbÇ `rFöÁ ¬¬§NB^^g}qqqJ>a/yPߨK¾¬·_h%¨ú°¾¾ãÇïrý¶mÛðÔSOáðáÃxê©§*¯0aZJJ
+fÏO?ý«W¯FZZÙñÂÂÂ0sæLüùÏFBB¼|Þ¼y8tèüýýQVV|ôÑGò/AKK <x0nܸÑïc×"{ÉúÆ^òe½ýB+y@Õg#FÀ?þñ<ðÀf××ÕÕaÖ¬YpvvÆO>·ß~[^.Ù|÷ÝwHMMQt:Ùñº
+¶ãkßí·£¢¢°víZDEEá¾ûîCSSÜÜÜÐÜÜû÷kì%ê{Éõöä!UaTT¶mÛxzzâêÕ«Ø»w¯üòÀ¸qãðùçcæÌøË_þbröäää$ß~ðÁÁ ggç^Ï£¬¬o¿ý6{ì14ü1^zé%yý´iÓðþûïã
^Àûï¿ÿ~µvÙKÔ7ö/ëM[y@ÕF8þ|899áµ×^ÃÕ«W1räH,\¸P^´´4ddd`üøñ&¯wô?üéééøÓþ~ú @×g?]©©©ÁòåËqöìÙNg +V¬Àk¯½§~&LÀÿüÏÿôòHí½äaîV¤qúÊ^òe½ýB+yPoºM6IÉÉÉÝnººº.h
þóX¶ls¤»äççÃÉÉyhDoòÐëõ`½ÙÖ¶X£Þøz""! ÆFHDDBc#$""¡±ÐØHhlDD$4U¾YæÜ¹s¨®®Vc×÷ðÃcÊ)6Ý'óèy(ùvõ¦-jÕ*°ºº_}õBCCÕØ½fUVVÂh4Úüy§VJc¾æ±Þ´EÍzSí»F
+C_}#«þaÎî0ÎÔÌCiÌ·3Ö¶¨¯ÐØHhlDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$4»h::NNNðööÆ¡CLÖÛ¾·ã´[²d ª««ñóÏ?#((H^~àÀøøø`àÀðóóCIIGf´G[[¶lÙ1cÆ@¯×w¹ê=-ä[PP'²Þ <ÚïÛþoøðá
+vØE# Ipûömlß¾K.µÚ8mmmÐëõøâ/0}útyùPPP¬^½±±±}#P;ääd ¨¨wîÜ$I}u¦v¾~ú)ÐÜÜÍ7#&&¦Ïspjç!IüïøñãøÝï~×ç9hÝ4ÂvNNNV'==:»wﯯ/BCC!]bÒ¤IpqqAdd$î½÷^EæaïÔÊcçÎØ¾};&MÄgV¤V¾ï¾û.ƽ^'''3FyØ;µòèèü#VZ¥È<´Ân¡N§³³3Ö[ììlÅÇGcc#ÂÃÃ!IÂÃÃÑÐÐÐéÆ÷ßyóæ!##£Ïspjçqùòe`Ð Aððð0û2õÚù¶ß×ÅÅË-ë×ò cÇaèС5jTç Eªý=ÂÞêê¥/gggF¸ºº F#\\\z=NÇ3öÛÃGff&V¯^
+ 8q⢣£ñúë¯ãgéÓq8
+µópssCDDRRRPRRÅã·¿ým_î¢v¾í÷ýñÇqøða<ÿüó¸páBÅh! xåWÖëùkÝ<#ìJpp0¶nÝ
+£Ñ£Ñ[·"$$¤×ãHõë×£¼¼§OÆÒ¥K!IüK°sçNÌ=ÙÙÙX¸p¡Òá0lGdd$-_µ
+[åúúz ^¯Ç7=Ga«< àèÑ£hmmÅÔ©S<M°ûFS§NÁÝÝîîî8}ú4rssû4ÖñãÇÆÆF:ÔdÝòåËñÃ?à'ß9e48b«<¶oß´´Á\Ýy DIDAT4¸ººbݺuصkÓ§Ø*____øùùaÈ!HMMÅþýû¾Ã±UÀ/Ïãããû;eM²F»{G ú= TVV ÂÃÃÞ«ûDy=åååízGùÆÅÅ!..΢ý8:-ä ýë_-Ú=²ûgDDDýÁFHDDBc#$""¡±ÐØHhlDD$46B""! MÔÿðÃ(--Euuµ»×¬/bìØ±6ß/ó0O<Æ|Íc½iõ¦J#lmm
»»;|}}ÕØ½fݼywîܱù~yjå¡4ækëM[Ô¬7UáèÑ£1yòd$''«±{ÍJIIÁÙ³gm¾_æaZy(ùÇzÓ5ë×HhlDD$46B""! ÆFHDDBc#$""¡±ÐØHhlDD$46B""]4BNN'''x{{ãСC&ëÌmßÛqÚ-Y²ÕÕÕøùçÔé¾w}åÊÃÙÙÁÁÁ¸råJ_Ónh9v[¶léruOËùö»#²<ì9»h Inß¾íÛ·céÒ¥V§
+z½_|ñ¦Onr?I:m¿aà ¹¹!!!HLLìóÜìVó 'O"''§Ïs"íæÛ]îL«yt\gϹØM#lçäädqÒÓÓ¡Óé°{÷nøúú"44=å >>...Gqq±"ó³ZËãÖ[þ}ûè´¯è´ÇàÁáêê§~uuuÌÏÖì¦êt:8;;cݺuÈÎÎV|øøx466"<<$!<<
+
+
+=å466bÄ áÃãúõë}=Ñj6mÂâÅñøã÷yN¤Ý|E¥Õ<$IBss3jkkñðÃ#66¶ÏsS*°/º
+ÄÙÙF£®®® £Ñ^Óņ̃ýöðáÃÕ«Ww9êëë1räH444ÀÍÍÇcqZÍ###$!!!A¾/ÿçÚ{ZÍWTZÏÃÝݯ¾ú*Üã¶Zd7Ï»[·Âh4Âh4bëÖ éõ8$aýúõ(//ÇéÓ§±téRHÔã/ADDÒÓÓqëÖ-¤§§#<<¼¯âÔΣÍäz ²ÔÎLi%¦¦&lݺ~~~½Þ·Ø}#ÌÍÍÅ©S§àîîwww>}¹¹¹}ëøñã
+
+Bcc#j²®ã»¢:ÞNKKCEEî¿ÿ~=zÛ·oïßÙ9µó ëR;_ænJ+y5
+_|ñ
Ý^·F»;«÷ðð@QQQ¿ÇÊÊJ @xxx§gv]ÝwìØ±8~ü¸EûwZΣ·ÛPgZÎWÄLõÙý3B""¢þ`#$""¡±ÐØHhlDD$46B""! ¦Úê+++ªÖî5©¢¢Bµï*e©Òog¬7mQ3UáC=£Ñêêj5v¯Ynnn2eÍ÷Ë<ÌS+¥1_óXoÚ¢f½©ÒýüüìöËYóplÌW[öð! ÆFHDDBc#$""¡±ÐØHhlDD$4Å?GøÍ7ß ??_éa©êêjøûû[´-ó°¾Þä¡4æk}¬7m±F½)ÚýüüÐÒÒ¢äd¿¿?fÌÑãvÌÃ6,ÍCiÌ×6XoÚbzS´"00PÉ!©cc¾ÚÂ<ì¯ÐØHhlDD$46B""! ÆFHDDB³øsÿûße͹9´ªª*Y´-ë¨zSo5ÂÀÀ@455õkRD¢Dhh¨EÛ±ÞúÇÒz,l¡?s""±Þl×HhlDD$46B""! ÆFHDDBc#$""¡éôÿùjÏÈæÊËËñÿ£Ã\ÖX©T· IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/dudley.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff">
+ <info name="Backend" value="Linux"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+ <object type="Cache" os_level="-1" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222">
+ <object type="Cache" os_level="-1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="2" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444">
+ <object type="Cache" os_level="-1" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+ <object type="Cache" os_level="-1" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,93 @@
+PNG
+
+
+IHDR ® ® Èõâ bKGD ÿ ÿ ÿ ½§ IDATxíÝ}TTuÂðï
+ÚCºf)R`
¢ør@0-[Òhͺ%¼ä®iê# x
µ@5qÐ|Ë@Ϫ@*Km¨Ùò
+B at 2_ûüÑá>ÌÀ
¹?ø~ÎñÈÜ{çwï/×ïܹ3£ÆÝÝ]òôôÚ¢N§CTT©·
¨CÑÑÑÐz#Áâ"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡´¸4QÓÑØØÿ.Óþþþhll4ɺz;£K£Ñ 33SoÚæÍ)$Iêò0a|[£ÑÈZjjjÂÚµk1|øphµZy~SS¢¢¢0jÔ(ãé§Æ'|Òj<V#F --M7~üøV)Ãè3®¹Xîܹ]»v)¾QJHOON§oKÔf!FEE!##ÙÙÙ¸{÷®¼Ltt4>ûì3>|¿þú+<£GêÝW$466"55K,§ët:¤§§wÏõqF: ؽ{7fÎÙjæ³Ç{ ÀÅÅýúõÓ;ëY¿~=¬¬¬`cc#Ñ4Ï×h4mÎÿþûï1iÒ$côèÑ8~üx«m(..Cû¸¸83Fo»ññÇcÌ1èß¿?°sçÎvÇ:t¨ü³¾ùæ×MDD)
+táÂiâÄRSSäää$ýøãVËÞ½{WÊÏÏF%I$;VnÞ¼©7^bb¢tãÆ
+é/¾,O¿ß|WWWiÇÒÍ7¥Ï?ÿ\=zt«õ÷ë×OjlllsZ233BCC¥J#G8Ðêþ ä?-ÇiþÓ¿éСCò¼;wîHýúõ3à%""cDEEIF$IôöÛoKóæÍÓ.I/=þøãV« HF¤ßà×_m5ÞÝ»w[ßòï¶æ÷ë×O¯8×ÑÒ!C¤ÚÚÚv÷¡ôÙgI7oÞ>ûì3¹üq©¼¼¼Ýû6ÿÜÔÔ$åççKO<ñ<ïÚµkÒСC[º&**JêÔ»
+W¬X?üË-këü1pèÐ!ù££#RRRpëÖ-½åµÚûoB[ó±cÇüúë¯$ MMM8q"ÊËË;Ü ú/OÀo¼?ÿùÏ8þ<îÞ½.Üwªª*ùçóçÏÃÕÕµÃuñ:U\S§N
$I<yr«yááá;w.
+3gÎÈÓSSSvù]ÿüç?±k×.<òÈ#m¾S PPP ßn¹\ËãââKKK¼óÎ;ؾ}; à¯ý+¦Lç{ÀÿøGüóÿÔ[Gó»
+(OÏÏÏG```öÚ¦¢¢¢L½»sçæÏ_·¿¿?vïÞ~ýúõøºz³èèhôÚYû÷ïoÒ`²õõüÊ'""
+Ââ"""¡°¸H(,.""
+Ââ"""¡ô9®ÂÂB½o¡ ""R»»;<==;\Î âÊÏÏGff&ÜÜܺ¼aDDD÷*))AmmrÅ nnnïÒµ%))ÉàeyÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡¨º¸ìììL½ DD¤2ÝR\1càííCuÇjôܯäììì`gg'|^^^ÈÉÉiµLDD¾ÿþ{466bÎ9òô+W®`îܹ=z4æÎ+W®tËöaº¥¸V¬Xàà`|÷ÝwHMME^^^w¬Æ(øá°jÕ*DFF¶/I´Z-Î9'''yzTT\]]ñí·ßÂÕÕQQQ=¹ÙDDtn).+++TUU¡¬¬F||¼<ïìÙ³9s&ìíí1sæL ÊÊÊ0kÖ,ØÛÛ·:{:~ü8&NÌÌL\¸p¯¼ò|6wúôiyùæ3«û133Ó»
+;;;ìÝ»3fÌ@@@ vìØ!ó¯ýAAA°°°@PPþõ¯uùñ!"¢ÎëâÚ¶m~úé'¬[·øôÓOåyaaað÷÷Gii)üýý&O={6ÊÊÊPQQ!/¿ÿ~¬Y³Û·oǼyó°råJâìÙ³X½z5"""äå+**ôîÛF>ø 7n§¡¤¤&MBEE&MÓ§OËãÔÕÕaÐ A kkkÔ××+û`Qþÿ¸1jÔ(¬_¿ P^^ÀÀ@Ì= páÂøûûcÀ;w.6lØ 8þ<`nn®7VDD¶nÝ
+GGG ¿
É
§ÑhÚ¦ûÚ½??k×®Åðð㦦666¸vízè!C""êÝrƵ|ùr\ºt ·o߯?ü¦¦&yÞO<}ûöá·ß~CVVìíí Ø³gnß¾7VJJ
+ÂÂÂ
+ xæg+]¼x Я_?üüóÏFokEEÃÃßßX°` `òäÉHMMÅ[·É'wê1!""etKqyyyá7Þ££#âããõÞÐ]»vaìØ±Ø³g6mÚ$OÏÊÊÂÓO?wäéé;wâ>ÀöíÛñ÷¿ÿû÷ïÞ5W_}:®So¡?sæ\\\PWW+++½yï½÷ñì³Ï¢¸¸«VêÌCBDD
+ÑDFFJ½S.::ï¡Í""¢¾$)) Z¶ÃwnGGG«ûÈDDD÷bqPX\DD$
ÅEDDBaqPX\DD$ EÑï*,))AQQC aܸqpss»ï2<>¨¯2äø0¢ÅUTTcÇÁÓÓSÉaT°°õõõ<>¨/2ôø0â߯Óéø-RÒühàñA}1Ç¡xÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡[\ð÷÷7õftÈßߦÞêcx|PofÒâÒh4mNÏÊÊ££#ÌÍÍáììÜÜÜVËdffb ¦¯]»VoÜË/cÊ)°°°À)Spùòe Àç{{{XXXÀËËW¯^ 455aíÚµ>|8´Z<VË1ËÊÊ`oo>úH§Ñh Õj1bĤ¥¥ÉË?Æ>4D<>Ú¡Ê3®¬¬,ddd ¾¾!!!lµLzz:t:Þ´S§NaëÖzÓV®\©S§¢®®S§NEXX `áÂ
G}}=Þ}÷]yzTT222»wïB$½ñòòòàççmÛ¶á·Þ§KÆÆF¤¦¦bÉ%òtNôôô.=D-ñø ¾NñoWBËg`>>>ذaC«eáàà ß¾yó&°{÷nxyyÉÓsssqöìY0 ¡¡¡3fß9ÿÿLñË/¿ ¤¤¤`Ë-òr-íܹÈÉÉm»Û?tèPùg|óÍ7ì6Ax|P_§Ê3®fW®\Á9sÐj^MM
+,--åÛX¸p!{î¹VË
+< `cck×® ñöÛoÃÊÊ
+999òô~ú ¹¹¹xà`kkÊc-]º+W®ló Ôh4033ÃÌ3±yófyº¥¥%~ùåÎ?DíàñA}j«¸¸
+
+ÅK/½Ôjþ AÐÐÐ ßNHHÀ+Z½ænmmªª* @uu5¬ ³gÏFee%nܸ___<öØcòòÓ¦Mõk×°eËËë8zô(BCCÛ|iC$455!''Ë/§744àGéêÃA¤Çõeª,®Ì5ÉÉÉ?~ËL8åååòí¦¦&H$¿æÞü÷´iÓ7o">>ÞÞÞò}$I¹sçÅøý¥ m^tvuuÅÑ£Gäääv·¿ù 8þ<\]]Ú¢ûáñA}ɯqÝûÎ)I°hÑ" ÀôéÓåéׯ_×{é# þÒÇÆÆÂßß=ô\]]¡·ÞaÃañâÅ ÄÅÅáÕW_ÅË/¿#F`ûöízã9::¢ >>>¨EDDD«ñååóóóÛ¼xNdD´¸î}GRGÓ[7o^»Ï6[ÞÿñÇÇ'^Ç£>üüüû.ogg/´½§NÒ{iÈP<>Úfò3®Îêß¿¿üìPÍDØFê}x|Po¦Êk\DDDíaqPX\DD$
ÅEDDBaqPX\DD$Å?ÇUXX¥%Rû~zK<>¨¯1æø0¢Ååììúúz\ºtIÉaTÍÖÖnnn.Çãú"Cc(Z\îîîpwwWrH¢^Ç2xÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(~«¤¤EEEJIí7n\êc=y¨óPCò0¢ÅUTTcÇÁÓÓSÉaé
¨¯¯ïðyôæ¡.ÌC]ÍÃW¡N§CTTÒÃRÑÑѨ¬¬4hYæÑýº0u1&Cñ
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$
ÅEDDB¶¸áïïßãëõ÷÷Gccc¯Wíº0uaÊ2iqi4v§7ÿiOff&&L ßÎÈÈÀSO=sss8;;#77 GGÇVÓ[]VV{{{|ôÑGzë×jµ1bÒÒÒäeÇÌÌÌÎï´1uaêÂ<ÔCg\$A¤û.N'ß>rä²³³QWWU«V! À│¯¯GHHõÆÉË˶mÛ·ÞzKo%KÈÓu:ÒÓÓØKq0uaêÂ<zâßßSáàà ßþäO ·nÝ zÏ6|||°aÃùöÎ;ØÚÚ¶»®¡CÊ?;88ào¾Qj7z
+æ¡.ÌC]²-®XZZêMk>¶¶¶Æç®7ïÊ+3gäiK.ÅÖ[Ûü%h«ÿþØ·o<ÝÒÒ¿üòR»Ñk0uaêÂ<¥Ê
+
+1hÐ 444èM$ 7nÜ@RR^{í5yzqq1<<<^zI~ôèQ¶y*-IåËËÓðÈ#tÃy¨óPæ¡,akâÄ(//o¢ªª
+ Õjqýúu @JJ
+fÍ
äädÌ?_oWWW=záááHNNnw]ÍãÀùóçáêêªä®ô
+ÌC]º0eü¥Â{ß#IÞ´æï½ø9±cÇÂÙÙÕÕÕ;v,öìÙ X´h `úôéò}I ÀÑÑðññAmm-"""ôÖ;lØ0$&&ÊËççç·º`Ú0uaêÂ<ÔÁ¤ÅÕÞ;q:z Ì7OïIPP:µ;;;\¼xÑ õ:uJïT¼7aêÂ<Ô
y¨Éϸ:«ÿþÈÈÈèñõb"`êÂ<Ô
y(KØk\DDÔ7±¸H(,.""
+Ââ"""¡°¸H(,.""âã*,,DLLÒÃR÷ývèG÷cêÂ<ÔÅ<¥hq9;;£¾¾.]RrXº-ÜÜÜ:\yôæ¡.ÌC]Íû»;ÜÝݺy¨óPæ!.^ã"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""¢ã*))AQQCR;Æ×áúGÏaêÂ<ÔÅ<¡hqá³Ï>ÃÒ=Î;úúúGÏ`êÂ<ÔÅÐ<¡øw:99!88Xéa©
ôôteÝy¨óPcò0¯qPX\DD$
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$ ŤÅ%IöíÛÀ××óçÏÇ_~Ù-ëòòò¼½½±`Á?~¼Õ2±±±¸xñ""O¯®®Æ²eËàëëeË¡ººº[¶ÑÔDÉ£ù¾^^^ݲmj!JX¸p!|}}Ó§OwË6(y|ýõ×xýõ×{uÉ®1²²²Õ«WcÔ¨Qøùçç¾[Ö»w¨±±±<y²Þ|I ÑhpîÜ9<õÔSòô¤¤$<ûì³ÃÎ;¿þõ¯Ý²¦$Jyyy ÐëK<òóóñþûïcøðáÈÉÉÁ
+°ÿþnÙFS%ÂÂBlÚ´ VVV8yò$Ö¯_tË6IëÀذaììì >ú(ÂÃÃåùåå娴i*++1räHDDDÀÞÞ^^^xùåqøða|õÕW¨¬¬Dll,ÊËËñ?üááá3fL»ëÕjõO4÷íÛ-[¶ Þ3¨O?ýyyy8}ú4RSSannW^yAAAJ>ª!J}
(y¬Y³F6a¤¥¥)²ÿj#Jï½÷ àÎ;Ðjµ°±±Qì1P¾TXUU
#G¶;Ó¦Mxá
pøða¼ðÂç=Z-::³fÍÂ#GØØØ6Çóòò¯¯/þñ`Åòô9sæààÁpqqA^^\\\pàÀùÉúúzXYY ~øa\¿~½Ëû®F¢äÑWGMM
+Ö¬Y¥Kve·UK¤<¼¼¼0}útlÞ¼Yï¾½
Iϸÿþ÷¿5jTó+++1sæLXXX`ÆøðÃåyÞÞÞò3. &&FþEÑh4m×Þ?|-_rjþÙÏÏË-|ðAÔÖÖÂÚÚuuuxðÁßYG_!RÿùϰnÝ:,\¸&M2rOÅ Ryyy¸uëN<¨¨(ìÚµËȽU76mÚ+
VÀÎÎW¯^EZZ|ú=bÄ|õÕWðõõÅ_|¡÷lÇÌÌLþùÉ't:,,,Þ¼¼<|øá<y2xà:tï¾û®<üøñØ»w/^ýuìÝ»...]Økõ%¾B<9?þ«V º°Çê&J[¶lÁþô'87nÜèÂ^«Ikîܹ033úuëpõêU:óçÏç
!66 9r¤ÞëÉ-ýå/A||<þö·¿áöíÛ Ú¶Ò²²2,Z´ß~ûm«3ªÅcݺuxñÅ1zôh¼ÿþûFî©DÉ£g½ñeDQòؼy3 èÿÈ#8p QëP;Qò°³³Cpp0êêêðÄO`õêÕFî©úi"##¥¨¨¨û.ÊÊÊvhüÿv7KOOóP æ¡.ÌC]ÉC«ÕÂ>âH(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡ä3Î;ÒÒRS¬Zõyæ899õè:Gûº0u1E«´´ß}÷<==M±zÕ*,,DCCCÿ"0¶1uaêbª< ~W¡N§ëð«=úèèh|ûí·&Y7óhy¨óPSæÁk\DD$
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$
ÅEDDB¢¸4
+4
+ÌÌÌàààêÍkkycÇiöÆo ´´wîÜ<ýòåË2e
+,,,0eÊ\¾|Y=òh¶víÚvÇï+ÔGVVanngggäææ*°gbRCMMMX»v-VÛë! $IÂ[·7ß|³ÛÆijjV«ÅÉ'1qâDyúÊ+1uêTÔÕÕaêÔ©ëô6ô¦Î N:
[·vzݽ©óÈÊÊBFFêëëÀÀÀNoCo`ê<¢¢¢ììlܽ{$uzÔHâjfffÖ-ãÄÇÇC£Ñ`Ç;v,<== ?SÉÍÍEhh(ÐÐPäää(²¢3U7oÞDPPvïÞÈú{Så1cÆ`ÀðññÁÿüÏÿ(²¢3U)))Ã1czÝÙ Pqi4XXXàwÞArr²â㢦¦ÞÞÞ$ ÞÞÞ¨®®©ÔÔÔ`ðàÁ \»vk;$8Sç
â¹çëò¾ô¦Î£Ù+W0gÎ$$$tzzSçñÓO?!77<ð lmmÛ|Qd&ûÿ¸ÕÞ©®
`ii hhhÀ§å³æmllX[[£ªª
+CEuu5¬;»+½©óHHH$IX±b
¼Lo{9ĦΠáïïõë×ã¥^êÔ~ô¦ÎÃÚÚÓ¦MCtt4rss±páBüñììî¨0g\í2e
+6nÜ444`ãÆ:uªÑãHåË#??gÎÁo¾ IärÚ´iÇÍ7ooo¥w¥Wè©< I|`÷åÒºÊ#%%³fÍBrr2æÏ¯ônô=ÿ/µÞör¡ðŵmÛ6>}CÁ!CpæÌlÛ¶Sc8q¨©©Á AôæÅÆÆ¢ =ô;¸¸8%6¿×é©<È0=Ç¢EðóÏ?cúôéò»áØ
^¥§òCll,,--ñÎ;ï`ûöíJl¾jñRáýMÛÚÚ";;»Ëã @aa! ÀÛÛ»ÕÕã?'N´ÞN
+y3No§<úz-©!G}ùùùGDÂqQßÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""É>\XXS^
+
+
+LöÌ£5æ¡.ÌC]LIëé§FCCJKKM±zÕ²¶¶S¯y´y¨óPS娸áììlUSº0uaêÃk\DD$
ÅEDDBaqPX\DD$
ÅEDDBQüs\ßÿ=ÒÓÓZ(--
AË2îÇ<Ô
y¨1yJÑârvvF}}½CR\\\àææÖárÌ£g0uaêbhÆP´¸ÜÝÝáîî®äÔÌC]º0qñ
ÅEDDBaqPX\DD$
ÅEDDBaqPþ׿ÿýo$%%uç¶QUTT5¨¸ÜÝÝQ[[Û¥"""j»»;<==
+ZÖ âÒétÐét]Ù&"""Eð
ÅEDDBaqPX\DD$
ÅEDDBaqPúWaa!
+
+
+º{[¨3ôCÈW~~>233áææÖå
+#""ºWII jkk+. pssCxxx6¨-Æ|.¯qPX\DD$
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$U©7T¦[« 3f̼½½qèСîXûìììðäOÂËË999À÷߯ÆFÌ3§Õ}Y¢DDêÐ-ŵbÅ
+ã»ï¾Cjj*òòòºc5F©¨¨À?üU«V!22²Õ|I ÕjqæÌ899éݯ¢¢¢'7î£[ËÊÊ
+UUU(++ÃàÁ/Ï;{ö,fÎ {{{Ì9eee ²²2Ì5öööÎn?'"33.\À+¯¼"Í>}Z^Þ3#333½Û©©©°³³ÃÞ½{1cÆ`Ç<Ã""R©n)®mÛ¶á§~ºuëàááO?ýTÂßßaaaòôÙ³g£¬¬LïgÿþýX³f
+¶oß{)! _IDATyóæaåÊÄÙ³g±zõjDDDÈËßïìÈÎΣGÆ|7ÊÓPRRI&¡¢¢&MÂéÓ§yED¤Rÿ\Æ5jÖ¯_ (//G`` fÏ
+ ¸páüýý1`À Ì;6l ?077×+""[·n
££#ßÏÌÂÂÂäÂÓh4mÓý
+íÞǵk×bÁî2õn9ãZ¾|9.]ºÛ·oã~@SS<ï'À¾}ûðÛo¿!++ööö ìÙ³·oßÖ+%%aaaÈÎÎ <óÌ3ÏÌ.^¼ èׯ~þùg£·µ¢¢AAAHOOÇáÃáïï
+JuKqyyyá7Þ££#âãã%ÏÁ®]»0vìXìÙ³6m§geeáé§Ö;òôôÄÎ;ñÁ`ûöíøûßÿýû÷ÃÅÅEïÖ«¯¾
+NשkSgÎêêê`ee¥7¯å:øîB""ÓÓDFFJ-¥-ÑÑѨ¬¬Dxxxmõ%IIIÐjµ0¤Týd""¢{±¸H(,.""
+Ââ"""¡°¸H(,.""
+¢èw ¨¨HÉ!0nÜ8¸¹¹ÝwÔWr|CÑâ***±cÇàéé©ä°DªVXXúúúLÔz|Cño×ét~eQoÒühàñA}1Ç¡xÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡[\ð÷÷7õftÈßߦÞêcx|PofÒâÒh4mNÏÊÊ££#ÌÍÍáììÜÜÜVËdffb ¦¯]»VoÜË/cÊ)°°°À)Spùòe Àç{{{XXXÀËËW¯^ 455aíÚµ>|8´Z<VË1ËÊÊ`oo>úH§Ñh Õj1bĤ¥¥ÉË?Æ>4D<>Ú¡Ê3®¬¬,ddd ¾¾!!!lµLzz:t:Þ´S§NaëÖzÓV®\©S§¢®®S§NEXX `áÂ
G}}=Þ}÷]yzTT222»wïB$½ñòòòàççmÛ¶á·Þ§KÆÆF¤¦¦bÉ%òtNôôô.=D-ñø ¾NñoWBËg`>>>ذaC«eáàà ß¾yó&°{÷nxyyÉÓsssqöìY0 ¡¡¡3fß9ÿÿLñË/¿ ¤¤¤`Ë-òr-íܹÈÉÉm»Û?tèPùg|óÍ7ì6Ax|P_§Ê3®fW®\Á9sÐj^MM
+,--åÛX¸p!{î¹VË
+< `cck×® ñöÛoÃÊÊ
+999òô~ú ¹¹¹xà`kkÊc-]º+W®ló Ôh4033ÃÌ3±yófyº¥¥%~ùåÎ?DíàñA}j«¸¸
+
+ÅK/½Ôjþ AÐÐÐ ßNHHÀ+Z½ænmmªª* @uu5¬ ³gÏFee%nܸ___<öØcòòÓ¦Mõk×°eËËë8zô(BCCÛ|iC$455!''Ë/§744àGéêÃA¤Çõeª,®Ì5ÉÉÉ?~ËL8åååòí¦¦&H$¿æÞü÷´iÓ7o">>ÞÞÞò}$I¹sçÅøý¥ m^tvuuÅÑ£Gäääv·¿ù 8þ<\]]Ú¢ûáñA}ɯqÝûÎ)I°hÑ" ÀôéÓåéׯ_×{é# þÒÇÆÆÂßß=ô\]]¡·ÞaÃañâÅ ÄÅÅáÕW_ÅË/¿#F`ûöízã9::¢ >>>¨EDDD«ñååóóóÛ¼xNdD´¸î}GRGÓ[7o^»Ï6[ÞÿñÇÇ'^Ç£>üüüû.ogg/´½§NÒ{iÈP<>Úfò3®Îêß¿¿üìPÍDØFê}x|Po¦Êk\DDDíaqPX\DD$
ÅEDDBaqPX\DD$Å?ÇUXX¥%Rû~zK<>¨¯1æø0¢Ååììúúz\ºtIÉaTÍÖÖnnn.Çãú"Cc(Z\îîîpwwWrH¢^Ç2xÂâ"""¡°¸H(,.""
+Ââ"""¡°¸H(~«¤¤EEEJIí7n\êc=y¨óPCò0¢ÅUTTcÇÁÓÓSÉaé
¨¯¯ïðyôæ¡.ÌC]ÍÃW¡N§CTTÒÃRÑÑѨ¬¬4hYæÑýº0u1&Cñ
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$
ÅEDDB¶¸áïïßãëõ÷÷Gccc¯Wíº0uaÊ2iqi4v§7ÿiOff&&L ßÎÈÈÀSO=sss8;;#77 GGÇVÓ[]VV{{{|ôÑGzë×jµ1bÒÒÒäeÇÌÌÌÎï´1uaêÂ<ÔCg\$A¤û.N'ß>rä²³³QWWU«V! À│¯¯GHHõÆÉË˶mÛ·ÞzKo%KÈÓu:ÒÓÓØKq0uaêÂ<zâßßSáàà ßþäO ·nÝ zÏ6|||°aÃùöÎ;ØÚÚ¶»®¡CÊ?;88ào¾Qj7z
+æ¡.ÌC]²-®XZZêMk>¶¶¶Æç®7ïÊ+3gäiK.ÅÖ[Ûü%h«ÿþØ·o<ÝÒÒ¿üòR»Ñk0uaêÂ<¥Ê
+
+1hÐ 444èM$ 7nÜ@RR^{í5yzqq1<<<^zI~ôèQ¶y*-IåËËÓðÈ#tÃy¨óPæ¡,akâÄ(//o¢ªª
+ Õjqýúu @JJ
+fÍ
äädÌ?_oWWW=záááHNNnw]ÍãÀùóçáêêªä®ô
+ÌC]º0eü¥Â{ß#IÞ´æï½ø9±cÇÂÙÙÕÕÕ;v,öìÙ X´h `úôéò}I ÀÑÑðññAmm-"""ôÖ;lØ0$&&ÊËççç·º`Ú0uaêÂ<ÔÁ¤ÅÕÞ;q:z Ì7OïIPP:µ;;;\¼xÑ õ:uJïT¼7aêÂ<Ô
y¨Éϸ:«ÿþÈÈÈèñõb"`êÂ<Ô
y(KØk\DDÔ7±¸H(,.""
+Ââ"""¡°¸H(,.""âã*,,DLLÒÃR÷ývèG÷cêÂ<ÔÅ<¥hq9;;£¾¾.]RrXº-ÜÜÜ:\yôæ¡.ÌC]Íû»;ÜÝݺy¨óPæ!.^ã"""¡°¸H(,.""
+Ââ"""¡°¸H(,.""¢ã*))AQQCR;Æ×áúGÏaêÂ<ÔÅ<¡hqá³Ï>ÃÒ=Î;úúúGÏ`êÂ<ÔÅÐ<¡øw:99!88Xéa©
ôôteÝy¨óPcò0¯qPX\DD$
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$ ŤÅ%IöíÛÀ××óçÏÇ_~Ù-ëòòò¼½½±`Á?~¼Õ2±±±¸xñ""O¯®®Æ²eËàëëeË¡ººº[¶ÑÔDÉ£ù¾^^^ݲmj!JX¸p!|}}Ó§OwË6(y|ýõ×xýõ×{uÉ®1²²²Õ«WcÔ¨Qøùçç¾[Ö»w¨±±±<y²Þ|I ÑhpîÜ9<õÔSòô¤¤$<ûì³ÃÎ;¿þõ¯Ý²¦$Jyyy ÐëK<òóóñþûïcøðáÈÉÉÁ
+°ÿþnÙFS%ÂÂBlÚ´ VVV8yò$Ö¯_tË6IëÀذaììì >ú(ÂÃÃåùåå娴i*++1räHDDDÀÞÞ^^^xùåqøða|õÕW¨¬¬Dll,ÊËËñ?üááá3fL»ëÕjõO4÷íÛ-[¶ Þ3¨O?ýyyy8}ú4RSSannW^yAAAJ>ª!J}
(y¬Y³F6a¤¥¥)²ÿj#Jï½÷ àÎ;Ðjµ°±±Qì1P¾TXUU
#G¶;Ó¦Mxá
pøða¼ðÂç=Z-::³fÍÂ#GØØØ6Çóòò¯¯/þñ`Åòô9sæààÁpqqA^^\\\pàÀùÉúúzXYY ~øa\¿~½Ëû®F¢äÑWGMM
+Ö¬Y¥Kve·UK¤<¼¼¼0}útlÞ¼Yï¾½
Iϸÿþ÷¿5jTó+++1sæLXXX`ÆøðÃåyÞÞÞò3. &&FþEÑh4m×Þ?|-_rjþÙÏÏË-|ðAÔÖÖÂÚÚuuuxðÁßYG_!RÿùϰnÝ:,\¸&M2rOÅ Ryyy¸uëN<¨¨(ìÚµËȽU76mÚ+
VÀÎÎW¯^EZZ|ú=bÄ|õÕWðõõÅ_|¡÷lÇÌÌLþùÉ't:,,,Þ¼¼<|øá<y2xà:tï¾û®<üøñØ»w/^ýuìÝ»...]Økõ%¾B<9?þ«V º°Çê&J[¶lÁþô'87nÜèÂ^«Ikîܹ033úuëpõêU:óçÏç
!66 9r¤ÞëÉ-ýå/A||<þö·¿áöíÛ Ú¶Ò²²2,Z´ß~ûm«3ªÅcݺuxñÅ1zôh¼ÿþûFî©DÉ£g½ñeDQòؼy3 èÿÈ#8p QëP;Qò°³³Cpp0êêêðÄO`õêÕFî©úi"##¥¨¨¨û.ÊÊÊvhüÿv7KOOóP æ¡.ÌC]ÉC«ÕÂ>âH(,.""
+Ââ"""¡°¸H(,.""
+Ââ"""¡ä3Î;ÒÒRS¬Zõyæ899õè:Gûº0u1E«´´ß}÷<==M±zÕ*,,DCCCÿ"0¶1uaêbª< ~W¡N§ëð«=úèèh|ûí·&Y7óhy¨óPSæÁk\DD$
ÅEDDBaqPX\DD$
ÅEDDBaqPX\DD$
ÅEDDB¢¸4
+4
+ÌÌÌàààêÍkkycÇiöÆo ´´wîÜG«û¶7v_¢¶<úz&jÈ###O=õÌÍÍáììÜÜ\öLLjÈãÞãÃÆÆF=S! $IÂ[·7ß|³ÛÆijjV«ÅÉ'1qâD½ûIÔéõö6¦Î£ù¾Ìåw¦ÎãÈ#ÈÎÎF]]VZ
NoCo`ê<Z'NÀÿüçNo S\ÍÌÌ̺eøøxh4ìØ±cÇ
§§'úü³ù2~xñÅQYY©ÈvÎTy|òÉ'9r$´Z-ÌÌÌ0|øpE¶Ctjø÷êÿ÷±dÉE¶C-).F¼óÎ;HNNV|ÐÐPÔÔÔÀÛÛ$ÁÛÛÕÕÕ|6ßSç!IêêêPQQgy]Þ':æû0 ÁÁÁ]ÚÞ@
+y ÀñãÇ1hÐ 6¬ÓÛ F&ûÿ¸Õ^XXX ¡¡ 0ÀèqZ>SiþÙÆÆ éìf÷ZjÉcÈ!øàððý½ò$ ¿ýö>×^{
+çÏïÔ¾ôjÈ Ö¬YØØX£·_í9ãjÏ)S°qãF444 ¡¡7nÄÔ©SG$,_¾ùùù8sæÞ|óMHÄÒ2ROçQ[[7ÂÙÙY©]èUz*ÐÐPTUU ´Z-®_¿®è~ô=y|;v7n»
+Â×¶mÛpúôi2CÁ3g°mÛ¶NuâÄ xxx ¦¦
+Ò×òÝk|'[ûz:aÃáäÉØ½{·ßëôTcÇ
³³3¬¬¬={ö(±ù½NOåü~¶ÚÕMV%!^*¼ßu&[[[dggwy (,, x{{ÃÛÛÛ¨ûö%ÌC]ÔGPPZOo§< à믿6h="þú
ÅEDDBaqPX\DD$
ÅEDDBaqPLöäÂÂBÄÄÄjõªTPP kkk¬y´Æ<Ô
y¨)ó0Iq=ýôÓhhh at ii©)V¯ZÖÖÖprrêñõ2¶1uaêbª< ³³3¿UEº0uaêÃk\DD$
ÅEDDBaqPX\DD$
ÅEDDBQüs\ßÿ=ÒÓÓZ(--
AË2îÇ<Ô
y¨1yJÑârvvF}}½CR\\\àææÖárÌ£g0uaêbhÆP´¸ÜÝÝáîî®äÔÌC]º0qñ
ÅEDDBaqPX\DD$
ÅEDDBaqPþ׿ÿýo$%%uç¶QUTT5¨¸ÜÝÝQ[[Û¥"""j»»;<==
+ZÖ âÒétÐét]Ù&"""Eð
ÅEDDBaqPX\DD$
ÅEDDBaqP4:NzþùçM½DDDÊÏÏÇÿóyiáÓ_Ó IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/emmett.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x000000ff" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x000000ff" local_memory="16864415744">
+ <page_type size="4096" count="4117289"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="PowerEdge 2950"/>
+ <info name="DMIProductVersion" value=""/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0NR282"/>
+ <info name="DMIBoardVersion" value="A00"/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="DMIChassisVendor" value="Dell Inc."/>
+ <info name="DMIChassisType" value="23"/>
+ <info name="DMIChassisVersion" value=""/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Inc."/>
+ <info name="DMIBIOSVersion" value="2.3.1"/>
+ <info name="DMIBIOSDate" value="04/29/2008"/>
+ <info name="DMISysVendor" value="Dell Inc."/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="2.6.32-5-amd64"/>
+ <info name="OSVersion" value="#1 SMP Fri Sep 17 21:50:19 UTC 2010"/>
+ <info name="HostName" value="emmett"/>
+ <info name="Architecture" value="x86_64"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000055" complete_cpuset="0x00000055" online_cpuset="0x00000055" allowed_cpuset="0x00000055">
+ <object type="Cache" os_level="-1" cpuset="0x00000011" complete_cpuset="0x00000011" online_cpuset="0x00000011" allowed_cpuset="0x00000011" cache_size="4194304" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000044" complete_cpuset="0x00000044" online_cpuset="0x00000044" allowed_cpuset="0x00000044" cache_size="4194304" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x000000aa" complete_cpuset="0x000000aa" online_cpuset="0x000000aa" allowed_cpuset="0x000000aa">
+ <object type="Cache" os_level="-1" cpuset="0x00000022" complete_cpuset="0x00000022" online_cpuset="0x00000022" allowed_cpuset="0x00000022" cache_size="4194304" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000088" complete_cpuset="0x00000088" online_cpuset="0x00000088" allowed_cpuset="0x00000088" cache_size="4194304" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" cache_size="32768" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,55 @@
+PNG
+
+
+IHDR Ê " !ç+ò bKGD ÿ ÿ ÿ ½§ IDATxíÝixeÚöñ³ f +K °=MÄ@E¶À@@EIØÆ°¨ EaØd\@gÄd1,òÊ&Ì2,B@Ð~?Ä´²u%TUòÿÝUÕußÝ×}"W¯®wûöí @y·eËUT\\Õs Àrñññò³z Ø 2 4Ê Ð( `@£ 2 4Ê Ð( `@£ 2 6Ê.ËÔv3222UìóETT222, P<¦eË¥åËçØ6}út4¶Fn·»ØçX¾|¹7oî¹¾lÙ25hÐ@*URhh¨Ö['IZ±b
5jk{ff¦âââT§NUªTI
+6Ô»ï¾ë9ËåËåjÖ¬©Eyö5kÖ,×ã pÓ¯(Ï9ÓÓÈþòË/zï½÷|>)_X²d"##=×?ùäY³FçÏ×øñãÕ»woIYò²e˦¡CªO>¤øøx^½Z«VÒÅõÑG))))Çn·[JLLÔ!C<Û###µdÉ¿ 3Ý(
éã?$-^¼XݺuËuLö«wÜqVZ%IÚµkÂÂÂT¡B
¯@O8QU«VUõêÕ=¯Øfïw¹\yîß¿¿Z·nJ*©~ýúÚ´iS®9lÛ¶M!!!ëï¾û®jÕª%???ùûûëöÛoõÊsãÆU¹reuéÒE×]w$iîܹZ°`7n¬+*$$D.Ì÷q©Q£çrHH¾úê+/M ÝnG¡I&Éív+!!AÏ<óL®cÜn·®^½ªÅkĤ'xB?þ¸.^¼ãÕAAAúñǵhÑ"=:×¹òÚÿøãë©§Ò
äº]jjªsls¹\ª\¹²
+¤¹sçæØwâÄ õìÙS3gÎ$ýðêW¯çvÙ®=¿¿¿ºuë¦éÓ§{¶êÌ3ù? Ûr7ÎçÝÁ.Ün·~øaÝvÛm:}ú´-[æÙ.I3fÌÐôéÓuüøqeffÊår)33S+VÔùóçU
¥Jç»zõªüüürßøß¼öW¬X1ÇeeaT£F
+8p at 7ÜpCí?ýôVZ¥ç{NõêsTT&N¨¾}ûJjÖ¬©¤¤$O³lßxÙívë/¾ÐtèÐ!IÒ¹sçÔ A8qÂ«Ç `ñññEûÖëQ£Fé7ÞÐðáÃsí7n,X ôôt}üñÇÆ²Q£F7o®\¹ãøì&8?yí
+
+Õ;ï¼ãyuúÚ&YZ´h¡x®ÇÄÄèÔ©Ss^¸pA4oÞ<uïÞ]sçÎõ4É4`À =ýôÓ:xð ®^½êió}nI:xð ÂÃÃ< `OEjÛµk'·Û6mÚäÚ«^½zéÖ[oÕÎ;=Û¨ßýîwÅþì¿ýíozï½÷tã7æùhIêÝ»·=×4i¢ÐÐPUZU'OÖÒ¥K%IO>ù¤N<©®]»zή¿üå/jÛ¶:tè Ê+ëøþö·¿å#û[¯ûôé£Y³fy¶oذÁó¥` g1õÖk'ùå_Ô·o_-[¶¬ÔÇÒâÅU¡B
R Ptñññ*³\Å-i%Y6. øôÖk Ê*e h 0 Q ÀF e h 0ðêw·lÙ¢äää """Ô¾}û!¿=_À¹È/à\ÞäWò²QÞ°a¼¿@Í[5,öÄ øÆîtîܹBN~û!¿s_À¹¼Í¯äe£,IájÄø¨bMï,µJÊôîXòØùüÎe&¿|F e h 0 Q ÀF e h 0ðúw½±{Ç!mÿr¿/O KMÕUóV
+KuLòøùüÎåëüú´Qþjó~múǵmÙҧʯvíÒ
´K¥þ?jòùüÎUùõi£,Im#ZêÅØX_(7Þ£ï²æeòùüÎUùå3Ê Ð( `@£ 2 4Ê Ð( `@£ 2 4Ê Ð( `@£ìAuGÆÕ«:Ìêix-zè0e\½jõ4Pß
¢#¿°ù-:ò«ß¢#¿¥ÃÒF9¨N°þöþû¹¶åu9¿ý|òIý³çÍÏu»u6(¨N°þdjüT'XAuuã]uÕ¼CG}ºvm®c«½û÷ëuùcOÏöOÐý½z©FH}Ýß«~<q"×m?\ýBÜã¹¾êk©êuëéÞöZõÏ59æqíý]ûù5ì !õõÐcÿ§§O8¶75ȧZð]jܺø¡g_Ó{ëÃÕ9og ¿æò_æJ*¿~ú©"îëªë
¨]·µaÓ&ÏyÈoùD~Íå7¿_òk.¿_½Z-:u&¿0ÍòWþýýçøñ"ß~î;ïÈívK~ÉÈв>Èu̼÷ÞS÷û»jþ{|>~Qýîþ{à[M|n¼kf¦[~~~újçN5kÚÔ³ý/âÔ*<\ÿÞ³[ÂÃõ|\\®Û¾ÿñÇjá¹>46VS&LÐñoöiò/jØØ±9ýîH®Û3Fq/¼ ïÝ£¡ê
Iq
íM
+Î~wD§Ôì©S4úù<ÛÛFDèý?.ô1=_ïó_æJ*¿}ò©Þ=KÿÙ»Gï§Ã{nC~Ë/òë}~ÊP6òÒD~½Ïïgë?×Êwêß{vkÔg4üÂK7ÊS_ ÏýEEº}ÓFõuë$I+>üP]:DæØì?ÿÑ÷ÇPâìÙúáÇuôßÿözü¯÷ìUۺ馺õÔönÚ½o$iû×_«yºíîFziòÏñÒ}=ÑÍõBÞ±¶nßQàÜýýüs\31Ñó,]ûÐQ½5÷w<Ï.%oܨÁÑÑ
+Ðàèhmø×Æ\çÜ¢ºuêx®ßyûí$Ë%IªyÇÎ)ûqÈ>>)9¹Ð±«Áµn®^Ýs¹n:Úµ{wÇþÈïo
+˯7J*¿o¿>[
+CB mÛªJ*Ûßòüþ¦°ü¡lä¥üþ¦°üÎùëtÝyûírùùÉßÏ_·Ö¨ëäy±¼Q®_¯:¶k§7$éöO÷ﯿ¾þÜn·ÞL|[ÿô§û-ÖáÃTÁß_±#+qÑb¯Ç2fúõÒ±Ý)ê×;JÏ#I1îY
+ÖáÛuë-¿
mðG«ÿc}ô}{÷Âóg®T'X5BêkÜË/éµI~»}t´¾ûzÚ·i³ßQû6uxçÏ3WgÏWõjÕ$I7é\ZZ®s=wN×B7IPú£¿¾úJçk&éÏÏ?¯ZMêóuîüùBÇ.¬Ù÷ùÆ»êêÑ'úë¿<çÙ~Ýu×)õìÙçû"¿Þç×%ßl'OR¿Á5yÂmä·ü"¿æóW²_&òk.¿AuuKýñì³Jôj®s_äÅòFYG÷×Môÿ̱= R%]¼tÉsýâ¥K
+ÈqLZ5uKó⪬Ûn¹Å³ïÊ+Z´b
úª :Áê?d¨X¡+W®x5þCÔ/*JUªTQß^½ôíÁíÿ×ëýîw¿Ó}Ôsüî}ûôÌè1º¥~õêCß}çý=ûÝ9|H;7lP÷û»z¶Õ VÐ{¼i³ê+yÓfÝÖLóÞ}WTõt:5UtæìYU½þú\çªZ5ÇcöôÈQZ0sN|ûÿ4/!AGý9Ï9eë~WíÙ´Q?îÿFÛµÓm·ÞZèØÕÀxSÖÞÓø=Û/^¼¨jAAÎ öF~³_oT~%iGJºü±§GGëÎ=ÛÉoùF~³xßü2ä9ùE)#¿Y¼ÉïÙïèÇýß误¾¢§FÊunò¼Ø¢Qv¹\zíÕWôççϱ="¼¹¦¿þº.^º¤.iú믫uxx®Û8@Þ[¤§x"Çö«V)¬iSÏç Î~wDÍBCµrÕ*¯Æ¯w×]Z²r¥~úé'-Z±BõëÕ$
Ô«%+WêòåËúÛû+=Çßs÷ÝzcÚTýðÍ>ÏÂ6ãìwGôÌh^ºDÉ«W©_TÎ~wDúõ$E¶i£7uåʽ¨ömÚä:GXÓ¦9þ9óë³MÙo9ãųOn·[ß<¨çãâÔÿ±Ç¼;¿äåôTÏåÃGêÞ&M
+½
+ìüf),¿Þ(©ü.\ºT}Ôk^Õ£=zäº
+ù-¿ÈoÂò[X$òÒG~³ßg_èy±ÇÏÏOé/æ:ùE^lÑ(KYø¿^äØ63>^){öªn³æªÛ¬¹vïݧãsݶUx¸Î~wD-7˱}þ»ïéÉkþúd¿~ZÇä5þ¬)5ïÝ÷Tó&Z¸d©fOÉú<Åø8½>Ãéû~ð?oæ-ûàÕ¹7¬Ðo·Í϶;¦³çÎ+¨jÕû^ÿ¬6mݦ;ߣÍÛ¶iâsãsݾg÷îÚ´u«çúk^ÕA·5¼[±&(á×·ªçwíåjÁwé}ÿ¤ì¦áO=éÕØùÕ [öy¡)/Mðl߸eyè!ìüf)(¿ùeΨ¤òóìx:sF=û=î9ÞøÌ9ù-ßÈoò[X$òkß,å·Qj×íAÕjÒT3Þ£³fæº=ùE^\ãÆsÇåñíÉFñññ:ôÃfUàqfël^õåaÂ/z*f¤gϲz*^:LoÍHPÿÂ.'Þ£ïÚïUÞ~YGä·ì ¿ÎG~Ë/òë|ä·ü"¿ÎWùàË Âz+TpLÈ%9j®@I#¿s_À¹È/òb·^ `4Ê Ð( `@£ 2 4Ê Ð( `àóßQÞ¾ëk%ÌãëÓ寯[U»ÉõM~â!¿s_À¹J"¿>m4««iôû}yZ \©uÏõjÞªa©K~â#¿s_À¹J"¿>mÃ[7TxëÒÿ@ñ_À¹È/à\ä°'>£ 2 4Ê Ð( `@£ 2 4Ê øôwwï8¤í_òcé@q5iV×ç?^òøùüÎåëüú´Qþjó~}ñjÙ²¥/O+»víÒ
´K¥þ?jòùüÎUùõi£,I-[¶Tll¬¯OsæÌѬyfüÅC~ç"¿sD~ù2 4Ê Ð( `@£ 2 4Ê Ð( `@£ 2 4Ê F988Øê) ("ò8ùü³´QNNNÖ
< uêÔIüqYÐ_
+ÁÁÁ
+VݺuÕ±cG]»6×1cÇÕþýû¡={z¶8qB½zõRýúõÕ«W/8q¢DæØEYÊoömùGʲßO?ýT]»vUHH|ðAmÚ´©DæØEYÊïêÕ«Õ¹sgò[²´Q5j
+¤={ö(11Qëׯ·r:¤#GèÛo¿Õøñã5nܸ\ûÝn·üüü´sçN5mÚÔ³=..NáááÚ½{·ÂÃÃWÓJ]YÊï#GtäÈÒ*`©²ßO?ýT³fÍÒ={Ô¯_?
+>¼4§
+º²ßÏ?ÿ\.ÔîÝ»õÌ3Ï_Ø¥rÕªUuêÔ)íÛ·O7Ýt<ûöîÝ«nݺ©^½zêÖöíÛ'IÚ·oºwï®zõêåzvkÓ¦MjÑ¢
/_®CéGñ<Û¶cÇÏñÞ¼räïïãzbb¢õþûïëPïÞ½õÎ;ïxγqãFEGG+ @ÑÑÑÚ¸qc±ÀÎÊR~ò¦,åwöìÙ
+ Q@@Ú¶m«*Uªûñì¬,åwúôéºýöÛåçç'Õ¨Q£Øà+6ÊóçÏ×÷߯_~YZµÒßÿþwϾ1cÆ(**J)))Ò1c<ÛÿøÇ?jß¾}9^úàôâ/êí·ßÖ£>ªÑ£G«O>Ú»w¯þy;Ös|A¯«~ýúzé¥4iÒ$ÏöèèhíÚµK[·Ö#GÔºukíØ±ÃsóçÏ«Zµj¤ ¥¥¥ùöÁl¦,å(oÊb~O:¥ÁëÅ_ôÙãØQYËopp°4h g}V¯¾úªO+ 8*X9x:u4qâDIÒÔ§Oýñ$:tHQQQª\¹²zõê¥W^yEtðàAõîÝ[*UÊq®±cÇê·ÞR£F$e=s6fÌÏ_.Ë«9ôÀµ5k¦ &¨_¿~ºáªêÕ«ëìÙ³ºþúë½} G*Kùʲß
+6L£FRçνpª²ß#GèòåËJJJÒ¨Q£ôùç{5&PÒ,}EyäÈ:zô¨~þùg}ûí·ÊÌÌôì»ë®»´råJýôÓOZ±b
êÕ«'I
+ ÑÒ¥KõóÏ?ç8×¼yó4fÌY³Ft÷ÝwkêÔ©gÎ>,IªP¡N<iz®GQtt´,Y¢U«V)**JGñ¼M6JLLÔ+W¨6mÚé1¢,å(oÊR~.]ªêÕW_U=ôx NRò;qâD¥¦¦JüüütñâEóPB,m;v쨨Q£FJHHÈñX'OÖ{ï½§&MhéÒ¥2egû+Ô°aÃÏRµoß^.ÔK/½¤·ß~[3fÌÐ| °°°©xì±ÇY¤Ï&îܹSaaa:þ¼ªVcß³Ï>«mÛ¶é{îѶmÛ4~üø¢<$c¥üÇàÛ¯Q¥ü?^gÎÑã?îïÒ¥KEyX G(KùmÐ |ðA5mÚTsæÌÑÌ3ò %Â5nÜ8waßЯC?lÖñQ·`Ö*]I
+Rll¬/ç+sæÌÑö{·ßeÖ)ôÖÉ/PzÈ/à\äp®È¯¥¯( `74Ê Ð( `@£ 2 4Ê Ð( `@£ A+ݵk¶nÝjÅÐåν÷Þ«-[xõ(=ÞÔÃîX/¥üÚù
ä×^È/Ì ¿öbU~-i·nݪ/¾øBíÛ··børcË-JKK+taQÒám=ìõR:ȯ½_A~í
üÂòk/Væ×FY"##gÕðåB||¼;æÕ±Ô£ä©Ý±^Jùµò3ȯ½_A~íÅÊüòe h 0 Q ÀF e h 0 Q ÀF e h 0(órFF¢¢¢¬F¡¢¢¢aõ4Jõ¬{¡0õb/Ôf°^ì
zXòËåÊsû+Ô¨Q#UªTI¡¡¡Z·n]®c/_®æÍç8Wö£ãÇ«mÛ¶
+PÛ¶muüøq¯Æ0aBs/ïÛ·OõêÕÓo¾cl???Õ¬YS-òÛ¬Y3-_¾ÜÛÄRÔf°^ì
zÀÖ½PÁz±êá<hó³bÅ
+-[¶Liii:t¨úôéë%K(22ÒsÝívËívç:nôèÑj×®Î?¯víÚiÌ1
±}ûv½õÖ[yÎmýúõêÑ£æÏ¯Áç?##C2dg{dd¤,Ybú1°ê3X/öB=`ëÅ^¨Ì`½Øõ°/G7ÊË/WãÆU¹reuéÒE×]w]®c¶mÛ¦BϵnÝ:ÅÄĨråÊÑÚµkãòåËÖâÅskáÂ
ÕÚµkÕ¾}û|ǬQ£çrHH¾úê«BçigÔf°^ì
zÀÖ½PÁz±êa_¬/8qB={öÔÌ3síKMMU```¡çHMMÕM7Ý$Iª^½ºÎ=[àãÆSÿþýÕ¡C\ç6lÞzë-Õ®];×¾ì·2T¬XQ+W®ôlÔ3g
+§PÁz±ê3X/öB=`ëÅ^¨ý8úe)ëVZ)&&F=ôP®ýÕªUSzzz¡ç
+
+Ò©S§$I§OVPPPcÌ9S£Fò,ã{ùç[Ün·233µvíZ9Ò³===]7Þx£÷Ú¾¨Ì`½Øõ¬{¡0õb/ÔÃÝ(Ï7OÝ»w×ܹsÕ·oß<iÑ¢
8Pè¹:wî¬]¾|Y êÔ©Scdffæø|ñsáááJJJRll¬æÎïÙY<¨ðððBçigÔf°^ì
zÀÖ½PÁz±êa_yëõµßêæv»õäOJºvíêÙ~áÂ
oMèÝ»·=EËëÝÜn·¦Nª¨¨(]ýõ
+ײeË$É«1òÒ¨Q#%''«K.:wîÆcÌ[o½U³fÍò¿aÃ<?¼oWÔf°^ì
zÀÖ½PÁz±êá,hóúV·¶=úè£99Éï6wÞy§6oÞ\¤1Ç/ëðáÃ^kûöí9Þº`gÔf°^ì
zÀÖ½PÁz±êá<h£bÅgSìÌ sôê3X/öB=`ëÅ^¨Ì`½Øõ°£?£ ¯Ñ( `@£ 2 4Ê Ð( `@£ e¿£¼eËM<ÙªáË
äädÕ®]Û«c©GÉ3S»c½<òk/äf_{!¿0üÚùµ¤Q
+
+UZZ=jÅðåFíÚµÕ²eËB£¥ÃÛzØë¥t_{!¿0üÚù
ä×^¬Ì¯%rDD"""¬y 0õb/Ôf°^ì
zÀÖ½P²Ï( `@£ 2 4Ê Ð( `@£ 2 üò®]»´uëV+.wî½÷ÞB¤zoêaw¬ÒC~í
üÂòk/äf_{±*¿4Ê[·nÕ_|¡öíÛ[1|¹±eË¥¥¥º°¨Géð¶vÇz)ä×^È/Ì ¿öB~aùµ+ókI£,I³jør!>>^ÇóêXêQòÌÔÃîX/%üÚù
ä×^È/Ì ¿öbe~ù2 4Ê Ð( `@£ 2 4Ê Ð( `@£ 2 4Ê ùF9##CQQQ¥>nTT222J}\»£0õb/Ôf°^ì
zÀÖ½Pk8¢Qv¹\ùnÏþåË«yóæë0an¿ývùùùåºí rl3^Þ·oêÕ«§7ß|3Çø~~~ªY³¦-Zä9¶Y³fZ¾|¹¹;êÔf°^ì
zÀÖ½PÁz±êá<hóãv»åv»<fÉ%ô\Ó²eË´fÍ]½z5Çí·oß®·Þz+Ïó¬_¿^=zôÐüùó5xðàsÈÈÈPbb¢âÙ©%Kñ9õ¬{¡0õb/Ôf°^ì
zØ£eolÛ¶M!!!ëóæÍÓ´iÓÔ¸qã
Ï®\¾|YÑÑÑZ¼xq®s,\¸P±±±Z»vÚ·oïX5jÔð\ ÑW_}å£{QvPÁz±ê3X/öB=`ëÅ^¨5Ê|£ªyp|Ø \IDATÀÀ@Ïõï¿ÿ^ëÖS*UT»vm}ôÑG¤qãÆ©ÿþêСC®s6L£GVíÚµsís¹\ò÷÷W·nÝ4}útÏöÀÀ@9sÆ÷wÈá¨Ì`½Øõ¬{¡0õb/ÔÃe¾Q®VÒÓÓ=×Ô¹sg={V¯¿þº
+$I9s¦FåyVÆøìLRRbbbò|ëÛíVff¦Ö®]«#Gz¶§§§ëÆo,©»åXÔf°^ì
zÀÖ½PÁz±êa2ß(·hÑBð\ïÒ¥$åZ@9>#`|¯xx¸«¹sçæ;Ö©S§<<¨ððpßÝ2zÀÖ½PÁz±ê3X/öB=¬QÁê xëÚoss»Ýy~ÛµïÝ»·=E6m{ì1=üðêY³¦Þ~ûm¯ÆoÔ¨Õ¥K;wNcÇÍ1î·ÞªY³fyß°aúôécò^:õ¬{¡0õb/Ôf°^ì
z8#åü¾ ®°o¤G}T}ûöõ\¿í¶Û´aïÇ3^Öáýûöí9ÞºPPÁz±ê3X/öB=`ëÅ^¨ó8¢Q.+jÙ²e¥>®c:õ¬{¡0õb/Ôf°^ì
zX£ÌF 3h 0 Q ÀF e h 0 Q ÀÀ²ßQÞ²e&OlÕðåBrr²j×®íÕ±Ô£ä©Ý±^Jùµò3ȯ½_A~íÅÊüZÒ(*--MGµbør£víÚjÙ²e¡ÇQÒám=ìõR:ȯ½_A~í
üÂòk/Væ×F9""BV<PÁz±ê3X/öB=`ëÅ^¨GÙÇg 0 Q ÀF e h 0 Q ÀF K~Gy×®]Úºu«C;÷Þ{o¡?ÒM=J7õ°;ÖKé!¿öB~aùµò3ȯ½X_Kå[·jõêÕjÚ´©Ãß|óÒÒÒ
+]XÔ£tx[»c½òk/äf_{!¿0üÚùµ¤Q¤¦MjÐ AV
+_.,Y²Äëc©GÉ3S»c½<òk/äf_{!¿0üÚùå3Ê Ð( `@£ 2 4Ê Ð( `@£ 2 4Ê Ð( `@£ #e·Û+Wª_¿~ºï¾ûÔ·o_ýóÿ,±:vì¨;ªS§Nêׯ6mÚë©S§êðáÃÊÈÈÐСC=ÛO>áÃë¾ûîÓðáÃuúôé£ÕRìÛvìØ±Dæï8e½_ß#¿ÎçõB~}ü:SÖùõ=òëhW¬X¡µk×êùç×§~ª)S¦h÷îÝ%6ÞúõëõÙgéé§Ö´iÓríw»Ýr¹\úæoÔ AÏö9sæè{îÑêÕ«uÏ=÷hÎ9%6G+9¥ëׯ×úõëKl^ðSÖù-ä×Ù²^ÈoÉ ¿ÎæõB~Kù-¾
+VOÀ~ø¡^yåKn»í6ÅÆÆzö8p at S¦LѱcÇT«V-;VõêÕSÇõðÃkÕªUúì³ÏtìØ1M:UÐ-·Ü¢ØØX5nÜ8ßqýür>°råJ½þúëã ¿ÿýïZ¿~½vìØ¡ÄÄDUªTI<ò¢££}ù0ØSê{pÊz!¿YìRØSÖùÍbzÀ²^Èo»Ô¿qÄ+ʧNRZµòÝ?eÊ=øàZµj|ðAM<Ù³¯~ýúE¯îÝ»ëO>ÑСC5uêÔ<Ï×±cGÝwß}={¶FåÙÞ³gO}ôÑG
+Óúõë¦?üг¨ÒÒÒTµjUIÒ
+7Ü .û¾ÛSê{pÊz!¿YìRØSÖùÍbzÀ²^Èo»Ô¿qÄ+Ê7Ýtþýï«N:yî?vìºuë¦ =ðÀzã7<û:uêäy&åСC<y²gá¹\®<ÏßB1¾W?ûr=4|øpõèÑC¿ÿýïuîÜ9éüùóúýïoþÎ:Sê{pÊz!¿YìRØSÖùÍbzÀ²^Èo»Ô¿qD£Ü£GM2E£FRpp°þûßÿjÑ¢E·+Ô¬YS}öî»ï>ýãÿÈñl¿¿¿çrݺuÕ£GEFF* Àô<Ö¯_¯7ÞxCmÚ´Q*UôñÇëÏþ³g³fÍôþûïëñÇ×û￯°°°bÜkûrJ=`NY/ä×^õ=8e½_{ÕöàõB~íUüÆr¯^½äïï¯_~YÿýïU£F
+õíÛ׳Ì1:uªfΩZµjåx¿¿ÑsÏ=§½öÚkúùç%åÿlK~öíÛ§'|R»wïÎõ×SO=¥_~Yÿû¿ÿ«úõëë
^0yOÁ)õÈë3ÞVRú²^Èo»ÔüÚSÖùÍbz_{pÊz!¿YìRòûG4Ê.K={öTÏ=óÜß A-X° ×ökzÇwäùoÝæZÙ~Ëõ×Í7߬ٳgxû²À)õ(¯¡¶§¬òÅ.õ ¿öàõB~³Ø¥äײ^Èo»ÔüþÆ_æ @i¡Q ÀF e h 0 Q ÀF e *X=|óÍ7JII±z¶t÷Ýw«iÓ¦¥:&õÈõ°;ÖKþȯ½ßÜX/ù#¿öB~sc½äüÚÝókëF9%%E{öìQûöílÙ²Eéé饾°¨GÞ¬ªÝ±^òF~í
üæ-%%E{æÍ«%§-Òûô±&¿Ô#«êaw)))7oÕÓ°¥>åzäÍzaëFY"##gõ4l%>>^»wï¶dlêõ°;ÖKnä×^Èoþ"%±ZrdÕjõ¸õ Pöñe h 0 Q ÀF e h 0 Q ÀF e h 0 Q
À L5Ê.K.Kþþþ
+ ÑG}c_^Ç=O¶(%%E¿üòZµjåÙ~üøqµmÛVjÛ¶?î{æLv¨Gömó;7ìÃëeÅjÔ¨*Uª¤ÐÐP[·Î÷ÌìPeË©AÔÃ\¿þñ"é£köåu¼Ùód )EÒ/Zå±Bç//ìP×5`_n·[n·[W¯^Õô?ü!Ǿ¼7{l,PÓ¦MU±bE}ùåí~~~0a?®ÌÌÌ|Ç(ìPìÛfÿ9}ú´îó©FYÊ*ì+W4mÚ4
+8°ÄÎ)???}ùåjÑ¢
gûèÑ£Õ®];?^íÚµÓ1c<²ÀêzdÎ`õzY±b
-[¦´´4
+:T}úô)òÊ«ëñÉ'hÍ5:þ¼Æ¯Þ½{y(ynIW$MTôÕRøy2õ/%µ¸fßvIocì²ÄõpþÀÞ\.4zôhÍ?¿ÄÎãçç§ÌÌLµjÕJÛ¶mólöÙg¥®]»Êß߿ܿÀau=/4µnÝZsæÌ)ò¬Õ()þþþ%r9RôÎ;ïx¶Ï9Sn·[ëÖÓÞ½{U¹reÅÄĨqãÆ>ÓYU8Uëeùòåm]ºtÑ+¯¼ây8Uõx÷Ýw%IW®\¿¿¿n¿ývÌ%Ë7«%÷y$üõò;í3Õ]-i±¤>CY`U=$éIW%EJz]R-Í%çêÕ«%r½öÚk¤'x³}øðár¹\4h¢½{÷údü²Âªz=÷Üs4hOæá4eîåìgNF¡¹sçúü<111JMMU§Näv»Õ©S'>}ÚÓ¥¦¦ê¦n$U¯^]gÏ-Þr8«ëg±Ëz9qâzöì©3gyeêár¹T¹re
+4¨Xs@ÉsI
+4BRq*ßyb$¥J꤬F¬¤Óú)'©¿¤Å»,±ºnIç%t·¤òýþûË~çÏ3ôÔSOùü< ªVär¹¤êÕ«{²;î¸C;wÖ¥KtôèÑ<ß&\X]lmÚ´Qjjª~üñÇ"ÏÁÉÊÜ+Êù5HJOOW`` $)==]+W6}ãʾ\½zuÍ5KCUPPN:¥5jèôéÓ
+
+
+*ê])¬®ÅëeÛ¶mÒÄõÐCé~v¨ÛíÖO?ý¤U«VéOú<X¤ûßÓÒ%þz=]Rþ«%ÿó¸ò¸\]Ò,ICõÛ+£Çç§L®G¶%½¤¬Wa_ù½ÕùÊ+
+Tzzº$)00P/_6}ãÿ²/>}ZÃ
+ÓìÙ³uöìY[·NãÆSçÎõöÛoçùå
ÕõÈöÒK/ë¹WóÓ¶m[M4IéééJOOפIÔ®];Óçq»Ý9r¤6lØ ;wjàÀr»ÝÔuîÜY º|ù²Ô©S'_ß2¡´ê²¡´Ö˼yóÔ½{wÍ;W}ûöõõÝ(3J«111:u꤬ÏQ]¸pÁ§÷¥£¤IÊjÈÒ½l~µd5l#%m´SYuë·¦,S9?[äV=²ûuТMÛ¸q£Æ¯ÀÀ@jüøñú׿þeú<.K¯½ö"##¦ùóçËåry²µk×Júiãy+zHÒÿüÏÿ¨B
+Úµk/ï£FyþüùÚ±cn¾ùfÝ|óÍÚ¹sg?¿yófµjÕJ©©©ªVZ}S§NUrr²®¿þz}ñÅ6m/¦_æV=ßxÍ·_;Wi'|R'OT×®]=ë%ûY[ü¦´êѤI
ªjÕª<y².]êé£Í´CY¯,Þ¬¬¦ª¨_M³YY߬*©Z!Ç"o¥Uìo»¾UY_ôµ¸cÀZT³fÍtòäI<yRaaaEþrÇÖ[ëË/¿TµjÕcßèÑ£5fÌ¥§§kÆêß¿¿/¦_æV=¤¬W;eG+So½.èÙ§ÚµkkÍ5Å>$mÙ²EÔ©S§\¯ßyçÚ¼y³Wãuv¨ÏH:ëÅ^ìPèèhEGG{5¬UPkKònµþ*ð_ÿÛé×?E=OYgz÷8IA/"=zT]»v-öy$)""B¤¤¤¤û~øáEFFz5NYgzHR|ãC¹yE oÐ( `@£ 2 4Ê Ð( `@£ 2 ¬@a¶lÙ¢É'[=
+[INNVPP%cSܬ¬Ý±^r#¿öB~ó·E«%§dIVêõ PöÙºQnذ¡ÒÓÓbõTl%((HM6-õq©GÞ¬ªÝ±^òF~í
üæaÃJïÓG¬$ëòK=r±ªv×°aCõéÓÇêiØUù¥y³{~mÝ(*44ÔêiàWÔf°^ì
zÀÖ½PÁz±êá\|F e h 0 Q ÀF e h 0°ìw÷ï߯%KX5|¹¢°°0¯¥%ÏL=ìõRòȯ½_A~í
üÂòk/Væ×F944TiiiV]®
©eË
G=J·õ°;ÖKé ¿öB~aùµò3ȯ½X_KåEDDX14ò@=`ëÅ^¨Ì`½Øõ¬{¡eQ ÀF e h 0 Q ÀF e |þ;Ê_ýµæÌãëÓåÆÖ[U·ÉõM~â!¿s_À¹J"¿>m4««itúÒ~_(Wîºçz5oÕ°ÔÇ%¿@ñ_À¹È/à
\%_6Êá*¼uéÿ øÈ/à\äp.òØQ ÀF e h 0 Q ÀF e ¼þåÝ;)qöª ¶¹_íZÖñêXòØùüÎe&¿^5Ê:wîQ¬yð¡¶-j«}ûö
G~û!¿s_À¹¼Í¯$¹Æç+á) `ñññ|F #e h 0 Q ÀF e h 0pEFFºï¿ÿ~«ç å6lØ ÿ篥oÞ IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/hagrid.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x000000ff" online_cpuset="0x0000003f" allowed_cpuset="0x000000cf" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x000000ff">
+ <info name="DMIBoardVendor" value="TYAN Computer Corp"/>
+ <info name="DMIBoardName" value="S4881 "/>
+ <info name="DMIBoardVersion" value="S4881"/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="Backend" value="Linux"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="8587984896">
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="8589934592">
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="8589934592">
+ <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="8589934592">
+ <object type="Socket" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.pdf
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.pdf (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.pdf 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,230 @@
+%PDF-1.4
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+ /Filter /FlateDecode
+>>
+stream
+xAoÜ6
ïû+ôâhDQ¢¢ E=´ðèÁëè¡é¡¿jãÊkúK¸Jwã,9Ò¼÷8|³Òß'éôçÛîãSß}ùçÔwúóûÏñ/ÿo~Ç×ÓvýCß]NÒw¿Æ_ó}·Ä7Ò«o»Oׯ>=ê?ÓYÿs®ïÿ:}|ùÐo»ÇÓ}ßK<x¸xñðñâ1Ç#ÄcÇS<ÎñxÇ%ãñòãã×ÓO§þ!ÎKmé}C|1NܬQüÁÐwaáê5ÚÅÍ÷ñ3a½¤ÿë(o>;ègã ñWñ³Å¿aÙ;Q=Oõe¸¾'-ãÿ'+ñäeÚøóõýEOVú c¯gØ=^ÒÅ»¹kèï_ÜÌOdм
+ÓñÙøÝ³×è5mÖ3e{ר^õ@t,WSÿÕ0ìÎÿt
Cæª%¸ÈÍÊÄÒãXâæb9ïÇ"çõ½h&#tå3)~¤!Ù2!]®aÝÒ?D
+ôâæöÅ»øIÊûþ8À~7À?Êü·èÏ^,ÆßM×ÅëóÞ´\I§ðt»i¸®ÊN'<íÂóþýu¼!ñbÏ|éÚðÔÏ}>%_Ù6*õhjéJ.\ùuT&Ö Të-,
+j½FÃä:EÃôú
+Iìz¢bÌ]bÌ=·cî!cy"¥ÑsèTµ&DÌ]'DÌüjͳïÙn¸^²ï*²ÿ¿6<ûÎýËÁ(ûÎ}gÓíq2èö8×ëv먰È\·7¢dÐí5Xf®Û[´ëv
+ÚWÚ
+u{ÚÁ^kð0sÇ3w&DÌ]'D̼6y}ϳ?í²ï
+Ù÷öìÖ4ϳïyöõ:ö[#Às¤ä<Ùô{
+ýzýΣsé÷ÜsýÞý^£aú¢ú½-rìú¢b^bú}iÇà5BÆà5D~ç¡4cð,&uRÄàuRÎà<SfÀQ0¸v(
+(v¼V§ï¯Mà(6JÀQl(x]±¸å¿,Õÿ¨á¿L÷øýï¼}ßÖï_Fl÷/ûëÈÛ[;DÌ`û[¯¿nâÖ|ÂHöWô[§ÿ¾Fä ѯ\º5¶ÓJ³ùç]éÈjVa#Ç¢®û¥£°TêN¸]Ê«²à´Î»4ô'^Ì/ìȧ^L¹/MpòÅ}©pú©Hë^£N¥;¾ÁcÖðNo7ÃF
+u)õyÇÏ8BB]÷Ãíx«1BÞj6ÞlÞÓØuÜ=O¸¦dÜUÄä»a£ÀPвKë8
+\
+J×£ÀPPØs:gCQÁÕó§
+®¶ne](cf^h\ioÌ£ßOKíkí1SçöÃb;¸ÛØï§%w¨ânÙñgÜUÿÝ àS"î¦)1wKÎ6F·¡ aýí9
+|
+
+]oCA^¸<F·¡ÀصU×*¸»5x~_e
+®N+¬Á7F¦Ññ
+ba5øÖTóûwSH¼o¨à#ä®YQíwÆ]%çnaÿ¦DÜÅÂÝK0c
+ZvngP
Â
+0
+GÁsq'0
+GÁóf§Áýþiªöû'Oýþi÷Fì÷ߺ×íýþI°ßï÷W£U,/ îúedjûýÎÉí6ö5kFo3ðùþùy?:¿?Âüþ1ßB¿]¿v¬cXºeÿ¸ßJ-^E~¤6üÈ%¤°ûÐsºÝdìNXð·qúÅÿ½já *ú"bÂ@¡d1¡`Û©¦þ?mµyëT»PU¥AlkxL·¥îÛF)~ËSn¹ï»F)&Ä]
+ÉÀÝýZr7içn~ÕOb3ÞÀÝü¦DÜÕ)
+ÜÍ+Ã(p&´ìÞ:W
8gBA©ÜÄ(p&X;¸zÉ©«Í[§à]¸40,¾UñÛ6¥±@Kð@ü]Û´® ñy|îvs5FZ3ËÕ4 6æLx¬S2K¹ë1
+¼ -»¹£ÀW¡ t}0
+¼
=Ç(ð6Õ\{TÍÕòWóÂõO35W«yåÝ·)~KWó;ï¿Mq!kX7î@§ í<.÷Õ5¨ùÁÇ:%çqÁ÷1
+
+
+kó£ Ô¡ _`CA~0
+
+Î.ìè³*ûé¡A¨/àöïÛè{Ö¸uKÚ÷ûÃþjBV´â½ éQÈ ö»,{ëYõý z1à£òÝöÛÕìî{d¦ÿÉ·Ýow&
+×2ÐÿcÝ-{¡=Wò½pºÝLìêe¹AÀr/¦ä·lmϾT¥¿°ÄοP è¥)ìJ
"@(R.÷#kwJ·êëÚ]î@ñÖù
+ê]ß%ò ÃõûþN#q
++xÃ.oøú8 «m{Fbµí1AH<Ìlpg@ËF¯ãpU(µQ0¥P)Ö.¯ný¨«ý[¯ã¥jæEx°èxå]¹ãÌËð`Ññ;ïÍMÏÞa
x0¸aÇ7ÅKñPEâ£öPøð
+¡ I<.çuÊcxZ¶{=¯@éJÞè<
·@ÀÚëÕî Õq5~ëu¼°J3W7ëxå]»)¦ãsoÑñ;ïÜMÏàA$Na1,wÃî $ñõ1A¿¼½>´ZõÌU¹ÎH<õUtoo¤ÍÁÞC TA p}@°@ °%Áï:þÛé?²Ê©
+endstream
+endobj
+4 0 obj
+ 2234
+endobj
+2 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+ /Font <<
+ /f-0-0 5 0 R
+ >>
+>>
+endobj
+6 0 obj
+<< /Type /Page
+ /Parent 1 0 R
+ /MediaBox [ 0 0 910 1350 ]
+ /Contents 3 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /CS /DeviceRGB
+ >>
+ /Resources 2 0 R
+>>
+endobj
+7 0 obj
+<< /Length 8 0 R
+ /Filter /FlateDecode
+ /Length1 8976
+>>
+stream
+xÕx}\UUÖÿÞg}Î}ç˽Àå^îåD|A5½©¥9Z©h/#Fj¨ ¢
o××ÌÌ53ÔqR§iSQlB¥Ëaó¬s§úÌü~þ>¿{Øsö9ûìµÖ^뻾kJ1B$úùriþ÷âì½ËûRtÛù¨¼¯!¶ääNÙpà;¼vÃç+¦þv~cÍx½ÕÓ¦Lʾøê¶s¸G`_ú4ì°áý«x7mæK/pÝÑïwãýºßÎz~ÒÌ/
¥Î7bæ¤sÅ,©Þãûâܾòwx
ï³iD 9¼\Ìa;PZDLâ="Ý£:V ¤{Í
ÆÄz¡ñBcr¨âSü>Å#<pµ\ãå²å§ï_ %§ ¼¬Èz"ëdA¡N= 7è©b0èdt@ÞÓ^eÉ-ö7¸h¶¶4¶4*á=H÷~5)x<|ÔXÙÊnÊVÝýÆn©ÌµP:>0ä]^08»jâåh9Þmè)§¦|y¾¡PX,/6¬ÂDjPêXÚtô=i?£§¢¡«¯_DWAÝ öñd|¨OO}J¬Bc©{v¥iízÔòV×¢·
¤ù2Q ùmWÅ®b>®¸ $8½Æp½
¼.U[è"ï!wul²2ÜDÂ!¬׽ ³G
?»Ð¢d¨:×Ôßi¹Óh=yËzKÉP2lÉß%G%{½ÉÑÉ¾ä ¨'à
+D|̨LO¦73:Ó°4ªØSì-.ö-YLhJðtíÔ1 ËåÍÎòåzr½¹Ñ¹¾BO¡·0ºÐ1§1Ãþí¥Ä¦YhlL|ZÏôT_ZÏøØINëOSS£ö.õfuUÕ#ËöÖ¶Þ£Â[ë³rôÿiRsò'ç}y qDë¢=9>ÞöÑ1[ÁnÝö$$´ »ÙmW¡må$.RD"ó2Cµ"V£"eµ´¶Ô§¨WFáwnY¸0¸¬®B×jWÐÅPXG7ï¾À½ª°D±_J4ÜùÁÉdnùøÎñü\EéémbÚÞ¤¤«gÏ^MJÚGûSµÑ>±Dë!b¶d'¡¤gÀ z*[*Ózº1©®Û;®YÊFÕEïÔ4*6tÒÊ,ú#º¢Ù
È©f'1»jÁ²½ÕÕ?óñIaGësÂæ-îh-ì§dßV}çc|>ΫÆ^RÀ"ß'GFu"¢³¶ôkLÁÙê[Q{«> ÏÔgésõ¨}hª:#öã*üY÷ýz }CIú/õ8òïõ¨ïÐã@ãOá×8þ/YûTEu]Å×N\$7GT_¤[ÆoSVm¢#ªmU¦nCÐ9td¸`ìF!î4Ö(¶öe®·¢ï[ïÜRTßO:ÕÅt0À1ÀźÈÝuÝõ]³È,:KååÒºÏC;¼ ZõÔ"kî!-¦³Î85ùùs/ð;üMl¹Bå*aç²j0ᣧzöÜ×¹íM
+4>Â/Ö¬?°o³jËýü{!_²3y""½AÖ[Ì2DB
+ëßÐ?µÐE5éðý¡£Ç~D,$ã,ÄÒv¬·Ò«÷8ìÑúÛµ÷@{¿$8ì¶ðØx!§_´xÉÒ`yÙºõí:ïßÐÀû^ûüúiÄq2â32<àAQ²E2 êu^É
+ÄKÐ5-êzªËPÈ9.¦cr£6¹öÉ@(ïåSX?Uñ9|ãoÒ)gè°{ļ¡UCëö-.Êqîa¬¸ÉND¶HD¸&
1q u«²Î´$(«A w¸¤(kfcÇ´Õ$ºÓø ËÙMDvM6ÇèáûÃF?;|¿}ô³(efº(ußt§Å1lüø
+ë*vÊ"b¤èbîÈ\iNdë%÷bRä\¹ØµsßnèíGuÒÒI¯þôç%:ì,º\ø¸eD]:éñ·&ùcoPûàgüÎ={æÑÒ>3×?6¯|à#õH¹qü¹¹QüÛv;lDÿÎC;t"ùnÄj(Ò{¢CsP¿Vr£×ÆJ+ÛÃÜ¡ìNw|´Õ
+v¯^JDs =î¨ÉMuÆú;õÖë·4w×¼ªè°C¢fDØa}¶gwRt¶O$ã©:ì¢/&>!MsxÔ1¦µ_üBYPºã7&1úÓGOUïÜw°lóö7F}1ïô¸ëÔô:ø½5«/~ï÷Ò#¥¼äÕ²]óróòãâDGÿ¹rÁ;ÎymWÙ
+Ô9d¢ sÑ2pél[}2K©n¥G n¥§á4Z=jþ®o©ie´/`"ËHö+¾4"íaéKÃññ7éâ'ü `ïù6>® ÖPyVnË
+~ßÄh´½°»îj-õ4}Τ¿£oòYüüÏüsþG?Ê *÷1>tD!Ñä@¬ôe¶E´Ìð®W1êP§;9ÝÝôÄm}*¶`¨¨¢¹©*ó-ó
+Î}í6}páǼ¢:¶ ±>ºÚ¾iÓv~&+-]ÇØÐ\¸ l'oº×zC8Ýz±xÅÊ¥Bï?ëÅÙ¹»½¿|=ºöOÿvݸ2KÃo DVqEÆø´¡:¸Òïοp%45Ìæ°rlº-§°!¢¬<¸tÉÉÖÈû]ú÷ùö=ÑÐ@kë
v`©h=ðÈH¿¨ ÛDÒ
ITÜbºlËÐζ4Í1ÅdÜçZâMµ!ÇòU.ô
+ÊÓ
¹P%ª4RB~CÇJSèti¾´¾&Ñ
+iѪ±'ùϧQ'«P^ÃZg kºç/7'ïyQÎJô«DSA<Ó °2ËJ=YdÓ¹
+½©<lÓäS})E³F$VÍlZ|Øí~|ôn 5#jT
+çGçB«¬Ý÷Éñ}µü¿Î¯ñKÈÝæ4?ß+ZãCRÐÆiüͪò`G@=x(LTCÚ
+¢À #ðIj§^N}0\FaÙ¬,HhkÚylý
F[ÆÏ ïÁ©Ìv[4x´I5x2Ì%¹d%a2Õ èÅ0êÆÐ±B¦i*&¼Lç
+àEqü²®.
+MooB¹¦GÚJSi,ø V8Âo ~MÈø|YëÄeuÌÒê}ÍI´/ÒtVóõÌ×FNB¥j©6UÙVFèm!OÍ18BKÏ÷¯ØÎ|/Ⱥ}¡Ào*0X
+B
+¬J¾-èlr*?c3 )j·³2!oÝÞwÊÖîÝ»¶Úø¦ïømªÀ¥Ó§n|zêüSÞÈobrÎÀ¨·ÓÞd|¹³Oï3²XìÕL·ÒRE×C¸Ht£Í88J4E%J*±ÖÜJ>å)ô= rê}*+(VÚ!&l«ªêóþÚ¶¶Úï·zkÍݻ׬y
+þÙ¸;{Duxĵ
+
+µØT¹Háì("dz¸¤X£ôÌiÃCC×ãvE#^Ú«ÅlR½iîi¢-µûÇ
~ýZú©ÿkRPþäb¤FÁh2íb¤i³{u(¿|FêMÌlZ
+ÕZOkb8¿8úM£qÓSio¾õ)ÚoÊ¿ºu?A³Fó£tz,åPÌ'Ñ-|R¯|O¦Õö&YA·¨z£½KïUEÚHÐTªú;ÄnëW>Aï~±Ø+6nÚ6Ý£z~÷Þ=~êY&?Ë?Ãv4ö¤©AÇx1Ç|LçÓWè*ÃT¶¡ ä÷~f`1
+¯G§dàõz¯è ıվ.¢LËÈ:©²²Ç`ôºdãrZºÊN{L'ëßjBê1¿j oÕ²îoYO>(--*¹ÂIÄ<èMìøD"ü¬¼ðþ¬ÛvC§rã¡yMÜùÁ¼]¯\ù¿ÈfÜ.Ìo|ñÝ#ÅùWÎÐð¦ÿí8Ñ+½pîóS¼Î¤/~ùur÷s,ûýïx#º{çd}|oß¾nÀ
+2Q§0É$1P:h GÈz½Ä¨(¡[!F5]¨QÚa¼>üg0Þ.[5t(
+] $²$Ý!GªËæ±ÅÂröºnPÎÖë¶6Ä2I0"Úu±KäidÃRq9[%Ȱ^Þo±ò ùù.4Á]±I?¨ LSõZé|¨ZðÛºOx¡©õTµdoN¯¶ÞiÝ+Ķ^D}{¡Ã}Ï6cmaºxq÷®Ø`ÄÅÆØ¶Ú,jÒ¯ÿRÚSômc sAå{í5Fb~_êPëTr|ÍçKç}ôQݶâb¶/i
+.Y±ås!«ö'yRxÏ?`ÊÈ"º¡%4§J¢ë±ÚÒ'Ër!¢VkáL§ÏiÈêTj,lüÆ-gÉÊ@5s3Q25'P¸%hÂ~¡]rõÛ0ßv$ñ4.Òi
+ 5øë"ÐÙH:¡dNæ×FH<Mt:>azÂ<æÐ9ôXJÍíY RÕÊË7_H\ <×ÕnÀü-WálKên¤Y
+ca¼c¼E826+{´8b,ó¥a+ý²Ûíõ·ÙåG#aøw ÀuþÃ}«q<æ:æ>uÜSã÷ØØ¾±a$ï¥Å-T«ÑÓzÔvþO;ÃìòÃ?=Ò§ò·_ó{Ôz
UøûüÚ´ÿ²-[aóVÅÅS3µy|{i ²
?ëÖÚ¶õðáÛ©: Nå©:Å
JÄ\d"Á0)èÛi
+ǺWúM1z·ÓêWS
+¾'ZêÿÅÍöZRKÏ
+gá¬XËj%y§Ò#ÿe¦kÇ
+TöMvÒÁoÃ÷%§úF v}+_¸LoºÂ[ù-I]#6@ßÙ
ù¨ÿßþÍx~ûÛëü0N¦;=üÍÐêÀÛNÿ#È{Lïò!B*D¬±TôX']/!õÔ=*aè¦
+s-ËXn°A× 8 Z¸À)3dCr¨xÑYNÓYº&'8¤ bÈdȧ±©ò<kZ+Øë$%¦
+Ø$mÂäpBþ|!ßoÄìÒ]øýSꢢÊlVÔm9V6S±ÕüÇÖÔ3¬®u¹0¯uhËUáO=Ⱥ%×ßIÒæ}2
n%ûIJðRuÉi&Évk¤jÆõ
+¦ä!.¯K¸¿µÔQ£ükS%ä4,n#¼Z)YÜ3ãæ«ü]þ
+-¢£n²Éu'ðSü¿ùüÔç¥[(²6ºåÑ=&K!èVQ&-Uú#²AÒÝd½5íû=wk.|¦ºßL䶪DíÉè_[2á0ÌûXoUW÷9´4´ØÚ£bÖ¾çÓb[ŹUZ]Jú"héÙ¬,²
+qëE{{)Ô¾õªí!¯cc¢ã=ÓÔkK1 W®å«**VñÞôÓ{ò¶{üëÞú§5ÅEkv]ýêâÖݨïfÃl?Ì Ä²RdÊö u¹YEæMánj 71X%¶oìM]
+[nYyÍ¿)=BzçW»,m£Ã£>×úCÕüпHßj|Á.c»4Ó8~ßðÉ´g½ðî3ï>¹u4«ÛÃ×ð[ÿøÿ]Û#ùàÆãâÛýk7ÚU$ò| )Zd¨0 "%$¯¦½ÀúÙî¶éâÊ2;Þ6V D²6M
ýd¿$kó©o7k½ròV¬ðÆ4/bID«}W WhXKºcíë@¤K®A[©geÂöäS\g·#΢G4.ÄçJVMeÊÚnóýM íN-´~lþxmÿ·½ô
+SKß8ì ýV¬Þ¹sõê];ùÎÅ¥m¿ÄKÙÎïÞ½ËïîZºdñÚµ
+'*+6W®,üàܹ
++£cN|yãÆ%'é¤/~ !íY ´³PíÜX×£ÑñÀ¦¸¶6üOÚÚ¬äþýÚú¨ãÑÁ±WFß×#^ ó´
`-¡`ñßv0ä¹Ä
Fúçñ´eM#U±|LötÞåà×gcOP¨$KÉìùÖÒåBWìÛ
Ç7I-ìA1Tì%äK&;t49ßÈÀÊ&ëD"OUbxôóijbGSaÃvaË
+ã×Kªè%GÁ7
+GÄA¢
\³°\ÃYDü~-)!;H>Êb§³H/<
=§ØYRÇ,|~n¦çQºCt ©#o(%iêUK~$K`´P*ä ü§ð[gq|ÉCÖQáBö¡ô8×díteuÚÑD
+pæÑdT%ÙåXEµØ.ú mÖ 9ÏÁlø.cÅÝâPRÒnÈ"%øí
+uCç£îê¯~]'fÑ=ä1Kß>¡jsBrÈló$+êÔ.
å(©ú4Ýq<~A^Z2ÒȼÊ'ûH%é
+夿¤é+õb?âÈâeÔ¹®~$gaI$9â-´5ºÆÁûÕZhë~ÁÿXöþÀc£?çëÚåW·ÑV9z?ÉÜo]ÕÖ9Vt±qû{?øuûEìåÿôðr×.Ã3ÇFïo<èþWg
+¾QcñR½Ãnì<¨k»tÍøé!ý~ ^æêªª´óñ©¥|92gâî~Dhãä<Ã|¾Ü0âÁ½/Gj §Å/æÙÌF äcõ,6ÙÂ
+ô/ÙÏÂÉelåØ6J©$-$§±k!§ÙW¤Í'Vñ·ÙÒ²ß+Æëbqzn,zø|/dc[
+ÀûrÃpóÚ3uÌnl8#Æ_¦ÓÅô(½.Ä+ñ8X#ÐKªÄzÖ²fiô,ÊCäãº>ºu:®¦¿`f8`h4v1¾aü»i¨¦±<80AÝé à5lb
+º ÙÿôÃO)p·~´Àîpø?|oïʡɷ_{Ýæp«nCc3|ÛÿàðM¸18\Okõ£Øµr¨ÇëGÁÕ+ÝÙÕf¸Ò.søÃ¥ø».Ãß8|e¿./Ãsø_ÿb!Ô]xÕ-ÂùÏ]ì<Ï]ðgç8üÃ9-Ïj=ì3µ8§9\ª°n85>ápÃÇqø/G9|ÄáÃ)P]ägÕª><̪8|xp<ûð0|X(ühñ~8Àár¨äð>ýÞã°/ÞµÀÞwülo6¼³ÇÆÞñüB¿Ý»9¼Åa6ØÁaû6ÛÛ,°5øJ°¶pؼÉUl2ÁÆ
+N¶16TXÙ'TXáM¼Áa}¹çPn2TVëÖZغN°W¼JWf¥Vg«ÃêB±äu?+%ñu?¬â°rE7¶ÃnðªùÚð|-·Ã2¤VØQ
+Eh©"?,UàUK+l Å
+,âPÈ¡C í÷²ßsX¸dCþhË÷Ã+æsxÙóL0× s8¼ÔyÍðb3Ìn\³8üÃo}ðÊ@6cLç0m!LÅS8dsxÃdú@V3L0ÁxÏrxø±6®Æà7aNöÃáiùé0Ú£¨§ìðä°Pö$L#<ÁaäãV6ÃãVÁa8>ÎaØcV6,2³Ç¬0ÔrRËaG®ìfx8ôÈÆúÛá¡~!ì!ôëkfým!Ð×}8dpèÝËÎz7C¯t+ëeô4#K·Bzz Õ)=,
C#$w7²d3t7B·®zÖÍ
+]õÐ%:ûYR6tN´±Î~H´A§?ëô0$ø!Þodñ!à7BX1!àC=}6Îo3xPO6DÁtsp5Cä@pâCD6£¥Â9á 0'88Ø9r°á6
+êªëBɳ)9ðmS9¬ ç Ã×td;HÙ âC=ÀØ!ßÊ®@@8Ð*½tMúÿáGþ_ðüEý/Äò
+endstream
+endobj
+8 0 obj
+ 6698
+endobj
+9 0 obj
+<< /Length 10 0 R
+ /Filter /FlateDecode
+>>
+stream
+x]Ëj0÷>EíbÐ$êÌeºE/Ôö49N
%:yûÆü)TPø<9Oééü|vÃ*Òw?VÑÎzZ¦«7$:º.JØÁ¬LñiÆvNÒÜÜÆ³ë§¤ªDúËêoâáÉN=&BôÍ[ò»¯SWÍuh$·,©ka©å^ÚùµI¤1yw¶!>¬·]Hû;ñyI¨È#ÉÒ2·|ë.TY¸jQõáªrö_\HëzóÝúx\ãYÛ:TJiP:
+ÐT´ C$ ®ÒFÒܯ)qw9÷ ñÉ51ÌÃ,~fðËÑO²_b¿?
î~~ÇàWv øí¹
+ürb?±O
+?]ØkÂ/G?¿=Üûa2?
+[?o¦à§q1x¶Ùöù¾æê}X½¸ôqç¶mÝÿy·¬xÿ&-Ñ
+endstream
+endobj
+10 0 obj
+ 377
+endobj
+11 0 obj
+<< /Type /FontDescriptor
+ /FontName /BitstreamVeraSans
+ /Flags 4
+ /FontBBox [ -183 -235 1287 928 ]
+ /ItalicAngle 0
+ /Ascent 928
+ /Descent -235
+ /CapHeight 928
+ /StemV 80
+ /StemH 80
+ /FontFile2 7 0 R
+>>
+endobj
+12 0 obj
+<< /Type /Font
+ /Subtype /CIDFontType2
+ /BaseFont /BitstreamVeraSans
+ /CIDSystemInfo
+ << /Registry (Adobe)
+ /Ordering (Identity)
+ /Supplement 0
+ >>
+ /FontDescriptor 11 0 R
+ /W [0 [ 600 862 612 549 633 277 633 615 317 390 636 636 636 774 686 390 748 731 684 611 634 837 636 634 579 392 557 636 636 636 655 698 411 603 636 636 636 ]]
+>>
+endobj
+5 0 obj
+<< /Type /Font
+ /Subtype /Type0
+ /BaseFont /BitstreamVeraSans
+ /Encoding /Identity-H
+ /DescendantFonts [ 12 0 R]
+ /ToUnicode 9 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 6 0 R ]
+ /Count 1
+>>
+endobj
+13 0 obj
+<< /Creator (cairo 1.8.10 (http://cairographics.org))
+ /Producer (cairo 1.8.10 (http://cairographics.org))
+>>
+endobj
+14 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000010721 00000 n
+0000002348 00000 n
+0000000015 00000 n
+0000002325 00000 n
+0000010562 00000 n
+0000002457 00000 n
+0000002658 00000 n
+0000009449 00000 n
+0000009472 00000 n
+0000009926 00000 n
+0000009949 00000 n
+0000010187 00000 n
+0000010786 00000 n
+0000010914 00000 n
+trailer
+<< /Size 15
+ /Root 14 0 R
+ /Info 13 0 R
+>>
+startxref
+10967
+%%EOF
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,391 @@
+PNG
+
+
+IHDR F Ñåw bKGD ÿ ÿ ÿ ½§ IDATxìÝ{\uþÿÿç
+éª")ZÔ$ekº¶f+ÚÊ]OÙ¶Zàé³4Í´4E;}ÖÚUÑ<¬õIÍÍÝܵ$$ÓD®ßûeiàba®kf÷Û[3×\×ûý¾æéæ5'=zô0úöí+ ~*77WuâããbõZ 6ª« °7G )G )G )G )G )G )G )G )G )KGÃQ¥íUQ\\¬ÄÄÄãM*..¶z P%Uj6nÜè²mÉ%^iôÊ2£ÆclܸQ]»vu^w8ÎÿÊÚ´i:tè zõê)66V.·Ï;×奤¤¨uëÖªW¯n¼ñF½úê«nó¨eËZ»vó¶.]º¸Ý `wU~Å1==ÝÙØ]ºtI¯½ö×å
+ëׯW||¼óºaå6¤6mRFF
+5qâD9ÒyÛÞ½{õÒK/¹ìª÷ß_7oÖ÷߯wß}WYYY.û¡ââbZµJ<òs{||¼Ö¯_ï¥3 ߨrãØ¹sg½÷Þ{¤uëÖiÐ Anû¾êöóÿ\7o$8p@;wV:u\^Á7o6l¨Æ;_¹+½Ýáp{ûç®[o½UõêÕS»ví´cÇ·5ìÙ³GÑÑÑÏÆÕ±cG
kÀºòÊ+%I.\PRRÖ[ç²ÿòåËõòË/«cǪ[·®¢££µfÍ
+ÇoÚ´©órtt´>þøãJ× vRåÆqòäÉ?¾ÃPZZ~øa·}ÃÐå˵nÝ:M<YôßüF<ð¾ÿþ{Wþ"""ôïÿ[k×®Õ´iÓÜÆ*ïöx@>ø Î;§´´4;Öí¸üü|5hÐÀãó:uê
+¦ôôtIÒ¬Y³4fÌÝvÛm.ûýë_ÿRÛ¶m%UüöWáÐÐP
+4HK,qnoÐ ¾ûî;× và5kâÙÎÃÐ=÷Ü£æÍ+//OÎíôì³ÏjÉ%:yò¤JJJäp8TRR¢ºuëª @õë×wïòåË
+ q¿ìÿË»½nݺ._2S:GYM6Õ#GtÍ5×{eíÙ³G7oF%I
+ qÛÏ0µlÙRYYYÎæñ§c^6C}ôÆ«cÇIÎ=«öíÛëÔ©SÝß `µÔÔÔê}«êÔ©SõÂ/hÒ¤In·Í5K/¿ü²ôÞ{ï9ª:hźxñ¢Ëþ¥MaEÊ»=66V«W¯v¾zùÓ¦Qºuë¦#GTz.+V¬ÐàÁµ|ùrgÓ(ýçKpÊ~.²ôÿcÇÕoû[=zT/_v6
9}ú´óòÑ£GWé ÀNªÕ8öéÓGa¨W¯^n·Í1CÃW³fÍ´ÿ~çöU«ViÕªUºâ+jü-¬¯¿þº^{í5]{íµå¾UTF¡çõ²û½<aÂ}ûí·8p s{QQQ
sÿþ÷¿WïÞ½uÛm·)<<\¿üå/õú믻ìSúª#GÔÒ¥KÛ³³³]¾| üAÞªêO.]º¤Q£F)##Ãê¥8%&&jݺuªS§ÕK ¤¦¦*`;ºuëÚªid»õ 'ªõVU @ð q ¢q ¢q ¢q ¢q ¢q òèï8æææ*''§¶× ð¡=z¨oß¾îçQãõo¼¬®=o¬ñ Ö;´ïÎ=ë½ÆQân½Qg'Öha {xyéf©Ä³}ù# À# À# À# À# À# À# ÀÇÇÑöÓÞ]{sH @Åti£®=oôÚx^m?Þù¹vüïõîÞÝà <ôñ:WxÞ¾£$õîÑ]sfÌðö° ¤½¸L_ÿàÝwòG )G )G )G )G )G )G )G )G )G )G/heõ/_VÒÄG-;iâ£*¾|Ù¹ ÔKÇÖQzý7ܶw¹¢ÛßÞ²ÅåöçV¬t;.3;[£ô§¬¬*Í_"ZG)¢u®½¡ºÞÖOlÛæ¶Ï£3gêÓÏ?×¥âb
+:̹ýß§Néëit;ýbøpýûÔ)·cßybcnv^ëý÷Õ-¡¿´VAw*{ÇÓ±JJJôÇ^T§>ÿ´V·þ´á·ÜÖß(êu¼µ
6¾óó¶N7wÔ;ï»æ ÀÿYþã·ÞÖ?O¬öñËW¯a¤KÅÅÊxûm·}V¼öÿb V¾¶ÖëóWÇ¿×7G¾Ð¼ÇgkÒÌYn·
+ ÑÇû÷«K§NÎí¿¢qqúÇ'Ô3.NO¤¤¸ûÆ{ï©wÎëÞþ¡Þ|uþñÉ!M}äa}téXi/.Ó¶giÃË+uòóÏôú³c§ÛúóÕsjÚpnïÝ£Þxï½Ý9 lÇòÆqÑs5åñß«¤¤¤ZÇwêÐQÿ)IÚôÎ;p[¼Ëí'þùO}}ò_ZõÜsú׿ÿ¯þñçÿÛ'ª÷t]¶ê}Ç :|X´÷oS×Ûú©ùMôä
Îý;¦ÛýJMÚF+®_vïÝgºöÐPë/®Zå|´×/îÐ#´|õjç« 9ý«JJRXXJJRö_þê6æþÕ¦ukçõeÿ³D×·h!GHBCBÕ¬iSÓ±^yýu=·`nVÝ:uÔ¦uk½¸dq
çФqcçå6[ëÀ¡C¦ç ÀÿXÞ8¶kÛVýúôÑ/¯ªÖñ¿3Fÿóü2C/®zEãî¿ßåöUk×iú¤GU'4T3&OÒªµë<ÿéÓ5zD¢N:¨Ñ#õð´é¤É³ÓCIIúrß^5ûYSçþýnÆÜ7Rÿ<ü©Rþð9³Ü5G´RÓèvõÔúãüùÿ=>)IÿÛõíu«Îüý¸úöºU_îß§3?.I:SP ÆI®ÐÙÂB·±Ï=«+ë×wïgíÚkòc)mþ3¦cúæEEF:+ýï§ã]{CÝû1zú÷;·_yåÊ?s¦Üs à¿,o%顤1ÊÞ±Cÿwä¨Ëö°zõôýùóÎëß?¯°°0}Z·j©5mªésæ¨mTÿìgÎÛ.^¼¨µ6iÌ#Ñ:Jc¨µ6éâÅÍäØ1NLTýúõ5jøp}qô¨sû¯ÿJW\q
î¿÷^çþÖÃÓ¦ëgíÚkø$ûûßË=ß3?®ï¾<¦ýÙÙüÎí£Ô:öåìØ©ÖQÊÙ±S7t¾*IjxÍ5ÊËÏ$}wæ^}µÛØ
+ºÜg¥óýûóÏô?Ï<§L5«i&úêÿtWÚ´þt¼üã_êíµ¯iö¼yÎíßÿ½ED{Î ü-Gá?>ó´~÷Ä.Û{ÄuÕç×÷çÏëûóçµäùçuk\Ûñ«_[«óíonÞ¬Î:9 3?®.±±zsófæo{Ã
+Zÿæúá´vÓ&µkÛVݦֿù¦.
\¸ ×ßxÓ¹ÿÍ7ݤ/Ò¿>;ìl®ªâÌßëá±IzÃz弿Y£uæïÇ5~ôhIR|¯^zqÕ*]¼xQ/®Z¥¾½z¹Ñ¹S'õ±§æ9Ä}ÿ½éX÷'Þ«©?®/¿úJ/_Öñ'L×÷]¾óò_}¥[bbªtÎ ìÏ£$]ߢ
~=üW.ÛÒSSuðOÕ¦KWµéÒU>=¬ô©nÇöÓ¿W÷®]\¶¯|õ5MøMW© £Gëår¾$§¼ù.\ ¯¾¦7ÇhÍú
+zná>Ïølj_ù²¢:wÑ×ÿúsÿéÏ*ãí·ÕúÎå¾ÅÓ{öíW\çÎ:s¶@
+ºÜöÔìÇ´c÷]ßñfíܳGóívü°Áµc÷nçõíÛ«Ï ;Õ*¦}q^^n:Ö´Õ£k¼O?k×^÷ Ï>ë2Gé·ª4YëÜþ×Ü\ýê|Î ìÍ1kÖ,#¥oç,+55UÇþµSg'î÷òÒÍrÐ3¼¹FTÁ¥âb=<E«[êó¹&>ªMSÐÐÊw P+Ò^\¦¯øÜ£þíÖò¤¬ãÍÂzuëÔ±¤idÙ¼ jmÞª
+ °'G )G )G )G )G )G )¯ÿǽþ¦´e˼=, Àݽ[1W{uL¯61]Úè\áyýóûϽ9, ÀCn¾Z]{ÞèÕ1½Ú8ÆÝz£ânõî Öâ3 S4 S4 S4 S4 S4 S4 S^ý;öÓÞ]{sH (ÅtiSém¥Þ ï Þ ß¡Þ ßñ¤ÞªÂ«ãÇ;?×Gÿ{DÝ»w÷æ°@P9pàί´Ð©7 æ¨7Àw¨7Àw<·ªðjã(IÝ»w×3¼=,4-[¦ï~ðìVê
+¨ê
+ðê
+ðªÔ§ø# À# À# À# À# À# À# À# À# À# ÀT at 4QQQV/Ôà;Ôà;Ô`ÎÒÆ1''GwÜq¢££ ÷Þ{¯Öç4û¡¥¨¨(µiÓFýúõÓ¶mÛÜö9s¦>ÿüskذaÎí§NÒðáÃÕ®];
+>\§NªõÕHõVz,¿äaWTo|ð¨èèhÝyçÚ±cG¬¨®@ª·÷ß_ýû÷§Þ`K6S§NÕøñãõÉ'hÕªUÚ¾}»Ë$?~\_|ñ
fÏY³f¹ÝnBBB´ÿ~uêÔɹ=%%Eqqq:tèââââËe
+¤z;~ü¸?îË¥UHõöÁhéÒ¥úäO4zôhM4ÉË*HõöájÍ5:tè~øaê
+¶biãØ°aC>}ZÖu×]§´´4çm~ú©
+¤¶mÛjÐ A:|ø°$éðáÃ<x°Ú¶mëölÏ;Ô[7mܸQÇÓ¯~õ+ç³OûöísîïÉ+¡¡¡.×WZ¥¨¨(½ñƺã;4bÄ^½Ú9Î_ÿúW%%%),,LIIIúë_ÿZãûð¦@ª7Àî©Þ{î9EGG+,,L½{÷Výúõk|ÿ ÞHõ¶dɵhÑB!!!
+
+
+UÓ¦Mk|ÿ Þbiã¸råJ}ýõ×zê©§Ô³gO½õÖ[ÎÛ¦O®ÄÄD<xP>}ºsûСCuøðaWÞ~ûmÍ3G¯¼òî½÷^M6M#GÔ§~ª'xB3gÎtîoöjETTÚµk§'|RóçÏwnOJJÒtë·êøñãºõÖ[µoß>ç8jÔ¨$)""B
Þ½³
+¤zì.ëíôéÓzè¡4gίÝO7Z½EEE©}ûözì±ÇôÌ3Ïxõ¾j¢·nÝZóæÍ$9rD#GÔСC%IÇSbb¢ÂÃÃ5|øp=ýôÓ¤£GjĪW¯ËX3gÎÔK/½¤:HúÏ3IÓ§Owþp8ÉìÀO/wéÒEsçÎÕèÑ£uÍ5×(??_7Ö3gtõÕW{z7 >HõØ] ÕÛÁõè£jêÔ©êß¿¿Gó¾hõvüøq]¸pAYYY:uª>üðCæj¥¯8N2E_}õ~üñG}ñÅ*))qÞvÃ
+7èÍ7ßÔ?ü M6©mÛ¶¤èèhmذA?þø£ËX+V¬ÐôéÓµuëVIÒM7ݤE9IúòË/%IuêÔÑ·ß~[åµ?~\IIIZ¿~½6oÞ¬ÄÄD?~ÜYä½zõÒªU«tñâEZµJ½zõªÖ}Ô@ª7Àî©Þ6lØ qãÆégÑ!Cªu µ)êmÞ¼yÊÏÏ$
èû￯úÔKÇ~ýúiìØ±êСÒÒÒ\¾PfÁzíµ×£
+6háÂ
Îí6mÒ7Þèò¬Mß¾}µfÍ=ùäzåWôì³Ïêí·ßVçÎ]Þ~ß}÷)>>¾ZÚ¿¿:wî¬5lØÐå¶Ç{L{öìÑÍ7߬={öhöìÙÕ¹KZHõVv¾]vHõ6{öl}÷Ýwzàó?¾:wP+©ÞÚ·o¯;ï¼S:uÒ²eË^»¨Y³f}hjjªýk§&ÏN4Ýïå¥u1?B3fÌðæ ²lÙ2}÷ÃçÔàÔà;Ôà;U©·+JZWú!RSS}Å `4 S4 S4 S4 S4 S4 S4 Su¬ôÀÚ½{·Sºå[Ô½{wÎI½!XQoïPoïXQoEãîÝ»õÑG©oß¾VLX"77W
>/tê
+Áz|z|Ǫz,j%)>>^)))VMø\jjªN8aÉÜÔ
+õøõøõÆg ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦hk¨¸¸XͨââbË
æ|z|z|z?ðÆÑáp»}Ó¦MêСêÕ«§ØØXeff{¬ÃáPhh¨¢££õî»ïºí3vìX<xP.]RÏ=ÛO<©Þ½{+,,L½{÷ÖÉ'Ýݸq£ºví꼡öíÛ»©¢µ:mܸÑeÌ%K¸sé9¨eËZ»vó¶.]º¸ÔUõVzlEóKÔUõæÉøÔUõVQíE½ÁøEãXM6)##C
8q¢FYî~aèâÅZ¼x±Æçv{IIBBB´k×.uëÖ͹}Ú´iêÓ§
+
+
+Ô§OM>ÝíØõë×+>>Þy}Ë-Úºu«
+
+
+4{öl1¢Òµ¦§§Ë0IÒ¥KôÚk¯{ÅÅÅZµjyäçöøøx_¿¾{
+¨¹Ú®7Ã0uPê
+Á¢¶ëÍñ©7Ú®·j§,ê
+þÀ¯Ç7ªcÇ
+×tåWîêr=--MC«W¯VLLúöí«ôôtç³3JNNVxx¸µmÛ6·1÷ìÙ£èèhçõW_}UZµRHHBCCÕ¢EJ×Ú¹sg½÷Þ{¤uëÖiÐ A¦çÑ´iSçåèèh}üñǦûÞPÛõæ ê
+Á¢¶ëÍñ©7Ú®·j§,ê
+þÀ¯ÇR§NÒ°aÃ^îíCaaa<y²/_îܬüü|%$$È0%$$(//ÏùlM~~¾®»î:IRãÆuæÌ·±óóóÕ A·ùÂÃÃ5~üxù*ZëäÉ5þ|¡´´4=üðÃåChh¨
+¤%K8·7hÐ@ß}÷]ewà5µUo Þlj»ÞÌÆ§Þlj³ÞÌjG¢Þàü¾qܳgzöì©äädÝ}÷Ýåîc._¾¬cÇièСÎíC5RVV²²²Ô¸qc=÷Üs¤>}Z§·±5j¤¢¢"·ùÎ?¯eËéþûï¯t7Üp7o®'ª]»vúùÏ^î9hÛ¶m2es{QQ®½öZOî* Æj³Þ<A½!Ôv½U6>õ`RÛõVQí¢Þàüºq\±b
¬åËkÔ¨QU>Þ0M2EÙÙÙÚ¿¿Æ'Ã04qâDIRÿþý¦.(--M nctëÖMGq^ONNv6!!!:wîGk:uª^xáM4©Òu/IGU\\\ÕN¨Ú®7OPoµ]oO½!XÔv½UT;eQoðu¬^§~ú9(Ã04aÂIÒÀÛÏ;çöR¿;w*55UùË_Ô¨Q#Û-Z¤ÄÄD]}õÕSFFÛñ#FPNN³Øbbb«¼¼<ÅÄÄhÃ
+TáZKõéÓÇô-{¥ç߬Y3-]ºÔ¹=;;»ÂqÕeE½ýôßJç-zC ²¢Þ<zC ²¢Þ*ª²¨7ø¿h+* O>UÙ>¹¹¹¤·W¯¿þzíܹÓôø{ï½×夤$%%%y¼O¶ÃÞ½{]Þj ÔUõæÉøÔ
+õF½Áw¬ª·j§,ê
+þÀ/G;«[·n¹¯Dús¾F½¾C½¾C½Áøõg µÆ `Æ `Æ `Æ `Æ `Æ `ʲ¿ã
«X5=às999´dnê
+Áz|z|ÇÊz³¤qUaa¡¾úê++¦,©îÝ»û|^ê
+Áz|z|Ǫz,j{ôè¡=zX15t¨7Àw¨7Àw¨7À·ø# À# À# À# À# À# À# À%ÇñÀÚ½{·Sºå[|þG[©7+ê
+ðê
+ð+êM²¨qܽ{·>úè#õíÛ×éKäææª°°Ðç
N½!QoïPoïXUoE£$ÅÇÇ+%%ŪéKMMÕ',zC°¡Þ ß¡Þ ß±²Þø# À# À# À# À# À# À# À# À# À# Àc
++11ÑêeT*11QÅÅÅV/¨ê
+ðê
+ðê
+þÀ/GÃQîöµoß^õêÕSll¬233Ë=Öáp(44TÑÑÑz÷ÝwÝö;v¬<¨K.©gÏÎí'OTïÞ½¦Þ½{ëäÉnÇnܸQ]»vuÛ>wî\uW4Ö| ¶mÛ*,,LýúõÓ7ß|#I*))ÑܹsÕ¢E
8Ç*;æáÃÕ¶m[½øâ.ç¢-[jíÚµÎ}»té¢7{?eYUo¥ÇV4¿D½!ðXUo6mRLǧÞh¬ª7OƧÞàü¢q¬È-[´uëVhöìÙ1bD¹û¡/jñâÅ7nÛí%%%
+ Ñ®]»Ô[7çöiÓ¦©O>*((P>}4}út·cׯ_¯øøxm{÷îÕK/½ä²¢±Æ£´´4êw¿ûs{JJ222´uëV]¾|Ya¸·}ûv
+2D+W®ÔC=är®ÅÅÅZµjyäçöøøx_¿¾ÜûðDm×anÿÎzC°¨ízÛ´i222TXX¨'jäÈnÇRoµ]oO½ÁÔ±z5ñꫯJ.^¼¨ÐÐPµhÑÂtÿÐÐPëiii2e$iõêÕÎíééé2CúôÓO®ääduìØÑmÌ={ö(::ÚyýÂ
JJJÒºuëÔ¯_?çöÆ*))ôßg~þô§?IV¬X¡ç¾Ü9׬Y£¥KjÛ¶m¬ð|6mê¼?þ¸Â}ÊÔv½yzC°¨íz+ûÁôôÓO»I½!XÔv½y2>õàׯ8Jÿ)ððp?^Ë/¯p°°0M<Ùeäädåçç+!!Aa(!!Ayyyαùùùºîºë$I7Ö3gÜÆÎÏÏW
+×gÍ¥1cÆè¶ÛnsÛ¯¼±/_®~X
+6Ô¶mÛÛ¿þúkeffª~ýútyKÄ£>ªiÓ¦[ä¥o£4h,YâÜÞ A}÷Ýwßj³Þ<A½!ø¢ÞN:¥aÃ)==Ýmlê
+Á¤¶ë²ñ©7ø¿o
+ÂiÞ IDATÃÐùóçµlÙ2Ýÿýîsùòe;vLCunw8jÔ¨²²²äp8¥Æë¹ç$EDDèôéÓ¤¼¼<EDD¸Ý¨Q#9¯§§§kêÔ©nï!¯h¬¡CêÄ:þ¼n¿ývýüç?wîß¿9sFÏ?ÿ¼Æï#++KÉÉÉå¾UÀ0hÛ¶mÎg¿$©¨¨H×^{mew'`ª6ëÍÔIm×Û={Ô³gO%''ëî»ïvzC0©íz«l|ê
+þÀ¯ÇäädgñèܹsU:Þ0M2EÙÙÙÚ¿¿Æ'Ã04qâDIRÿþý¦.(--M nctëÖMGq^/))qù¬VéÿÍÆ2C}ö¦O®|PÒÞ:$Éí$ÅÅÅ)++K3f̨ðY1IÎûF=ª¸¸¸*Ý?@Yµ]o Þ,j»ÞV¬X¡Ákùòå5jT¹cPoµ]oO½ÁøÍgú
MXa(&&F±±±ÊËËSLL6lØPåqwîÜ©ÔÔTýå/Q£F\n[´huõÕW+..NnÇ1B999QEcW³fÍôàjƤÅë¾ûîÓ=÷Ü£-[êW^q¯CÊÉÉÑtöìYÍ9Óm¼¥K:÷ÏÎÎ.÷ËòXQoeç,½üÓ·ÕQoDVÔÛ $Itn;wîË[å¨7"+êÍñ©7ø¿h+úTRRªul©ÜÜ\IRBBÛ+×_½vîÜizü½÷Þ[á³µeç®h¬Ö×¼yseggî¥/¿ü²Ò±¤ÿ|3WÙ· ±ªÞ<ù¬#õ@C½¿?õÚ`U½y2>õà£Õ[·ÜW"íÆÖTz|z|z?ðëÏ8 j# À# À# À# À# À# ÀeÇ177W,°jzÀçrrriÉÜÔ
+õøõøõfIã«ÂÂB}õÕWVLX"22RÝ»w÷ù¼ÔõøõøUõ&YÔ8öèÑC=zô°bj èPoïPoïPooñG )G )G )G )G )G )G )Kþã´{÷n+¦:·ÜrK¥$<|Ç<¼|}z³ê-°QoöB½6êÍ^¬¨7É¢Æq÷îÝúè£Ô·o_+¦¹¹¹*,,¬ôyø§yxùúõf/Ô[`£Þì
zlÔ½XUoE£$ÅÇÇ+%%ŪéBjjªN8áѾäQûª·oí£Þì
zlÔ½Poz³+ëÏ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8ÖPqq±}>obb¢}>¯ÝG`#_{!ÀF¾öB|í
<Êç£Ãá¨p{éfÇ:
*::Zï¾û®Û>cÇÕÁuéÒ%õìÙÓ¹ýäÉêÝ»·ÂÂÂÔ»wo<yÒíØ7ªk×®Îë%%%;w®Z´h¡·µÍ;×e[ÙËVÛ¶mõâ/º¬=$$D-[¶ÔÚµkûvéÒE7n¬ð¼kUyx2~0æ
ámVå»iÓ&uèÐAõêÕSll¬233Ý
+Æ|Ê###CíÛ·'ZfU¾¥~IYÁ¯~¿Gí±*ßʲ3_»Ô[ãÆÝ
+Æ<<ácEÃaíwñâE-^¼XãÆs»½¤¤D!!!ÚµkºuëæÜ>mÚ4õéÓGêÓ§¦Oîvìúõëï¼¢mݺU/_vYßÞ½{õÒK/»ÆíÛ·kÈ!Z¹r¥zè!µkÕªUzäGÛãããµ~ýúJÏÝj;OÆ'ÚSÛùnÚ´I*,,ÔÄ5räH·cÉ÷¿j;-[¶hëÖ*((ÐìÙ³5bÄ·cÉ£öÔv¾y&ùå<Jç¨hò¨=µ¯YV¥È÷¿|õxÒ0íܹS¿ýíoÝ%òùuãXU¡¡¡.×ÓÒÒäp8´zõjÅÄĨoß¾JOOw>K©ääd
+99YÛ¶mssÏ=v^_±b
/^¬;º<ÛpáÂ%%%iݺunc¬Y³F3fÌжmÛÔ·oß
+×ß´iSçåèèh}üñǼ
+U5O}T5ß7ªcÇ
+×tåWºI¾ÕWÕ<^}õUµjÕJ!!!
+
+
+U-ÜÆ$û¨j¾f"ßê«Îï·k®¹F
+4Ð]wÝ¥'N¸IöQÕ|+ʪ,ò¾<|æg\·RäQ¾ hÂÂÂ4yòd-_¾Ü¹=99YùùùJHHaJHHP^^óYüü|]wÝu¤ÆëÌ3ncççç«AÎë_ýµ233U¿~}EFF:_:5kÆ£Ûn»ÍmG}TÓ¦MSddd¹k
+
+Õ A´dÉçö
+è»ï¾«Þb±êæá ò°^Mó=uê
+¦ôôt·±É·êjÃáPxx¸Æïrl)ò°^uó5ˤùV]uó0C:~ü¸nºé¦rßqAÖ«n¾eUùV]MoìØ±C5R³fÍÜÆ&òEãh._¾¬cÇièСÎíC5RVV²²²Ô¸qc=÷Üs¤>}Z§·±5j¤¢¢"çõõïß_gÎÑóÏ?¯ñãÇKÒÓÓ5uêTç³eÈÊÊRrrr¹/M¡mÛ¶MS¦Lqn/**Òµ×^[»Å2ÕÍÃäa½ä»gÏõìÙSÉÉɺûî»ÝÆ&ߪ«IaèüùóZ¶lî¿ÿ~·±ÉÃzÕÍ×,Rä[u5ýýÖ¤I=ùäÚ»w¯ÛØäa½<,/«²È·êjZosæÌq¹/Ê"òEãXÃ04eÊeggkÿþý7nÃÐÄ%Iýû÷WZZ.\¸ ´´4%$$¸Ñ[79rÄy}Àäö¨¤¤Äå=ÛeõSVVfÌQî³ú¥JXI:zô¨âââª{ê¶TY ûª,ß+VhðàÁZ¾|¹FUîäë=åì¼BBBtîÜ9·1Èþ*Ë×,Räë=þ~;{ö¬æÏ¯ØØX·1Èþ*Ë·¢¬Ê"_ïñ¤Þ>úè#ë[n)wò(_«à©aå~{QUÞÖ(I;wîTjjªþò¿¨Q£F.·-Z´Hºúê«§·ãG¡gÈ/Ö}÷ݧ{î¹G-[¶Ô+¯¼âÑ::tè
+0 at gÏÕÌ3]ΫY³fZºt©sÿìììrßÊâ+VäáÉøÁ·Yï $Itn;wîË[E5_+òQll¬òòò£
+6¸¬yxùz"Xóµò÷[xx¸zõêUîç¥5o³"_O²
+Ö|úù7gÎ%''Wx|°æQ¿h+úÇâé7.ÉÍÍ$%$$¸½¢xýõ×kçΦÇß{ï½.¯4oÞ\ÙÙÙ¯©ì娨(}ùå}ïÞ½¾¼^Û¬ÊÃñ1o#_wÁXoIIIJJJ2=>óð6«òõd`Ìî¨7Ïö1Ë׬1_+þ}øá¦ÇcðÆÑÎêÖ[î+µÍ9ýy6òµòläk/äØÈ×^È£|AýG @åh ¦h ¦h ¦h ¦h ¦h ¦,û;¹¹¹Z°`UÓ
EFFz´/yÔ¾ªäámä[û¨7{¡Þõf/Ô[`£ÞìÅÊz³¤qUaa¡¾úê++¦êÞ½{¥ûox·¯oPoöB½6êÍ^¨·ÀF½ÙUõ&YÔ8öèÑC=zô°bj<ùÚy6òµòläk/äøø# À# À# À# À# À# À# À%ÇñÀÚ½{·S[n¹¥Ò?J¾ãIÞF¾¾C½Ùõب7{¡Þõf/VÔdQã¸{÷n½ÿþûêÔ©ÓÏ>ûL
þÃ"ßð4o#_ß Þì
zlÔ½Poz³«êM²¨q¤N:iüøñVMÖ¯_ïñ¾äQûª·oí£Þì
zlÔ½Poz³+ëÏ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LùEãhÞ|óM=Z·ß~»F¥?ýéOµ2W¿~ýÔ¯_?%$$hôèÑÚ±cÛ>-Ò_~©ââbM8ѹ=//O&MÒí·ß®I&)//¯VÖh5É£ôØ~ýúÕÊÚ¿ä£1cÆèöÛo×øñãµoß¾ZY£Õü%?üP<ð@Àçámþo©5kÖôÏTÉ£ìï·@ÎÃÛü%_Ã0´fÍ
+>\ ±¿äñÓz2dH¬ÑÔ±zØ´i¶oß®'xB[·Ö·ß~«µk×ê¿øEÌ·}ûv]¾|Y»wïÖ¢EÔ«W/Û
+ÃÃáÐg}¦öíÛ;·/[¶L7ß|³/^¬5kÖhÙ²e
úýï_+k´¿ä±}ûvI
+ظµÅ_òÍÎÎÖþðµhÑBÛ¶mÓÓO?·ß~»VÖh%É#77W.TÃ
+µk×.Í7Oï¼óN¬1øK¾ôÅ_èý÷߯uÙ
?åQú;ó|×[§?üP.Tdd¤G¬ÏjþGÙZûì³Ï[+ëó~Ñ8¾óÎ;zúé§%IjÞ¼¹fÌá¼ýÈ#Z¸p¡N8¡VZiæÌjÛ¶úõë§{î¹G7oÖÿüg8qB-Ò#Gô³ýL3fÌPÇ+7$ÄõÙ7ß|SÏ?ÿ¼$¹<#òÖ[oiûöíÚ·oVZ¥zõêéW¿ú¼y7Ø¿äêñ|çÌãÜÖµkW]»Ö+ço7þÇc=&IºtéBBBÔ¸qc¯ÝÌ_òýñǵhÑ"=þøã:uª7ï[ñ<$é®»îRIIbcc5yòd5mÚÔk÷C ò|·lÙ¢É'«uëÖÞ<}Ûñ<ÊZ»v~÷»ßÕøÜý_¼UõôéÓjÕªU
·/\¸PwÞy§6oÞ¬;ï¼S,pÞÖ®];ç?ÔÔT
+<X[¶lÑĵhÑ¢rÇëׯn¿ýv=÷Üs.¿
+¦wß}W;wÖöíÛÕ¹sg½óÎ;ÎT
jذ¡$ék®Ñ¹sçj|îvä/y zü-ßüü|Í3G>úhMNÛ¶ü)~ýúiàÀZ²dI at 7Þä/ù®X±B¿øÅ/ëÓ¶-Écûöízÿý÷õú믫U«V7o7N?àùK¾§OÖ¾}ûtÇwhäÈå¾2øK¥>ýôS]uÕUºöÚkkrÚ~Í/^q¼îºëôü£Âg^N8¡A),,LwÜq^xáçm Îg;¦8ÿáUôÒEGÙ·<^2d&M¤!C誫®ÒÙ³g¡]uÕUU?Y?à/y zü)ßÿû¿ÿÓSO=¥1cÆèÖ[oâúÊcûöíºxñ¢víÚ¥½öÚkU<Ûàã/ù¾õÖ[2Ã9¿~ýòI:É£TÃ
+õßüF®ÂY/É÷ª«®R.]4aÂíÛ·O.t{[e ð<J^½Z>ø`Î0ðøEã8dÈ-\¸PS§NUTT¾ùæ]»ÖùrvË-õç?ÿY·ß~»þ÷ÿ×åÙÐÐPçå6mÚhÈ!WXXX×±}ûv½ðÂêÕ«êׯ¯÷Þ{Ïååê.]ºè7
ÞÐ< 7ÞxC;w®ÁYÛ¿äêñ|·lÙ¢_~Y³gÏV×®]kpÆöæ/y<ÿüóúõ¯+®¸BCçϯÁYÉ7++Ëy9PFÉò(UTT¤7ên¨ÆÙÉ·K.*n
¿ä!IÒåËÕ¶mÛjm`ðÆqøðá
+
+
+ÕSO=¥o¾ùFM6Õ¨Q£·O>]-RzzºZµjåòþè²üq¥¥¥éü£~üñGIUÿpùáÃ5aÂ:tÈíÅ|PO=õîºë.µk×NøÃªx¦þÁ_ò(ï¤@}°ãMþï%K$Éeþ-[¶è+®¨Òvç/yDEEiüøñ*((Ð
+7Ü 'x¢gü%ß`á/yþN«W¯:vì¨Ç¼Jc+É÷¡ÒÓO??üájÒ¤fÎYÅ3õþôW
+V¥1cÖ¬YFJJéN©©©:ö¯<;Ñt¿nÖÅü
+-µlÙ2ýóÿÔøñ㫼`xnýúõ
+
+
+%¨Jßýð9õæg¨7{¡Þõf/Ô[`£Þì¥6êíÖò¤ô/Ç XÆ `Æ `Æ `Æ `Æ `Æ `Æ `ªÕ0óÙgéàÁV/Ãnºé&uêÔɧsGŬÈÃÛÈ·bÔ½Poz³ê-°Qoöb÷z³uãxðàA}òÉ'êÛ·¯ÕK±ÜÜ\ùüyϪ<¼|ËG½Ùõب7{¡Þõf/þPo¶n%)>>^)))V/ÃVRSSuèÐ!Kæ&wVæámäëz³ê-°QoöB½6êÍ^ü¡Þø# À# À# À# À# À# À# À# À# À# À# ÀT at 5CC¡¡¡Ö»ï¾ër[yûWuRcÇÕÁuéÒ%õìÙÓ¹ýäÉêÝ»·ÂÂÂÔ»wo<yÒgæìǦMÔ¡CÕ«WO±±±ÊÌÌôÂA²G¾¥æÎ[áøÁÂyhîܹjÑ¢
BBB>o²C¾o½õÚ´i£:uêènÐ[o½å
3óOvÈ£ôØÍã³s¾Áø¸ÆÎy
+Ç!Õ8Jaºxñ¢/^¬qãÆÕÚ8%%%
+ Ñ®]»Ô[7çöiÓ¦©O>*((P>}4}úôj¯!XǦM¡ÂÂBM8Q#G¬öàÎê|%iïÞ½z饪=w ±:eddhëÖº|ù²Ã¨öàÎê|´téR}ÿý÷JOOר±c«½@`ua[c<ñ»æ¬kì\C®q,Z+㤥¥ÉáphõêÕQß¾}î|!33SÉÉÉ
+Wrr²¶mÛæuø;«òظq£:vì¨ððp
+0 at W^y¥WÖWVå{áÂ%%%iݺu^?PXÇ+´xñbuìØ1(yµUù¶jÕJÒÍôÊ:üUyTÇ!Þe·|ýqÝò¶Ç!×8:
iòäÉZ¾|¹×ÇINNV~~¾dç|"??_×]w$©qãÆ:sæLÍNÈÏYG©S§NiذaJOO¯öàÎê|gÍ¥1cÆè¶Ûn«ñ¹«óøú믩úõë+22²Ü·¡ú¬Î÷¥^ÒÈ#¦_ÿú×Z¶lYÏÉYGExâvÍ·T°=®±kÁö8¤Õð¶SQQ4h I***RxxxÇ)ûÌCéåÆkéÒ¥8q¢"""túôi5mÚTyyy¨î©«ó¤={ö(11QóæÍÓÝwß]ó@ù¬Î7==]ahêÔ©Î}ùíVç¡þýû+55U3f~ùË_V÷tðVç{ÿý÷kýúõêׯ2335zôh}ñÅÕ=¿guáqwØ5_)8ר5`{p¯8V¤wïÞ?¾TTT¤ùóç«O>UÇ0M2EÙÙÙÚ¿¿Æ'Ã0ÿ¨ú÷ﯴ´4]¸pAiiiJHHðö©_å±bÅ
+
+<XË/רQ£¼}¨¯ò-))qùÜA ÿ°® _å1`À Iÿý¥ËÛU}ÃWùæååIúo®¥×áÊWyTÇ!µËê|y\ãÊê<íqHÐ4+W®Ô¾}ûÔ¤I5iÒDû÷ï×Ê+«5ÖÎ;Õ³gOåçç«Q£F.·-Z´H999ºúê«õÑGiñâÅÞX~ÀñU&Lзß~«:¿
+«¨¨È§ ¾ÊñU/Ö¢EÔ AM<Y¯¼ò7Jø*ßåËëáVýúõõè£ÍAT¯ò(û
+e/ó8¤vY/k\YG° ¨·ªuùÚºukǤÜÜ\IRBBÛ3y×_½vîÜéÑ<Îyú3?V²C¾U'ÐÙ!æÍ+;;Û£yP5vÈwøðá>|¸Gó:;äQѱ<©9;ç¿ëìGU÷ñwAó# zh ¦h ¦h ¦h ¦h ¦h ¦h ¦êX½ 3ß~û²²²tðàA«b+_~ù¥®¿þzÏKå³*o#ßòQoöB½6êÍ^¨·ÀF½Ù?ÔÇââb5iÒD111V/ÅVÎ?¯Ë/û|^ò(Uyxùz³ê-°QoöB½6êÍ^ü¡ÞlÝ86oÞ\7ß|³RRR¬^¤¦¦êСC><ÊgUÞF¾å£Þì
zlÔ½Poz³¨7>ã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0P£ÃáÃáPhh¨¢££õî»ïºÜVÞþU§ÔرcuðàA]ºtI={öt;¶¢±òÈÈÈPûöíU¯^=ÅÆÆ*33ÓgÉù·`¯9;æÑ¸qc/${äûÁ¨mÛ¶
+S¿~ýôÍ7ßxáÌüò¨èg?kÎÎùãã;çlCªq$Ã0tñâE-^¼XãÆ«µqJJJ¢]»v©[·n.ÇQíyÕylÙ²E[·nUAAfÏ#FT{
+pgu¾¥ÇRwÿaue³Ø¹s§~ûÛßV{
+pgu¾cÆQZZ
+õ»ßýNÓ§O¯öÕyTôsÞa×|õq]ó({[0Ô]À5¥BCCke´´49^½Z111êÛ·¯ÒÓÓâY°*W_}UZµRHHBCCÕ¢E¯¬®¬¬·k®¹F
+4Ð]wÝ¥'NxeþÎ?ÿyæ=òÈ#^Y\YoII¤ÿ>ÿ§?ýÉ+ëðwv¨7Ô»åìkì\C®qt8
+Óäɵ|ùr¯¬üü|%$$È0%$$(///(e¨;äáp8®ñãÇ×h
+pgu¾a¨ @Ç×M7ݤ#GÖøüÕyÚ±c5j¤fÍU{
+pgu¾Ë/×Ã?¬
+jÛ¶m:sæLÏÉYjó
+ÆÇ5vÍ#ØÔ±zÞVQÀaaa***R
+$IEEE
+¯ò8ey(½Ü¸qc-]ºT'N¬î²ò0C?üð6oÞ¬ûï¿_GÖ¹Àò¤&MèÉ'Ô5×\Sås$vÉcÎ9Z´hQ×sVç;tèP
+:TÒ>ïXÞçÕy vÙ9ß`|\cç<¤àyp¯8V¤wïÞ?¾TTT¤ùóç«O>UÇ0M2EÙÙÙÚ¿¿Æ'Ã0ø!^E¾Ê#99Y§O$
èܹs^=Ï×õvöìYÍ?_±±±Þ:
âË<>úè#ë[nñæ)À/ó5C}ö¦O®|Ч0x¼Ø¬ÎÇ5®¬Î£T°< ÆqåÊÚ·o4i¢&MhÿþýZ¹reµÆÚ¹s§zöì©üü|5jÔÈ嶲ߪ,ß°T¾Ê#&&F±±±jذ¡,X
+6xcù¨¯ëY³fÚµkÖÄ~ 9 IDAT[çå_å!ýçÕÆäää.UàËz Qÿþýuï½÷jÆÞX~À±úñCjÕùò¸ÆÕyÛãz«ªÙû###µuëÖ#I¹¹¹¤%$$TéØ`b<äÑ<¨;äK½ýò¤?üУyP5vÈzû/;çAN5gç|ñqó¶zW ÕCã 0Eã 0Eã 0Eã 0Eã 0Eã 0Eã 0UÇêT&77W,°z¶£Kæ&wVæámäëz³ê-°QoöB½6êÍ^ü¡ÞlÝ8Þxã***ÒÁ^DDD¨S§N><ÊgUÞF¾å£Þì
zlÔ½Poz³¨7[7±±±µzøÈ#°¯½G`#_{!ÀF¾öBþÏ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LÑ8 LYöw?ÿüs_¿ÞªéÂÁÕ¹sgö%ÚW<¼|kõf/Ô[`£Þì
zlÔ½XYo4±±±*,,´bê Ò¹sguïÞ½ÒýÈÃ7<ÍÃÛÈ×7¨7{¡Þõf/Ô[`£ÞìŪz,j{ôè¡=zX15ÊA|í
<ùÚy6òµò||Æ `Æ `Æ `Æ `Æ `Æ `
Æ `ÊëÇñoû-[æía ±{÷nµ¹Ú£}©7 f¨7Àw¨7ÀwªRoòjãÓ¥ÎWÞùϽ9,Tn¸ùjuíyc¥ûQo@ÍQoïPoïxZoUáÕÆ1îÖw«w |Ôà;Ôà;Ô`O|Æ `Æ `Æ üÿìÝ}\TuÞÿñ÷ [B¦©"
+â=¦þ ÑÚÜì*[CK»VÔlËM͵«ÔÚļPÔLMѲs7W4°æÍjwå»dÀüþðÇ$
+æy=æÜ|Ï÷Ì{>ÎùÌ
+ `Æ `Æ `Æ `Æ `Èå¿ã¸÷-¿®6ç ð]Ûªw÷.mëR㣳gÏJÅW5/ Eôê¦ØØX¶u©qS\\ÜÕÌ à¥ø# À# À# À# À# À# À# ÀKÇ1//O¹¹¹µ= ÅÄÄ(66¶Êí\jsrrùÖëêÒã¶« À|ûwÑÙ³gÝ×8JR×;nÓØ) W51 5¼>oTêÚ¶|Ç `Æ `Æ `Æ `Æ `Æ `Æ `Èå¿ãèý»h×öî PMQ[«KÛÜ6[ÇO¶ÔÖ¿R¯îÝÝ9, ÀEìÝ«s
çÛ8JR¯î:i» ¸ õµt}ó£{? Êw h h h h h h h h h hÝ ¤e¸ÙSp(.)Qâ§L9vâ§T\Rbʱ ÔSÇáúË[o9-«èçÊÖ¿³~}¹õó-vÚ/;'G!-Ãõá¦MÕ:~mi®áº±Uku¹³þºq£Ó6O=û¬>;xPÕoàNûÍñÝÖ+:êvÇíµ| nñ}Õ("R½ûÿV9[·UZZª?¿ú:ôþ?j©n}ûiÕÚµNs
+o¥öwôÔêwßu¬ëp{{½ûAù< x?Óßq\µö}}âD÷ÏXºTv»]t©¸XYï¼ã´Í¢7ßÔßÜÅo®pûñkâÌÇôí¡/ôÒsSôô³ÖÚ OöìQçÊíwæËcc¿õþûêã¸ý÷ÍéíåËô¯O÷küOhÄSOúZº>ܼI«^_¬?×_-TîÖmNó?}ä°æÏ Ï¿àXÞ+&Fo½ÿ¾kw ¯azã8gú4{îTZZZ£ý;´k¯¿egKÖ¼û®úÝWn
ýñ¯¿Ö7'þ%óçëßÿù¾ú׿\>þ?>ýL½îé¯ZG¨×=ýµÿÀIÒ®üC]î죦mÛiú¬Ùí9¢»üEDªkxíØµÛpîån¿¶dã]п¹G¿M¬¥K«õ.è}ûÔºeKÇíôÿ«[5- @jÒ¸±áþoüå/?knÔ5uê¨uËzmnJ¥Û7jØÐñsë-µwÿ~ç
+ À;Þ8Þ¡>½{ëÕ×ÔhÿÇ×ÿ.xUv»]¯-yC#
++·~ÉøôSª¨IcÖ+]>þ'êÑÁ :¾ '&L$üGý!1QGwïRnÄþðÌ
+x¾>ð_x^O=ûl
si®Æ·jòÓõç3~Þ?1Q_þc¯b{Þ¡3_SlÏ;ttÏî*ße¼Ò³gu]½zNÇ»ùÖ6ûÇ?*uÆËûüö[
9ö«èã¬eµ}è÷Ãõ§ÿyαüºë®Sþ3.Ï w0½q¤?$WÎÖúç¡ÃåÕ«ÎwÜþáüyÛ¦e溹qcM:UáájzóÍu/^Ô5k4üÉ1
+i®áOÑ5ktñâEèÈ= zõêiè AúâðaÇòGýN×^{=ôcûýè uóm4hx¢|ùe
ç{æËcúþèíÉÉÑßÜíXÒ2\-£;*wë6
´WîÖmjÕ©³-_îÊÝxy
+ÊÝgeÇûÏÁÏõ¿/ÿI£Ç7Ü¿q£Fúêë¯ûUÔ´ùòòÕ;+ÞÔ^r,ÿáâò\ xK46M~ùOzæùçË-éÚEs,ÐçÏëóç5wÁÝѵ«ÓþO¡×ß\¡Ñ¿ÿ}¹åo¯[§N:8 3_Sçèh½½nKÇhÕJo¿üQ+֬ѤÈÖùöÛºpáþòÖÛíooÛV¯¦ÌÑ¿??àh®ªãÌÇôÄD}°*S¹¬Ó£ :óå1zôQÇèÔ¡C¹õ/¾¤Óùù¤ ýðáþÃÒøçÓѯ¾RII?n¸ýéïó?ýê+ury® ¼%GIº¥Y3=2èwå¥Í©}~¦Ö»¨uç.ÚÿÙ¥Íé´o®]uæËcêÞ¥s¹å¿©Ç~Ñt=öè£z½_SÑñçÍ¥EËßTóÛ£´,sæÏ¾ü}ÆWf&kÁâ×Þ©³¾ù÷¿Û/J{EYï¼£;UùÛO+³s÷uíÔIgÎ(¤Ar뮳²ñ0@[wìpÜnצz÷ÿZDuÐ+¯¥ëõyicM3F1]ºjÀuómôð¨Ç´øWæÞJ#«ÙÓ§9ÿß¼<ýî¾ûª}Î ¬Í6yòd{rr²áF3gÎÔoÓØ) Û½>olgB4uÒ$wÎÕp©¸X£ÆiÉüy?vâ§´ðTÕ ¬zc µ"õµt}óãAú·kK[Ê~°;'ó]S§)M£$Ó vY棪 k¢q ¢q ¢q ¢q ¢q ¢q rûßqܵ÷JMOw÷° üß;u½[ÇtkãÕ¹µÎ××?tç° µ¸ýzuéq[ÇtkãØõÛÔõ÷N `.¾ã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0äÖ¿ã¸÷íÚ~ÐC~)ªsë*ÿh+õ¸õxõx
+õVnm?ÙvP[þvHÝ»wwç°_Ù»w¯Î¯²Ð©7àêQoçPoç¸ZoÕáÖÆQºwï®I&¹{XÀo¤§§ëû]{¥z®õxõxNuêÍU|Ç `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `È'Çððp³§ ø
+ê
+ðê
+ðê
+0fjã«{î¹G×ûï¿_ëÇ4úO!<<\ááájݺµúôé£7:móì³ÏêàÁ*..Ö>è´þW^á?X/Õ[Ù¾eÿ «ñ¥z+--Õ+¯¼¢=z¨U«VÔ,ÇêíÏo;w®ù5ajã8~üx5J~ú©,Y¢Í79IÒ±cÇôÅ_hÊ)<y²Óz»Ý® íÙ³G:t(·îÓO?Uff¦§¦
+T¯ÕÛ±cÇÿ «ñ¥z{íµ×ôÁhÙ²e:rä5Ëñ¥z»ò¹í·ÞÒÃ?ìÉiLm4h S§NéÀºé¦êX÷Ùg©ÿþPÿþýuàÀIÒ4`À EDD8½Ú³uëVuëÖM«W¯Ö#Gô»ßýÎñêÓîݻۻò.E```¹ÛK,Qxx¸Þzë-ÝsÏ=<x°.]êçâÅ4iþüç?_õýÔ_ª7IRûöí5bÄ8qâªîÀÝ|©ÞVZ¥)S¦(22R6íªïÀÝ|©Þ®´`Á
+6¬F÷ PLm/^¬o¾ùF/¾ø¢zô衵k×:ÖM8Q Ú·o4qâDÇòêÀå^õ|çw4uêT½ñÆzè¡4aÂ
+2D}öþy=ûì³íÞ¥×·ÞªéÓ§kÆåÚ»w¯î¸ã;vLwÜqvïÞígöìÙ4hzôèáöû p_ª·cÇiÿþýÊÍÍUDDÆëöû¸¾To'OÔÖ[Õ¶m[õîÝ»ÂÝfò¥z+³{÷n5hÐ@5rÛý\-ÛäÉíÉÉÉÍ9SGþ½Mc§$n÷ú¼uº¢I&U{"Ò!C´{÷nIRDD>ýôSëüùóêС>¬íß¿_×^{cßððpÕ©SG.T\\cÿOÔfÓÑ£GnXäFë*2mÚ4=úè£jÕªìv{¹u|5®ï<H½U ¬Þ®táÂEEEéСC.?Pz«ºÞ:wî¬õìÙS[·nÕĵk×®jß õæúóÛСCõÇ?þQíÚµ«ÖùeªSo×¶+ý ©ï87N_}õ~úé'}ñÅ*--u¬kÕªÞ~ûmýøãZ³f"""$IZµj~úé§rc-Z´H'NÔ
+$ImÛ¶Õ9s¯$=zTT§N}÷ÝwÕë±cǨÌÌL[·N :vì£È=Zî'FX/Õ[ÂÂB½úê«jÛ¶mµÔ&_ª·^½zIãcª|\VãKõ&I;wîTII M#,ÇÔÆ±O>1bÚµk§ÔÔÔrî¬Y³ôæo***J«VÒìÙ³Ë׬Y£Ûn»Ü«6±±±Z¶l¦O®7ÞxC¯¼òÞyçuêÔ©ÜgÐ~øaÅÅÅÕè·ÂíÙ³G
:uRAA4hpgx/Õ[Ù1ºwï®={öû>`¾ToS¦LÑÂ
Õ®];M>]sæÌ©É]Ô_ª7IJMMÕðáë=.PÛ,óQU yâ£< .£Þ Ï¡Þ Ïñ¹ª ¬Æ `Æ `Æ `Æ `Æ `Æ `Æ `¨Ý»w¯vìØaÆ¡SuìØQÝ»w÷è1©7ø+ê
+ðê
+ð3êM2©qܱc¶lÙ¢ØØX3"//O
/tê
+þz<z<ǬzLj%)..NÉÉÉfð¸3gêøñã¦z¿¡Þ Ï¡Þ Ï1³Þø# À# À# À# À# À# À# À# À# À# ÀãU*..VBBiÇOHHPqq±iÇ<z<z<z7ðÆÑf³U¸|Í5j×®êÖ«èèheggW¸¯ÍfS`` "##õÞ{ï9m3bÄíÛ·O.]R=ÖO6Ò9¬^½Z]ºtqÜÎÊÊR6mæTÙ\m6V¯^]n̹sç;^Ù9¨yóæZ±b
c]çÎö®YõV¶oÙ¿Poð5fÕ[ii©¦M¦fÍ) ÂyPoð5Vy~kذ¡Ó¾Ô¼W4Y³f²²²TXX¨1cÆhÈ!ng·ÛuñâE¥¤¤häÈNëKKK íÛ·«[·nåÖíÚµK.¬tsÜ^¿~½6lØ M2E®r®iii²Ûí¤K.éÍ7߬ðµdÉ=ùäåqqqÊÌ̬t~»x¢Þìv»ã_E¨7øÚ®·äädeeeiÃ
+*))©°æ¨7øÚ®·+Û¶mÛ¦ÇÜi_ê
+ÞÀ«ÇÕ«W«}ûö
+V¿~ýtÝu×nXîvjjªl6.]ª¨¨(ÅÆÆ*--ÍñêÌ
¨+WV:æÎ;鸽|ùrµhÑB
+T³fͪk§NôþûïKV®\©þýûGãÆ?GFFêO>1ÜpÚ®7IºáT¿~}Ý{ï½:~ü¸ÓÔüEm×Û¢E¢öíÛWú.õáç·2/¿ür¹õoàÕc'OêÁTZZZ
ëm64vìXedd8'%%)??_ñññ²Ûí×éÓ§¯ÖL<YÃ×wÞYé±óóóU¿~}§ãkÔ¨QåWÙ\Ç«3fÈn·+55UO<ñD
ç¨þýûkîܹåõë××÷ßopï îU[õf·ÛUPP cÇ©mÛ¶¾âK½ÁßÔV½}óÍ7ÊÎÎV½zõVáÇî¨7øÚª·2[·nUhh¨4iâ46õoàõãÎ;Õ£G%%%é¾ûî«p»Ý®9rDt,·Ùl
+
+
+Õ¦Md³Ù´iÓ&5lØPóçÏtù-ÿñãÇ;^1ªè£ÐÐP9ïüùóJOO×°aêk«VÔ´iS3F·Þz«~ýë_Wx¥¥¥Ú¸q£ÆçX^TT¤o¼Ñ»
+¸jµYoe5j¤éÓ§k×®]NcSoð'µYo!!!êÛ·¯Î9£hÔ¨QNcSoð'x~:uj¹Çø¨7x¯n-Z¤(##CCöþv»]ãÆSNNöìÙ£#GÊn·kÌ1.VýÊï[UônݺéСCÛIII:uê$) @çÎsi®ãÇ׫¯¾ª§~ºÊy/IV×®]«qÖ@ÍÔv½9{ö¬fÌ¡èèh§1¨7øÚ®·~ýúIá£Ôü
'ß¶lÙ¢ââbuìØ±Â1¨7x:fOÀU¿|R³Ûízì±Ç$Iwß}·cù¹sçÞê7²mÛ6Í9Sü±BCC«=¯Á+77×QlQQQÖéÓ§¥U«VIR¥s-Ó»wïJ!ôóù7iÒDóæÍs,ÏÉÉ©ôKÜ@MQoeÇVÏ=+ün1õ_dF½¥¤¤èáÖ< æÍë7ÞpÚz/2ëzrêÔ©JJJªtê
+ÞÀ+ÇÊ
+À¨0\Ý&//O¯øøøjóÐC{Å'11Q.ïïÊr£sصkW¥{ j¬zse|ê
+¾Æ¬zkÚ´©rrr÷§Þàk̼üè£÷§Þà
+¼¢q´²k®¹FYYY¦ßÌcF½C½C½Áxõw µÆ `Æ `Æ `Æ `Æ `Æ `È´¿ã§Y³fuxÀãrssfʱ©7øê
+ðê
+ð3ëÍÆ1::Z
úꫯÌ8<`°°0uïÞÝãÇ¥Þà¨7Às¨7Às̪7ɤÆ1&&F111fð;Ôà9Ôà9ÔàY|Ç `Æ `Æ `Æ `Æ `Æ `Æ `È¿ã¸wï^íØ±ÃC¦êر£Çÿh+õE½C½cF½I&5;vìÐ-[kÆáSäåå©°°Ðã
N½ÁQoçPoçUoI£$ÅÅÅ)99Ù¬Ã7sæL?~ÜcSoð7Ôà9Ôà9fÖßq ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q¼JÅÅÅJHH0{UJHHPqq±ÙÓ ®
+õxõxõoà£Íf«pyVVÚ´i£ºuë*::ZÙÙÙîk³Ù¨ÈÈH½÷Þ{NÛ1BûöíÓ¥KÔ£G§õÓ¦M«t«W¯V.]ªÜçÄêÕ«Ô«W/8qBô׿þU
+
+
+R>}ôí·ßJJKK5mÚ45kÖL±®óÀÐk¯½Vî\Ô¼ysX±Â±mçεzõê
+ϸYõV¶oÙ¿Poð5fÕ[eù+Qoð5Vy~kذ¡Ó¾Ô¼W4Y¿~½6lØ M2E®p;»Ý®/*%%E#GtZ_ZZª mß¾]ݺu+·n×®]Z¸pa¥sÈÌÌT\\\ûL0A½{÷VAAz÷î'J®ÔÔTêgq,ONNVVV6lØ ÙíörãmÞ¼Y÷ß¿/^¬?üáåε¸¸XK,ÑO>éX§ÌÌÌJϨ'êÍn·;þUz¿¨íz«ê1/Qoðµ]oW>·mÛ¶M?þ¸Ó¾Ô¼A³'p5/_.Iºxñ¢Õ¬Y3ÃíËÝNMMÕ¸qã$IK.u,OKKÝn×
¨+WªO>¹sçNEFF:nW¶Ovv¶>ûì3+))IíÛ·tù?éçW~>üðCIÒ¢E´`ÁÇvWZ¶læÍ§7*,,¬Òómܸ±ãçÈÈH}òÉ'nT¥¶ëMn¸á(..N,P-ÊA½Á_Ôv½=æËPoðx~+óòË/kÑ¢ENcRoð^ý£t¹@5jÔ(eddTºMPPÆ[n¤¤$åçç+>>^v»]ñññ:}ú´£È'O¬áÃëÎ;ï¬ôøùùùª_¿¾ãveûäççë¦n$5lØPgÎ$eddè'P
+´qãFÇòo¾ùFÙÙÙªW¯ÂÂÂÊ}$â©§Ò *,ò²Qôïß_sçÎu,¯_¿¾¾ÿþûJÏpEmÖÝnWAA;¦¶mÛjÈ!NcSoð'µYoFù2ÔüImÖ[[·*44TM4qz7ðúÆÑn·ëüùóJOO×°aÃ*ݦ¤¤DGÑÀËm6BCCµiÓ&Ùl6mÚ´I
+6Ôüùó%]~¥hüøñ~¼Lhh¨·+Û'$$D§N$>}Z!!!¤êøñã:þ¼îºë.ýú׿vlß·o_9sF,ШQ£ÇØ´i*ü¨ÝnWii©6nÜèxõKtã7Vuwj³ÞÊ4jÔHÓ§O×®]»Æ¦ÞàOj³Þóe¨7øO<¿M:µÜc÷JÔ¼W7IIIâ йs窵¿Ýn׸qã£={öhäȲÛí3f¤Ëoû_ù}«¾Ò[7:tÈq»²}úöí«ÔÔT]¸pA©©©
/7Ï?ÿ\'NÔèÑ£%Iýúõ¤
+Ö®]»jÓ¦M4iR¥¯IrÜ7tøðauíÚµ÷P^m×[³gÏjÆvz¿¨íz3zÌ¡Þà/<ñü¶eË«cÇA½ÁxÍwù¤f·Û¥èèh>}ZQQQZ§rf IDATµjUµÇݶmfΩ?þX¡¡¡ÕÞðàÁÊÍͲæÌ£]ýõêÚµ«²²²$ý|^M4ÑèÑ£5iÒ$IRJJ~øa=ðÀjÞ¼¹Þxãrãµk×N¹¹¹êׯÎ=«g}Öi¼yóæ9¶ÏÉÉ©ð£@Ę·²c«gÏZ¹r¥ÓþÔ|õVÕc^¢Þà̺:uª*Ýz7ðÆ±²ß°¨ÄÄÄí[&//O_îUWÇyè¡4tèÐ*÷¹å[´mÛ6ÇmÚ´©rrr·×Ñ£G«Kºü¹*ûxp%³êª}%ê
+¾Ç¬z«ì1%ê
+¾ÆÌëÉ>úÈpê
+ÞÀ+G+»æk¯öX7̨
+õxõxõoàÕßq Ô>G !G !G !G !G !G !Óþc^^fÍeÖáËÍÍUXX)ǦÞào¨7Às¨7Às̬7SÇèèhꫯ¾2ãð)ÂÂÂÔ½{wz?¢Þ Ï¡Þ Ï1«Þ$ÇÅÄÄqhÀïPoçPoçPogñG !G !G !G !G !G !G !SþãÞ½{µcÇ3íw:vìXå %Ïq%w#_ϡެ
zómÔµPo¾z³3êM2©qܱc¶lÙ¢ØØX3ï7òòòTXXXå<<ÃÕ<Ü|=z³êÍ·QoÖB½ù6êÍZ̪7ɤÆQâââlÖáýÂÌ3uüøq¶%ÚW<Ü|kõf-Ôo£Þ¬
zómÔµYo|Ç `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æñ*+!!ÁãÇMHHPqq±ÇkuäáÈÝZÈ÷¯µo#_kñ÷<¼¢q´Ùl./ûg´¯ÍfS`` "##õÞ{ï9m3bÄíÛ·O.]R=Ë×®]«Ö[«N:jÕªÖ®]ë´ïêÕ«Õ¥KÇíÒÒRM6MÍ5S@@ÓܦMVnÙ?8p@zíµ×ÊÍ= @Í7×+ÛvîÜY«W¯®ô¼kYyüõ¯UDDÔ§O}ûí·NûúcîfV¾âÄ õêÕKAAAêÕ«N8á4¦/çnµ<\9®/çánVËwÍ5j×®êÖ«èèhegg;éËùZ-¬¬,µiÓÆoóp7«å[æ\ÉóµZW.÷Ç<\áceìv»ìv»KÛ]¼xQ)))9r¤ÓúÒÒRhûöíêÖcybb¢æÍ§~øAiii1bÓ¾sÜNNNVVV6lØ róÛµk.\Xá7oÞ¬ûï¿_/Öþðrs/..Ö%KôäO:ÇÅÅ)33³Ês÷¤ÚÎcøðáJMMUaa¡yæM8Ñi_ò¨=µoeãO0A½{÷VAAz÷îMîWÌÉ<\9®?æánfå»fÍee
e©°°PcÆÑ!C¶ñÇ|ÍÊcýúõÚ°a
+
+
+4eÊ
+<ØiÌÃÝÌÊW2ÎDòÏ|ÍÌ£l]eëý1+yuãX]ån§¦¦Êf³iéÒ¥Rll¬ÒÒÒ¯´hÑBÒϯ
9¹sçNEFF:n/Z´H)))jß¾}¹W.\¸ ÄÄD\¹ÒieËiÒ¤IÚ¸q£bcc+ãÆ?GFFêO>qᬫºyJú9?üÐiLò°êæ[ììl%%%)88XIIIÚ¸q£Ó6ä^5wåá
+òð<wå»zõjµoß^ÁÁÁêׯ®»î:§mÈ·jîÊcùòåjÑ¢
¨fÍ9mCç®|2)C¾UsçóÛ
+7Ü úõëëÞ{ïÕñãÇÖû{~Ñ8Úl6iìØ±ÊÈÈp,OJJR~~¾âããe·Û¯Ó§O;^-X¸p¡¢ =òÈ#JOOw;??_õë×wÜþæozõê),,ÌñÖùäÉ5|øpÝyçNc<õÔS0aB
iÙÛðýû÷×ܹsËëׯ¯ï¿ÿ¾Æ÷jGFFxâ 5hÐ@7nÔ3gÆ&óÕ4ßÊäççë¦n$5lØÜ«ÉÝy¸<<§¶ò=yò¤|ðA¥¥¥9#ßÊÕF6MÁÁÁ5jT¹1Ëç¸;_£LÊoåÜÝnWAA;¦¶mÛVøÏÃ/G»Ý®9rDt,·Ùl
+
+
+Õ¦Md³Ù´iÓ&5lØPóçÏ$
+6LºpáV®\©G}ÔiìÐÐP9n¨oß¾:sæ,X Q£FIÒÒÒ4~üxÇ«W¾*±iÓ&%%%Uø´ÝnWii©6nܨqãÆ9éÆo¼Ê{Æ5ÍcàÀ:~ü¸Î?¯»îºK¿þõ¯Æ&óÕ4ßÊèÔ©S¤Ó§O+$$Äir¯»ópyxNmä»sçNõèÑCIIIºï¾ûÖoåj#»Ý®óçÏ+==]Ã
+sZOãî|2)C¾«ç·FiúôéÚµkÓ:ÏÃ/ÇÊØív7N999Ú³gF)»Ý®1cÆHº|*ývÙí+uëÖMrÜîׯ_¹}®üå¾òU®]»jÓ¦M4iR
¯&)»x¤Ã«k×®Õ?i«*²m>ÿüsM8Q£Gv<¬Ë|+Ò·o_¥¦¦êÂ
JMMU||¼Ó6ä^}5ÍÃäa¾æ»hÑ"
+0@:th
ÛoõÕ4¤¤$Ç} sçÎ9mCæ«i¾F!ßê»Úç·³gÏjÆvZçïyÔ1{®úå«0v»½ÂßRTÝYmÛ¶M3gÎÔǬÐÐÐrëÊ>ùõ×_«yóæ~ÁuðàÁÊÍÍu¢~X<ð7o®7ÞxÃ¥y´k×N¹¹¹êׯÎ=«g}¶Üy5iÒDóæÍslSá[èbFWÞ£GÖ¤Iö÷×<ÜÍÌ|9þ9s 믿^]»vUVVÓ¸¾»òp帾»Y)ßÇ{Lt÷Ýw;Ö;w®ÜG³|=_+å¥èèh>}ZQQQZµjÓ¸¾»Y)_Wøz¾VÊ£ìçàà`õìÙ³Âï'úzUñÆÑè7Õtß2yyy¤øøx§w2
+¤AîÿÐC{U¶iÓ¦ÊÉÉqyNWþ®£Gº4÷]»v{ÛÌÊÃñý1w³Z¾·Ür¶mÛf8®/çnµ<¨C÷"_kåkµ<h8®/çánVË×m|9_«åáïÿÿ¹Â+G+»æk*|¤¶qLo@þÜ
<|ùZyø6òµÏï¿ã ¨# À# À# À# À# À# ÀiÇ1//O³fÍ2ëð~!77Waaa.mKµ
¯:y¸ùÖ>êÍZ¨7ßF½YõæÛ¨7k1³ÞLi£££UXX¨¯¾úÊÃû°°0uïÞ½ÊíÈÃ3\ÍÃÝÈ×3¨7k¡Þ|õf-Ôo£Þ¬Å¬zLjcbbcÆ¡Qòðmäk-äáÛÈ×ZÈ÷¯µïã; C4 C4 C4 C4 C4 C4 C¦üǽ{÷jÇfÚïtìØ±Ê?JãJîF¾C½YõæÛ¨7k¡Þ|õf-fÔdRã¸cÇ}ðÁêС÷þ¹
+«|`g¸»¯gPoÖB½ù6êÍZ¨7ßF½YYõ&Ô8JR4jÔ(³ï233]Þ<j_uòp7ò}ÔµPo¾z³êÍ·QoÖbf½ñG !G !G !G !G !G !G !G !G !G !G ¡:fOÀv»]k×®Õ{ï½§'OªQ£F:t¨~ó߸ýX}úô$Ùl65kÖL£GVÏ=Ëm3gÎ
+8P-Z´PRRæÏ/Iúøã¡'OªqãÆzüñÇÕ»wo·ÏÑlÞÇ;4þ|}ûí·jß¾½þy
¸}¾Æ[ò-ÛW6oÞìøùôéÓzñÅõÏþSmÚ´Ñ/¼
+º}îâíyT¶y{¾¹¹¹Zºt©N8¡-ZèñÇWçÎÝ>wOñö<>úè#-]ºTÿùÏ|"wóö|Ë,[¶LË-óúÿS½=+ÿr¯òÆqÍ5Ú¼y³þyµlÙRß}÷V¬XQ+,érð%%%Ú±cæÌãôÀ²Ûí²ÙlúüóÏÕ¦MÇòÙ³gëùçWǵ{÷nÍ1Ã'GoÉcÖ¬Y4i:wî¬Ý»w+==]üãke¾Ä[ò-ûúÿq§§§ëöÛoWJJ-[¦ôôtýÏÿüOÌݼ=Êã2oÏ7''G/¼ð5k¦7êOúÞyçZ»'x{yyy={¶4h íÛ·ë¥^Ò»ï¾[+s÷FÞ¯$}ñÅúàje¾æyøC³x%¯hß}÷]ýéORxx¸$©iÓ¦4icý¡C4{öl?~\-Z´Ð³Ï>«õéÓG<ðÖ[§¿ÿýï:~ü¸æÌ£CéæoÖ¤IÔ¾}ûJPþ¼o¿ý¶,X IúðÃË×®]«Í7«qãÆ.¿!I7ß|³{î ñ<ìv»¤óøäOÜsø8oÉ·2»wïÖ%KT·n]ýîw¿Sbbbî«ðö<`ÌÛó:uªãç.]ºhÅÕ»,ÆÛó({qôÒ¥K
+ðêO[ÔoÏ÷§~Ò9sôÜsÏiüøñ5º¬ÄÛó¤{ï½W¥¥¥Öرc½¯òï8:uJ-Z´¨týìÙ³õÛßþVëÖÓoû[Í5˱îÖ[ou<fΩhýúõ3fæÌSáx}úôÑ]wÝ¥ùóç+Ì|Pï½÷:uê¤Í7«S§Nz÷ÝwªgyF/½ôîºë.½üòË7n;Nßr¼%ñãÇ+55UÐîÝ»uîÜ9w¾Ïó|+SXX¨
+Hn¸á¯ÏÝÛó1_É7??_S§NÕSO=åÒöVåyôéÓGwß}·æÎëÍ
;y{¾-Òo~óEGGWç´-ËÛóؼy³>øàýå/Q-ôÒK/Uçô½W¼ãxÓM7é_ÿúZ¶lYáúãÇ«ÿþ
+
+
+Ò=÷Ü£W_}Õ±.>>ÞñÊÂ#G4kÖ,ǯì¨_ªìrå[Ôe?ßÿýzúé§uÿý÷+99¹ÜGUµ|ùòê°ÅyK½{÷v|TxÇÚºuk5ÏÔ?yK¾ùÕ¯~¥³gÏ*$$DúÕ¯~ep¶ÖçíyÀ/äûÏþS/¾ø¢®;î¸Ãp[«ó
<6oÞ¬/jûöíJNNÖo¾i¸½?ñö|×®]+»ÝîW>}¼úÅ;oÏ£L
+ôûßÿ^¨r[oçãý÷߯ٳgküøñ
+×·ß~«+V8ÞÎnÞ¼¹þþ÷¿ë®»îÒßþö·r¯^:~nݺµî¿ÿ~ÅÅÅ)((¨Úóؼy³^}õUõìÙSõêÕÓû￯gyƱ¾ @ÒÏØ²Û¾Æ[ò.^ý_ÿúÒÓÓý¢ ÝÁòHçÎõÖ[oé¿ÿû¿õÖ[o©S§NÕ>¶x{0æíù®_¿^¯¿þº¦L¢.]ºTû¸Vãíy,X°@<ò®½öZÙl6?¾ÚÇöeÞï¦M?{{Ó(ye´zõjµjÕªÚÇö6^Ñ84HzñÅõí·ßªqãÆ:t¨cýÄ5gÎ¥¥¥©Eå>}¥ç{N©©©úóÿ¬~úIRõ¿ÔzàÀ=öØcÚ¿¿Ó;eüî»ïÔ¸qc½¨ò<Ê^5ºñÆuï½÷jðàÁÕÛ_y[¾Wþ¼yóf=Z/¾ø¢î½÷^Ýzëzá
ªuL«ñö<*[˼=ß¹sçJR¹y_¿^×^{mµmÞGxx¸F¥µjÕJÏ?ÿ|µéë¼=__ãíyý\·n]µoß^Ï=÷\µél'O¶'''n4sæLù÷6`¸ÝëóÖéb~H¥ÁIOO××_Q£FU{Âp]ff¦ÉÃ"ªÇ÷?¤Þ¼õf-Ôo£Þ¬
zómÔµÔF½][ÚR®ô^ñËq æ¡q ¢q ¢q ¢q ¢q ¢q ¢q ªcö|þùçÚ·oÙÓ°¤¶mÛªC=&yTÎ<Ü|+G½YõæÛ¨7k¡Þ|õf-V¯7K7ûöíÓ§~ªØØX³§b)yyy***òø<*fVîF¾£Þ¬
zómÔµPo¾z³o¨7K7§ääd³§a)3gÎÔþýûM96y833w#_gÔµPo¾z³êÍ·QoÖâ
+õÆw h h h h h h h h h h |ªq´Ùl²Ùl
+Tdd¤Þ{ï½rë*Ú¾ºã1böíÛ§K.©GNûþrìÒÒRM6MÍ5S@@@¥Çö%VÎcíÚµjݺµêÔ©£VZiíÚµ5=M¿e
|׬Y£víÚ©nݺVvv¶$éÄêÕ«Ô«W/8qâjO×ò¬GeËá:+ç[fÚ´i~ñÜ&Y;¼Þp7+çë×/VÈ#++KmÚ´ñûë
+j%Én·ëâÅJIIÑÈ#kmÒÒRhûöíêÖ[¹ýìv»ÓöÉÉÉÊÊÊÒ
+TRRRá6¾Èªy$&&jÞ¼yúá¦#FÔxnþÌì|׬Y£¬¬,jÌ12d$i êÝ»·
+
+
+Ô»woM8±Æsó&VÍ£²å¨«æ+I»víÒÂ
k<'odÕ<üõzÃݬ¯¿^¿ÇúõëµaÃhÊ)<x°$ÿ»Þð¹Æ±L```*ͦ¥K***J±±±JKK«ò½E)%%EíÛ·÷ËWÿ¬G-$ýüªTXX[æç¯ÌÊwõêÕjß¾½Õ¯_?]wÝu¤ììl%%%)88XIIIÚ¸q£[æç-¬GeËQ3VË÷Â
JLLÔÊ+Ý2/ocµ<üýzÃݬ¯¿_¿ÇòåËÕ¢E(00PÍ5ä×>×8Úl6iìØ±ÊÈÈpû8IIIÊÏÏW||¼ìv»âããuúôé*_Ñûæozõê),,¬Â·Ç}UóX¸p¡¢ =òÈ#JOO¯ñÜüUò=yò¤|ðA¥¥¥IòóóuÓM7I6l¨3gÎÔxnÞĪyTµ®±j¾'OÖðáÃuçwÖxNÞȪyøëõ»Y5_½~±B6MÁÁÁ5jc_»Þ¨cöܲ!((HEEEª_¿¾$©¨¨HÁÁÁÕçÊWïÊ~nذ¡æÍ§1cÆT:^HHúöí«3g*;;[Ã×ý×Uy>ÞΪy6LêÓ§²³³õè£ê/¾¨ò|Pòݹs§ôÒK/é¾ûît¹ÞN:¥ÆëôéÓ
+ ©þÉy!«æa´®³j¾iii²Ûí?~¼c_øx¤Uóð×ë
+w³j¾þzýb
<ìv»~üñG[·NÃ
+ÓáÃýîzÃçÞq¬L¯^½4cÆ©¨¨H3fÌPïÞ½«=Ýn׸qã£={öhäȲÛíM$õë×OÒÏFÿøÙy>}ZÒÏ9Ý{x*ßEiÀÊÈÈÐСCûõíÛW©©©ºpáRSSï¶sóFfçQÙr¸Ùùû>¹?4FÌÎëÚev¾\¿ç©<têÔ)IR@@Î;'Éÿ®7ü¦q\¼x±vïÞF©Q£FÚ³g/^\£±¶mÛ¦=z(??_¡¡¡åÖ]ù<¯ü9%%EsæÌQýúõ5vìX½ñÆWwB^Îì<222ôÄO¨^½zzê©§üî:Ô6OåûØcé»ï¾ÓÝwßíÈ·¨¨HsæÌQnn®®¿þzmÙ²E)))î8-¯ev-{/Ê3;®7jÙùrýR§òRtt´4h Y³fiÕªUäw×>õQU£W9ôaëGòòò$IñññN¯,T¶oÓ¦MãÒñ}
ó4h
+äÒñQ1+ç[¿~}mÛ¶Í¥ãû
++çáïï@¹óî6¾ÀÊyÔ¯_ßï®7ÜÍÊùúãõòHLLTbb¢Ó>·Ür_]oøÍ; ¡q ¢q ¢q ¢q ¢q ¢q ¢q ªcö|÷ÝwÚ´iöíÛgöT,åèÑ£ºå[<~\ò¨Yy¸ùVz³êÍ·QoÖB½ù6êÍZ¼¡Þ,Ý8«Q£F2{*rþüyxü¸äQ1³òp7òõf-Ôo£Þ¬
zómÔµxC½YºqlÚ´©n¿ýv%''=K9s¦öïßïñãGÅÌÊÃÝÈ·bÔµPo¾z³êÍ·QoÖâ
+õÆw h h h h h h h h h h |ªq´Ùl²Ùl
+Tdd¤Þ{ï½rë*Ú¾ºã1böíÛ§K.©GNûþrì+Ûl65lذ¦§é5¬Ç_ÿúWEDD(((H}úôÑ·ß~[ÓÓô[VÈwÍ5j×®êÖ«èèhegg³²cú"+ç¥6mÚ8-ë¬ï/ßü7åá×îfå|ýñúÅ
+yTö<æoÿ÷ùTã(Iv»]/^TJJFYkã* @Û·oW·nÝÊíg·Û+¯ìß¶mÛôøã×xnÞĪy>\©©©*,,Ô3Ï<£'ÖxnþÌì|׬Y£¬¬,jÌ12dc¼r÷uVÍcýúõÚ°a
+
+
+4eÊ
+<¸ÆsógVÍ·lL«;«æá¯×îfÕ|ýõúÅì<*{ó·ÿ÷|®q,X+㤦¦Êf³iéÒ¥Rll¬ÒÒÒªõJÃË/¿¬'|Ò-óóVË£´´TÒϯJ}øán¿2+ßÕ«W«}ûö
+V¿~ýtÝu×¹eÞÎjy,_¾\-Z´P@@Õ¬Y3·ÌÏ_Y-_IºáT¿~}Ý{ï½:~ü¸[æç-¬G¼Þp7«åëï×/fåÁóØe>×8Úl6iìØ±ÊÈÈpû8IIIÊÏÏW||¼ìv»âããuúôi_mغu«BCCÕ¤IÏÍX5=ñÄjÐ 6nܨ3gÎÔxnþÌ*ù<yR>ø ÒÒÒj<_`å<l65jÔ¨«?³j¾v»]:vìÚ¶m[îH_fÕ<ÊøÛõ»Y5_½~±B<IuÌ»UÖ0©¨¨Hõë×$)88¸Úã\ùNVÙÏ
+6Ô¼yó4fÌ*ç7uêTÍ3§Êí|
Uó8p (éò÷*ú;ªf
|wîÜ©½ôÒKºï¾ûjt¾ÂÊyØívýøãZ·n
+¦ÃWïä`é|%©Q£F>}ºn¸á×OÊY=»Þp7«æë¯×/VÈç1|DZ2½zõÒ3TTT¤¢¢"Í1C½{÷®ö8v»]ãÆSNNöìÙ£#GÊn·»Ô4nÙ²EÅÅÅêØ±cMNÁ§X!»Ý®Ï?ÿ\'NÔèÑ£kr¨§ò]´h
+:Ôݧá3ÌÎ#))I§N$èܹsî91H2?ß2gÏÕ3}Õçäͬ׵Ç
+ùrýò3OåÁóØe~Ó8.^¼X»wïV£FÔ¨Q#íÙ³G/®ÑXÛ¶mS=¯ÐÐЪZà IDATrë®üÍJ¿ü-KS§NURRRÍOÂÍfS@@úöí«zH&MººB9Ê÷±ÇÓwß}§»ï¾ÛoQQaú#³óRtt´4h Y³fiÕªUî8-üfç[ös&M´}ûv\¹Ò§åµÌÎCâz£6/×/åy*ÊÇüízç>ªjô½¶°°0mذáªÇ¤¼¼<IR||¼âãã]Þ÷£>réø¾ÂÊyøÓoÀª-äk-VÎ#11Q.³r¾Ô[yfç!ùßõ»Y9_ê<OåQÙó¿åá7ï8 jÆ `Æ `Æ `Æ `Æ `Æ `Æ `¨Ù¨J^^fÍeö4,%77W!!!¦<»¯3êÍZ¨7ßF½YõæÛ¨7kñz³tãxÛm·©¨¨Hûöí3{*¢:xü¸äQ1³òp7òõf-Ôo£Þ¬
zómÔµxC½YºqVtt´ÙÓÀÿG¾|
<|ùZyø6òµòð^|Ç `Æ `Æ `Æ `Æ `Æ `Æ `È´¿ãxðàAeffux¿°oß>uêÔÉ¥mÉ£öU'w#ßÚG½YõæÛ¨7k¡Þ|õf-fÖ)ctt´
+Í8´_éÔ©ºwï^åväá®æánäëÔµPo¾z³êÍ·QoÖbV½I&51111ãШ yø6òµòðmäk-äáÛÈ×ZÈÃ÷ñG !G !G !G !G !G !G !·ÿÇüãJOOw÷°ßرcZG]ïÒ¶Ôpu¨7Às¨7ÀsªSo®rkãÕ¹µÎ×éóÝ9,àWZÝ~½ºô¸Êí¨7àêQoçPoç¸ZoÕáÖÆ±ë·©ëî QoçPoçPo5ñG !G !G !G !G !G !G !ÿãþÝG´dþºÚ ÀCvm?¨ÞÝ[º´KcLLÎ=+_Õ¼ Ñ«[bcc]ÚÖ¥Æ1..NqqqW3' â; C4 C4 C4 C4 C4 C4 C.ýǼ¼<åææÖö\ £ØØØ*·s©qÌÉÉQæ[¯«KÛ®zb óíß}DgÏu_ã(I]ï¸Mc§$\ÕÄ Öðú¼uR©kÛòG !G !G !G !G !G !G !ÿ£+öï>¢]ÛºsH @5Eun.=nsÛxnm?ÙvP[ÿvH½ºwwç° }²w¯Î·nã(I½bºkê¤Iî àÔ×ÒõÍîý$(ßq ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢qtáfOÁ¡¸¤Dc2åØcRqI)Ç P{LmCZë/oý?öî>.ª:ïÿø{ÀÄÊJÌ´²QÐÒïµä'ÖfkW«kh¥×%jYâ
+êº[ÚàݵV ffºxSvc¶¹ AæÍj©eæn&a ®Èüþðb98Ì93óz>=bÎóý~ϼùà|ÎÌÀNÛ*ûÚÕýo¯__áþ;£ÐáúpãÆjÍ_B[+´E¸®mÙJïì²²öybÊ}~àΨï
íï|ðºßu·GD*¦ß½ÊÙ¼ÙéØwÞ_¯è¨Û·×¾ÿ¾ºÆõq:¦l¿>ßÒÒRýùåWÔ>æÿ©qD¤ºöé«k×:¿axKµ»ý~çÇ}íok§wÞ¯ ßgú++×¾cÇ×øø¥Ke·Û%IçKJ´êí·öYôÆêÿ»µøå¿&N}uD'~¡çþ8MONêti©]AAAút×.ujßÞ±ýÝõèµóuìóÏ4ê¿iäO:ûæ{ï©g÷îÛÛôÞZöº¾ùl¯&<>F#þïS_Ñ©¯8úJº>Ü´Q+_]¬ãöë/*wó§õç>¤sfkÒSO;¶÷ìÞ]o¾÷^õ fzã8çÿÇ?©´´´FÇ·oÛNÍÎ$yçõ½3¶ÂýGÓ·Çÿ¥%è_ÿþ·¾þæ·çÿÇg«ç=ýt]«õ¼§öîÛ'IÚñ¨ó½uãmõ̬Ùý>¬»þ^#"Õ¥w¶íØi¸öà à
+·_Y²Äñ*迹G÷ÆVÆÒ¥W_{inTHHîìÙSW\q
Ó»öìQ«-·ÓÿwnnÚT¶ ë&M×ôÚ_þ¢³féÈH]V§Zµh¡WæÍu¹ãF_·jÑB»÷î5 ï1½ql¡Þ11zùÕ%5:þÑáÃõ¿/½,»Ý®W¼¦CV¸ÉòJzò Õ ÖäqOjÉònÏÿxR
+×ѽ{4lp¼ÆLJ$ú= /wîÐ
+×ÿÒ=6q?8DÇö}®ä§ÒS¦TºæÐájÙZS}F9óãôÕ?v«×·ëÔWGÔëÛõå®N¯~ò¤=öfÍî4ö©Ô¿j(C[ëúÖm4îPêÌ*]SïNPxXã¸ÊÞÎZöVÛþg¸ÿÓÛ¯¼òJ:e8> ßczã(I%WÎæÍúçÁC¶Ô«ÎqÜþéÌ
TاEófº¾I%M®ðpÝxýõûÎ;§åkÖhøãcÚ"\ëåkÖèܹsnÍðða
+×W\¡
+Ò9¶?4è÷ºüòË5ôûïÝ·Oc&%éúÖm4hxõU¥ç{ê«#úáËÃÚ£þ¿¹Û±=´E¸ZDwPîæ-
+m®ÜÍ[Ô²c'-Z¶Ì±ÏÎ={ÔwÀ@= {úôq;´A
+YÙ|ÿ>°_ÿûÂó=~B¥k*Ó¤qc}}ìã¸ÊÞÎzê«#*8ò¥Þ^þ¦=÷cûO?ý¤¡¡ã ð=hm6þüÂóøÔS¶wïÒYó^zI?9£ÎѼ^Òí]º8ÿøÈzõåý?ÿSaû[ëÖ©cûöèÔWGÔ):Zo[çÖü-[*ó·ôóÏ?kù5j!IlÕJo½¥³gÏê/o¾åØÿ¶[oÕËsçè_û÷9«ê8õÕ ÷Wf*÷ýu¯S_ѨaÃ$I¯¯\©!#FêÏ3_Ð÷ß_éÛ·¯Ð°þáÙç_P I
+
+
+RñO?®ahüðÇ?ê˯¿Ö
täèQÃýó(p|ýå×_«CT[ç
+ ÀwX¢q¤6ÕC~_a[ZJö|ö¹Zuê¬V:kïçû6+ÅéØ]ºèÔWGÔs§
+Û/{Cü_ÓUæaÃôj%¿$§²ùçÏ¥EËÞP³Û¢ôzæJ-}ñó/¦$ë¥Å¯*¼c'}û¯9ö_ö¢V½ý¶ZtèXé[<ݱ}ç.uéØQ§~,ThîKüÃ4üá
+ößñýêâÀþýµyÛ6Çí¶mÚ(¦ß½jÕ^/¾®Wç§IR
õÿzÒØ±êÞ¹úyP×·n£G=¢Å/¾Xa²ßª:âÉqýÌÇö¿çåé÷÷ÝWís `m¶©S§Ú
+wJIIÑámѸiñû½:l§B5}òdO®Õp¾¤D£ÇkÉù^;aìZøbªêW½3 ZúJº¾ýù[ýÛå¥-äN?XÇù.«SǦQió ¨]y«* Àh h h h h h <þwwìþRÓÓ==, À
+ß¶MaQW{tL6QZétÑûé' ¸©ùmW«s[<:¦GÇ.·ß¢.·{v sñG !G !G !G !G !G !G !þǽ;kÇÖHQZUùG[©7À3¨7À{¨7À{Ü©·êðhãøéúø¯Õ[7OÝ»wëtÑ*z.õxõx»õVm%©[·n<y²§Fzzº~øÙ½+Ôpi¨7À{¨7À{ªSoîâ3 C4 C4 C4 C4 C4 C4 C4 C4 C4 C~Ñ8½ `Po÷Po÷Po1SÇÜÜ\ÝsÏ=T\\Þ{ï½ZÓèBxx¸ÂÃÃÕªU+õîÝ[YYYNûL2EPIIèØ¾aÃÅÆÆ*""B±±±Ú°aC¬¨)ª·Ýyçjݺµzè!åçç×Êúò§z+;ö×ã÷Ýw4hZ·nAé»ï¾óÜÉ Õõæj;àM¦6&LШQ£ôÙgiÉ%Ú´iË$9rD_|ñ
¦M¦©S§:Ýo·Û¤]»v©}ûöí'OÖ3´oß>M>]S¦Lñæ²*ùS½%%%éé§Ög}¦#G
*99Ù˪äOõväÈ9rÄiÿääduéÒE{÷îU.]¨C&êÍÕvÀLm4h 'Ojß¾}ºîºëê¸ïóÏ?W¿~ý¡~ýúiß¾}¤}ûö©ÿþpºê²yófuíÚU«W¯ÖáÃõûßÿÞqõiçÎýݹb\áö%K®7ß|S÷Üs¬¥K:ÆiÚ´©$Éf³Inºé¦Kxd Ïó§z+--ôK½åææ^Â#x?Õ+ÿûß %$$èïÿ»ÛàIPoÚ8.^¼Xß~û}öYõèÑCk×®uܤøøxíÙ³GñññJJJrl0`öíÛWáÊËÛo¿éÓ§ëµ×^Ó< I&iÈ!úüóÏõÔSOiÊ)ý®Ú«uëÖzæg4sæLÇöíÞ½[·ß~»9¢Ûo¿];wît3sæL7N[·Vbb¢þy?^À¥ð·z{ê©§Ô¾}{ýýïWaa¡Ç/àRøS½¹RXX¨
+JBCCUTTT³¸DPoÔ1sò-Zè¹ç$<xPCÑ$IV||¼êÕ«§A9±CiðàÁª[·n
±¦L¢
ªmÛ¶.^IJJJrü({e¢*F? ~ýu§N4cÆ
+6L&LÐ/¾¨Ûo¿]7oÖĵqãFw
+ ÖùS½Ý}÷ݺûî»%]ü¼ceÌäOõæÊ5×\£5jÔH§NÒÕW_íÖ: Oz¬ÀÔWǯ¯¿þZÿùÏôÅ_8Þ~&I-[¶Ô[o½¥þYkÖ¬QDD$)22R+W®Ôþó
+c-Z´HIII_Jsë·jÎ9+I_~ù¥$©N:úþû﫽Ö#G(!!AZ·nâããuäÈG:uJÒ/?PÊnVáOõ&]ü|È¡C¬|°Ús µÉßê2wÜq,Y¢sçÎiÉ%ºã;ª=7à PoÚ8öîÝ[#FPÛ¶mZáõ³fÍÒo¼¡¨¨(\¹R³gÏvl_³fn¹å
+Wmzõê¥×_]Ï<ó^{í5½øâzûí·Õ±cÇ
+ïAðÁ[£÷ïÚµK;vTaa¡4hPá¾^xAO?ý´n½õVÍ1£ÂÛ +ð§zWË-5tèPõë×O<òHM Öø[½Uö®?üáÚ¾}»n»í6mß¾]Ó¦M«ö¼'B½¹úð&ÛÔ©SíUý&´þ×o¸ß«ó×é\A¨&OìÉ5%==]?ü|z¼z¼z¼§:õvyi*3vJJ¹¯8 ¬Æ `Æ `Æ `Æ `Æ `Æ `Æ `¨îÞ½[Û¶m3cjÀT:tP·nݼ:'õ@E½ÞC½ÞcF½I&5Û¶mÓǬ^½z1=`¼¼<y½Ð©7"ê
+ðê
+ð³êM2©q¤ØØX%''5=àu))):zô¨)sSo4Ôà=Ôà=fÖq ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q¼D%%%7mþøøx6?àMÔ`>êðê
+Vâ£Íf«tû5kÔ¶m[Õ[WÑÑÑÊÎήôXͦàà`EFFêÝwßuÚgÄÚ³gÎ?¯=z8¶¯]»VZµR:uÔ²eK]»ÖéØÕ«W«sçÎÛ«VR6mÖäj6M«W¯®0æ¼yó*sÙ9©Y³fZ¾|¹ã¾N:9\
+³êí>PDDBBBÔ»wo8qÂéXê
+þƬz+;ö×ó?~\={öTHHzöì©ãÇ;IÂWYÞ\m/zøDãèÊ5k´jÕ*iìØ±2dH¥ûÙív;wNsçÎÕÈ#î/--UPP¶nݪ®]»:¶'$$hþüùú駦#F8©ØØXÇíõë×kÃ
+*,,Ô´iÓ4xðà*×&»Ý.I:þ¼ÞxãJÏ¡¤¤DK,Ñã?îØ«ÌÌÌ*)àÒÕv½
+>\©©©***ÒÄät,õ@QÛõf·ÛuPÞ¤I£ÂÂBÅÄÄPfÕ«íåQo°nW¯^víÚ©^½zêÛ·¯®¼òJÃý+ÜNMMÍfÓÒ¥K¥^½z)--Íq¦yóæ~¹Bæ4æöíÛ鸽lÙ25oÞ\AAA
+VÓ¦M«\kÇõÞ{ïIV¬X¡~ýúG&M_GFFêÓO?5ÜðÚ®·ÒÒRI¿ÔÛ~è4&õ@QÛõæJvv¶U¯^=%&&*++ËiêþƬzsõ+ñ鯱Ìwß}§*--Òûm6BBB4nÜ8edd8¶'&&ª @qqq²ÛíS~~¾ãªÌÂ
5dÈ
è¡RzzºÓت_¿¾Ó|õêÕÓ¨Q£*ÌçjãÆÓÌ3e·Ûª1cÆTzÁÁÁêׯæÍçØ^¿~}ýðÃn<JgÔV½eddhÌ1jÐ ²²²têÔ)§±©7Úª7W
+
+
+tÝu×I5jD" x»ÞÜA½ÁJ|¾qܾ}»zôè¡ÄÄDÝwß}îc·ÛuáÂ>|Xpl·Ùljذ¡6nÜ(ͦ7ªQ£FZ°`$ièСÊÌÌÔÙ³gµbÅ
+
+6Ìiì
+ª¸¸Øi¾3gÎ(==]Cr-[¶Ô7Þ¨±cǪuëÖºé¦*=ÒÒReeeiüøñíÅÅźöÚkÝ|´KSõ6`À =zTgÎÑ]wÝUiPo$µYo®êäɤüü|
:íCÂQoî Þ`%>Ý8.Z´Hýû÷WFF~øájo·Û5~üxåääh×®]9r¤ìv»Æ+éâ?Ò/o+»]^×®]uðàAÇíÄÄDÇ?ºAAA:}ú´[k0a^~ùe=ùäU®»l|I:tèºtéâî)5VÛõV¶Ïþýû¤Ñ£G;A½!Px£Þ*Ó§O¥¦¦êìÙ³JMMU\\Ó>Ô!üYõæê
+VRÇì¸ë×ï·ÛízäG$Iwß}·cûéÓ§^Ò7²eË¥¤¤èO>QÃ
++ÜWöÖ¹cÇ©Y³fZ¸p¡ÓñVnn®£¨¢¢¢üü|EEEiåÊärebbbßÒPvþ7ÜpæÏïØãòCÜ@MQoå¿ÇGÉ';O½ÁYoå¿¶Ûí3gâããuõÕW«K.ZµjÓ¸Ô!|êÍÕöò¨7XO4®¾ÑÝyïxUûäååIââ⮬4H
+2<þ¨pe'!!A n¯ÃíFç°cÇ
+o) .YõæÎøÔüÕêíæoÖ-[ǥ᫬Voü»_ã£]vÙe^õ3ç¼zÌGÞC½ÁJ|ú3 ÚGã 0Dã 0Dã 0Dã 0Dã 0Dã 0dÚßqÌËËÓ¬Y³ÌðºÜÜ\
27õ@C½ÞC½Þcf½Ò8FGG«¨¨H_ýµÓ¦S·nݼ>/õ@D½ÞC½ÞcV½I&5Ý»wW÷îÝÍ8Ôà=Ôà=Ôà]|Æ `Æ `Æ `Æ `Æ `Æ `Æ `È¿ã¸{÷nmÛ¶Í©SuèÐÁë´zC ¢Þ ï¡Þ ï1£Þ$ÇmÛ¶éã?V¯^½Ì0E^^¼^èÔõxõxYõ&Ô8JRll¬Íðº=zÔ¹©7ê
+ðê
+ð3ëÏ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8^¢ÅÇǽ*ÅÇÇ«¤¤Äìe zÌGÞC½ÁJ|¢q´Ùln_µjÚ´i£ºuë*::ZÙÙÙk³Ù¬ÈÈH½ûî»Nû1B{öìÑùóçÕ£GÇöµkתU«VªS§Z¶l©µk×:»zõjuîÜÙiû3*¬ûøñãêÙ³§BBBÔ³gO?~\ôÁ(""B!!!êÝ»·N8!I*--Õ3Ô´iS9Æ*?æ¾}û¡W^y¥Â¹©Y³fZ¾|¹cßN:iõêÕ>@yfÕ«Z(z¿1«ÞÊýõü®j§<ê¾Êjõæj{yÔ¬Ä'GWÖ¯_¯
+6¨°°PÓ¦MÓàÁ+ÝÏn·ëܹs;w®Fétii©´uëVuíÚÕ±=!!AóçÏ×O?ý¤´´41ÂéØÌÌLÅÆÆVضcÇ-\¸°Â¶I&)&&F
QRR$iøðáJMMUQQ&NèØ¬U«ViÃ
+ºpáìv{
ñ6mÚ¤ûï¿_/Öc=Vá\KJJ´dÉ=þøãí±±±ÊÌ̬ôñÜQÛõæªÊ£Þ(j»Þìv»Ó÷¹äºvÊ£áo̪7WÛË£Þ
`%uÌ^À¥X¶l$éܹs
+VÓ¦M
+÷®p;55UãÇ$-]ºÔ±=--Mv»]Í7ôËÕ°°0§1·oß®ÈÈHÇí³gÏ*!!A+V¬PïÞ½Û³³³õùç«^½zJLLT»ví$]ü!S~?üP´hÑ"½ôÒKýÊ{ýõ×5þ|eeeUº¦2M4q|©O?ýÔå¾@Uj»Þ\ÕByÔEm×+®j§<êþƬzsõ+ñéW¥
P¯^=5J.÷ Ѹqã*ì¨ÅÅÅÉn·+..Nùùù"_¸p¡¢=ôÐCJOOw» @õë×wÜ:uª®;ï¼Ói¿ë®»NÔ¨Q#:uJ¡1cƨAÊÊÊrlÿöÛo+®¸BaaaÞñÄOhÒ¤IsÙÛ(úõë§yóæ9¶×¯__?üðác T¥6ëÍU-G½!Ôf½¹âªv~½ucF½¹zø|ãh·ÛuæÌ¥§§kèС.÷¹pá>¬8¶Ûl65lØP7nÍfÓÆÕ¨Q#-X°@4tèPeffêìÙ³Z±b
+æ4vÃ
+U\\츦 &8½W<44T'O$åçç+44T4`Àû_ IDAT =zTgÎÑ]wÝ¥nºÉ±>}têÔ)½ôÒK5jc7*11±Ò·½rå¸ú%IÅÅźöÚkÝxD×j³Þ\ÕByÔImÖ+®j§<êþÈzsõ+ñéÆ111ÑQ$AAA:}útµ·Ûí?~¼rrr´k×.9Rv»]cÇt±ð¤_²ìvy]»vÕÁ·KKK+¼g½ìÿ}úôQjjªÎ=«ÔÔTÅÅÅUXÇþýû¤Ñ£GKúöí[aîòVîÒ¥6nܨÉ'»¼*&ÉñØHÒ¡CÔ¥KwÀIm×[Ù>¿®
ò¨7
+oÔ[ej§ucV½¹zøÌgý§ìv»¢¢¢üü|EEEiåÊÕwË-JIIÑ'|¢
+V¸¯ìåýcÇ©Y³fND¤Á+77·Êb3gâããuõÕW«K.ZµjU
óºá4zôhM<Y4wî\=øàúÝï~§fÍéµ×^«0^Û¶m«¾}ûêÇÔ)SÆ?¾cÿ
+2¤:
+õæªÊ£Þà̬·ò_ÛívµSu_f¥zsµ½<ê
+V⣫÷'$$(!!¡FÇÉËË$ÅÅÅ9]Y4h
+dxü< ~¸Ê¹o¾ùfmÙ²ÅíõÝxãÊÉÉ1Ü?<<\_~ùecIWù· ®Uoî|z¿±Z½¹ªò¨Cø*«ÕÿîÁ×øDãhe]vY¥WdÆÖT
zÌGÞC½ÁJ|ú3 ÚGã 0Dã 0Dã 0Dã 0Dã 0Dã 0dÚßqÌËËÓ¬Y³ÌðºÜÜ\
27õ@C½ÞC½Þcf½Ò8FGG«¨¨H_ýµÓ¦S·nݼ>/õ@D½ÞC½ÞcV½I&5Ý»wW÷îÝÍ8Ôà=Ôà=Ôà]|Æ `Æ `Æ `Æ `Æ `Æ `Æ `È¿ã¸{÷nmÛ¶Í©Nªü#¡äá=îäáiäë=ÔµPoþz³êÍ¿QoÖbF½I&5Û¶mÓǬ^½z1}ÀÈËËSQQQßXäáîæáiäëÔµPoþz³êÍ¿QoÖbV½I&5«ääd³¦))):zô¨[ûGí«NF¾µz³êÍ¿QoÖB½ù7êÍZ̬7>ã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0DãXKJJJïõyãããURRâõy<üùZyø7òµòðoäk-O46Íåö²ÿµÙl
+Vdd¤Þ}÷]§}F¡={öèüùóêÑ£GãjÆjÚ´©*õêÕêܹ³ÛÇÌ1£Â¶ò_ïÛ·OzåW*¬+((HÍ5ÓòåËûvêÔI«W¯vùxxÕò(¿Ýf³©Q£FNcúsfµ|×®]«VZ©N:jÙ²¥Ö®]ë4¦?çkµ<>øàEDD($$D½{÷Ö'Æôç<<ͬ|׬Y£¶mÛªnݺVvv¶$éøñãêÙ³§BBBÔ³gO?~ÜiLÎ×jy¸3¯?çáiVË×Õöòü9_«å±jÕ*µiÓ&`ópO4®ØívÙív·ö;wîæÎ«#G:Ý_ZZª mݺU]»vrüäädZµJ6lÐ
*Ý'33S±±±n³cÇ-\¸°ÒµoÚ´I÷ß¿/^¬Ç{¬ÂÚJJJ´dÉ=þøãí±±±ÊÌÌ4~@jYym·ÛíÚ²e}ôQ§}1O3+ßÍ?_?ýôÒÒÒ4bħ}1_³ò>|¸RSSUTT¤'*))Éi@ÌÃÓj;ß5kÖhÕªU***ÒØ±c5dÈIÒ¤I£ÂÂBÅÄÄo¹5;óbfV¾®¶ùÇúõëµaÃjÚ´i<x°ÓGy>Ý8VWppp
Û©©©²ÙlZºt©¢¢¢Ô«W/¥¥¥^á¤Eiîܹj×®Ë}·oß®ÈÈÈ*9{ö¬´bÅ
+§1^ýuM<YYYYêÕ«Ëõ4iÒÄñudd¤>ýôSÃõ[
§ò(ï
^¨PheÈÃû<oóæÍ%ýr.,,Ìiò§ò(--ôK~ø¡Ó>äá}ÕÍwõêÕj×®êÕ«§¾}ûêÊ+¯$egg+11QõêÕSbb¢²²²æ"ߪy*w÷y*_wr'ߪy*eË©yóæ
+
+
+Rpp°6mê4W ç£ÍfSHHƧÇöÄÄD(..Nv»]qqqÊÏϯò*Ç·ß~«ììl]qÅ
+«ôåñÕ¯_¿Êc¦NªáÃëÎ;ïtã'ФI*}¢\öò|¿~ý4oÞ<Çöúõëë~¨ò11§ó(³yóf5lØP7ÜpÓ}äá=ÎwáÂ
2dBBBôÐC)==ÝiòuÍÓydddhÌ1jÐ ²²²têÔ)§}ÈÃ{.5ßï¾ûNTZZ¤Ù]wÝu¤Fo5y:w÷ÔV¾F¹¯kµÍfS½zõ4jÔ¨
+c ô<¢q´Ûíºpá>¬8¶Ûl65lØP7nÍfÓÆÕ¨Q#-X°Àp¼ÐÐPõéÓG§NÒK/½¤Q£F9íÓ°aCWyLZZ&Là¸JQþjÅÆXéKÓv»]¥¥¥ÊÊÊÒøñãÛuíµ×ºùÈÃÓy>}z
Ç¢<òðOç;tèPeffêìÙ³Z±b
+æ´ùºæé< £GêÌ3ºë®»tÓM79íCÞs)ùnß¾]=zôPbb¢î»ï>I³:yò¤$)??_¡¡¡Ns¯kÎÃäá=µoU¹¯kµÝn×3g®¡C:ÍèyDãèÝn×øñã£]»viäȲÛí;v¬áq}ûö¤J¿ÊtíÚU¬òÒÒÒ
+ïå.5¤K.Ú¸q£&O\éU2eÿÈKÒ¡CÔ¥KÃõ[UMó¤?þX%%%êСC¥÷ùjo~~¾¤_2*»]ùVߥÔÝn×þýû¤Ñ£G;ÝOæ«*ßE©ÿþÊÈÈÐÃ?ì8®O>JMMÕÙ³gª¸¸8§±É·új;ÈÃ|5Í×ÜÉ·újGbb¢ã1
+
+ÒéÓ§Æô<ê½ wýº9³Ûíþ"wßÖXfË-JIIÑ'|¢
+º³üøsçÎÕ>¨ßýîwjÖ¬^{í5§q¬ÜÜ\GÈîS¶mÛ*77W}ûöÕ?þ¨)S¦TXÏ
+7Ü ùóç;öÏÉÉ©ôÃÕf¥<¤¯6&&&º×ßóð4+å[öÖÈcÇ©Y³f~ÐÜßóµRåÑ£GkòäÉNãú{fF¾<ò$éî»ïvl;}ú´æÌ£øøx]}õÕêÒ¥VZå4®¿çk¥<®ºêª*çõ÷<<ÍJùºÚ^þþ¯òRtt´òóó¥+W:ëïyTÅ'GWß,îþÆ%#yyy¤¸¸8§+«®½ñÆc8î<Pá*;ǯü×áááúòË/«\tñ78¹z»¦§X-Iúè£Çõç<<Íjù4H
+2×óµZîÌëÏyxÕò_¿¾¶lÙb8®?çkµ<¨7Ï"_kåkµ<`8®?çáh}Ñe]VéÚÚfƾ<üùZyø7òµòðoäk-G@Æ P5G !G !G !G !G !G !Óþc^^fÍeÖô!77WaaaníKµ¯:yxùÖ>êÍZ¨7ÿF½Yõæß¨7k1³ÞLi£££UTT¤¯¿þÚéFXXºuëVå~äáîæáiäëÔµPoþz³êÍ¿QoÖbV½I&5Ý»wW÷îÝÍ ÿF¾ÖBþ|
<üùZyø?>ã 0Dã 0Dã 0Dã 0Dã 0Dã 0Dã 0dÊßqܽ{·¶mÛfÆÔ§CUþPòðwòð4òõêÍZ¨7ÿF½Yõæß¨7k1£Þ$ÇmÛ¶éý÷ßWûöíÍ>`ìß¿_EEEU~cw¸§¯wPoÖB½ù7êÍZ¨7ÿF½YYõ&Ô8JRûöí5jÔ(³¦nïKµ¯:yxùÖ>êÍZ¨7ÿF½Yõæß¨7k1³Þø# À# À# À# À# À# À# À# À# À# À# ÀP³à»Ý®µk×êÝwßÕwß}§Æ
ëáÖo~óÏÕ»woIÍfSÓ¦M5zôhÝqÇö3g æÍ+11Q,¨p¬$mÚ´©Âú-[¦÷ß_²Ûíî÷5¾GùítõÕWëwÞñøÚ}¯çûÉ'(##Cß}÷4i¢G}T111_»·øzÛ¶mÓtâÄ µk×NO=õBCC=¾v_å+ùæææjéÒ¥:~ü¸7o®G}T:uR~~¾}öYýóÿT6môôÓO«Q£F_»·øz®êùz¾®¶û*_Ïã£>ÒÒ¥KõïÿÛ/òpO4k֬ѦMôÔSO©Eúþûïµ|ùòZùÆ.þ°½pá¶mÛ¦9sæ8}cÙívÙl6íß¿_mÚ´©päܬX±B}ôfϰ°0Ùl¶ZY··øzåÿ1Ý¿¿òòòjeݾÊ×ó={¶zê)uèÐA;wîÔÌ3}ºqôõ<fÍ¥É'«S§NÚ¹s§ÒÓÓõ?ü¡VÖî|%ß=ýôÓjÚ´©²²²ôüóÏëí·ßVzzºn»í6Í;W¯¿þºÒÓÓõ§?ý©VÖî
+¾«:ÄE¾¯«í¾Ê×óÈËËÓìÙ³Õ AmݺUÏ=÷ß¿áã;ï¼£ç^ááá¤o¼Q'OvÜðàAÍ=[GUóæÍ5eÊEDD¨wïÞúÝï~§uëÖéoû=ª9sæèàÁºþúë5yòdµk×Îå¼AAßÉûÖ[oé¥^$}øáík×®5¼²·~ýz7N-Z´¨Ñù[¯çQÞòåË5qâD·Ï=øz¾M4$Ç믿¾µøzv»]Ò/y|úé§Õ|ü¯ä;}útǶÎ;kùòå¤;wjÉ%ª[·®~ÿûß+!!áÒùz0æëùú[î¾GÙEÐóçÏ+((ȧßmá.øãÉ'Õ¼ys÷Ï=[÷Þ{¯Ö[§{ï½W³fÍrÜ׺ukÇ7AJJú÷ï¯õë×kìØ±3gN¥ãõîÝ[wÝu,X &8¶8Pï¾û®:vì¨M6©cÇzçwªlRN<©;wê{îÑ!C´yóæê¾åøze>ÿüs]uÕUºöÚkÝÚ?Pøz¾'NÔsÏ=§»îºK/¼ðÆ_Ó·_Ïc JMMUÿþýµsçN>}º:§ï÷|-ßM>]O<ñ$©¨¨H
+4$]sÍ5>¯¯çcþ¯¿äî
yôîÝ[wß}·æÍWaLå¯8^wÝuúæo\¾bwôèQõë×O!!!ºç{ôòË/;îs\Y8|ø°fÍåøÆsõQWOÊ¿õ£ìëûï¿_O>ù¤î¿ÿ~ë¿êª«Ô©S'=òÈ#Ú¹s§fÏíôò¸/ñõ<Ê,]ºT£G®r¿@ãëù&''Wx«jrr²-[fpÆÖæëyÄÄÄ8Þ*¼mÛ6¿pæi¾ï?ÿùO=ûì³>|¸n¿ývIÿ}ûñǪÂÂB]uÕUÕ9}Ëñõ<`Ìòõ§Üý!M6éܹsÚºu«õÆo¸{ú>É'Çûï¿_³gÏÖ ®'Nhùòå³5k¦¿ýíoºë®»ô׿þµÂÕàà`Ç×ZµÒý÷ß¯ØØX
T{6mÒË/¿¬;î¸CW\q
Þ{ï=·ÞæXöAY_ÿlc_ÏCöîÝ«.(""¢Úóú;_Ï·°°PÒ/õVvÛWùzÒÅ·«~óÍ7JOOWÿþý«=·?ó|ׯ_¯W_}UÓ¦MSçÎÛ;uê¤7ß|Sÿýßÿ7ß|S;v¬ÉÃ`¾ùz¾þ»¯çñÒK/é¡Òå_.ͦ3gÎÔäað)>Ñ84HÁÁÁzöÙguâÄ 5iÒD?ü°ãþ¤¤$Í3GiiijÞ¼y
÷G÷Ç?þQ©©©úóÿ¬ÿüç?ªÿ[ÇöíÛ§GyD{÷îuº²ZÙM6é±ÇÓóÏ?¯§~Z7Ö)Sª5§ÕøzÒÅWX¹
¯ç[öÖÈï¿ÿ^M4ñùϰúze__{íµúío«ÁWkNç+ùÎ7O*Ì¿~ýz=ZÏ>û¬~ûÛߪuëÖzúé§«5§Õøz÷Þ{¯ãö¯ÿÝïçëjûå_^¹Â×óרQ£TXX¨-[ê©§ªÖ¾È6uêT{rr²áN))):ü¯-7-Þp¿Wç¯Ó¹PÁIOO×±cÇ4jÔ¨j/îËÌÌTpp0yXDuòøáçÔ¡Þ¬
zóoÔµPoþz³Ú¨·ËK[È~Ð'~9 À<4 C4 C4 C4 C4 C4 C4 CuÌ^ýû÷kÏ=f/Ãn½õVµoßÞ«skfäáiäëõf-Ô£Þ¬
zóoÔµX½Þ,Ý8îÙ³G}özõêeöR,%//OÅÅÅ^ÿÆ"Ê
§oå¨7k¡Þüõf-Ô£Þ¬ÅêÍÒ£$ÅÆÆ*99ÙìeXJJJöîÝkÊÜäáÌÌ<<|QoÖB½ù7êÍZ¨7ÿF½Y/Ôq ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ¢q ò«ÆÑf³Éf³)88Xz÷Ýw+ÜWÙþÕ§Ì#´gÏ?^=zôpl_µjÚ´i£ºuë*::ZÙÙÙ¤5kÖ¨mÛ¶NÛýó(3cÆóÂó---Õ3Ô´iSDÆVÎcíÚµjÕªêÔ©£-[jíÚµzºÇ
+ùùõÏÍãÇ«gÏ
+ QÏ=uüøñ¢O±rø|ÃÓ¬oUÛýó´ç~Õ8JÝn×¹sç4wî\9²ÖÆ)--UPP¶nݪ®]»:¶¯_¿^6lPaa¡¦M¦ÁKºø|ÕªU***ÒØ±c5dȯÍX5IÚ±c.\Xã5Áºù&''kÕªUÚ°a.\¸ »Ý^ãµù«æ ùóçë§~RZZFQãµ2³ó*ÿ¹9iÒ$ÅÄĨ°°P111JJJªñÚ|UóÔçfÕ|¶û3«æhÏ7ü®q,\+㤦¦Êf³iéÒ¥R¯^½æ¸Â°lÙ25oÞ\AAA
+VÓ¦M%I«W¯V»víT¯^=õíÛWW^y¥GÖç+¬ÇÙ³g +Vxd]Îjù.Z´HsçÎU»víüþê_e¬GóæÍ%ýr8,,Ì#ëTfåëêçfvv¶U¯^=%&&*++Ë#ëóVË#ÐoxÕò
+ôç/VË#Ðoø]ãh³Ù¢qãÆ)##Ããã$&&ª @qqq²ÛíS~~~
+6MõêÕÓ¨Q£ÖðÝwßiàÀJKK«ñÚ|Uó:uª®;ï¼³æ'Ëæûí·ß*;;[W\q
ÂÂÂ*};?²j.Ô!C¢zHééé5?É fv¾®~nèºë®$5jÔH§NªñÚ|Uó(hÏ7<ͪùêó«æhÏ7ê½ OsõqHHU¿~}IRqq±êÕ«WíqÊ_M(ûºQ£F?¾Æë8öçÖºuë4tèP:tH´}ûvÅÇÇë¹çÓ}÷ÝWýóAVÍ#--Mv»]&Lpëïo/¨
+VÍ744T}úôQJJ²³³5|øpý×ýWÎÑX5¡C*33S½{÷Vvv¶
+¦/¾ø¢FçÈÌÎ×ÕÏÍÐÐP<yRM4Q~~¾BCCkt~¾ÆªyHù|ÃÓ¬o >±jö|Ãï^qt¥gÏ9s¦U\\¬3g*&&¦ÚãØív?^999ÚµkF)»ÝîxÒ¨'OJtúôiI_Êîß¿¿222ôðÃ{îÄ|ÙyÊn·;~Â]o2;ß¾}ûJúå ¼}ÄÙyäççKú%²Ûðoåëêçf>}ª³gÏ*55Uqqq;9dv<ߨ]fçËóÌÎ#ÐoLã¸xñbíܹS7VãÆµk×.-^¼¸FcmÙ²E=zôPAA6lXᾨ¨(EGG«A5kV®\)IzäGôý÷ßëî»ïvüV§âââK>/_ev¨]fç;wî\Í3Gõë×׸qãôÚk¯]ò9ù2³óÈÈÈÐ1ctÅWè'¸_êPÛ¼¯+sæÌQnn®®¾új}üñÇ;wnæöfçÁóÚev¾¨Èì<íù_½UÕèªKXX6lØpÉãHR^^$)..ÎéÊjBBª=¦?²rÕ³r¾7Þx£rrrÜß_X9AiÐ AnÍÊY!_WãÜ|óÍÚ²e[óû+çÁ¿i
ÎÊùVg|aå<íùFÀ¼â ¨G !G !G !G !G !G !G ¡:f/ÀÈ÷߯7jÏ=f/ÅR¾üòKÝ|óÍ^<*gVF¾£Þ¬
zóoÔµPoþz³_¨7K7%%%jܸ±¢¢¢Ì^¥9sF.\ðú¼äQ9³òð4òõf-Ô£Þ¬
zóoÔµøB½Yºq¼ñÆuÛm·)99Ùì¥XJJJöîÝëõyÉ£rfåáiä[9êÍZ¨7ÿF½Yõæß¨7kñ
zã3 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C~Õ8Úl6Ùl6+22Rï¾ûn
û*Û¿ºã1böìÙ£óçÏ«Gí«VR6mT·n]EGG+;;Ûp»?³recýêó¥|5jt©§kyVÎã>PDDBBBÔ»wo8qâRO7àX!ß23f̨0~ þ,µrø|ÃÓ¬o >ñ¥<üýù_5d·ÛuîÜ9Í;W#G¬µqJKK¤[·ªk×®íëׯ×
+TXX¨iÓ¦iðàÁÛýUó(³ì?ÔUó-í-[ôè£Öxm¾Äªy>\©©©***ÒÄTãµ2³ó¤;vháÂ
NãâÏQ«æ¨Ï7<ͪùhugÕ<íùß5ekeÔÔTÙl6-]ºTQQQêÕ«ÒÒÒW-[¦æÍ+((HÁÁÁjÚ´©áö@aµ<$ék®QýúõõÛßþVGõÈúó-óÂ/èñÇ÷Èú|
Õò(--ôËUà?üÐ#ëTfå{öìY%$$hÅß_X-@¾áiVËW
+ìç/VÌ£L <ßð»ÆÑf³)$$DãÆSFFÇÇILLTAAâââd·Û§üüü
+W}l6êÕ«§Q£FU8ÖÕvfÕ<ìv»
+uäÈÝzë2dHÍO2Y5ß27oVÃ
+uÃ
+7Ôxm¾ÄªydddhÌ1jÐ ²²²têÔ©d 3;ß©S§jøðáºóÎ;/ù\üóÄçfÕ|õùUó((Ï7ê½ Osõ²}HHU¿~}IRqq±êÕ«Wíq~ý¾fIjÔ¨æÏ¯±cÇ:ýùçµnò;l IDATÝ:
+:T2ÜîϬ$5nÜXÏ<󮹿ê$Y?ßéÓ§kÎ9Õ;)fÕ< HºøyÇÊ>WªoZZìv»&LàØ'Þ*÷kVÎ#oxóïùÕóç~÷£+={öÔÌ3U\\¬ââbÍ9S111ÕÇn·küøñÊÉÉÑ®]»4räHÙívǦÄÄD<yR¤Ó§OnTfçQæÇÔÌ3}é'+äûñÇ«¤¤D:tðÌIù0+äa·Ûµÿ~%%%iôèÑ91Hò^¾¥¥¥>WÈM£³óàùFí2;ß2<¹È
+yÒói/^¬;wªqãÆjܸ±víÚ¥Å×h¬-[¶¨G*((PÃ
++Ü¥èèh5hÐ@³fÍÒÊ+
+·*³ó(ûíW7Üp¶nÝÊgv<Ìì|¥Wÿ/é<ü
ÙyØl6©O>zà4yòäK>'üÂ[ùºRþ·;ÒoztÅì<x¾Q»ÌÎç/XÏ7üêªFW?ôaÃKGòòò$Iqqq«p_BBqµÝY9®_:+ç+I}ô[óû+çA½]:+äëj@Ì×Êyâó
+O³r¾Ô[Efç!ÖóyÅ P34 C4 C4 C4 C4 C4 C4 CuÌ^@Uòòò4kÖ,³a)¹¹¹
+
+
+5enòpffF¾Î¨7k¡Þüõf-Ô£Þ¬ÅêÍÒã-·Ü¢ââbíÙ³Çì¥XJhh¨Ú·oïõyÉ£rfåáiä[9êÍZ¨7ÿF½Yõæß¨7kñ
z³tãèèh³ÿCþ|
<üùZyø7òµòð]|Æ `Æ `Æ `Æ `Æ `Æ `Æ `È´¿ãxàÀeff5}@سg:vìèÖ¾äQûª§oí£Þ¬
zóoÔµPoþz³3ëÍÆ1::ZEEEfLP:vì¨nݺU¹yx»yxùzõf-Ô£Þ¬
zóoÔµUoIc÷îÝÕ½{w3¦F%Èÿ¯µ#_k!ÿF¾ÖBþÏ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 yüï8þãÿPzzº§Æ¶mÛÔ*êj·ö¥ÞKC½ÞC½ÞSzsGǨNtºèòÏðä°@@iyÛÕêÜã*÷£ÞKG½ÞC½Þãn½UGÇ.·ß¢.·{v *G½ÞC½ÞC½ÖÄg h h h h h h Üþ;{wÖëjs- /Ù±õbºµpk_·ÇîÝ»ëÇJ.i] èÙ5L½zõrk_·ÇØØXÅÆÆ^Ê >Ï8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 ¹õwóòò[Ûk xQ÷îÝÕ«W¯*÷s«qÌÉÉQ毪s[.ya óíÝyX?þø£çGIêrû-7-þ °Wç¯JÝÛÏ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 Ñ8 ¹ýwݱwçaíØzÀC ª)ªS+uîqÇÆóhãøéÚü×êÙ' ¸éÓÝ»uºèuGIêÙ½¦Oìéa nH}%]ßþìÙwòG !G !G !G !G !G !G !G
!G !G !GmnöJ.\PÂØ'L;aì*¹pÁ¹ ÔSÇÐáúËo:m«ìkW÷¿½~}
û,Zìt\vNB[ëë5mm®ÐẶe+u¾³·>ÈÊrÚç)Sôù:_R¢¾:¶¯}ÿ}uë£Æéw¯r6ov:ö÷×+:ê¶*)[ǯϷ´´T~ùµùj©®}újåÚµNëoÞRín¿C«ßyÇq_ûÛÚé÷+æ À÷þãʵoëØñã5>>céRÙívIÒùzûm§}½ñúÿæn-~c¹Çç¯S_Ñ_è¹?NÓS¦:Ý_ZjWPP>ݵKÚ·wlÿÛ¦ôÖ²×õÍg{5áñ1ñÄNǾùÞ{êÙ½{ÇúêN}uÄéøÔWÒõá¦Zùêb?°_Y´P¹·8?ÿð!-3[zÚ±½g÷îzó½÷ªÿ °4ÓÇ9ÏÌÐø?þI¥¥¥5:¾}Ûvúkv¶$iÍ;ï¨ï±î?zì¾=þ/-Y°@ÿú÷¿õõ7߸=ÿ?>û\=ïé§ëZE¨ç=ý´wß>IÒüCïìom«gfÍvìððaÝ5ð÷j©.½ã´mÇNõW¸ýÊ%WAïøÍ=º7~°2.u¼*þ¿ótsÓ¦²)8(X74iâ4æ®={ÔªEÇmw)ﵿüEfÍÒ-º¬NµjÑB¯ÌërÿÆ9¾nÕ¢
vïÝk8> ßczãØ:"B½cbôò«Kjtüÿoïî㢪óÿÿ?\!£3MÝ1ÉUñZKo¨m¦«kh©» æVh^}Z5KPñ»ÙâÅ~Ýj[³O®hXßMmµ´O¥lîÖþ* É4óû£/ÌaaÎÇývës®Þï3O_0¯3gàwIIú?«aúÓúç5yÂõë7mÖìGQÐPÍþ¨ÖoÚìñøÏcuúØQM¨fÍ$M÷{=¬S©åM?4b>6KI÷Ó¿ Ô?<¡GæÎvÎí¢Õ"æVÍ{rþ¸dÉû''ëÿxOo¿MgÿY ·ß¦SG»¼3Ù.Z7ÝÚQÓÿ{e,yºÊ±Ï;§k5ª2Ù>}ñårîWÝí¬·ÚÞûÛ$=õ_;_{íµ*:{Öôø üå£$=¤¼wÞÑÿ~üËò°
+õÍ
ÎÇß\¸ °°0mÚµm£Z´ÐìÔ!:ZnºÉ¹îÒ¥KÚ´m¦ÈvÑJzx6mÛ¦K.y4þÇ'Ojbb¢5j¤ñcÆè£O>q.¿Ì¯uÍ5×h½÷:·?vü¸5[7ÝÚQcuòÿ¬ö|Ïþ³@_:©#yyñ;Ë#ÛE«]\7í}g"ÛEkï;ûÔ¾{}á}ÿ¿Oèÿ<ý¦ÎYåØM¸<gìSYæÍõé¿ÿíܯºÛYÏþ³@E§ôʦ5ñbçòo¾ùFM##M ÀÿØ¢qt8úãÓOé±'pYÞ·WOXµJß\¸ o.\ÐU«t[¯^Uöxò$ýùÅMúÛߺ,iûvuïÚÕÙ ýgzÄÅé¥íÛ=¿CûöÊ~é%}ûí·Ú´mníÐAsË-Ê~é%]¼xQÿýÛÿ¼S'=¾\ÿ9qÜÙ\ÕÆÙè¡IÉzmK¶ö¾¶]uö2q¢$é÷O.VaQ$)$$D¥ß|SåÝ»vuiX=Ù§² ÷jæãëÔ§êÊ+*8}Útû¯_úôSuõìd ø
+[4tsëֺ̯]e¦¥éèûè=uK:öÁqe.M«²o¿^½töêÓ³Ëòu/¼¨þ_ÓUáõçj~INuã¯\¶Tk_xQm~«Ù[ôì²ï?ÏøLZªVû³¢»÷ÐgÿùsûµÏ(çWÔ®[÷joñôÄÁÃGÔ«{w=W¬È&M\ÖuîØQݶ±]õ̲ôçUö=bÞ9p Æ}*ϯò׳¦MSß½4bÜ}ºéÖºoÊZ÷Ì3.cTüVÕINײEËÿo~¾~}Ï=µ>g öæ7ojºQZZNþg¦ÏO4ÝîÏ+·Ëq6RæÌñæQËÊ45eÖ?»Òçc'O{DkÉPÐÐ7 P/2þ¥Ï¾ýУþíòvò¤làÍ Âz?iÐÀ¦Qeã ¨_¶¹U `O4 S4 S4 S4 S4 S4 S^ÿ;Þû2²²¼}X þï½Þ«ÇôjãÛã/¹ ó¡7 ðPÛ_¯ý~æÕczµqìuÛÏÔë6ïN `->ã 0Eã 0Eã 0Eã 0Eã
0Eã 0Eã 0åÕ¿ãxìðIÚÿ¡7 ¥Ø·ÔøG[©7À;¨7Àw¨7Àw<©·Úðjãøî¾õÖÿ|¬>}úxó°@Pyï½÷t¾äB
N½uG½¾C½¾ãi½ÕWGIêÓ§æÌãíÃA#++K_ëÙVê
+¨ê
+ðê
+ðÚÔ§ø# À# À# À# À# À# À# À# À# À# ÀT at 4ÑÑÑVOÔà;Ôà;Ô`ÎÒÆqïÞ½ºë®»£ýío«÷1;)DGG+::Z·Ür
+¤]»vUÙfîܹúðÃUVV¦Ñ£GWÙ÷ÇÇýõ×uçw*&&Fwß}·ÞyçïPÁPo¯½öL½ÁrÁPoyæ^pÃRÁPoSo°¥ãÌ35eʽÿþûZ¿~½öìÙcåt$Iúè£4þ|Í7¯ÊzÃ0¢#G¨k×®.ûTÙþõ×_×Ê+õþûïkâÄzôÑGëuþ;ÁPoo¾ù¦6nܨcÇé¡¢Þ``¨7Izÿý÷]os<,õV±ÎÝz ¾YÚ86iÒDgÎÑñãÇuã7*##ùî>аaÃÔ¡C
+6LÇ$?~\#FPª\qyçwÔ»womݺU'OÔ¯ýkçÕ§Ã;·÷äjMhh¨Ëãõë×+::ZùË_t×]wiìØ±Ú°aCÇyöÙg£°°0õïß_5òøù¼)êmÅjݺµBBBª-Zxüü ÞõvéÒ%Í3Güã=~^úõ&I±±±êÒ¥&M¤Ï?ÿÜ£çð&KÇuëÖé³Ï>ÓO>©~ýúéå_v®={¶uôèQ%&&jöìÙÎå£FÒñãÇ]®¸¼òÊ+Z°`þyÝ{ï½5kƧ>ø@O<ñæÎëÜÞìjMtt´n½õV-Z´HK,q.ONNÖ{ï½§Ûn»Mºí¶Ûtøða¯ú9sF>ø ,XPëç ð`©·èèhuìØQ¿ÿýïõôÓO_ÕsÔU0ÔÛ²eË4fÌõë×ïª'À¡Þ
+
+
+tìØ1íÝ»W:tÐôéÓ¯úù®V+o×®/^,Iúøã5nÜ85JtòäI%&&*<<\cÆÑSO=%IúäO4vìX5lØÐåXsçÎÕ5kÔ¹sgIß_I={¶óÃáðhNfß ~üu=´páBM8ÑôGÕ#<¢3gjðàÁÍð¶`©·]¼xQ»wïÖÌ3õæoz4À¡Þ6lØ Ã0óæ:X"êÂ
+7Ü ÅÆÆz4À,}ÇqÆúôÓOõÝwßé£>Ryy¹s]ûöíõÒK/éÛo¿Õ¶mÛÔ¡CIRLL¶lÙ¢ï¾ûÎåXk×®ÕìÙ³µsçNIR§N´|ùrç¤S§NI4h ¯¾úªÖs-((Prr²²³³µ}ûv%&&ª Æ"ß²e&O¬§~Z#G¬õ¸·C½-^¼XEEE¤}óÍ7µð`¨·S§N¹¼ãBÓ«C½U())ÑsÏ=§N:Õzl ®,m
+¤I&©sçÎÊÈÈPjjªsÝÒ¥Kõâ/*66V[¶lѲeËË·mÛ¦ýìg.Wm¨7jÑ¢EzþùçõÌ3ÏèW^Q÷îÝ]îA¿ï¾ûU¿êÈ#êÞ½»Õ¤IuǨüõüùóõõ×_ë7¿ùsù
j=6PWÁPo;vÔÝwß®]»*++Kµð`¨7À.¡Þ*¾îÓ§9âò9NÀWóæÍ3*XuÒÒÒtò?û4}~¢év^¹]"5gÎoÎ*YYYúúÛ©7À¨7Àw¨7ÀwjSo×·'ý ¥ï8 ìÆ `Æ `Æ `Æ `Æ `Æ `Æ `ª¾÷Þ{:pàCêÖúôéãÓ1©7+ê
+ðê
+ð+êM²¨q<pàÞzë-
+8ÐáKäç竤¤Äç
N½!QoïPoïXUoE£$ÅÇÇ+55ÕªáKKKÓéÓ§-zC°¡Þ ß¡Þ ß±²Þø# À# À# À# À# À# À# À# À# À# Àc=)++Sbb¢eã'&&ª¬¬Ì²ñ_¢Þ ß¡Þ ß¡Þ`'~Ñ8:joÛ¶M;wVÃ
+§ÜÜÜj÷u8
+
+
+ULL^}õÕ*ÛL4IGÕåËÕ¯_¿*ûþx|OÆÝºu«zöìé|£;VÙÇݱ¶nÝêrÌ+V¸Ì¥bn!!!jÓ¦6mÚä\×£G*û°[½¹«Ê¨7ø+»Õ[
º]G½Á_ÙÞ*/§Þàü¢qtgÛ¶mÊÉÉQII¦M¦qãÆU»aºtéÒÓÓ5yòä*ëËËË¢ýû÷«wïÞ.ûqUãfgg+>>ÞùxÇÚ¹s§5þ|;¶Æceff:Ç¿|ù²^|ñÅjϬ¬Lëׯ×Ã?ì\¯ìììjàjXUoîj§2ê
+ƪz¤CiÍ5nçF½!ÐXYoëܧÞ`'~Ý8nݺU]ºtQxx¸¢k¯½ÖtûÐÐPÇr8Ú°abcc5pà@effº½êSq<¨çã^xAmÛ¶UHHBCCÕºuëÕ½{wýío$mÞ¼YÃ
+3W-_ÇÄÄèÝwß5ݨ
+«êÍ]íTF½!ÐXUo/^Trr²6oÞìvê
+ƪz¤Æ+""BÃ×éÓ§«¬§Þ`'~Ý8Vøâ/4zôheffV»Þáp(,,LÓ§O×êÕ«ËSRRTTT¤¡º½êSqQeááá2eË<ÜkúôéZ²dÃPFFzè¡jÏ-44TÃ
+Ó+Ë#""ôõ×_{t@mXQofµ#Qo\¾®·yóæ)))IwÜqÛm¨7*_×a*..VAA:uêTí;ÔìÄïǪ_¿~JIIÑ=÷ÜSí6aèÊ+:yò¤Få\îp8Ô´iSíÞ½[C»wïV³fÍôì³ÏÖyܦMª´´´Ê<.\¸ ¬¬,M0¡Æcµoß^ZµÒ´iÓtë·ê§?ýiµçV^^®]»viÆÎ奥¥ºáj< 6¬ª7wµSzC ²¢Þ2335sæLç;%Õ½cB½!YõóM7o®EéСCUÖQo°¿n×®]«#FhõêÕ?~|÷7C3fÌP^^9¢É'Ë0M6ÎãöîÝ[ü±óqJJÎ9#I
+ Ñùóç=:ÖÌ3õÜsÏéÑGñ|*/I|òzõêUã>§¬ª7wµSõ@cU½»|ÞªºwL¨7«ê¹sç´dÉÅÅÅUYG½ÁNX=Oýøª§azà$IwÞy§sùùó竼¥ofß¾}JKKÓÛo¿¦Mº³âkOÇ;v¬öîÝë,¶ØØXÅÅÅ©°°P±±±Ú²e$¹=V
ÞêP1¯-[jåÊÎåyyyn?Ü
+ÔÄNõæ®v*£ÞàÏìTo ÞàÏìTo_ëöÛo¯ö³ÅÔìÄ/G³ßDuµûVÈÏÏ$%$$(!!ÁkãÞ{ï½.W|ìñ±<Yn6C¹Üj xÊnõæ®v*£Þà¯ìVolC½Á_ÙÞx= ã£?úÉO~¢ËÆ·rlÀר7Àw¨7Àw¨7Ø_Æ Pÿh ¦h ¦h ¦h ¦h ¦h ¦,û;ùùùZºt©UÃ>·wï^EEEY26õ`C½¾C½¾ce½YÒ8ÆÅÅ©¤¤D~ú©ÃR>}|>.õ`D½¾C½¾cU½I5}ûöUß¾}:Ôà;Ôà;Ôà[|Æ `Æ `Æ `Æ `Æ `Æ `Æ `Ê¿ãøÞ{ïéÀV
+Xª[·n>ÿ£Ôõøõøõ&YÔ88p at o½õhÅð%òóóURRâóB§Þ¨7Àw¨7Àw¬ª7É¢ÆQâããjÕðÏ¥¥¥éôéÓM½!ØPoïPoïXYo|Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Æ `Ʊ)11ÑêiÔ(11QeeeVO¨ê
+ðê
+ðê
+vâ£Ãá¨vyNN:vì¨
+*..N¹¹¹Õîëp8ª½úê«U¶4i=ªË/«_¿~UöýñøÛ¶mSçÎMÇݺu«zöìYeùÂ
]÷ùç«ÿþ
+SÿþýõùçK^ýuuèÐAaaa4h¾üòKIRyy¹.\¨Ö[+$$Äy¬ÊÇ<~ü¸:tè ?ýéO.ç¢6mÚhÓ¦MÎm{ôè¡[·Vóì"XÙÞ<z¿²[½UøqíTF½Á_ÙÞ*/§Þàü¢qtgÇÚ¹s§5þ|;¶ÚíÃÐ¥K®É'WY_^^®íß¿_½{÷vÙÏ0*ÛoÛ¶M999*))Ñ´iÓ4nܸ*Ûdgg+>>ÞeÙ¡C´fÍe³fÍÒT\\¬höìÙ¤¤¤$edd¨¤¤D=ösyjjªrrr´sçN]¹r¥ÊüöìÙ£#GjݺuzðÁ]Î¥¬¬Lëׯ×Ã?ì\¯ìììj7 2«êÍq©7«êMª¾v*£Þh¬¬·uîÖSo°VO .^xáIÒ¥KªÖ[nêò8##C3fÌ$mذÁ¹<33ÓmKr¹¢2dÈ=õÔSU¶9xð bbb/^¼¨äädmÞ¼Y
+r.ÏÍÍÕ| ððp¥¤¤¨K.¾ÿæ#ýpåç7Þ$]»V«VrnWÙÆµråJíÚµKQQQnçߢEç×111z÷ÝwÝnT°ªÞ<zC ±ªÞÜÕNeÔUõ&I7Ö+W¯U«V©mÛ¶.ë©7Ø_¿ã(}_ááá2eV¯^ív°°0M>Ýe)!!Aa(!!A
5y
/¾øB£GVfffuEEEp>7otÇwTÙîÆo$5kÖLgÏ$^½Z=ô4i¢]»v9öÙgÊÍÍU£Får«Ä#<¢Y³fU[ä·W6L+V¬p.Ð×_íÑùVÕ[MãRoDVÔ»Ú©zC ²¢ÞÃPqq±
+
+
+Ô©S§jï`£Þ`'~ß8¡.(++K&Lp»Í+WtòäI5ʹÜáp¨iÓ¦Ú½{·vïÞfÍéÙgqܪ_¿~JIIÑ=÷ÜSe}Ó¦MUZZê|©3gV¹<22RgÎ$*22R4jÔ(>}Z.\ðJPD IDATÐСCõÓþÔ¹ýàÁuöìYZµJS¦Lq±{÷n¥¤¤T{«a*//×®]»WÅ$©´´T7ÜpCçHÖÕ[MãRoDVÔ»Ú©zC ²êç$5oÞ\-Ò¡Cª¬£Þ`'~Ý8¦¤¤8$$$DçϯÕþahÆÊËËÓ#G4yòd¡iÓ¦î·víZ1B«W¯Öøñã«Ý¦wïÞúøãËËË]îa¯øÿàÁ¡/*##C .ó;qâfÏ©S§JúþÖXIÕþPïÕ«vïÞ9s渽Z&ÉùIÒ'|¢^½z/ YWoK½!ÐXUoîj§2ê
+ƪz«pîÜ9-Y²DqqqUÖQo°¿ùã¯z¡ØØXÅÅÅ©°°P±±±Ú²eK»oß>¥¥¥éí·ßVÓ¦MÝYñµazà$IwÞy§sýùóç]n%;v¬öîÝ[c-_¾\ºþúëÕ«W/åää¸×²eKM:UsæÌ$¥§§ë¾ûîÓ¯~õ+µiÓFÏ?ÿ¼Ëñ:w{÷jÈ!:wîæÎ[åx+W®tnWínvª7OÆ¥ÞàÏìTo ÞàÏìTo_ëöÛo×æÍ«zøEãèîYrr²¯jß
+ùùù¤«3fûzòÃõÞ{ïuûndåýo¾ùfíÛ·Ïã1Zµj¥¼¼<Óí£££uêÔ)æ{èÐ![
+ »Õ'ãRoðWv«7O¶¡Þà¯ìVo¼¿ñÆÑýä'?q^í±3#Pê
+ðê
+ðê
+vâ×q Ô?G )G )G )G )G )G )Ëþc~~¾.]jÕðÏíÝ»WQQQM½!ØPoïPoïXYo4qqq*))ѧ~jÅð%¢¢¢Ô§OK½!QoïPoïXUoEcß¾}Õ·o_+õøõøõøq ¢q ¢q ¢q ¢q ¢q ¢q ²äï8¾÷Þ{:pàCnÝºÕøGBÉÃw<ÉÃÛÈ×w¨7{¡Þõf/Ô[`£ÞìÅz,j8 ·ÞzK´bø ¯ÿaox·¯oPoöB½6êÍ^¨·ÀF½ÙUõ&YÔ8JR||¼RSS>(¤¥¥éôéÓmKõ¯6yxùÖ?êÍ^¨·ÀF½Ùõب7{±²Þø# À# À# À# À# À# À# À# À# À# Àc=)++Sbb¢ÏÇMLLTYYÏǵ;òläk/äØÈ×^È#°¯½{~Ñ8:·Ë+þ3Û×áp(44T111zõÕW«l3iÒ$=zT/_V¿~ýË·mÛ¦Î;«aÃSnn®Ë~.t;öÖ[Õ³gOçãòòr-\¸P[·VHHHý~|¬Ê_?~\:tÐþô's
+ Q6m´iÓ&ç¶=zôÐÖ[Ý>Þ`·<*yxÝò)+)°óµ[?®·fÍU9f çámvË÷å_Ö-·Ü¢
+¨}ûözùå«3óµ[¯¿þº:tè °°0
+4H_~ùecrÞfU¾999êØ±c|?ÿüsõïß_aaaêß¿¿>ÿüó*Çä|í'ãrðÆÑÃ0dGÛ]ºtIééé<yrõååå
+ ÑþýûÕ»woçòmÛ¶)''G%%%6mÆç\wèÐ!Y³ÆíÙÙÙw>NMMUNNvîÜ©+W®¸ÌÛìX{öìÑÈ#µnÝ:=øà.çTVV¦õë×ëáv.Wvv¶ùRO¬Ì£blwãcÞfU¾fYUÆ|Ê£ríÛ·O¿ûÝïª3óð6«òMNNÖÊ+õÍ7ß(33S&MªrÌ`Ìת<¡=öØc={vccÞVßùîØ±C;wîTqq±æÏ¯±cÇJfÍ¥¨¸¸X ßJs²"OÆ
+Æ<*óëÆ±¶BCC]gddÈáphÃ
+ÕÀé¼°uëVuéÒEááá2d®½öZIÒŬÍ7»ëàÁq>^»vÒÓÓÕ¥K«
+fÇÚ¸q£æÌ£]»viàÀnÇjÑ¢
óë½ûî»5<öà<$©qãÆÐðáÃuúôé*cïy+_wYUF¾5óf½Uxúé§]~°U ßóV¾mÛ¶ôÃUñ¨¨¨*coͼGyy¹¤òxã7ªE¾WÛ|_xáµmÛV!!!
+
+
+UëÖ%I¹¹¹JIIQxx¸RRR´k×®*coͼ'= hÂÂÂ4}út^½Ú¹<%%EEEEJHHaJHHPaaa«
+_|ñ
FÌÌLIÒ¼yó¤;î¸ÃíEEEp>þì³Ï«F)**ÊùºÙ±yäÍ5«ÚÜoÏ6L+V¬p.Ð×_íÙcoçaUPP N:¹¼Y<|ÇÛùºËª2òuÏÛyTxçwÔ´iSµlÙ²Êäá;ÞÎwÍ57nÂÂÂtÿý÷+++«Êäë·óX½zµzè!5iÒD»víÒÙ³g«I¾S|ÂÃÃ5eÊç¾EEEºñÆ%IÍ5#ßZòvö<¢q4CW®\ÑÉ'5jÔ(çrá¦Mj÷îÝr8Ú½{·5k¦g}Ö¹ÍÁÕ¯_?¥¤¤è{î$effjæÌÎ+Õ½Ò´iS:GFFjðàÁ:{ö¬VZ¥)S¦Ôx¬Ý»w+%%¥Ú·¦
+ÃPyy¹víÚ¥3f8ên¸ªçÉW¼G
æÍkÑ¢E:tèP1ÉÃw¼¯»¬*#_÷ê«Þ,Xàò\TF¾ãí|'L ììl]¼xQ7oÖÄ«I¾îy;Q£FéôéÓºpáªþô§UÆ$ß©K¾aèÂ
ÊÊÊÒ $}Õ3g$I
¬2&ùºçí<<ìyEãèa1còòòtäÈM<YahÚ´i¾ûyÄZ½zµÆïܯ¼¼Üå>èêîîÝ»·>þøcçã!CHR@fÇêÕ«vïÞ9sæ^
+©ø¦#I|òzõêU»'Â&®6
+çÎÓ%KWeyXïjóuUeä[{u©··ÞzKeeeêÖ[µÇ&ë]m¾
~Ȩâqeä[{u©7Ã0tâÄ Í=[S§Nrlò°^Mù¦¤¤8»?^4xð`eddèâÅÊÈÈPBBBcoí]mö<X=OýøÅ¢aÕþ"O>L[Ù¾}û¦·ß~[M6uY÷ÀHî¼óNç²óçÏ»¼EíÎØ±cµwï^gÈéééºï¾ûô«_ýJmÚ´ÑóÏ?ïÑü:w{÷jÈ!:wîæÎ+éómÙ²¥V®\éÜ>//¯Ú[5½ÍNy\wÝu¤ððpÝ~ûíÕÞOèyxòõ$«@Ï×NyDDDhÁJIIq{Ü@ÏÃÛìoÅÿþ÷¿Õ¦Mj±C çk§<*~¾µlÙRS§NÕ9sª7Ðóð6+òU\\
+«-[¶H/_®ÄÄD]ýõêÕ«rrrª7ÐóµSèyÔÄ/GwÿX<ýKfòóó%I U®ôÔåø÷Þ{¯ËUÃVZ)//ÏãcUþ:::Z§Nòh^r{û·Ø-OÆ
+ä<¼ÍnùFDDÔU çk·<$éÍ7ß4=n çámvËwÌ13féq9_»åÁÏ7ï²*ßääd%''WÙçæoÖ¾}ûLÈùÚ-êf~Ñ8ú£üä'Õ^9ªoVéÈ#°¯½G`#_{!ÀF¾öìyõg 5£q ¢q ¢q ¢q ¢q ¢q ²ìï8æççkéÒ¥V
+öîÝ«¨¨(¶%úW<¼|ëõf/Ô[`£Þì
zlÔ½XYo4qqq*))ѧ~jÅðA#**J}úô©q;òð
+Oóð6òõ
+êÍ^¨·ÀF½Ùõب7{±ªÞ$Ǿ}ûªoß¾VjG`#_{!ÀF¾öB|í
<q ¢q ¢q ¢q ¢q ¢q ¢q ²äï8¾÷Þ{:pàCnÝºÕøGBÉÃw<ÉÃÛÈ×w¨7{¡Þõf/Ô[`£ÞìÅz,j8 ×^{M]»vµbø qâÄ Ôø<|ÃÓ<¼|}z³ê-°QoöB½6êÍ^¬ª7É¢ÆQºvíª)S¦X5|PÈÎÎöx[ò¨µÉÃÛÈ·þQoöB½6êÍ^¨·ÀF½ÙõÆg ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦h ¦ü¢q4C/½ô&N¨¡Cjüøñzã7êe¬AiÐ AJHHÐÄõÎ;ïTÙfùòå:uêÊÊÊ4mÚ4çò½{÷*))ICÕ)Støðaý6nܨAÕ˼}Éßó¨8fÅpåïù¡7jÌ1JHHðûý=×ÛÈ#ëeîþÊßó}ûí·5~üx
+<X÷ß¿Þ~ûíz»¯ø{Ð 4tèPÍ9SgϹû+É÷Í7ßÔo~ó*ùêÑGÕСCõ裪°°°^æî+þG0¾l`õ<±mÛ6í
Ù³GO<ñÚµk§¯¾úJ6mÒ/~ñzoÏ=ºrå8 åËëöÛowYoN8¡;:çååéøZ·n]»vé©§Ò+¯¼"Iúè£ôÚk¯ÕË|}-òسgO½Ì5ø{¾7oÖo¾©eË)**J£^æí+þGåZ;qâòóóëeÞþÊßó]¶lxâ uëÖMÖ%K4`Àz»/ø{K.Õ9sÔ£G>|XYYYúýï_/s÷Gþo~~¾-[¦&MhÿþýZ¼x±þú׿*++K?ÿùÏ®7*++Kÿõ_ÿU/s÷Ï£âç£Íüõ¯ÕSO=¥èèhIR«V4gÎçú?þXË-ÓéÓ§Õ¶m[Í;W:tÐ Aô«_ýJÛ·o×ßÿþw>}ZË/×ǬnºIsæÌQ.]ÜâúìK/½¤U«VIË_~Y{öìÑËzöì©M6I¾ûî;-_¾\?þ¸fÎY÷'Äbþ$
+>\åååÓôéÓÕ¢Eº=)Äßóݱc¦O®víÚÕýɰϣ²M6é±Ç»º'"@ù{¾ß;+.ÐÜtÓMuy:,çïy!é<Þ}÷ݺ<Ç_òhö/_¾¬5kÖLtøða_¿^
+6Ô¯ýk%''{籿çüâVÕ3gΨmÛ¶n×/[¶Lwß}·¶oß®»ï¾[K.u®»õÖ[ÿÒÒÒ4bÄíØ±CÓ¦MÓòåË«=Þ A4tèP=ûì³.ÞèÑ£õꫯª{÷îÚ³gºwïîrÅ¡BQQ,X GyD´víZýâ¿P\\ÜU?vâïyìÙ³G¯½öþû¿ÿ[mÛ¶Õâůú¹Dþï3gtøðaÝu×]7n\µ·£øÏ£Â| ë®»N7ÜpC@æïù>öØcZ¼x±ª§~Z3f̸êçÂü=3g*##C#FÐáÃuþüù«~.?å;hÐ ÝyçZ±b
sß5iÒDÔ¸qc¿Ï×ßóF~ñã7Þ¨ýë_nßA8}ú´
+¦°°0Ýu×]zî¹çëWN<©¥K:ÿá¹»
ÍÝmß®øzäÈzôÑGÛùßÿý_=ùäJJJÒm·Ý&éû+a8ç5hÐ ¿¾UÒßó¨Ð¤Iýö·¿Õ#<9í áïù^wÝuêÑ£x
à>|XË-«r;?ñ÷<*lذAS§Nõä¿çêr«jjjª^xá
Ú<¶âïy0Ày«ðüþ·ùS¾{öìÑ¥K´ÿ~¥¦¦êÅ_Ôu×]§sçÎ)22RÅÅźîºëjùØ¿çü¢q9r¤-[¦3g*::Z_~ù¥6mÚä|;»M6úûßÿ®¡Cêþç\®^:¿¾å[4räHÅÇÇ+,,¬Öóسg{î9Ý~ûíjÔ¨þö·¿¹ÜvµcÇýùÏÖüùóÕ³gOçòÝ»w;¿ö÷¦Qòÿ<*jëÖjß¾}Çdþo=$¹ÿÁáoü=I:vì®\¹¢:ÔzÜ@çïùKú¡Þ*û+ÏCúþvÕýë_ÊÊÊâÂèøK¾«VÒý÷߯k®¹FC.\ôýÏ·¿üå/úÍo~£¿üå/êÞ½ûÕ>¶àïy#¿hÇ£ÐÐP=ùäúòË/Õ¢E?Þ¹~öìÙZ¾|¹233Õ¶m[û£+{üñÇ¡?þñúî»ï$Õþ¤?~\<ð;VåJÏ+$Éeü;vèk®©ÕvçïyÜ}÷ݤ
+ªK.züñÇk5f ó÷||ðA=õÔSúÃþ æÍkîܹµÓnü=k®¹F6lÐèÑ£k5V°ð÷|+nüꫯԢE¿ÿ«¿çQñóínÐðáÃ5vìØZèü%ßèèhM2EÅÅÅjß¾½xâ IÒÔ©SõäOjøðáºõÖ[õ?ü¡VcÚ¿çQÝ;þþæPMóæÍ3RSSM7JKKÓÉÿìÓôù¦Ûýyåv]*tl
¬¬,ýûßÿÖ)Sj=ax.;;[¡¡¡äaµÉãëo?¤Þüõf/Ô[`£Þì
zlÔ½ÔG½]SÞNô~ñËq Ö¡q ¢q ¢q ¢q ¢q ¢q ¢q j`õÌ8qBGµz¶Ô©S'uíÚÕ§c{Väámäëõf/Ô[`£Þì
zlԽؽÞlÝ8=zTï¿ÿ¾hõTl%??_¥¥¥>ÿEÕ³*o#ßêQoöB½6êÍ^¨·ÀF½Ù?ÔGIWjjªÕÓ°´´4;v̱ɣ*+óð6òz³ê-°QoöB½6êÍ^ü¡Þø# À# À# À
# À# À# À# À# À# À# À# ÀT at 5CC¡¡¡Ñ«¯¾ê²®ºík{
+&MÒÑ£GuùòeõëׯÊú
ºÿå_Ö-·Ü¢
+¨}ûözù坿ýò¨Ø·â¿
+þ¹ú÷ﯰ°0õïß_þy]N5(Ù9ßmÛ¶©sçÎjذ¡âââ[SõvΣ¿/Âsvη¼¼\.TëÖÛ9`|½ámvÈ×]]ãë;çl¯7ªq$Ã0téÒ%¥§§kòäÉõvòòr
hÿþýêÝ»·ËºCiÍ5.˵råJ}óÍ7ÊÌÌÔ¤I®znþÄyáü¯Â¬Y³4`À kÀ={öUÏ-Ù5ßmÛ¶)''G%%%6mÆwÕsó'vÍCªþû"jÇ®ù¦¦¦*''G;wîÔ+Wªd¨ìG°¾Þð6«óuWWÁúúÅ®yÛëk+ÖËq222äp8´aÃÅÆÆjàÀÊÌÌt^y¸xñ¢µyófýÚ¶m+é« QQQ^¿°*Ijܸ±"""4|øp>}Z«
+%%E»víòÊüÝòݺu«ºté¢ððp
+2D×^{Wæç/ì»ï¸:vËwíÚµJOOW.]âÝÆ³[ÁþzÃÛ¬Ê×]]ûë»ål¯7®qt8
+ÓôéÓµzõj¯'%%EEEEJHHaJHHPaa¡óÊüyó¤;î¸Ãåxk֬Ѹqã¦ûï¿_YYYW=7bua¨¸¸XêÔ©óJPQQn¼ñFIR³fÍtöìÙ:eð²k¾¾øâ=ZW=7b×<Ü}_DíØ5ßÏ>ûL¹¹¹jÔ¨¢¢¢ª½ý+Ù5`}½ámVçë®®õõ]ó¨,¯7X=oswLXXJKK!I*--UxxxSù*CÅ×Í5ÓÊ+5mÚ4effÊ0Í9Ó¹a0a²³³5hÐ åææjâÄú裮êýÕyThÞ¼¹-Z¤ÆK"##uæÌµhÑB
¬ÝA}ó¤*11Q/Ö=÷ÜãùIù1»æáîû"jÇ®ùFFFjðàÁJKKSnn®ôË_þ²v'çìG°¾Þð6«óuWWÁúúÅ®yHÁõz#àÞqt§ÿþZ²dJKKUZZª%KhÀµ>a1còòòtäÈM<Ya8¿»|Þ âÿ
~øÇXñ8Xù*
+çÎÓ%K'I<x°222tñâEedd(!!Á+ç
ïYïÚµk5bÄ^½ZãÇ÷Ê9ù3«óp÷}Þau¾CôÃÏ·`¼]µ2«óàõFýòU¾îê×/®¬Î#Ø^oMã¸nÝ:>|XÍ7WóæÍuäÈ[·îªµoß>õë×OEEEjÚ´©Gû¬^½Z=ô5j¤Gy$èI¯ò¨ø
+Z-[¶Ôþýû±Z¾|¹öîݫ믿^o½õÒÓÓë|NøÕù>ðÀúꫯtçw:·)--óyù+«ó@ý²:ßôôt-_¾\>}ºþù:?³:^oÔ/_åë®®xýâÊê<íõF@ݪjv;**J;wî¬óq$)??_`z¥§òqÆ£1cÆx4~ °Cîö½ùæµoß>ÆGõìo0¾£eç<j»
+ª²s¾ZµR^^Gã
+;ç¯7¼Íùº««`|ýbç<ígZм㠸:4 S4 S4 S4 S4 S4 S4 S
+¬¯¾úJ»wïÖÑ£G:uJ7ß|³ÏÇ%êY·oõ¨7{¡Þõf/Ô[`£ÞìÅêÍÖcYY7o®ØØX«§b+.\Ð+W|>.yTϪ<¼|«G½Ùõب7{¡Þõf/þPo¶n[µj¥ÿüçJMMµz*¶¦cÇù|\ò¨UyxùVz³ê-°QoöB½6êÍ^ü¡Þø# À# À# À# À# À# À# À# À# À# À# ÀT at 5CC¡¡¡Ñ«¯¾ê²®ºík{
+&MÒÑ£GuùòeõëׯÊú
ºÿõ×_W¦AéË/¿¼Sô+vÈ£bßÿª[«cç|srrÔ±cG5lØPqqqÊÍÍË©ú;çán9<çOù6kÖ¬.§êìG0¾Þð6;ä[^^®
ªuëÖ
+ qßKíG°½Þ¨ÆQÃÐ¥K®É'×ÛqÊËË¢ýû÷«wïÞ.ë:¤5kÖ¸,KJJRFFJJJôØciöìÙW=7b<Ãpþ÷ãe¨»æ»cÇíܹSÅÅÅ?¾Æ{Õsó'vÍÃl9<g×|+/Û·o~÷»ß]õÜü]óÖ×Þfu¾©©©ÊÉÉÑÎ;uåÊgÆÁú}Ô®yÛëk+ÖËq222äp8´aÃÅÆÆjàÀÊÌÌt^y¸xñ¢µyófýÊËË%ýpä7ÞðÊüü
UyHRãÆ¡áÃëôéÓ^\Ù-ß^xAmÛ¶UHHBCCÕºuk¯ÌÏ_Ø-³å¨=;æ[áé§ÖÃ?ìùù»ø E= pIDATåì¯7¼Íª|×®]«ôôtuéÒ%¨Þ]¬Ýò¶××8:
iúôéZ½zµ×¢¢¢"%$$È0%$$¨°°ÐyåaÞ¼yJJJÒwÜár¼Õ«Wë¡R&M´k×.={öªçæO¬ÎÃ0« @:uÒ¸qãê|Nøóu8
+×)Sê47b×<¨Cï°k¾Þyç5mÚT-[¶¼ê¹ù»æ¬¯7¼Íê|?ûì3åææªQ£Fªö¶Ê`bç<éõF«'àmîÞ¾Sii©"""$I¥¥¥
+¯õq~ü¹IjÖ¬V®\©iÓ¦)33SahæÌÎmÃШQ£4jÔ(Ißþ X¾XG
æÍkÑ¢EjܸqÏîÙ9_Ã0ôí·ßjûöí0a>ùäÏOÌOÙ9³åðÝó]°`/_îÙÉ »æ¬¯7¼Íê|###5xð`¥¥¥)77WIIIúå/yµ§ã÷ìG0½Þ¸wÝéß¿¿,Y¢ÒÒRjÉ%0`@cfÌ¡¼¼<9rD'OaÎoâååå.÷ÿøs 'NÐìÙ³5uêTïòUÎ;§%K(..Î[§ Vç¢3gÎHBBBtþüùº³:£nìï[o½¥²²2uëÖÎçãïì¯7ê¯ò2d¤nWÕyÛë i×[§Ã«yóæjÞ¼¹9¢uëÖ]Õ±öíÛ§~ýú©¨¨HM6õhá
+<X÷Þ{¯æÌsUc
+_åQñ´Z¶l©ýû÷;?{Zù7Ûo'ó«óU\\4i¢¥KjË-u>'fuîÃ;¬ÎWúþÝÆ:G °:^oÔ/_å®åË+""BÓ§O×óÏ?/×/?fuÁöz# nU5û-SQQQÚ¹sg#Iùùù¤%$$xt`ý
+Xîø*wûcÞfç|ìÑøÂÎyPougç|%éÍ7ßôhü@aç<¨·º³C¾ZµR^^^ìG°½Þw WÆ `Æ `Æ `Æ `Æ `Æ `Æ `ªÕ¨I~~¾.]jõ4leïÞ½´dlò¨ÊÊ<¼|«¢Þì
zlÔ½Poz³¨7[7?ûÙÏTZZª£GZ=[T×®]}>.yTϪ<¼|«G½Ùõب7{¡Þõf/þPo¶nãââgõ4ðÿG`#_{!ÀF¾öB|í
<üq ¢q ¢q ¢q ¢q ¢q ¢q ²ìï8~øáÊÎζjø pôèQuïÞÝ£mÉ£þÕ&o#ßúG½Ùõب7{¡Þõf/VÖ%c\\JJJ¬:¨tïÞ]}úô©q;òð
+Oóð6òõ
+êÍ^¨·ÀF½Ùõب7{±ªÞ$Ǿ}ûªoß¾VjG`#_{!ÀF¾öB|í
<q ¢q ¢q ¢q ¢q ¢q ¢q òúßqüÇ?þ¡¬¬,oÐ-±×{´-õÔ
+õøõøNmêÍS^mc{Ü¢ó%TxáCo*í~½zöûYÛQo@ÝQoïPoïxZoµáÕÆ±×m?S¯Û¼;A Õ£Þ ß¡Þ ß¡Þ {â3 S4 S4 S4 S4 S4 S4 SÿÇcOjý³Ûës. 9´ÿC
+èÓΣm=jûöí«sçÎIeu À&ú÷ÒÀ=ÚÖ£Æ1>>^ñññu ÀOñG )G )G )G )G )G )
G )G||¼ñ_üÂêy l(//Oÿ?þÉçö4dê IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-full-with-smt.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0xffffffff,0xffffffff" complete_cpuset="0xffffffff,0xffffffff" online_cpuset="0xffffffff,0xffffffff" allowed_cpuset="0xffffffff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f">
+ <info name="Backend" value="Synthetic"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="31943819264">
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="4" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="4" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="5" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="5" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0xffff0000" complete_cpuset="0xffff0000" online_cpuset="0xffff0000" allowed_cpuset="0xffff0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="33554432000">
+ <object type="Socket" os_level="-1" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="8" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="8" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="9" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="9" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="10" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="10" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="11" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="11" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="6" cpuset="0x0f000000" complete_cpuset="0x0f000000" online_cpuset="0x0f000000" allowed_cpuset="0x0f000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="6" cpuset="0x0f000000" complete_cpuset="0x0f000000" online_cpuset="0x0f000000" allowed_cpuset="0x0f000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="6" cpuset="0x0f000000" complete_cpuset="0x0f000000" online_cpuset="0x0f000000" allowed_cpuset="0x0f000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="12" cpuset="0x03000000" complete_cpuset="0x03000000" online_cpuset="0x03000000" allowed_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="12" cpuset="0x03000000" complete_cpuset="0x03000000" online_cpuset="0x03000000" allowed_cpuset="0x03000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="13" cpuset="0x0c000000" complete_cpuset="0x0c000000" online_cpuset="0x0c000000" allowed_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="13" cpuset="0x0c000000" complete_cpuset="0x0c000000" online_cpuset="0x0c000000" allowed_cpuset="0x0c000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="7" cpuset="0xf0000000" complete_cpuset="0xf0000000" online_cpuset="0xf0000000" allowed_cpuset="0xf0000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="7" cpuset="0xf0000000" complete_cpuset="0xf0000000" online_cpuset="0xf0000000" allowed_cpuset="0xf0000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="7" cpuset="0xf0000000" complete_cpuset="0xf0000000" online_cpuset="0xf0000000" allowed_cpuset="0xf0000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="14" cpuset="0x30000000" complete_cpuset="0x30000000" online_cpuset="0x30000000" allowed_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="14" cpuset="0x30000000" complete_cpuset="0x30000000" online_cpuset="0x30000000" allowed_cpuset="0x30000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="15" cpuset="0xc0000000" complete_cpuset="0xc0000000" online_cpuset="0xc0000000" allowed_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="15" cpuset="0xc0000000" complete_cpuset="0xc0000000" online_cpuset="0xc0000000" allowed_cpuset="0xc0000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_level="-1" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" online_cpuset="0x0000ffff,0x0" allowed_cpuset="0x0000ffff,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="33554432000">
+ <object type="Socket" os_level="-1" os_index="8" cpuset="0x0000000f,0x0" complete_cpuset="0x0000000f,0x0" online_cpuset="0x0000000f,0x0" allowed_cpuset="0x0000000f,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" os_level="-1" os_index="8" cpuset="0x0000000f,0x0" complete_cpuset="0x0000000f,0x0" online_cpuset="0x0000000f,0x0" allowed_cpuset="0x0000000f,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="8" cpuset="0x0000000f,0x0" complete_cpuset="0x0000000f,0x0" online_cpuset="0x0000000f,0x0" allowed_cpuset="0x0000000f,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="16" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" online_cpuset="0x00000003,0x0" allowed_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="16" cpuset="0x00000003,0x0" complete_cpuset="0x00000003,0x0" online_cpuset="0x00000003,0x0" allowed_cpuset="0x00000003,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="17" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" online_cpuset="0x0000000c,0x0" allowed_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="17" cpuset="0x0000000c,0x0" complete_cpuset="0x0000000c,0x0" online_cpuset="0x0000000c,0x0" allowed_cpuset="0x0000000c,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="9" cpuset="0x000000f0,0x0" complete_cpuset="0x000000f0,0x0" online_cpuset="0x000000f0,0x0" allowed_cpuset="0x000000f0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" os_level="-1" os_index="9" cpuset="0x000000f0,0x0" complete_cpuset="0x000000f0,0x0" online_cpuset="0x000000f0,0x0" allowed_cpuset="0x000000f0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="9" cpuset="0x000000f0,0x0" complete_cpuset="0x000000f0,0x0" online_cpuset="0x000000f0,0x0" allowed_cpuset="0x000000f0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="18" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" online_cpuset="0x00000030,0x0" allowed_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="18" cpuset="0x00000030,0x0" complete_cpuset="0x00000030,0x0" online_cpuset="0x00000030,0x0" allowed_cpuset="0x00000030,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="19" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" online_cpuset="0x000000c0,0x0" allowed_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="19" cpuset="0x000000c0,0x0" complete_cpuset="0x000000c0,0x0" online_cpuset="0x000000c0,0x0" allowed_cpuset="0x000000c0,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="10" cpuset="0x00000f00,0x0" complete_cpuset="0x00000f00,0x0" online_cpuset="0x00000f00,0x0" allowed_cpuset="0x00000f00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" os_level="-1" os_index="10" cpuset="0x00000f00,0x0" complete_cpuset="0x00000f00,0x0" online_cpuset="0x00000f00,0x0" allowed_cpuset="0x00000f00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="10" cpuset="0x00000f00,0x0" complete_cpuset="0x00000f00,0x0" online_cpuset="0x00000f00,0x0" allowed_cpuset="0x00000f00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="20" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" online_cpuset="0x00000300,0x0" allowed_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="20" cpuset="0x00000300,0x0" complete_cpuset="0x00000300,0x0" online_cpuset="0x00000300,0x0" allowed_cpuset="0x00000300,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="21" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" online_cpuset="0x00000c00,0x0" allowed_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="21" cpuset="0x00000c00,0x0" complete_cpuset="0x00000c00,0x0" online_cpuset="0x00000c00,0x0" allowed_cpuset="0x00000c00,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="11" cpuset="0x0000f000,0x0" complete_cpuset="0x0000f000,0x0" online_cpuset="0x0000f000,0x0" allowed_cpuset="0x0000f000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" os_level="-1" os_index="11" cpuset="0x0000f000,0x0" complete_cpuset="0x0000f000,0x0" online_cpuset="0x0000f000,0x0" allowed_cpuset="0x0000f000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="11" cpuset="0x0000f000,0x0" complete_cpuset="0x0000f000,0x0" online_cpuset="0x0000f000,0x0" allowed_cpuset="0x0000f000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="22" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" online_cpuset="0x00003000,0x0" allowed_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="22" cpuset="0x00003000,0x0" complete_cpuset="0x00003000,0x0" online_cpuset="0x00003000,0x0" allowed_cpuset="0x00003000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="23" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" online_cpuset="0x0000c000,0x0" allowed_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="23" cpuset="0x0000c000,0x0" complete_cpuset="0x0000c000,0x0" online_cpuset="0x0000c000,0x0" allowed_cpuset="0x0000c000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_level="-1" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="3" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" online_cpuset="0xffff0000,0x0" allowed_cpuset="0xffff0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="33554432000">
+ <object type="Socket" os_level="-1" os_index="12" cpuset="0x000f0000,0x0" complete_cpuset="0x000f0000,0x0" online_cpuset="0x000f0000,0x0" allowed_cpuset="0x000f0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" os_level="-1" os_index="12" cpuset="0x000f0000,0x0" complete_cpuset="0x000f0000,0x0" online_cpuset="0x000f0000,0x0" allowed_cpuset="0x000f0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="12" cpuset="0x000f0000,0x0" complete_cpuset="0x000f0000,0x0" online_cpuset="0x000f0000,0x0" allowed_cpuset="0x000f0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="24" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" online_cpuset="0x00030000,0x0" allowed_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="24" cpuset="0x00030000,0x0" complete_cpuset="0x00030000,0x0" online_cpuset="0x00030000,0x0" allowed_cpuset="0x00030000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="49" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="25" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" online_cpuset="0x000c0000,0x0" allowed_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="25" cpuset="0x000c0000,0x0" complete_cpuset="0x000c0000,0x0" online_cpuset="0x000c0000,0x0" allowed_cpuset="0x000c0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="51" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="13" cpuset="0x00f00000,0x0" complete_cpuset="0x00f00000,0x0" online_cpuset="0x00f00000,0x0" allowed_cpuset="0x00f00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" os_level="-1" os_index="13" cpuset="0x00f00000,0x0" complete_cpuset="0x00f00000,0x0" online_cpuset="0x00f00000,0x0" allowed_cpuset="0x00f00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="13" cpuset="0x00f00000,0x0" complete_cpuset="0x00f00000,0x0" online_cpuset="0x00f00000,0x0" allowed_cpuset="0x00f00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="26" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" online_cpuset="0x00300000,0x0" allowed_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="26" cpuset="0x00300000,0x0" complete_cpuset="0x00300000,0x0" online_cpuset="0x00300000,0x0" allowed_cpuset="0x00300000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="53" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="27" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" online_cpuset="0x00c00000,0x0" allowed_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="27" cpuset="0x00c00000,0x0" complete_cpuset="0x00c00000,0x0" online_cpuset="0x00c00000,0x0" allowed_cpuset="0x00c00000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="55" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="14" cpuset="0x0f000000,0x0" complete_cpuset="0x0f000000,0x0" online_cpuset="0x0f000000,0x0" allowed_cpuset="0x0f000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" os_level="-1" os_index="14" cpuset="0x0f000000,0x0" complete_cpuset="0x0f000000,0x0" online_cpuset="0x0f000000,0x0" allowed_cpuset="0x0f000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="14" cpuset="0x0f000000,0x0" complete_cpuset="0x0f000000,0x0" online_cpuset="0x0f000000,0x0" allowed_cpuset="0x0f000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="28" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" online_cpuset="0x03000000,0x0" allowed_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="28" cpuset="0x03000000,0x0" complete_cpuset="0x03000000,0x0" online_cpuset="0x03000000,0x0" allowed_cpuset="0x03000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="57" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="29" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" online_cpuset="0x0c000000,0x0" allowed_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="29" cpuset="0x0c000000,0x0" complete_cpuset="0x0c000000,0x0" online_cpuset="0x0c000000,0x0" allowed_cpuset="0x0c000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="59" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="15" cpuset="0xf0000000,0x0" complete_cpuset="0xf0000000,0x0" online_cpuset="0xf0000000,0x0" allowed_cpuset="0xf0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" os_level="-1" os_index="15" cpuset="0xf0000000,0x0" complete_cpuset="0xf0000000,0x0" online_cpuset="0xf0000000,0x0" allowed_cpuset="0xf0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="33554432" depth="2" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="15" cpuset="0xf0000000,0x0" complete_cpuset="0xf0000000,0x0" online_cpuset="0xf0000000,0x0" allowed_cpuset="0xf0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="4194304" depth="3" cache_linesize="64">
+ <object type="Cache" os_level="-1" os_index="30" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" online_cpuset="0x30000000,0x0" allowed_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="30" cpuset="0x30000000,0x0" complete_cpuset="0x30000000,0x0" online_cpuset="0x30000000,0x0" allowed_cpuset="0x30000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="61" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" os_index="31" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" online_cpuset="0xc0000000,0x0" allowed_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64">
+ <object type="Core" os_level="-1" os_index="31" cpuset="0xc0000000,0x0" complete_cpuset="0xc0000000,0x0" online_cpuset="0xc0000000,0x0" allowed_cpuset="0xc0000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_level="-1" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="63" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.pdf
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.pdf (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.pdf 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,197 @@
+%PDF-1.4
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+ /Filter /FlateDecode
+>>
+stream
+xÍj1F÷óóv¤ù¥@)ºhñ®tá±@ ¦¾~ïUÄÜËSK<¶gþæøÃúÝÅ^wýÕ>ôwºÐëãûgyñ¯|ºï~üìÃ6ôÇ.þ«¼=¡qýF=Üô×§óä:×;ý>bý¤v¿º«ÛMØÈýî¶ûBRÔ(5IÍRTÊREj/µJ¤R7R·w÷ݧ]¶yç¡HÃJsäÉ2qLÚ^H6VÚ¹)OmÝ1
+ó,§ä4ͱþ×¼:uýXôT¹ÆÆï¦¼;¦·º©½ñ±»q8KãôÒUdznNÇGíjÛ§ ýëwÇ:tçÃð<}¯-3³ Fo6:ýÜ8V(L.iaoÒdT(.aÜjäHqÃq7<sO]¶q ã2Æ7M7Íg/9RÜ<`½Tæqã쥲̷,w4q ;%a©¨Ü±$lÜ`×.Û%s»ì]ÃlÂ
+³w-£ÄÎÆ©³i»&,°m*´4çñò<0ð<0¼+ÔI<Ëõøâ<0Ð<0ðq·ï£B öm¤¹ "SÒ¾ô"©Ù i[X×-É«kaÍ[
5'0¤æ¤óå)R³BÒ^> ²4Í¥í`Í©¡ig¾Ý¸|VW> Û'sû¬®}2¶OæöY]ûlÂí³ºö©¹zûçàú§æ
+å:çáòÜynïË
+ëÿÌ
+æÈÇÝ Ã¨¹¡èdá#SÒ±°®PÔÜд-\ó.Î
+
+HÛÂ 27!íÕ£¹!574 /ñH¶
57 at d¡È]kn`HÍ
+édÀݰ|*Ò^> Û'cûT¤½|2¶OÆö©siÛ§`ûl´íSsõ:öO
:?, ksnçÞÿ35àÍ<æN¸ºýyN
+^(0Q`qí«yoAP ã^M|mójVàÛh¯M
+|#Ï¡m]Í |+mçjJàh/Í|;¯kêES\Ñ$jMS\ÓdjMãï¸jMãï·ÔdаÎÅÊæq#ηîp¸
+endstream
+endobj
+4 0 obj
+ 899
+endobj
+2 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+ /Font <<
+ /f-0-0 5 0 R
+ >>
+>>
+endobj
+6 0 obj
+<< /Type /Page
+ /Parent 1 0 R
+ /MediaBox [ 0 0 1150 430 ]
+ /Contents 3 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /CS /DeviceRGB
+ >>
+ /Resources 2 0 R
+>>
+endobj
+7 0 obj
+<< /Length 8 0 R
+ /Filter /FlateDecode
+ /Length1 7684
+>>
+stream
+xÕX{\UU¾_kÿöÚû¼9û<ó ¤ø@*fz"5S3J3(,D{8bdfè ¨`¾ÏÌ!rÔq|fÄ:÷6åbEFÕÂâþöFê3÷Þ?ïçÍ:g¯µ÷Úë÷ûïïûûn%H1â{röô|ª|³G.¾ôäÏûºÏÆd`ÿSBhg^þÌÙû¿i$$ü¼^6óÙyG#
L<ßK½~Öé¹^Þ~Y86xXG˱Â~ü¬ÙÏ¿¸v"bA^|vÎÓÇ¿?Ï#cÄìé/æÓ¤aØ_}_þs3òo¿ÁÓÈM°YD y¼ZÌc;ÑZDMâM"ݤ:V$d`ã¹¶AÄz®í\[²]ñ+¿âÏIgDw^áÕ²åß>'õ!&Dò²óÄDþLEÖÉBúÞ §Á Ï4ÈèüVgdz$·8Âà&¢ÙÚÙÖÙ¦Dd"7¶¥àYòøISe+ûJ¶ên5öմغ|¥ÙÁ) éÂôÁ)8d»!AH}rÁgHÓ
+O
By¡XX"/1¬ÂEj;8Úu·éÓèp¢¦¡{Zÿn~1] Ut#8²I¶Ý¯§~%N¡qT;MûÓE´ö5ñ¢Fv¾SÿèHbÞN"KFv_û
¸ãr8èò#ôòzÔ`Q|%Þî¸z¥<ÂD" Ҭ׽ sN@?8×¢d¨>7¶Üè¼Ñf=yÝz]ÉP2lÉÁ_%Ç${½É¾drìÈÄ`LÐô}A06+&ËåÍòeù³b³óÅzJ½¥¾Rÿ²ØU¡ÄöDOïÔÞI½r<9Þ_?ßïÍ÷åû=ÅÞb_±?2fÓXÉéOM|¢Ä¥[h\lBzÚàTzZB\¬$§ ©)áÂ{ÏYßP_?òðò½M]7©ðÚºgyøïíBj^áíï3¡kqMÞôcÛÔVT6`@Mbb'ÂÌí¾+&%t¹h)1/74(bC)J¶ÉXÇè(kgK¼
+¿qÝúÝõä 1,Ú]½*:ÍÐXç ´ïÁCª±D±J8´NÜõöÉogmxï®ì.þÜEéÁíbúÞ¤¤ËÍÍjâãéj¡6:,¨v$DÌÄNÒ.аP©Ô¢ÔÖÆd¢ºoc¸g)7ÚT¶ÝhlSlÒº'â¡¢h1râIª¢ÅIÌ_¸°joCCæÛóvv=*lÙºåÈήRÉѵeFî×*váâp]5÷éø9,0ªÉµsx[
+®ÖÒÙÞ[õA}>G¯Gïí©êBθcõøsn$Çç?úñµÁ?÷ãð¿÷£¥×ý9Î?9
_zâü_<sö©ê¾E¸®Dü`<qR}n9s¾NYl°ÕÊÝÑNAçÔñ-l´¸ÑÖ¨Ø2z¶¹ÅØ·Þ¸®¨Øï32&?&s&¦=$#éHa¤sd4ë'Ô
+Ô÷3Ì!sèasN´>{®
+¿ö¢À§¢ 5
È<d±¨³ÎÔüÎÓ§xòÌ3ü?Eût~Fåza×ò
+
+á±JKÛ×·J
+ÔNïâ×íß·Ee-ÿV(lÄLîI¯u³LÀ&»Ábýñ©¥.ºLÇ×Ú'Oý=± γK÷ѡʡÓp<Lï>Ú3N=ãàtØ"âô4Û¡°dÉÒe¡êªµë$ÛU>¢µß~åKzòÓ´±
+ç!Ë#·Èø 3B¢beÒë¼ ;ÕýT·©sZlïâFmq#=ï0QÈâWXz Uñ;ýãëé÷é¸Î5bÁØú±çkÕ¸ö8ÖNÜd2[T4Dº&
11ÓºMYk9*EÕ P;Â
+Rµ«ÆÑ£ÚÎjÝhûËÙWÈìmÎÉãkÃ'?2¾Ö1ù´2F]¹º`Êâ6E~I|½]êE"ºÄ(1¹'/Hó¢
+¢w/!%®%QK¢¸÷=Ñ
+²w ÝIL ?å,ÑédбΠteêô{_+yüì/z:F?ââ7jjjæÓÊa³×Ý3¿:ó®¥\;þè®üþeO6!¾0·Âà â´JôÞ=ä4ôk$wÈ·&®R*wîèî¶p¸Ü >«^½ÔÃñ¸¡7.m-7ZÚ¬W¯kp×ÐNÕ@ôÆ¡>¤Ooô¹éÞé¾\¿H²©:¢?6!1]<úDÓ{N~æ,¬ÜÁÏðkzzò{³jصï@Õ¯N:ò\ÁéiW©é7ð6®ºðm pbPJuÅËU»ççÆ'ì÷ùþ\·ð
+Íçîˬ}!AaÑ´
+¢«t¶mÊ>g¥RWî[IS#]F«Gß-=¹¬ö9,dÉÅîW$±'-ý)b3!¡·3X<Á¶yüjoçóh}l5çäwñëü+ÌFÛ3{ÎÓÊÝ]E¤ëélú+º~ìÿx<ÿÿÈÿ@;AÕbæ(ÄGî
+ƹHA_e[L«oz£N°»¼XÜáÌå 'nèW°SEÝ
+¦ªÍ×ÎÃb5:÷÷ÄôÇ ÖDÚÄùé:jÇæÍ;øa´¶²r-7
+bkGñª]¼ýf×5át×
Ò²òeB1ç¹¹ù»¾µb»Ã×ôê{ŸîD^£ñ7&«¼"c~ÚD» ¯¿ñ/^±§ÛAlKOv"ETU-]*ÙÚøðòa_^¡ï¶¶ÒãÚ~aX*ÆAO=2Ê/*(ûL](¹DeÁ-QmzÔæ9[ZKüJm¨±¼FUc%Êc
»å§<¹X%ª4JCï¢S¥ô)i´¾"UÑ
+ÒV£USOë_NV¡º·w=ªé¦W¼Ô$^ºéE;ëW}ÐNù,\'(Fª,åz²Ø¦sR7¹Ó¦Ù§b)EF$VÍlZ~ØíV~ðÚ+ì[í VDM
+¤ãú.X]Ó¾Ç÷5ñü*¿Â/¢v×~öl;u>Ê?AQÐÆkúͪê`´G@=¼(LTCÙ
+¢À #ñIê ^N½I@®¢°XjVD´DÏÈÆ=:¶å\-ã'Ô÷ãOí·pI
+ø°02¼@òI9a2Õ èÅpê¦Ð©Bi&%¼H_Âsâ|ùE])].^ÖCµ¡GÙJSiø!N8̯^xEÈøpy×ãËÏ3Köu$Ñ"¾XóY×ó°^I´K
+6Ò`ª·Gêma÷Í9:R+Ï·¯¸®BR(ÉEº"}¡ÈXh*2Y¬EJ¡-äjw)?Q3)j÷¨2¡`íÞ7ªÖìÝ»¦Úøõöoø×T§O·^{ïÔçø{¼
Å9³ÞAþhãè¬X}]Q
+Äâh`ºrK=]"Ñ w+6ãèÍÒU(µ©rÆÚx=ù@§ØòÊ©·¤¬ Xm(fh¯}H°½¾~Ø[º»¾ÕuêµÕ«÷ìY½ú58 <ö϶=¹Óé(ªÃcÔtîljmm¦Ú
â@`Gy¼$'8(ÚHJe1FÏ\f¡4ÂæT¼wtTò
ݦX-f¦Á#Ê)ù¬ôàãÜðáÃÕïÆ´?9¨©Q0f¥DÙ^Úï¿úí©Mkqv¥ûµ&Fði`Ô,ÿTh&Ê·=@Gð³B3ùÇ3·ÍâïÒÉü}*ñ:(åÓéV>}¯[Ï [Ô¶NÜ@·ª~b¼+ïULÄ!&B62UªpyÀíþ&è¢ÂÏ6»lÓæÍø·yóMªç?Ü¼É zÅùؤ©4¦x/á¥ë1]@_¢+UT._©q¹FÒ*+©Ò/¶Y
+:|ÅT[/:zè»çuQS<øràô:G:wþÖÉ´]ÿ·±IHHt
+_¹aÃJ>¾wRÞ}¿ÏvýiuiÉêÝ?¾ðY×\ßÑÅIy0Á¹oÆL7Ê!¦æ:5[Ò&äêsÚ«ªjDË9äÑÞdOcjÖT»Y+ì¿ÔÁ¾FÒ%ÓÈSd>y
Èá4$Ð$L'ÒûL÷§Ð<:¾Ë¨¹'»!UUü(Ëýé qòt~þüé®ÇX ó24w¦îá!s¢G¯lÁ½ÌE?bȼ`%+%Ö¨ìYW
Yl.wz"ÜÔ nb°JM³a樫î.êÞøoäGóÂC<¿P¸MdzÔëÚ¸ª½§üL°¨:帺Bý¦öë ñüÿú±
³>úÌï¿ÿæýÛ&³ó5|uX¿þÅ7ü;¯iPòMÄ'*Яj
+£ñdj0Þ.sÂ¥;|5dZ[é.bõnÇî¿7:XAÔ¶h°mélùî
+:Hm¡YlbMF¤Î#dÿÅz^3èõ¥W»;oݺÕOØ8á½³a·×=s2Þþïâ×i°n?¸}Û¡CÛ¶ÔÇ'ðoù×e󯿼ʿÐ@ÿÝåéÙ¯=;µIäÉ`$S@Á"Ép¯)d$Æ¢ýEýWDÛ#ÜYÛȽ ³M¨Q,e3¡ÔJ²V¥4ú÷ÀÑ®ÏÎRÞ
ªaJÇbD4=U1.ÓbG¢
+Db¥§ÈVé)OÜiïëvÆ»ÃôÈ
+H
+aþèdDúR¬·Wèj=µxÿ$ í
+=r*<\S±ñ8bÿ /e«víZµj÷.¾kIe÷ß.òÊÅ«wð~øÿ°slåÒ%kÖ,YZ)¼»¡´tÃÆÒ
+S|uÅo9óvq/ödÅG×®}TqN~Éç±õàf1úT>Ej¸½.ZB\!Ã.1DV{CÖÊðòìvûíë6k°AzÙî*ÿ®5á®ãQG£ºÆ÷4zåÛaÛç6@ÜÑ@n³kÿHO#©=XM ½a.MØ4Ñ2¬îÙOùMjýUø[üÊMtÄ-Dy+ÔLmS¥a_^¥áQnåxu½xêñ
+Ô|ç¦ÚoQÿ"ðÀöînü&ÝÝVrëÑ~=æÔùHª8*#ßêQý yÏB°æ*(²ìøl' ÇzI\$
+ßíÝÈ(¦z¹C²îÆ^>q.:²Ìô ß·úãØn4â,ÞYJ MGRq@nÐÉd?>#«~j("N÷õb«ØLb³#ÐTØÎ¦°ÝØ2à]ÁuÂKêéER@Âç
+ÅQ¢
\f¨!WpßD*ÈNR¶8èR$
+àÈ)ÖL6à1¯7Ó-ô,Zw.%çÉ«
+cÉzýj"ߥ0Y(ÂHòÐþSø¬f¿`ÐÎSáB¡õ¸ÖÚwôgçµ£áÊÉN©^rÈq¸±ÝômÖ9Â\ø.ãÄ=âXRÑÈ!øì
+ê).@ßÕ£P}º0_Ì¡5äs1G~ý®ê®¹_x =Ê#±Í¬èÓít¬@KÕ«1¤Y'ÄùøyzMÈH'OãY!ÙGêH¨&ø$Í_iûgn/¡Ït¥ð=iQø:'^ÇX#ÜR2ý|ÖZ!pOnmðþ©¾÷¦ùû÷ûE×g}µ$«Ö¼ÀWßÝ5ßܧÕ2w-tµb îÒwñRÿ~㳦új»FºõÔÑ9£plÒT<U{8ã£GõïAµ@HÿتU
+ÿxu¼6´×k¿ÇgVò<Æ0A]Ý,ÐæÉ³9"Ùp¯¯0LøñJïÇèËZÉi±yd.³B9¦þmd®PÈðZA.a«Æ¶IJ%l9ã;Y'9Í>&ul±Wp¾Ìö-x_©x¯E\lj¿ÛleØTuKBt0]BЫB¬PǰÀjÑH¨[ØPVÌ:¤ Ò«²(Kä/tStÇõ:ýsúOz|Ãü¾s:³[}» â9læ;(} ÃÿÀ?RàjøÞßq¸ÁáïøÖßTC{ ¾~åNö5ëÕðU5´uÀðÏÁµLhåp5®´LbWª¡ol?È.wÀgáO9\L¿9àB5|Âácüu|tþÃ_ðö¿,óçîfçÁ¹»áìÑì,£áÏÎpø?rh®<ìMx?Ns8¹La'Ýðn84r8Áá8crø#~Ïá0C*ÐP`
+êß9Äê9¼s ½sÞ)ü.Àd»á@Pü] ösx»ê8¼Å¡Ão9ìË
7-°÷ ÛoÔØØ¨±Áëhôë°ÃkvsØevl·°)°ÝÛr!·ªa+-MlÍ&Ø´ÑÅ6åÂÆ
+V¶Ñ¬°Þ ¯rXWmfë8T¡
+'UUÃÚ5¶ö6X»Ü«±J«*²ÙªC°ªX¬øMUdCEPüM Vr(/ÀÊ9
+WÐÍWîËl
¡Js¡#Ue
+¼Ìaé
-å°DÅ9qvÿzÑ"ökÁÂ\(ìd
xÃ/Z`¾ ^0À<Ïw at A<×s; ÿâð¬áð´ÉOqµfb'ùäðéà §3A6G8<ÌaÚTÖS
+ðP¸=S8<+? 0ZÙ¤HxÀ÷³³û9dá>ïµ²îµÂãñÊxãî±²qv¸'ÆÌî±ÂX3ÜÍaL5®Qîú³»: óÜ9FrqpÀÃÃØ6~»
+vÁífÆ!ÃÐ!6´¶²!ndn4¤!e¥pdäFlFÐ_ÏX¡¿ú¥@Rß KÊ
¾}l¬o úØà¶Ä »íNH@BÀÈ `xqbÃÀ~úmàËoxÐO.ÄÁtsî¨LpaÇÅ!2"0RÂqR¸ìlx¾*`]a¹`á`6
33Þm
+#ôtxì )D¼("£ÀÊLèÔ
+§¹ËVÒ¤ÿòmÀÿøù/qÎ¥
+endstream
+endobj
+8 0 obj
+ 5732
+endobj
+9 0 obj
+<< /Length 10 0 R
+ /Filter /FlateDecode
+>>
+stream
+x]Mk0ïþ9nÆÝ
+"íÅC?¨íÐdÜ
+5èü÷yÃPxÌLf3ñ¥ynô¸RüngÙòJèåe¾YÉÔóuÔHIr
+äßrêL»äv[V=ÌQUQüá6ÕntxRsÏÅoV±õ_Ú1?<±^)êî¸Î¼vSìrûãº]Ú_ÄçfRÏ-ÉYñb:ɶÓWªÄªÁ:bþí§%ÒúA~wÖ$¹ª=¥N2Pz t1è*@ÒTÂ)§,ÔëA)HBu
>Ï
Èg¢`½øèEÀ/G=üPðËAðKQ]À/_~YÈ_ê¿(øÁA?ü ¿¬ô×îg¿À}ÚîÓ!oÖºÁð#é'b
Qó}jÍlö,ÿüºú½ý
+endstream
+endobj
+10 0 obj
+ 349
+endobj
+11 0 obj
+<< /Type /FontDescriptor
+ /FontName /BitstreamVeraSans
+ /Flags 4
+ /FontBBox [ -183 -235 1287 928 ]
+ /ItalicAngle 0
+ /Ascent 928
+ /Descent -235
+ /CapHeight 928
+ /StemV 80
+ /StemH 80
+ /FontFile2 7 0 R
+>>
+endobj
+12 0 obj
+<< /Type /Font
+ /Subtype /CIDFontType2
+ /BaseFont /BitstreamVeraSans
+ /CIDSystemInfo
+ << /Registry (Adobe)
+ /Ordering (Identity)
+ /Supplement 0
+ >>
+ /FontDescriptor 11 0 R
+ /W [0 [ 600 862 612 549 633 277 633 615 317 390 636 636 636 774 686 390 748 731 684 611 634 837 636 603 636 636 636 636 636 636 ]]
+>>
+endobj
+5 0 obj
+<< /Type /Font
+ /Subtype /Type0
+ /BaseFont /BitstreamVeraSans
+ /Encoding /Identity-H
+ /DescendantFonts [ 12 0 R]
+ /ToUnicode 9 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 6 0 R ]
+ /Count 1
+>>
+endobj
+13 0 obj
+<< /Creator (cairo 1.8.10 (http://cairographics.org))
+ /Producer (cairo 1.8.10 (http://cairographics.org))
+>>
+endobj
+14 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000008363 00000 n
+0000001012 00000 n
+0000000015 00000 n
+0000000990 00000 n
+0000008204 00000 n
+0000001121 00000 n
+0000001322 00000 n
+0000007147 00000 n
+0000007170 00000 n
+0000007596 00000 n
+0000007619 00000 n
+0000007857 00000 n
+0000008428 00000 n
+0000008556 00000 n
+trailer
+<< /Size 15
+ /Root 14 0 R
+ /Info 13 0 R
+>>
+startxref
+8609
+%%EOF
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,129 @@
+PNG
+
+
+IHDR ® öÚ! bKGD ÿ ÿ ÿ ½§ IDATxìÝ{\Uu¢ÿÿ÷R%yÉS
+jR×SÓÍ÷dNéÚM1ÈÔ̦£`ê¢åÝïHj
6y¤ì7 ZZæI s¼dðòÙ¿?vÙkÁZÛ^ÏÇ£Gìµ×ú¬Ïzìýy»÷ÆÑ£Ggll¬ À;vìP@ïÞ½bõ\ Ü RSSågõ$ Üx( â é( â é( â é( â é( ÎÒâÑápÔh{M*..Îð8fSii©ÕÓ j]GáuëÖ¹m5k)EáµN§á1Ö[§nݺ¹n;××ÊÌÌTÇU¿~}EEE);;[¡öíÛWØ^VV¦
¨~ýúêС/_^á<~~~ºã;´råJ×}]»v p#ªñ+ÓÓÓ]Åàå˵bÅ
+Ó'e5kÖ¨wïÞ®ÛN§³ÒB333S:{ö¬5tèPIÒæÍµeË9sF&MÒ!C$I©©©Ú´i²²²TRR¢wß}W~ø¡ÛN§S¥¥¥Zºt©FíÚÞ»woY³¦® °]ºtÑ{ï½'IZµj|ðÁ
+û¿êï?þã?%IúôÓOÕ¥K¸½êpêÔ©jܸ±6mêzå`ùý£Òû8 ^½z©~ýúj×®rss+Ìaçθîõ¬[·N:uRPP
+J/_®Ö[ËÏÏOþþþjÕª$iÁZ²d:uê¤zõê)""BùË_ª¿y󿮝#""ôÉ'\wN ¯«qñ¤iÓ¦Éét*--M£Fª°ÓéÔ+W´jÕ*%%%Ixâ ýîw¿SIIÛ+õí·ßjåÊ7n\
±*»ÿw¿û~úi;wNiii1bD
ã
+Õ¨Q#¯ëäÉ4hÒÓÓ]ÛôäOjÁ¤'N(<<Üueoßv8ò÷÷×>¨Y³f¹¶7jÔH?üðÇs |câÄÎÏvv8ät:õßÿýߺí¶ÛtêÔ)edd¸¶KÒìÙ³5kÖ,?~\eeer8*++S½zõtæÌ5hÐÀm¼+W®ÈÏÏÏmükÿ_ÙýõêÕsû%-åç¸VóæÍuðàAÝrË-^õvîÜ©¸¸8M:U?þ¸Û}.\PVV^~ùe:tHwÜq>üðCWùøÓ1Ë¿v:úè£4bÄåççKN>öíÛëäÉå
+ ø¢ÔÔTï~«õرcõæoê¹ç«pßĵdÉë½÷Þsr;vÔ¢EtéÒ%·ýËKŪTvTT-[æzõäOKGIºç{tðàÁë^Ë¢E4pà@-X°ÀtLNNÖ÷ßïùsç$I#FÐ3Ï<£CéÊ+®R±*åcHÒ¡CÔ½{÷ëÎ ðu^111r:ºï¾û*Ü7aÂ
+<X-[¶Ô={\Û.]ª¥Kê¦n2ü[°W¯^+Vè¿øE¥ou¤!ChÛ¶m®Û×îwí×O=õþõ¯éþûïwm/..Vdd¤¢¢¢Ô¸qcM>]k×®$ýþ÷¿Wtt´úôé£ ýæ7¿ÑêÕ«ÝÎ]þ[ª9s渶çää¸~y
+ p#«Ñ[}ÉåËõøã+##Ã꩸ÄÅÅiÕªU
+°z* @IMMÕ
+ÛÕ«WÏV¥£$ÛÍ ¨-^½Õ ªCñ Àt LGñ Àt LGñ Àt LàÉN;vìжmÛj{. l®G½î~999ZóöuëÙÁðÄ ø¦}»óuúôióGIêÞ«&Å ßµdNTæÙ¾|Æ# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0Å# Ó9ؾÝùÚµýC ¨]ÃÔgÓÆ3µxü$ïrÿzPÑ÷Þkæ° jÑ'~ªsgÏÛ·x¤è÷jò f ¤Í¯cÌ}'3ñ Àt LGñ Àt LGñ Àt LGñ Àt LGñ Àt LGñhàP«§àRzåÇXrîÄ1*½rÅs À^,-CBµúí·+l«ìëªî߸y³Ûýs-®p\vNCBõÁÖèüµ!8$TÁ!¡úEÛ0uëÓWïoÝZa1/¾¨/ÐåÒR
+xxkû·'OêÁÕ<¢<Xß<YáØw6mVTä]®Û6mÒ=ýú«Yxbürrs««¬¬L~s:Çü§
Gèþ´vÃ
+óoÚVzݧuï¼ãº¯ó]ôÎ&÷? ü<Yþǵ6êèñã^¿`Ù29NIÒåÒRelÜXaE+Vhà÷kñ¦ßEôÝÁ¯4õåIzîÅî/+sÊÏÏOìÙ£®;»¶ÿ~Zzvï®~¾O=»w×+))}û½÷Ý£ëöÿþíïZ¿ü/úççû4vô(ó\µc¥Í¯þö¡Ö.Y¬ã¾ÔêEµ-7¯ÂüOåÒܯkÜ+ÿãÚÝ£Þ~ï=cá à`yñ8ãÕ)zþåß«¬¬Ì«ã;w줿fgK2ßyGúôv»ÿÈÑ£:vüΫß~«oþùOÏÿÙç_(úêÖ°pEÿòAíÛ¿_´ë³ÏÔO_ÝvgG½:ýu×þóóõ_Q³ðuïÛOïÚ]íÜýýüÝnÏ[ºÔõ*Ìûø¥~7D-s½
+sÛ?þ¡g¨góÿý£Â{öîUXHëöü?ÍÒíZÉáç'?µlÞ¼Ú±ÞZ½Zs§OWÕPXHæÍYå54kÚÔõuXH>Ý·¯Úk ÀÏåÅc»ðpõÑKzuü3ññúÓoÊétjÞÒ·4rØ0·û®\¥ñÏQ¿¿&$=§¥+Wy|þÑãÇkø8Ù·WÃÄiÔ¸ñ¤¤/éÙ}½{Z¶hîÚÿÙÆ)þ·CutÿJùW4æÅ+spH¨G´ÓÄ?¼ª?Oöãñ :üÙ§½¯(ö¾^úzÏn.$9£¦MH~¬ÓgÏV»èôi5lÐ ÂùZ´k¯¤^Rڴתëäwß)´M×qåÿýt¼_´
+Ó£OÄë¿Ùµ½aÃ*,*ªô ðóbyñ(IÏ&Ä+'7WÿwðÛöÀúõUrþ¼ëvÉùó
+tÛ'¤õjѼ¹ÆO¬ðÐPÝÖ¢
ë¾K.ief¦âG'*8$Tñ£µ23S.]òèüóó5<.N
+4Ðãë«C\Ûünºé&
+{ôQ×þûöïרqãÕ¢]{
+OPþáÃ^oÑáýðu¾öäähà÷»¶*$ênmËÍSpH¨¶åæ©m®Z´|¹$©ñ-·èTa¡$é¢"5¾ùæ
+c7nìYùù¾=ð¥þôÚõôóc««y³fúæèQ×qå¥çOÇ+,øZW®Ð¤©S]ÛKJJÔ$8¸Òk ÀÏ-Gá?¿öG½ðÊ+nÛ{tï¦Yo¼¡óçUrþ¼f½ñzuï^áøÑ#GhÉzú'ܶ¯ÏÊRÎ]ZÑáuÒú¬,ÎÞ¶Ö¬_¯.hef¦Ú
K"´fýz]¼xQ«ß^ïÚÿ®;ïÔ3gèÄû]å\M.Ш Ú´v¶mÊÒð¸8.ÐÃKzßwæ-]ªK.iÞÒ¥½ï¾
+ctéÜÙð|éS]£KJªkXÜ£ûòËúúotåÊ9RíOýPèúúëo¾ÑÝ5ºf ÜlQ<JÒíZé±Á¸mKOMÕÞÏ¿PX×n
+ëÚMû¾Ø¯ôé©íÙ½»èÞn]ݶ/^¾BOý»´+÷ÔðáZRÉ/©ìüs^®EËWè»"õ5k5÷õ«ç8;5Eo,^¢Ð.]uìÄ ×þÒg+cãF
ÜÝ¥Ò·({bçî=êÞ¥NQpãÆn÷ýaÒKÊýx§nïtòvîÔÔ'U8~ÐÀÊýøc×ííÛ+æÁ_©udgÍ7_Kæ¤W;Ö¸ÄDõèÖ]þV-Úµ×o|JgÏv;Gùoµñ\^ukû?vìÐ#=Tãk ÀÇ1qâDgJ%¿ùZ©©©Ê?§¤IqÕî·dNEÁ<asD
+\.-ÕÓÉÏkéÜ9u~îÄ1Z8;Mþþ×ß ¶6o¾]8àQÿwSY<éÌ ¬W/ ÀÒQeç ýØæÖ n LGñ Àt LGñ Àt LGñ Àtf¸ëÓÏ6¾Ùà ¨%ÿøøcµ¼ÙÔ1M-#»éÜÙó:ZrÀÌa Ô¢Öwݬn=;:¦©Åc÷^Ô½¹ à{øG ¦£x `:G ¦£x `:G ¦£x `:G ¦0s°}»óµkû3¼aDv
+S·ªÝüªF~Æ1ägùC~Æ1ägùC~Æ1ägùC~Æ1äW¦äÐÇ;¢ØØX3õy;vìй³ç¯ûG~#?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏOó« SGIêÝ»·RRRÌÖ§¥¦¦*ÿDGû_EägùC~Æ1ägùC~Æ1ägùC~Æ1ägùSü<Åg< 0Å# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0¥Å£ÃáÃá¿¿¿"""ôî»ïºÝWÙþ5§Ü#´wï^]¾|Y={ötm?~ü¸¢££¨èèh?~Ü+«vȯüتƶ3;ä©
;ª~ýúRvv¶ WV7ì_FFÚ·oO~^æWnÊ)>÷wØù]ûóüj_YY¦L¢VZÉÏÏϧ2´C~?ýþkÚ´© WV7ìß
+¦ µmÛV6l0áÊêò{ÿý÷®ÀÀ@õíÛWß}÷ WV7ì_U¾°.±s~¾ðlçü|a]bçü|a]bçüÊÙy]bçüì¾.±üN§S.]ÒÌ35räÈZ§¬¬L~~~Ú¾}»î¹ç×öqãÆ)&&FgÎQLLÆïõ¬`u~N§SN§ÓëóZÍêü233¡³gÏ*11QCõzV°:¿Í7kË-:sæ&M¤!Cx=+X$íÚµK.ôúÜV²C~å?}ñç Õù¥¤¤(##C[¶lÑ+W|.C«ó»ö{///OÏ<ó×s°Õù%$$hÎ9*))QzzºFáõ¬`u~ñññJKKÓÙ³gõÂ/ðüÙ¤çϾ².±k~¾òxl×ü|e]b×ü|e]b×ü$ßXØ9?;¯K,/Ëùûû×Ê8iiir8Z¶l"##«ôôtWääd)99Y[·n5euͪünVå·nÝ:uêÔIAAA0`6lhÊ<êUù-_¾\[·üýýÕªU+SæQ׬ÊïâÅJHHЪU«L9¿U¬üùwË-·¨Q£Fúõ¯#G2ºfU~-ÒÌ3Õ©S'~L±Ããïk¯½¦Ñ£G2ºfU~[·ôã«Ú´icÊ<êUùIú1¿>øÀyÔ5;üý½¯K쯱[~¾¶.±[~¾¶.±[~¾¶.±[~½×%CJJJÒL'99Y
êׯN§úõë§S§N¹ZàÂÂBÝz뤦Mª¨¨ÈØÕ1«óóuvÉïäÉ4hÒÓÓ½ìÃáPPP|òICs°ÕùM8QñññêÓ§ák±Õù9N9sFºóÎ;mûʪXß±cÇ
+¨M6¾ÍÄάί\nn®4i¢-[z=+XßÂ
5tèPê±ÇÓüùó
+_S]²:¿hÔ¨Qjܸ±¶nÝÊóg?ûʺĮùù
+»çg÷uóó
u]óóu]ó³ûº$Àê T``` Õ¨Q#IRqq±j<εÍpù×M6Õ9s¨àà`}ÿý÷jÞ¼¹N:¥àà`o/ÅVççëìßÎ;§©S§ê¡òê:¬büN§.\¸ ¬¬,
+6LòêZ¬`u~ééér:;v¬k_zRou~å5k¦W_}U·ÜrK¯ÁJVç¬þýû+55UÙÙÙ×o~óo/§ÎY_¹É'kÆ5¿Õ¬ÎoذaZ³fúöí«ììl
+>\_}õ·Sç¬ÎïáÖÃ?,éêç=úÚ?X_U|e]b×ü|
óó
uóó
u]óóu]ó+g×uå¯x¬Jtt´¦M¦ââbkÚ´i©ñ8N§SÏ?ÿ¼rrr´gÏ9RN§ÓõÖ¿¥¥¥éâÅJKKS¿~ý̾KÔU~7ªºÊoÑ¢E8p ,X ÇÜì˰L]å¬ï¿ÿ^äçç§sçÎzV©«üÊÊÊÜ>ÄîÞ¨ë§OÖ´iÓeÖ%Xª®ò0`¤TÝ(o¡«Ëï¿>úH¥¥¥ºûî»Í¼KÕU~§Nôã÷]ùm_WßN§S_~ù¥Æ¯§~ÚÌ˰ÕÏ}}]bu~¾Îêü|}]bu~¾¾.±:?__X_9»®Kl[<.^¼X»wïV³fÍÔ¬Y3íÙ³G/öj¬¼¼<õìÙS
jÒ¤Û}3fÌжmÛtóÍ7ë£>ÒÌ3;åê*¿kk]7ê*¿§zJÿú׿tÿý÷»ò+..6ã,UWùEFF***J7ÖôéÓµvíZ3¦o¹ºÊïFU×?ÿZ¶l©íÛ·ûÌgÒ\O]å7sæLÍ1C5RRRÞzë-3¦o¹ºüû;yòd%''²ÔU~åonÐ Æcû³÷T]þüóóóSÿþýõè£j fLßrV?öõuÕùùúºÄêü|}]bu~¾¾.±:?_gu~v_XúVëêZì6mÚhË-Ǥ;vHúõëWá_o¿ývåååyt»±C~¾ö/×"?cì_BB<:ÝØ!¿c7vÈÏ×2»ò»í¶ÛãÑyìÆùIÒßÿþwÎc7vÈoðàÁ<x°Gç±;äÇÏ¿ÚÉÏÖ%vÎϾ/ÉÏ;ççë;çWÓ}¬`çüìY9Û¾
â ï¢x `:G ¦£x `:G ¦£x `:G ¦£x `º ³Ü±c¦Onö°>mÛ¶mj^Ï£}ɯ"ò3ü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü©I~2µxì¦sgÏëà±\3õy·
ÕS·®»ùUü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü!?c<ͯ&'Nt¦¤¤T»SjjªòOä)iR©' à;ÌÉÒMe!ò¤Oä3 â é( â é( â é( .ÀÓ÷íÎ×Ò¹Yµ9 6¶kûÅÜâѾ=zôÐéÓ§¥RCó àâïi£ØØXöõ¨xìÝ»·z÷îmdN ~FøG ¦£x `:G ¦£x `:G ¦£x `:G ¦ðd§;vhÛ¶mµ= 6×£GÅÆÆ^w?Çy{ºõì`xb |Ó¾Ýù:}ú´yÅ£$uïÕAIâM ïZ2'K*ól_>ã é( â é( â é( â éÌlßî|íÚ~ÀÌ! ÔÈ®aêÖ³iãZ<~w@¹=¨è{ï5sX µèO?Õ¹³çí[<JRt{5y³ PKÒæÍ×±æ¾Ïx `:G ¦£x `:G ¦£x `:G ¦£x `:G ¦£x `:G ¦£x4ApH¨ÕSp)½rE c,9wBâ^¹bɹ `/Á!¡ZýöÛ¶UöuU÷oܼÙíþ¹W8.;'GÁ!¡úàÃktþÚªàPý¢mºõé«÷·n°Ï_Ôèri©<<¨Â
±ÕÍñMyëöMtO¿þj¡¥ÜÜjÇ*++Óß§Î1ÿ©fầÿ ݰ¡Â¶U§^÷iÝ;ï¸îë|W'½³ÉýÏ ?O¿âqí:zü¸×Ç/X¶LN§St¹´T7VØgÑøÀýZ¼b¥éç÷FÑá}wð+M}y{qb
ûËÊòóóÓ'{ö¨kçÎnÇ.¨vì·ß{OÑ=z¸nÿïßþ®õËÿ¢~¾OcGÒ1ÏU;VÚ¼ùúàojíÅ:~àK^´PÛró*ÌÿTþ!ÍñºÆ½ò?®íÑ=zèí÷Þó, ÜÐ,/g¼:EÏ¿ü{yu|çô×ìlIRæ;ïh@Þn÷9zTÇÐÒ¹suâÛoõÍ?ÿéñù?ûüEÿòAÝ®è_>¨}û÷Kv}öºõé«Ûîì¨W§¿îÚÿ`~¾þkÐ#j¡î}ûéã]»«»¿¿ÛíyKº^
y߿ԯâhÁ²e5zæ½{âº=ÿO³t{«VrøùÉßÏ_-7¯öø·V¯ÖÜéÓÕ!"Bõ¢y³fV¹³¦M]_
èÓ}û<+ n\íÂÃÕ7&Fo.YêÕñÏÄÇëOo¼)§Ó©yKßÒÈaÃÜî_ºrÆ?7Fþþô®\åñùG¯áCâtdß^
+§QãÆK&¾¤gôõî]jÙâÇ"ïÙÆ)þ·CutÿJùW4æÅ+spH¨G´ÓÄ?¼ª?Oöãñ :üÙ§½¯(ö¾^úzÏîë¾ÊñZE§O«aÎ×¢]{%½ôÒ¦½Víñ'¿ûN¡mÚ¸«ìíØåoôxýñ÷/»¶7lØP
EEÏ 7.ËGIz6!^9¹¹ú¿Ü¶Ö¯¯óç]·KÎW`` Û>!ïPæÍ5~òd
ê¶-\÷]ºtI+33?:QÁ!¡¨ºtéGç?¯áqqjÐ <X_:äÚþØàGtÓM7iØ£ºöß·¿F¯íÚkp|ò®ôzè¯óµ''G¸ßµ=8$T!Qwk[nCBµ-7Om»tÕ¢åË=ñê»eV~¾o|©?½öG=ýüØjoÞ¬¾9zÔu\e¥gÑá=M¢ IDAT|+WhÒÔ©®í%%%jìñ\ pã²Eñèp8ôç×þ¨^yÅm{
îÝ4ë7Trþ¼JÎ׬7ÞP¯îÝ+?zä-Y±RO?ñÛöõYYêÒ¹³«@+:\ ®QQZåÑùÃÛ¶ÕõëuáÂÌÌT»ðpIRDXÖ¬_¯/jõÛë]ûßuçzsæør¿««¢Ã5"A֮ѶMY§¢ÃzrøpÇèÒ¹³[áùÒ¦êTa¡$ÉÏÏOÅ%%Õ?,îQ}ùe}ýÍ7ºrå
+©vÿS?º¾þúotwd¤Çs ÀËÅ£$ÝÞªüÛ¶ôÔTíýü
uí¦°®Ý´ïýJZáØÝ»«èpîíÖÕmûâå+ôÔOJ»§×J~ÉLeçóút-Z¾BwÜ©¿¬Y«¹¯_ý<ÇÙ©)zcñ
véªc'N¸ö_>[7*äî.×ýíÓUÙ¹{ºw颢Ógܸ±Û}×YÕøTîÇ»nwlß^1þJ#;kö¼ùZ2'½Ú±Æ%&ªG·î8ô·jÑ®½~ûäSZ<{v
y4 m«Ï%éõW§¸¶ÿcÇ=òÐC5¾f Üx'Nt¦¤¤T»SjjªòOä)iR\µû-%GQ°&O`æQKKõtòóZ:wN;!qÎNS¿ÿõw m¤Í¯cxÔÿÝT"OúÄ 3'ëÕ°¤tdÙy `?¶y«5 Å# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0]Ùîúô3¥Íoö° jÉ?>þXm"o6uLSÇÈ®a:wö¼0sX µ¨õ]7«[ϦijñؽWuïeî ø>ã é( â é( â é( â éÌlßî|íÚ~ÀÌ!o]ÃÔgj÷!¿ª1ägùC~Æ1ägùC~Æ1ägùC~Æ1äg'ùÕ©Åã'yôñß(66ÖÌa}Þ;tîìùëþÁ_åÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ÆÓüjÂÔâQz÷î³õi©©©Ê?çѾäWùC~Æ1ägùC~Æ1ägùC~Æ1ägùC~ÆÔ$?Oñ LGñ Àt LGñ Àt LGñ Àt LGñ Àt LGñ Àt Lgiñèp8äp8äïﯽûî»n÷U¶MÇ)7bÄíÝ»W/_VÏ=+ûÓ±Ë
ÊÊ4eʵjÕJ~~~UÛJvÎïÚíCM6õö2kóÛ°a ¶mÛjÃ
+Þ^f±s~ï¿ÿ¾ÂÃè¾}ûê»ï¾óö2kòËÌÌTÇU¿~}EEE);;[tüøqEGG+00PÑÑÑ:~ü¸ÑË5ó«êûÒNì_UÛíÄÎùedd¨}ûöä÷o5ͯÜ)SlûwØÎùýôùÙ9?Öî~ÿ±þ¨Y~¬?ÜÕ4?ÖîªÊ¯ªç)¬?ÜÕ4?»?öZþG§Ó©K.iæÌ9rdSVV&???mß¾]÷ÜsÛqN§³Âþ)))ÊÈÈÐ-[tåÊJ÷±»æW¾Ýét*//OÏ<ó×s«MvÍ/!!AsæÌQIIÒÓÓ5bįçVì_||¼ÒÒÒtöìY½ðÂ?~¼×s«MVç©={V:t¨$iܸqÑ3gC~5̯ªïK»±k~Um·»æ·yófmÙ²EgÎѤI4dȯçVì$íÚµK.ôzNuÁÎù]ûЮìëwÞ>þ²þ¸ª¦ù±þpWÓüX¸«*¿ª§°þpWÓüìþ¸kyñXÎßß¿VÆIKKÃáвeË©ØØX¥§§_· ^´hfΩN:Ù¶5¾Ýò»Ök¯½¦Ñ£G2¿Úb·üZ·n-éÇ%iÓ¦)ó«-v˯¬¬LÒù}ðÁ¦Ì¯¶XߺuëÔ©S'iÀjذ¡$);;[ÉÉÉ
+
+
+Rrr²¶nÝjÊüjÝòó5vËÏ×rµ[~Ë/WëÖåçç'µjÕÊùÕ»åwñâE%$$hÕªU¦Ì«¶Ù-?Iºå[Ô¨Q#ýú׿Ö#GL_m±[~¬?®2ãñõGÍócýq·ù±þ¸êzùUõ<
õÇUÞægwCJJJÒL'99Y
êׯN§úõë§S§N]·
+>vì²³³Õ AµiÓ¦Ò¿Ú]ó+«&M¨eË^Ï6Ù5¿
jèС
+Ôc=¦ùóç{=·Úd×ü,X Q£F©qãÆÚºu«¼[m²K~'OÔ A.I*,,Ô·Þ*IjÚ´)ùÕ0?_a÷üì«ós8
+
+
+ÒO>ihnµÉ®ùM8QñññêÓ§×sªvÍÏétêÌ3*((ÐwÞiÛW,Û5?ÖW}ü`ýá]~¬?®ò6?ÖWy_eÏSX\åm~v`õª*U\\¬FITãq®ý×Âò¯6mª9sæ(11±ÊñÕ¿¥¦¦*;;[ñññúÍo~sÝë©kvͯÜäÉ5cÆëîg»æ7lØ0Y³F}ûöUvv¶®¯¾úêº×S×ìßÃ?¬~XÒÕÏ[±ëw;ä·sçNÅÅÅiêÔ©zè¡$]ýù÷ý÷ß«yóæ:uêk~quÀ®ùù
+;çç¹Ú9?§Ó©.(++KÃ
+Ó¡CjvquÀ®ù¥§§ËétjìØ±®cíøÖ%»æW®Y³fzõÕWuË-·x~QuÈ®ù±þ¸Êè÷ëïòcýq·ù±þ¸Êü*{Âúã*oó³;Ë_ñXèèhM6MÅÅÅ*..Ö´iÓSãqN§þyåäähÏ=9r¤NçuK³HúñÛÞîp-«ó¤>úH¥¥¥ºû¹KYß©S§$ýø}W~ÛWX_ù±_~ù¥Æ¯§~Ú˰L]å·hÑ"
+8P,Ðã?î:®ÿþJKKÓŦ~ýúvmuÁêü|Õùùz®Vç¬ï¿ÿ^äçç§sçÎsauÄêüÊÊÊÜ>'É¥cu¬Î¯ÜéÓ§5mÚ4EEE¾¦ºdu~¬?®2òýÇúÃûüX\eäûõÇõó«êy
+뫼ÍÏîl[<.^¼X»wïV³fÍÔ¬Y3íÙ³G/öj¬¼¼<õìÙS
jÒ¤Û}×þæk¿9s¦fÌ¡F)))Io½õ±ªcVç']ýׯäädï/ÂBVçWþRý
+hÌ1¶ÿû²:?Ã!???õïß_>ú¨&L`ìêX]å÷ÔSOé_ÿúî¿ÿ~W~ÅÅÅ1c¶mÛ¦o¾Y}ôfÎiÆeÕ«ó«îç¢/°:¿ª¶û
+«óTTT7n¬éÓ§kíÚµf\V±:?_gu~å_·lÙRÛ·o÷ÏÊ,gu~¬?~äíß_ÖWyëyûóõÇUÕåWÕóÖ?ò&?»¯?,}«uuÿܦMmÙ²Åð8´cÇIR¿~ý*4çU{Ûm·)''Ç£ó[ÅÎùIÒßÿþwÎo;ç7xð`
+<Ø£ó[ÅÎùùÂ+Tì_£FçÑùbçüøþûùy?ä]~ JHHðèüV±s~5ÝÇ
+vÎÏ®]ËÎù5jÔõÇ¿±þð~õq$~þGª>¿ª§Ü~ûí¬?þÍüìþýgÛW< ð] LGñ Àt LGñ Àt LGñ Àt L`ö;vìÐôéÓÍÖ§mÛ¶MÂëy´/ùUD~Æ1ägùC~Æ1ägùC~Æ1ägùC~Æ15ÉÏS¦]Ãtîìy<kæ°>ï¶°zêÖ³Ãu÷#¿Ê1ägùC~Æ1ägùC~Æ1ägùC~Æ1äg§ùÕcâÄÎjwJMMUþ<%M3õä |Ç9Yº©,Dô|Æ# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0Å# Óxºã¾ÝùZ:7«6ç ÀÆvm? {C<Ú×£â±G:}ú´Tjh^ |Xô=mëѾ½{÷VïÞ½Ì ÀÏñ Àt LGñ Àt LGñ Àt LGñ Àtì´cÇmÛ¶¶ç Àæzôè¡ØØØëîçQñ£5o/Q·O oÚ·;_§O6¯x¤î½:(iR¡ ð]KædIeíËg< 0Å# ÓQ< 0Å# ÓQ< 0Å# ÓQ< 0]íÛ¯]Û9$ :Ù5LÝzv0m<SÇOò(÷¯}ï½f }òé§:wö¼}GIîq¯&O`ö° jIÚ¼ù:vÁÜw2ó LGñ Àt LGñ Àt LGñ Àt LGñ Àt LGñ Àt& µz
+.¥W®(!q%çNH£Ò+W,97 ìÅÒâ18$T«ß~»Â¶Ê¾®êþ7»Ý?wÑâ
+Çeçä(8$T|øaÎ_CBª_´
+S·>}õþÖöóâúâÀ].-Õ¹¶¿óþûêñ_÷«Yxbürrs+ûΦͼËu{æMº§_ÿ
+ÇÏã§×[VV¦?¿9OcþSÍÂ#tOÿZ»aC
ù7 m«N½îÓºwÞqÝ×ù®Nzgû ~,ÅãÚ
+uôøq¯_°lN§$éri©26n¬°Ï¢+4ðûµxÅJÓÏï¢ÃúîàWúò$=÷âÄ
+÷9åçç§OöìQ×Î]ÛßÝü¾Þ;GG¿ø\Oþn¸Fy®Â±o¿÷¢{ôpÝþß¿ý]ëÿEÿü|Æ¥ÿ>¦èpT8>mÞ|}ð·µvÉb?ð¥V/Z¨m¹yæ*ÿæÎx]ã^ù×öè=ôö{ïÕ< Üp,/g¼:EÏ¿ü{yu|çô×ìlIRæ;ïh@Þn÷9zTÇÐÒ¹suâÛoõÍ?ÿéñù?ûüEÿòAÝ®è_>¨}û÷Kv}öºõé«Ûîì¨W§¿îÚÿ`~¾þkÐ#j¡î}ûéã]»«»¿¿ÛíyKº^
y߿ԯâhÁ²e®W%¾õÆ\uP`` úDG«AÆÜ³w¯ÂBB\·çÿinoÕJ??ùûù«eóæÕÎéÕ«5wútuP½
hÞ¬Uî߬iS××a!!útß¾jÇ ÀÏåÅc»ðpõÑKzuü3ññúÓoÊétjÞÒ·4rØ0·û®\¥ñÏQ¿¿&$=§¥+Wy|þÑãÇkø8Ù·WÃÄiÔ¸ñ¤¤/éÙ}½{Z¶ø±È{ö
qÿíPÝÿ
RþçyñÅJçªæí4ñ¯êÏÓ¦ýx|Bö©bï륢ý¯¾Þ³»Â+ÿõý÷þì³>er
±NVÃÁ!¡jÑ®½^zIiÓ^«tNåN~÷BÛ´qWÙÛ±Ëß*þèñúãï_vmoذ¡
+ª ?ôlB¼rrsõ¹m¬__%çÏ»n?¯ÀÀ@·}BZß¡ÍküäÉ
+
+Õm-Z¸î»téVff*~t¢CB?:Q+33uéÒ%Î0?_ÃãâÔ A=>x°¾:tȵý±Áè¦nÒ°Guí¿oÿ~7^-Úµ×àøå>\éõ.Ð_çkON>p¿k{pH¨B¢îÖ¶Ü<j[nÚvéªEË»öÙ½w¯<<HÏ&$èýûW;¸qc·ÌÊÏ÷í/õ§×þ¨§[éÊ5oÖLß=ê:®²·c.PaÁ×Ú¸r
&MêÚ^RR¢&ÁÁÕ [C~ízáWܶ÷èÞM³ÞxC%çÏ«äüyÍzã
+õêÞ½Âñ£GÐ+õôO¸m_¥.;»
+´¢Ãê¥õYY?¼m[Y¿^.\ÐÊÌLµ$E
iÍúõºxñ¢V¿½Þµÿ]wÞ©7gÎÐ/÷»Ê¹(:\ Q#´iímÛ¥áqq*:\ '$ýeíZ
+1Röýÿ¯Ò1ºtîìVx¾ô©:UX(IòóóSqIIµs÷¨Æ¾ü²¾þæ]¹rEGT»ÿ©
+]_ýÍ7º;2Ò£k ÀÍÅ£$ÝÞªüÛ¶ôÔTíýü
uí¦°®Ý´ïýJZáØÝ»«èpîíÖÕmûâå+ôÔ¿K»rO
+®%üÊÎ?çõéZ´|
î¸+RY³Vs_¿úy³SSôÆâ%
+íÒUÇNpí¿(}¶26nTÈÝ]*}²'vîÞ£î]º¨èô7nìv_òKôý?hÐðß¹Æÿé«
+¨Ü?vÝîØ¾½büZGvÖìyóµdNº$¹ÍïÚ¯Ç%&ªG·î8ô·jÑ®½~ûäSZ<{¶Û9Ê«õçôú«S\Ûÿ±cyè¡_3 n<':SRRªÝ)55Uù'ò4)®ÚýÌÉ£(X'L0s¨Ë¥¥z:ùy-;§ÎÏ8Fg§)Àßÿú; À6ÒæÍ×±<êÿn*'}bõêXR:J²ì¼ °Û¼Õ Àâ é( â é( â é( .Àìw}úÒæÏ7{X µä¬67:¦©Åcd×0;{^GK9, ZÔú®ÕgSÇ4µxìÞ«º÷2w |ñ Àt LGñ Àt LGñ Àt LGñ Àtf¶ow¾vm?`æ7È®aêÖ³Cµû_ÕÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ÆüjÂÔâñ¼úøoGkæ°>oÇ:wöüuÿàȯrägùC~Æ1ägùC~Æ1ägùC~Æ1ägùãi~5ajñ(I½{÷VJJÙÃú´ÔÔTåÈóh_ò«ü!?cÈÏò3ü!?cÈÏò3ü!?cÈÏò3ü!?cj§øG ¦£x `:G ¦£x `:G ¦£x `:G ¦£x `:G ¦£x `:G ¦³´xt8r8ò÷÷WDDÞ}÷]·û*Û¿¦ã1böîÝ«Ë/«gÏ®íjß¾½êׯ¯¨¨(eggK233Õ±cÇ
+ÛíÄÎùUµÝNì_¹)S¦Ty^«Ù9¿ò1Ëÿ³#;çWVV¦)S¦¨U«Vòóó³evÎï§ßM65z¹¦³s~6lPXXÔ¶m[mذÁèåÎÎù½ÿþû
+W`` úöí«ï¾ûÎèåÎùûéãìñãÇÀÀ@EGGëøñãÞ\b²s~vììëw5Íõ»æw½ív`çüX¸«i~¬?Üýþ³ÛúÃòW<:N]ºtI3gÎÔÈ#km²²2ùùùiûöíºç{\Û7oÞ¬-[¶èÌ34i"éêFFÎ=«ÄÄD
+:Ôë¹Õ&»æWÕv»±k~´k×.-\¸Ðë9Õ;ççt:]ÿÙ]óKIIQFF¶lÙ¢+W®Ø6C»æwí÷^^^yæ¯çVì_BBæÌ£¥§§kÄ^Ï6Ù5¿øøx¥¥¥éìÙ³zá
4~üx¯çV¬ÎOªüqvܸqÑ3gC~5ÌÏî»åìëw5Íõ»æWÝv;±s~¬?~TÓüX¸óöñ×®ëËÇrþþþµ2NZZ-[¦ÈÈHÅÆÆ*==ÝÕ/_¾\[·üýýÕªU+IÒºuëÔ©S'iÀjذ¡)ó«-v˯ªíve·ü.^¼¨ZµÊyÕ6»å'I·Ür5j¤_ÿú×:rä)ó«-vËoÑ¢E9s¦:uêdËmü)»åw×^{M£G6e~µÅnùµnÝZÒÿJܦMSæW[ì_YY¤óûàL_m±*¿ªg³³³¬ %''kë֦̯¶Ø-?_c·üX\åm~¬?®ò6?_û{m·ü$Ö÷ù±þ¸ÊÇ_;®?,/¤>Nrr²
+Õ¯_?9Nõë×O§NrkÐôäOVÃÉ'5hÐ ¥§§{=·ÚdçüªËÕ.ìßį>}úxquÀ®ù9N9sFºóÎ;mû»æwìØ1egg«AjÓ¦M¥/ÿ·»æW.77WM4QË-½[m²k~.ÔСC¨Ç{LóçÏ÷þ"k]ó[°`F¥ÆkëÖ***òþ"kÕùUõ8[XX¨[o½UÔ´iSò«a~¾Âîù±þð>?ÖÞçç+¯í뫼ÍõÇUF?ìºþ°zU½600PÅÅÅjÔ¨$©¸¸XAAA5ç§ï{®>3g]Ç^¸pAYYY6l:$IÚ¹s§âââ4uêT=ôÐC5¿¸:`çüªÚn'vÍ/==]N§ScÇukÇÛ5¿rÍ5Ó«¯þÿíÝTTuþÇñ?
+3:~
+S+Z!¦|!Áom»Ö9Z[z4mKKÍlwmãGÐ.¡&ZÛ/5ËÚ¬6¿±xV¤R*·ô[Ö¦n%¨øë¤Ì÷vGgæ~{§s:
+w>÷s?Ã\>oî\P·nÝXqj~.K*((Pyy¹²²²tÝu×5ÇPrj~,PQQQ`ê@NÍoÒ¤IZ±b
Æ£òòrM<Y~úiPs%§æ7~üx?^Róýú»Ýùµuu¹\Ú»w¯zõê¥ÚÚZ¹\® æjNÍ/\89?ÖÖòcý|~áò}íÔü<XþeýaýõçÔõíW<¶%99YyyyjllTcc£òòòp?n·[³fÍREE
jjj4uêT¹Ýnïí¹¹¹Ú»w¯$)22RÔ|©ï¸qã´dÉÝrË-æ&ÖAìίíáÂîü|îâÄ~{ìÎÏ£¡¡AyyyJJJ²>©dw~cÇÔr²;Èîü$iýúõ:vì
+ffRÈîüjkk%µ¼î<_»óóì»uëVÍ3GÓ§O73±ÒQùµuÍÈÈPII9¢¥§§\°;¿pgw~¬?ëfÁæîß×vççÁú#¸üX4³òúsòúñ
Dz²2mÞ¼Y±±±UMMÊÊÊꫪªJ£GV]]zôèáó\bb¢Ô½{wjåʤiÓ¦é»ï¾ÓUW]åýË@çÕQìίíáÂîüÂÝùy¾g{÷îÉ= bIDAT7ͽj<ìί¸¸XEEEêÒ¥rrrôÔSOYSG²;?©ù·¹¹¹æa»óó|T¸sçÎ9s¦ãor2»óPdd¤2224aÂÍ;×ò:RGå×¢¢"UVVªk×®Z¿~½:¶]ìÎÏsþ=ùq¸°;?Ö-É/Ü®¶;¿pgw~¬?ZëÁ~ÿ:yýaëGÛû-J\\Ö[g¹Iª®®$¥§§·úÍuvv¶²³³îÓ _[ÛÄÉùÒ¿]S3;óëÓ§***ü:¾]$½óÎ;~ß.NÎ/33S~ß.NÎ÷¿íå×V?ýúõSUU_Ç·óãõ×üïG
+.?Ö-É/þíâäüÙëÁ~ÿ:yýáØ+ /
+ £ð À8
+ £ð À8
+ £ð À8
+ 6Ýauuµ
+MwÖ*++Õwà~µ%¿ÖÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³&üüe´ð8<AöÒg»6ì6ìõI8C#F>m;ò;5ò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬ñ7¿@DÌ7Ïßn£mßS¥ù @øX¶pÎj?õDîñ À8
+ £ð À8
+ £ð À8
+ £ð À¸hnÙ¼]Ë
+åX 8ئÛrY¼_mý*<5J
+
+
+Ò1Kã Æ/Sjjª_mý*<¦¥¥)--ÍÊ üpG ÆQx `
G ÆQx `
G ÆQx `
G ÆEûÓ¨ººZ¡ 5jRSSOÛίÂcEE
V¼´L#F¶<0 áiËæíjhh0Wx¤VÎü |-[¸Vjò¯-÷x `
G ÆQx `
G ÆQx `
G ÆQx `\´ÉζlÞ®M·ì @H £ëÏháñýªmÚðÏ|Ùe&» Bïðì?äÜ£$%ºLæÎ5Ý- )yb±v6ûIfîñ À8
+ £ð À8
+ £ð À8
+ £ð À8
+ £ð À8
+ £ðh+~ÝCð:vü¸²gÌ´åØÙ3fêØñã¶ ÎbkáÑ?@/¼ôR«m§zÜÖó¯¼ñÏóµÚ¯¼¢B®øzë¯
+èø¡à Wü ý×y qå½ùöÛÚ̼ç}¼m¾?vLcÇ_ïݾæõ×uizbRÊ5?SÅ
+ö}õõ7xñi÷ñãäù655é?¡¡)ÿØtiÆX\³¦Õø{8OC.¿B/¾úª÷¹¡Ñ«¯ûþ{ àÇÉö+W®yE_ïÞôþK~Zn·[ôý±cZõÊ+Ú,}öY»ú*=ûñã£~ç}ûÙ§zð¾ùºóyojr+22Rï×ÔhøÐ¡Þíÿû·wôò3Ò?ÿ±EwÝq»¦Ì¼³Õ¾/½öG:í>õ;w¨~çVû<±Xoýí¯Z¹¬L»·mÕKTåªVã¯Ýþ¹=¬Ù¿ùw{ò¨Qzéµ× ?8¶¸_³îûµÚèECôòrIÒêW_ÕØ+Ó|ÿê믵k÷-_´H{þõ/}ùÏú}üÿñ±zÎI¨ä^£-|"IÚôáqåõ¹ð"=Pø°·ýg۷뮿A±iät½»is»còùúå˽Wa^qõOõ³7jÉÓO{¯J\üGÔ¯o_EDF**2J½{õjÕgÍG)!>Þûµ?ûè©^ТÂB
+4HgDG+!>^O<RÜfûØ=½âãõÁ-íö Ûç¨1))z|Ùò ö¿-+Kxìq¹Ýn=±ü)M4ÉçùåÏ=¯9wÎTtTææÜ©åÏ=ï÷ñï3Go¨¯¶|¤É7NÔí³çHræÝ«_egëÍÔûÜBÞ¯î¬_ܤ¯?ùXù¿ýfÞsÏ)Çì ^Î×¼ß= ?æåµì~ Ô+.WýÎJ½âr}Q³ÙçÊDWü {þʹ÷^ä=Ôªïúݹs«ãµ·Ï¾ùö[
+óîwªc{>*>áYúý¯ïón?ûì³UW_ßnÿ øq°½ð(I¿ÊÎRÅ
+ú¿Ï>÷Ùsæ:xè÷ë)&&ƧM|ÿèÜ^½4gÁ
+0@}Î=×ûÜÑ£GõÜêÕʺc\ñuÇ=·zµ=ê×ñ?Û¾]'NTçÎuKf¦>ýüsïö3oÐYg¥I&xÛoùä
Ý>{Î=ÿefekûΧoýÎú÷ÛUSQ¡qW_åÝî ø¤aªÜP%Wü Un¨Òy×ÒgñÙ÷_Û¶êý^ÓgÝÕªoW÷î>ù³ÏzÅÆê˯¿öîwªc×ïÜ¡º_èçÕüôn?xð z¸\íö G#""ôÇ~¯»óí£FÐ#=¦éà¡Czä±ÇtùÈö¿cê-{ö9Mÿå/}¶¿¼v.:Ô[@«ß¹CÃôòÚµ~àyçiÅË/ëðáÃznõj?p $iPBV¼ü²9¢^zÙÛþâ/ÔãÅEÚ³õoq.õ;wèö)Ùz}å
+U¾¾V'NTýκuòdIÒ½¿{Pµuu¤ÈÈH5<تKõ)xú³Ï&M »î»O_|ù¥?®_}ÕnûÚ×yñåèßd ðæÂ£$õëÛW7gÞà³´ @ýãc%¡á#´åãOTZXÐjßÑ#Gª~ç]6b¸Ïö²gÕ´ÿí<¦M¬e§ø#3§:þµôgõõ§+µèáæû9>Z¯ÇÊiÀ%õkÏoû¥¥jÕ+¯(~Ø%§ü²?ÞÛ\£\¢ú}ruïîóÜE\ k~¦þCõèµlai«ý¯7NÞ}÷´û8¾Ï1C£FÔ¸~¡sÏ¿@¿¸uÊ}Ôç¿j=åÎ=üÀýÞí¯®Ö
+×^ð ðÃ1oÞ<w~~~»
+
+
+´}OræOl·Ý²
kQïÒ¹sMøþØ1MÏ¥åvø±³gÌÔ(:*êô à%O,Ö®ÃÛüªÿÕ/êÑ&ûmKÑQmÇ ó8æ£Ö ~8(< 0Â# ã(< 0Â# ã(< 0Â# ã¢Mw¸éU²x±én Èßß}Wq]öi´ð8<AöÒ×·ì @õ¿¸«Fl´O£
ÇÖÈËÍ @øá £ð À8
+ £ð À8
+ £ð À8
+ 6ÙÙÍÛµiã6]þ`$OÐÑÛmC~m#?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏòÑÂãûUÛôîß¾RjjªÉnÃ^uuµì?tÚ8ò;5ò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬ñ7¿@-<JRZZòóóMwÖ
+
+
+´}O_mɯ5ò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬ $?qG ÆQx `
G ÆQx `
G ÆQx `
G ÆQx `
G ÆQx `
G ÆÙZxPDD¢¢¢4hÐ ýùÏöyîTííÇcÊ)úè£ôý÷ßkôèÑ¿ÿþû}ú_³fóÎ;OkÖ¬ f!åäüÞ|óM
+8P1113f¾ýöÛ`¦RNÈϳ¯ç?Ý»w+99Y111JNNÖîÝ»L5$ß©¶9ó[½zµ.ºè"yæJJJRyy¹©ó[µj.¸àòû@óó8ù¼â$NÎït¹:ókjjÒý÷߯¾}û*22Ò:9¿·÷ìÙÓÊTCÂÉù±þðh~¬?|µ_[ïs¬?|ÓϽ³ócýá+Ðü¾þ°ýG·Û£Gª¸¸XS§N
+Y?MMMÔÆué¥ú<·iÓ&=ùä>Û²³³µpáB<xP¥¥¥2eJÐc%§æ¥íß¿_wß}·æÌôØBÉ ù¹Ýnï³gÏVJJöíÛ§ò0¿¿v*§æ·zõjZµJû÷ï×3tÓM7=¶Prj~o¼ñÖ[§}ûöiþüùºñÆ[(95?éÔç§qr~mmw§æ¯U«Viݺu:~ü¸c3tj~'n«ªªÒm·ÝôØBÉ©ù±þðh~¬?|µ_[ïs¬?|ÓÏ»NÍõ¯@ósúúÃö£GTTTHú)))QDD~úi%&&*55U¥¥¥ÞÊð#GçÞg¿þýûKj©RÇÅÅ_¨8-¿¦¦&I-ù½õÖ[FÆ*vå'IݺuS.]ôóÿ\_}õ$©¼¼\¹¹¹êÔ©rssõöÛo_¨8-¿pã´ü^|ñE
+2D:uÒØ±cuöÙg_¨8-¿gyFýû÷Wdd¤¢¢¢Ô·o_#ã§å×ÖyÅ©_{ÛÈiù-]ºTÅÅÅ2d£¯ZñpZ~'zè¡tÇw_¨8-?ÖÍÍõG³Óå×ÖûëfÁænëfÁæçôõí
ÇÅÄÄ(''GK,1ÞOnn®êêê.·ÛôôtÕ
ÖÖz+ÃóæÍSVV®¼òJþ|òIÝtÓMÑÍ7߬Å=¶Prj~K,Ñí·ß®îÝ»ëí·ßV}}}Ðc%»ós»ÝÚ·ovìØ¡/¼Ðûºº:sÎ9¤={_ù
§ç÷Í7ßèúë¯WiiiÐc%'ç¡N:éÖ[oµ4¶Prj~mWÆ©ù
Ëû¢SóÛµkÊËËÕ¹sgÅÅÅòãONàÔü<6lØ =z¨wïÞA-ëfÁæÇú£Ùéòkë}õG³`óNÏõGðù9yým÷ Úº9&&FêÒ¥$©±±Q:u
+¸«ÀÇ={öÔÂ
5cÆÊívë®»îò¶q»Ý4iV¬X¡1cƨ¼¼\'OÖ§~ÔCÉ©ù?^ãÇÔ|¿§¾!ÛGll¬xàuëÖMär¹´wï^õêÕKµµµr¹\M¬85¿páäüÞ{ï=M8Q>ø ®½öZÿ'ÕÛíÖáõvíZM4Iþ¹ÿë NͯóÓ85¿Ómw
+§æçr¹¡+++K×]w]`ë NÍÏcÁ***òo26pj~¬?ëf§Ë¯÷9ÖÍÍ/\89?ÖÖòsòúÃö+Û¬¼¼<566ª±±QyyyJII ¸·ÛY³f©¢¢B555:uªÜn·÷¤ÕÔÔäs?Ïÿkkk%µüc{¾vççy¼uëVÍ3GÓ§O73±ÒQùy444(//OIII¤èÈ#*))Qzzºyu»ówvç·téR7NK,Ñ-·ÜbdNÉîürssµwï^IRdd¤8`}RÈîüÚ;¯»ó;Ýv§³;¿±cÇJjùù/Ü>Fgw~´~ýz;vLÃ
+³<fw~¬?Yyý±þ8}~m½Ï±þhl~áÎîüX46?§¯?[x,++ÓæÍ«ØØXÕÔÔ¨¬¬,¨¾ªªª4zôhÕÕÕ©G~íã¹T¿sçÎ9s¦ãor2»óPdd¤2224aÂÍ;7¨cÛ¥£òóüE«Þ½{kãÆÞ{©²²R]»vÕúõëU\\lyNÉîü<ÛO~.ìÎoÚ´iúî»ïtÕUWyÛ466ZWG±;¿ÄÄD%%%©{÷î*,,ÔÊ+-Ï©#Ù_¸³;¿pÏÕîüUTT¤.]º(''GO=õå9u$»ó¯vÌÍ͵4»ØëÁ¾ÿ±þhÖ^~m½Ï±þhL~¬?ZëÁäçôõµnï*¸¸8[·Îr?T]]-IJOOo÷77'ö©ÌÌL¿o'çW¨8!¿¶öíׯªªªü:¾]¯¿ä|?Rpùegg+;;Û¯ãÛÅÉùÚÆNÎÏ©ÈÉùõéÓG~ß.NÎOÞyç¿o'çÇú£ïÁ÷#µ_[ïs¬?Z¯¿ä|?Rpù9}ýáØ+ /
+ £ð À8
+ £ð À8
+ £ð À8
+ 6Ýauuµ
+MwÖ*++Õwà~µ%¿ÖÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³&üüe´ð8<AöÒg»6ì6ìõI8C#F>m;ò;5ò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬!?kÈÏò³ü¬ñ7¿@DÌ7Ïßn£mßS¥ù @øX¶pÎj?õDîñ À8
+ £ð À8
+ £ð À8
+ £ð À¸hnÙ¼]Ë
+åX 8ئÛrY¼_mý*<5J
+
+
+Ò1Kã Æ/Sjjª_mý*<¦¥¥)--ÍÊ üpG ÆQx `
G ÆQx `
G ÆQx `
G ÆE¤¥¥¹¯¾új»Ç ࢢ¢Bÿ',¦Q£¥ IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-with-smt.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0xffffffff,0xffffffff" complete_cpuset="0xffffffff,0xffffffff" online_cpuset="0xffffffff,0xffffffff" allowed_cpuset="0xffffffff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f">
+ <page_type size="65536" count="0"/>
+ <page_type size="16777216" count="0"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="31943819264">
+ <page_type size="65536" count="487424"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0xffff0000" complete_cpuset="0xffff0000" online_cpuset="0xffff0000" allowed_cpuset="0xffff0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="33554432000">
+ <page_type size="65536" count="512000"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x0000ffff,0x0" complete_cpuset="0x0000ffff,0x0" online_cpuset="0x0000ffff,0x0" allowed_cpuset="0x0000ffff,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="33554432000">
+ <page_type size="65536" count="512000"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="3" cpuset="0xffff0000,0x0" complete_cpuset="0xffff0000,0x0" online_cpuset="0xffff0000,0x0" allowed_cpuset="0xffff0000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="33285996544">
+ <page_type size="65536" count="507904"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="49" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="51" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="53" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="55" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="57" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="59" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="61" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="63" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.pdf
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.pdf (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.pdf 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,190 @@
+%PDF-1.4
+%µí®û
+3 0 obj
+<< /Length 4 0 R
+ /Filter /FlateDecode
+>>
+stream
+xMkÛ@ïúûìÌìwBR(ôТ[éÁâ@ $þýΨ®ã@fy×ò`IöêÙÇÞ§ÏîfOîáe §Ç/ró\|x~þr´%·Lî|¹TÉmôäùÞÝÉcîFý¼¾¢Äø{¸9lh#7Üxn%¼DIb'%DØKL³Ä"q/qø4>ǶÅä«äU)âåd¬I¼! ä%×ú?Õm
+Ù§$-J×w}Æ\)IËvòiÈï©52ÿ+ýñZ
+æøZ(Ká¼;+z>^/Z(ÓK$ÎËÚqçp»7YKÆ;(éðnÒùô)9VQ<¤ÑÞ¤I¯ ¸ã&»'óÆÍ&.<r]±qÆWM\(.&gOÄ(.y7u'\lÇ_eU±gæY¯/6GÍã±·WKEaj¶4Íâ2Ón¨U!Õ>8²áWàrÒv¬ZD.¤=sÔDRMÔ1¶kÕFRmÔ¬ÝFòa#ñuF>ÒHñ^·WPEj¥¢½ÔL 2w!í¤óCª:¶ÕLàH2þU3ÈÒløWÍ!ÕLH{ú¨0¤©9w/6,¦ë¼4¤à-<í
+âÖM̳ÿë«ðm´ ߨÁÀÆßBG{ÍaF¥hW]o×°oÓ·j"|ÃO¶ý>ü1]Ñ×
+endstream
+endobj
+4 0 obj
+ 598
+endobj
+2 0 obj
+<<
+ /ExtGState <<
+ /a0 << /CA 1 /ca 1 >>
+ >>
+ /Font <<
+ /f-0-0 5 0 R
+ >>
+>>
+endobj
+6 0 obj
+<< /Type /Page
+ /Parent 1 0 R
+ /MediaBox [ 0 0 590 430 ]
+ /Contents 3 0 R
+ /Group <<
+ /Type /Group
+ /S /Transparency
+ /CS /DeviceRGB
+ >>
+ /Resources 2 0 R
+>>
+endobj
+7 0 obj
+<< /Length 8 0 R
+ /Filter /FlateDecode
+ /Length1 7684
+>>
+stream
+xÕX{\UU¾_kÿöÚû¼9û<ó ¤ø@*fz"5S3J3(,D{8bdfè ¨`¾ÏÌ!rÔq|fÄ:÷6åbEFÕÂâþöFê3÷Þ?ïçÍ:g¯µ÷Úë÷ûïïûûn%H1â{röô|ª|³G.¾ôäÏûºÏÆd`ÿSBhg^þÌÙû¿i$$ü¼^6óÙyG#
L<ßK½~Öé¹^Þ~Y86xXG˱Â~ü¬ÙÏ¿¸v"bA^|vÎÓÇ¿?Ï#cÄìé/æÓ¤aØ_}_þs3òo¿ÁÓÈM°YD y¼ZÌc;ÑZDMâM"ݤ:V$d`ã¹¶AÄz®í\[²]ñ+¿âÏIgDw^áÕ²åß>'õ!&Dò²óÄDþLEÖÉBúÞ §Á Ï4ÈèüVgdz$·8Âà&¢ÙÚÙÖÙ¦Dd"7¶¥àYòøISe+ûJ¶ên5öմغ|¥ÙÁ) éÂôÁ)8d»!AH}rÁgHÓ
+O
By¡XX"/1¬ÂEj;8Úu·éÓèp¢¦¡{Zÿn~1] Ut#8²I¶Ý¯§~%N¡qT;MûÓE´ö5ñ¢Fv¾SÿèHbÞN"KFv_û
¸ãr8èò#ôòzÔ`Q|%Þî¸z¥<ÂD" Ҭ׽ sN@?8×¢d¨>7¶Üè¼Ñf=yÝz]ÉP2lÉÁ_%Ç${½É¾drìÈÄ`LÐô}A06+&ËåÍòeù³b³óÅzJ½¥¾Rÿ²ØU¡ÄöDOïÔÞI½r<9Þ_?ßïÍ÷åû=ÅÞb_±?2fÓXÉéOM|¢Ä¥[h\lBzÚàTzZB\¬$§ ©)áÂ{ÏYßP_?òðò½M]7©ðÚºgyøïíBj^áíï3¡kqMÞôcÛÔVT6`@Mbb'ÂÌí¾+&%t¹h)1/74(bC)J¶ÉXÇè(kgK¼
+¿qÝúÝõä 1,Ú]½*:ÍÐXç ´ïÁCª±D±J8´NÜõöÉogmxï®ì.þÜEéÁíbúÞ¤¤ËÍÍjâãéj¡6:,¨v$DÌÄNÒ.аP©Ô¢ÔÖÆd¢ºoc¸g)7ÚT¶ÝhlSlÒº'â¡¢h1râIª¢ÅIÌ_¸°joCCæÛóvv=*lÙºåÈήRÉѵeFî×*váâp]5÷éø9,0ªÉµsx[
+®ÖÒÙÞ[õA}>G¯Gïí©êBθcõøsn$Çç?úñµÁ?÷ãð¿÷£¥×ý9Î?9
_zâü_<sö©ê¾E¸®Dü`<qR}n9s¾NYl°ÕÊÝÑNAçÔñ-l´¸ÑÖ¨Ø2z¶¹ÅØ·Þ¸®¨Øï32&?&s&¦=$#éHa¤sd4ë'Ô
+Ô÷3Ì!sèasN´>{®
+¿ö¢À§¢ 5
È<d±¨³ÎÔüÎÓ§xòÌ3ü?Eût~Fåza×ò
+
+á±JKÛ×·J
+ÔNïâ×íß·Ee-ÿV(lÄLîI¯u³LÀ&»Ábýñ©¥.ºLÇ×Ú'Oý=± γK÷ѡʡÓp<Lï>Ú3N=ãàtØ"âô4Û¡°dÉÒe¡êªµë$ÛU>¢µß~åKzòÓ´±
+ç!Ë#·Èø 3B¢beÒë¼ ;ÕýT·©sZlïâFmq#=ï0QÈâWXz Uñ;ýãëé÷é¸Î5bÁØú±çkÕ¸ö8ÖNÜd2[T4Dº&
11ÓºMYk9*EÕ P;Â
+Rµ«ÆÑ£ÚÎjÝhûËÙWÈìmÎÉãkÃ'?2¾Ö1ù´2F]¹º`Êâ6E~I|½]êE"ºÄ(1¹'/Hó¢
+¢w/!%®%QK¢¸÷=Ñ
+²w ÝIL ?å,ÑédбΠteêô{_+yüì/z:F?ââ7jjjæÓÊa³×Ý3¿:ó®¥\;þè®üþeO6!¾0·Âà â´JôÞ=ä4ôk$wÈ·&®R*wîèî¶p¸Ü >«^½ÔÃñ¸¡7.m-7ZÚ¬W¯kp×ÐNÕ@ôÆ¡>¤Ooô¹éÞé¾\¿H²©:¢?6!1]<úDÓ{N~æ,¬ÜÁÏðkzzò{³jصï@Õ¯N:ò\ÁéiW©é7ð6®ºðm pbPJuÅËU»ççÆ'ì÷ùþ\·ð
+Íçîˬ}!AaÑ´
+¢«t¶mÊ>g¥RWî[IS#]F«Gß-=¹¬ö9,dÉÅîW$±'-ý)b3!¡·3X<Á¶yüjoçóh}l5çäwñëü+ÌFÛ3{ÎÓÊÝ]E¤ëélú+º~ìÿx<ÿÿÈÿ@;AÕbæ(ÄGî
+ƹHA_e[L«oz£N°»¼XÜáÌå 'nèW°SEÝ
+¦ªÍ×ÎÃb5:÷÷ÄôÇ ÖDÚÄùé:jÇæÍ;øa´¶²r-7
+bkGñª]¼ýf×5át×
Ò²òeB1ç¹¹ù»¾µb»Ã×ôê{ŸîD^£ñ7&«¼"c~ÚD» ¯¿ñ/^±§ÛAlKOv"ETU-]*ÙÚøðòa_^¡ï¶¶ÒãÚ~aX*ÆAO=2Ê/*(ûL](¹DeÁ-QmzÔæ9[ZKüJm¨±¼FUc%Êc
»å§<¹X%ª4JCï¢S¥ô)i´¾"UÑ
+ÒV£USOë_NV¡º·w=ªé¦W¼Ô$^ºéE;ëW}ÐNù,\'(Fª,åz²Ø¦sR7¹Ó¦Ù§b)EF$VÍlZ~ØíV~ðÚ+ì[í VDM
+¤ãú.X]Ó¾Ç÷5ñü*¿Â/¢v×~öl;u>Ê?AQÐÆkúͪê`´G@=¼(LTCÙ
+¢À #ñIê ^N½I@®¢°XjVD´DÏÈÆ=:¶å\-ã'Ô÷ãOí·pI
+ø°02¼@òI9a2Õ èÅpê¦Ð©Bi&%¼H_Âsâ|ùE])].^ÖCµ¡GÙJSiø!N8̯^xEÈøpy×ãËÏ3Köu$Ñ"¾XóY×ó°^I´K
+6Ò`ª·Gêma÷Í9:R+Ï·¯¸®BR(ÉEº"}¡ÈXh*2Y¬EJ¡-äjw)?Q3)j÷¨2¡`íÞ7ªÖìÝ»¦Úøõöoø×T§O·^{ïÔçø{¼
Å9³ÞAþhãè¬X}]Q
+Äâh`ºrK=]"Ñ w+6ãèÍÒU(µ©rÆÚx=ù@§ØòÊ©·¤¬ Xm(fh¯}H°½¾~Ø[º»¾ÕuêµÕ«÷ìY½ú58 <ö϶=¹Óé(ªÃcÔtîljmm¦Ú
â@`Gy¼$'8(ÚHJe1FÏ\f¡4ÂæT¼wtTò
ݦX-f¦Á#Ê)ù¬ôàãÜðáÃÕïÆ´?9¨©Q0f¥DÙ^Úï¿úí©Mkqv¥ûµ&Fði`Ô,ÿTh&Ê·=@Gð³B3ùÇ3·ÍâïÒÉü}*ñ:(åÓéV>}¯[Ï [Ô¶NÜ@·ª~b¼+ïULÄ!&B62UªpyÀíþ&è¢ÂÏ6»lÓæÍø·yóMªç?Ü¼É zÅùؤ©4¦x/á¥ë1]@_¢+UT._©q¹FÒ*+©Ò/¶Y
+:|ÅT[/:zè»çuQS<øràô:G:wþÖÉ´]ÿ·±IHHt
+_¹aÃJ>¾wRÞ}¿ÏvýiuiÉêÝ?¾ðY×\ßÑÅIy0Á¹oÆL7Ê!¦æ:5[Ò&äêsÚ«ªjDË9äÑÞdOcjÖT»Y+ì¿ÔÁ¾FÒ%ÓÈSd>y
Èá4$Ð$L'ÒûL÷§Ð<:¾Ë¨¹'»!UUü(Ëýé qòt~þüé®ÇX ó24w¦îá!s¢G¯lÁ½ÌE?bȼ`%+%Ö¨ìYW
Yl.wz"ÜÔ nb°JM³a樫î.êÞøoäGóÂC<¿P¸MdzÔëÚ¸ª½§üL°¨:帺Bý¦öë ñüÿú±
³>úÌï¿ÿæýÛ&³ó5|uX¿þÅ7ü;¯iPòMÄ'*Яj
+£ñdj0Þ.sÂ¥;|5dZ[é.bõnÇî¿7:XAÔ¶h°mélùî
+:Hm¡YlbMF¤Î#dÿÅz^3èõ¥W»;oݺÕOØ8á½³a·×=s2Þþïâ×i°n?¸}Û¡CÛ¶ÔÇ'ðoù×e󯿼ʿÐ@ÿÝåéÙ¯=;µIäÉ`$S@Á"Ép¯)d$Æ¢ýEýWDÛ#ÜYÛȽ ³M¨Q,e3¡ÔJ²V¥4ú÷ÀÑ®ÏÎRÞ
ªaJÇbD4=U1.ÓbG¢
+Db¥§ÈVé)OÜiïëvÆ»ÃôÈ
+H
+aþèdDúR¬·Wèj=µxÿ$ í
+=r*<\S±ñ8bÿ /e«víZµj÷.¾kIe÷ß.òÊÅ«wð~øÿ°slåÒ%kÖ,YZ)¼»¡´tÃÆÒ
+S|uÅo9óvq/ödÅG×®}TqN~Éç±õàf1úT>Ej¸½.ZB\!Ã.1DV{CÖÊðòìvûíë6k°AzÙî*ÿ®5á®ãQG£ºÆ÷4zåÛaÛç6@ÜÑ@n³kÿHO#©=XM ½a.MØ4Ñ2¬îÙOùMjýUø[üÊMtÄ-Dy+ÔLmS¥a_^¥áQnåxu½xêñ
+Ô|ç¦ÚoQÿ"ðÀöînü&ÝÝVrëÑ~=æÔùHª8*#ßêQý yÏB°æ*(²ìøl' ÇzI\$
+ßíÝÈ(¦z¹C²îÆ^>q.:²Ìô ß·úãØn4â,ÞYJ MGRq@nÐÉd?>#«~j("N÷õb«ØLb³#ÐTØÎ¦°ÝØ2à]ÁuÂKêéER@Âç
+ÅQ¢
\f¨!WpßD*ÈNR¶8èR$
+àÈ)ÖL6à1¯7Ó-ô,Zw.%çÉ«
+cÉzýj"ߥ0Y(ÂHòÐþSø¬f¿`ÐÎSáB¡õ¸ÖÚwôgçµ£áÊÉN©^rÈq¸±ÝômÖ9Â\ø.ãÄ=âXRÑÈ!øì
+ê).@ßÕ£P}º0_Ì¡5äs1G~ý®ê®¹_x =Ê#±Í¬èÓít¬@KÕ«1¤Y'ÄùøyzMÈH'OãY!ÙGêH¨&ø$Í_iûgn/¡Ït¥ð=iQø:'^ÇX#ÜR2ý|ÖZ!pOnmðþ©¾÷¦ùû÷ûE×g}µ$«Ö¼ÀWßÝ5ßܧÕ2w-tµb îÒwñRÿ~㳦új»FºõÔÑ9£plÒT<U{8ã£GõïAµ@HÿتU
+ÿxu¼6´×k¿ÇgVò<Æ0A]Ý,ÐæÉ³9"Ùp¯¯0LøñJïÇèËZÉi±yd.³B9¦þmd®PÈðZA.a«Æ¶IJ%l9ã;Y'9Í>&ul±Wp¾Ìö-x_©x¯E\lj¿ÛleØTuKBt0]BЫB¬PǰÀjÑH¨[ØPVÌ:¤ Ò«²(Kä/tStÇõ:ýsúOz|Ãü¾s:³[}» â9læ;(} ÃÿÀ?RàjøÞßq¸ÁáïøÖßTC{ ¾~åNö5ëÕðU5´uÀðÏÁµLhåp5®´LbWª¡ol?È.wÀgáO9\L¿9àB5|Âácüu|tþÃ_ðö¿,óçîfçÁ¹»áìÑì,£áÏÎpø?rh®<ìMx?Ns8¹La'Ýðn84r8Áá8crø#~Ïá0C*ÐP`
+êß9Äê9¼s ½sÞ)ü.Àd»á@Pü] ösx»ê8¼Å¡Ão9ìË
7-°÷ ÛoÔØØ¨±Áëhôë°ÃkvsØevl·°)°ÝÛr!·ªa+-MlÍ&Ø´ÑÅ6åÂÆ
+V¶Ñ¬°Þ ¯rXWmfë8T¡
+'UUÃÚ5¶ö6X»Ü«±J«*²ÙªC°ªX¬øMUdCEPüM Vr(/ÀÊ9
+WÐÍWîËl
¡Js¡#Ue
+¼Ìaé
-å°DÅ9qvÿzÑ"ökÁÂ\(ìd
xÃ/Z`¾ ^0À<Ïw at A<×s; ÿâð¬áð´ÉOqµfb'ùäðéà §3A6G8<ÌaÚTÖS
+ðP¸=S8<+? 0ZÙ¤HxÀ÷³³û9dá>ïµ²îµÂãñÊxãî±²qv¸'ÆÌî±ÂX3ÜÍaL5®Qîú³»: óÜ9FrqpÀÃÃØ6~»
+vÁífÆ!ÃÐ!6´¶²!ndn4¤!e¥pdäFlFÐ_ÏX¡¿ú¥@Rß KÊ
¾}l¬o úØà¶Ä »íNH@BÀÈ `xqbÃÀ~úmàËoxÐO.ÄÁtsî¨LpaÇÅ!2"0RÂqR¸ìlx¾*`]a¹`á`6
33Þm
+#ôtxì )D¼("£ÀÊLèÔ
+§¹ËVÒ¤ÿòmÀÿøù/qÎ¥
+endstream
+endobj
+8 0 obj
+ 5732
+endobj
+9 0 obj
+<< /Length 10 0 R
+ /Filter /FlateDecode
+>>
+stream
+x]Mk0ïþ9nÆÝ
+"íÅC?¨íÐdÜ
+5èü÷yÃPxÌLf3ñ¥ynô¸RüngÙòJèåe¾YÉÔóuÔHIr
+äßrêL»äv[V=ÌQUQüá6ÕntxRsÏÅoV±õ_Ú1?<±^)êî¸Î¼vSìrûãº]Ú_ÄçfRÏ-ÉYñb:ɶÓWªÄªÁ:bþí§%ÒúA~wÖ$¹ª=¥N2Pz t1è*@ÒTÂ)§,ÔëA)HBu
>Ï
Èg¢`½øèEÀ/G=üPðËAðKQ]À/_~YÈ_ê¿(øÁA?ü ¿¬ô×îg¿À}ÚîÓ!oÖºÁð#é'b
Qó}jÍlö,ÿüºú½ý
+endstream
+endobj
+10 0 obj
+ 349
+endobj
+11 0 obj
+<< /Type /FontDescriptor
+ /FontName /BitstreamVeraSans
+ /Flags 4
+ /FontBBox [ -183 -235 1287 928 ]
+ /ItalicAngle 0
+ /Ascent 928
+ /Descent -235
+ /CapHeight 928
+ /StemV 80
+ /StemH 80
+ /FontFile2 7 0 R
+>>
+endobj
+12 0 obj
+<< /Type /Font
+ /Subtype /CIDFontType2
+ /BaseFont /BitstreamVeraSans
+ /CIDSystemInfo
+ << /Registry (Adobe)
+ /Ordering (Identity)
+ /Supplement 0
+ >>
+ /FontDescriptor 11 0 R
+ /W [0 [ 600 862 612 549 633 277 633 615 317 390 636 636 636 774 686 390 748 731 684 611 634 837 636 603 636 636 636 636 636 636 ]]
+>>
+endobj
+5 0 obj
+<< /Type /Font
+ /Subtype /Type0
+ /BaseFont /BitstreamVeraSans
+ /Encoding /Identity-H
+ /DescendantFonts [ 12 0 R]
+ /ToUnicode 9 0 R
+>>
+endobj
+1 0 obj
+<< /Type /Pages
+ /Kids [ 6 0 R ]
+ /Count 1
+>>
+endobj
+13 0 obj
+<< /Creator (cairo 1.8.10 (http://cairographics.org))
+ /Producer (cairo 1.8.10 (http://cairographics.org))
+>>
+endobj
+14 0 obj
+<< /Type /Catalog
+ /Pages 1 0 R
+>>
+endobj
+xref
+0 15
+0000000000 65535 f
+0000008061 00000 n
+0000000711 00000 n
+0000000015 00000 n
+0000000689 00000 n
+0000007902 00000 n
+0000000820 00000 n
+0000001020 00000 n
+0000006845 00000 n
+0000006868 00000 n
+0000007294 00000 n
+0000007317 00000 n
+0000007555 00000 n
+0000008126 00000 n
+0000008254 00000 n
+trailer
+<< /Size 15
+ /Root 14 0 R
+ /Info 13 0 R
+>>
+startxref
+8307
+%%EOF
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.png
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.png (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.png 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,74 @@
+PNG
+
+
+IHDR ® 9ä£ bKGD ÿ ÿ ÿ ½§ IDATxìÝ{Xu¢þÿ{
+©W#©ßQÓÐT
+6*º;mëûÝfh¥`6:Z¦Ódc &æ%óx*mfÜQû¦¹SËCÀÃ¥°~¸Y¹âàµxÖ¾_×ÕÕZÏáó|[ñ¹×Khh¨5""B @CÉÍÍWÿþýèî¹ à$wO 7' Añ !( 0Å x ÀO â CP< `' áÖâi±Xê´¼.®\¹¢¨¨(§Çq¥¨¨(]¹rÅÝÓ p:OÅ¢µk×Ú-={¶K⵬V«Óc¬]»V½{÷¶Ý·X,¶ÿ®¥®]»ªiÓ¦êÑ£²³³%IêܹsåJLL¿¿¿6mª.]ºhÙ²eUãáá¡»îºK+V¬°ëÕ«Wü nu~Æ355ÕV/_¾¬åË»|R®°zõjõïßßvßjµV[h³²²©³gÏ*..N#F$}ôÑGÚºu«Î9£)S¦høðá®þû-[¶hóæÍ*++Ó| O>ùÄnL«Õª+W®(##C/¼ðmyÿþýµzõê8[ ó«sñìÙ³§>üðCIÒÊ+õðÃWÙ¦òY¿ÿóþ6oÞ,IúòË/Õ³gOyyyÙ=ë8}útµlÙRZµ²=sX¹Þb±T»þÀêׯ6mªN:iûöíUæ°k×.]÷|Ö®]«nݺÉÇÇGVóæÍ%IË-Sûöíåáá!OOOµk×N´páB-Y²DݺuS&M¤÷ß¿ÆñÛ´ic»¤/¾øâºs ¸Õ¹xÆÇÇkƲZJIIÑØ±c«lcµZU^^®+W*>>^ôÌ3Ïèü£ÊÊÊìyôõõÕ?þ¨+VhâÄUƪnýÿøG=÷Üs:wîRRR[e¿ââbµhÑÂáó:yò¤ªÔÔTÛ2Å"=ûì³Z¸p¡$éÄêØ±£m}u/ß[,yzzêáÖìÙ³mË[´h¡_~ùÅá9 ÜH,'O¶&&&:¶±Å"«Õªÿ÷ÿþî¸ã)33Ó¶\æÌ£Ù³gëøñ㪨¨ÅbQEE
4i¢3gΨY³fvãËÃÃÃnükÿ_Ýú&MØ}H§ò×jÓ¦<¨ßýîwÕõvíÚ¥¨¨(M>]O?ý´Ýº.hóæÍ:uª:¤»îºK
|ò|þvÌÊÛV«U}öbcc/I:}ú´:wî¬'O:7 À"))©~j0aÞ}÷]½øâUÖM<YK,Qii©>üðC[!ëÚµ«ÒÓÓuéÒ%»í+KeMª[ߣG-]ºÔöìéoK§$õéÓG¼î¹¤§§kÈ!Z¸p¡]éLHHЩS§ls8wî$)66VúÓtèÐ!ÛJeM*ǤC)$$äºs ¸Õ«xËjµêþûﯲî¥^Ò°aÃô?üAyyy¶åÊÈÈÐ-·Üâô§àWZ¥åËë÷¿ÿ}µ/uKÒðáõmÛ6Ûýk·»öö1côóÏ?ë°-/--Upp°zôè¡-[jæÌZ³f$é/ùÂÂÂ4`À ùøøè±ÇÓªU«ì]ù©ö#F(--Ͷ<''Çöá% M^joL._¾¬§~ZîMTTV®\)///wO ÀPIIIºaP&MLU:%n> FâWf ÀO â CP< `' Añ !( 0Cßãk÷[ J¡¡¡¸îvÏ^·D½ûvqzb ¸qìÛ¯Ó§O»®xJRH¿.åÔÄ pcY¶Yªpl[Þã CP< `' Añ !( 0Å x À§#öíÉ×îϸrH ¸Ip¯@þ!Ï/vÐöTØ}÷¹rX ì/¿Ô¹³çÍ[<%),ô>½öÒK® J¿@Ç.¸ölÞã CP< `' Añ !( 0Å x ÀO â CP< `§øú¸{
+6WÊË7Î-ǧ+åån96 0?·O_ÿ Z·®Ê²ên×´~ãGÙ¾¸Ê~Ù99òõÐ??ù¤NÇo¾þòõÐï;ª÷úûÇWÙfÜË/ëtùÊ
+þÏ¡¶å?<©
+S NzpØ0ýxòd}7mùH=ï±Ýß°eúDRëA
+øålß^ëXzçÝùêþojÝ1H}
+Ö
+ªÌÿ¶êÖï~ݴɶ®û=Ý´iý @%·?ã¹fÃF=~¼Þû/\ºTV«UtùÊenÜXeôåË5äÁ´xù
+¿>J
+ôÓÁï4}ê½øòä*ë+*¬òððÐyyêÕ½»mù_f$ªoH~øzúèÕÄÄ*û®ûðC
Úîÿ×§ÿõËÞ×_ïÓÆ*vܵ2þùé'Z³d±øV«ÒiÛöUæ_Hsg½¥¯þÕ¶<,4Të>üйp À
+ËíÅsÖëÓ4~ê_TQQQ¯ý»wí¦dgK²6mÒàýíÖô¨?¡¹suâÇuä>þW_£°ÖíöÐÃÚ·¿$i÷W_©÷ºãî®z}æ[¶íæçëß>®Ö20R;wï©uîv÷çgdØ
½ÿÁôHÔp-\ºÔö,ì¶ýKÏÇÄÈÛÛ[ÏÇÄ(çÿûW1óöîU ¿¿íþ·gëÎvídñð§§þЦMc½·jæÎ©.AAjâå¥@Í\ã9´nÕÊv;Ðß__îÛWë9 Ûg§50<\ï.ɨ×þÖÛóÞÕjÕü÷4zäH»õ+VjÒãäåé©â_TÆÿ
I4jx¾ß·W£GiìÄI¤øÉ¯èùÞ³[hÛÆ¶ýó¨è'Gèèþoø×W5î嫳¯ÚuÒ俽®wfÌøuÿ~õ¥"îï§ÂEÜßOóö¨¤°@TræZÝv$é÷¾¾:}öl±KNVófͪ¯m§Îå¥Ìx³Ö±NþôüülûUþ÷Ûñ~ß!PO<7þ2Õ¶¼yóæ*.)©ö Ü^<%éùhålß®ÿ9xÈn¹wÓ¦*;Þv¿ìüyy{{Ûmãßþ.µmÓF^{MtGÛ¶¶u.]Ò¬,E¿'_ÿ E¿§YYºtéCÇ?¯QQQjÖ¬6Lß:d[þÔ°ÇuË-·häOض߷¿ÆN¤¶:kXtò«=ßÂýr8_y99òà¶å¾þòïq¯¶mß!_ÿ mÛ¾CzöRú²e¤¿û%I¿¨å·VÛ·eK»Ì*÷ãoõöoè¹ñj«MëÖ:rô¨m¿ÊÒûÛñkãå2}ºmyYYnóõö LQ<-Þyó
+ýùÕWíôÖìyóTvþ¼ÊÎ×ìyóÔ/$¤Êþ/Õå+ôÜ3ÏØ-_¿y³zvïn+P%
êÕ£ÖoÞìÐñ;vè Õë×ëÂ
Z¥N;Jµzýz]¼xQ«Ö·mÏÝw
ëÝäY:ñí~[9«ÂÑ5«µmËfRIa5JÔÿþû5?#C.]ÒüEÜ1zvïnWx_ùÛt[ÁôððPiYYczB¦NÕá#GT^^®ï¿¯uÎE¿Ûn>rD÷×é ÀÍÃÅSîl×NO
+{ÜnYjRö~ý{õV`¯ÞÚ÷Í~¥ÎLª²oßè¾Þ½ì/^¶\cþ·´U3jTó!£êöÖL¥/[®»î Öû«×hî[WßÏ9')Qó/Q@Ï^:vâmûôÔ9ÊܸQþ÷ö¬ö%jGìÚ§=Urú|[¶´[÷·)¯hûÎ]º³Û=Ú±k¦OReÿ¡Chûζû];wVøÃ¨}pwÍ¿@KÒRkkb\B{hÈ'Õ¶Sg=ùì-3Çîj}1^o½>Ͷü_¹¹züÑGë|Î àæ`<y²5±OG_+))Iù'v(~JTÛ-IÛ,K¯^{é%WÎupùÊ=0^sÓ?vLÜ8-"/OÏëo L-eþ»pÀ¡þwK
¿é^® ܯ[J§$· 4¦y© 76' Añ !( 0Å x ÀO Âåßã¹û˯²`« þµs§üoué.-Á½uîìy-;àÊa `°ö÷ܪÞ}»¸tLÏ~]Òϵ À÷x ÀO â CP< `' Añ !( 0K¿Çsß|íþ/¯Np¯Àë~ +ùÕüC~Î!?çsÈÏ9äçGò«Ï/vÐÎO¿WDD+môrssuîìùëþÁ_õÈÏ9äçòsù9üC~Îq4¿ºpùïjïß¿¿]=l£¤ü;Úüª"?çsÈÏ9äçòsù9§.ù9÷x ÀO â CP< `' Añ !( 0Å x ÀO â C¸µxZ,Y,yzz*((H|ðݺ궯ë8bccµwï^]¾|Y}ûöµ-?~ü¸ÂÂÂäíí°°0?~Ügf3䥮]»ªiÓ¦êÑ£²³³]pfÆ0C~¦MVãøfeü***4mÚ4µk×N*C3ä·aÃ
ÊËËK:tÐ
+\pfÆ0C~ûþvìÆp]1s~áºbæü*õºâög<V«.]º¤ääd=ºÁÆ©¨¨>ÿüsõéÓǶ|âÄ
+×3g®I&Õ{îàîü²²²©³gÏ*..N#F¨÷ÜÁÝùIÒîÝ»µhÑ¢zÛÜ_bb¢233µuëVËjµÖ{îàîübbb¦²²2¥¦¦*66¶ÞspwçgµZ«ý;×X®+fͯ±\WÌdîëÛg%OOÏ'%%EEK.Upp°"""j{ùøø(!!Aü±Kæa4wå·víZuëÖM>>><x°7oîyÍ]ù]¼xQ111Z¹r¥Kï.îÊ/==]ÉÉÉêÖ)Ù;Ê]ùµoß^Ò¯ÏÆøùù¹dFsW~5il׳åר®+fËÏì×·OÅ"oooÅÇÇkáÂ
.'!!AÅÅÅÕjUdd¤luûí·KZµj¥çNÈ`îίÒÉ'5tèP¥¦¦Ö{îàîü&O¬èèh
+0ÀésqwçwìØ1egg«Y³fòóó«öe*3sw~-Ò#äíí§zJ,púäîüjÒX®+fͯٯ+fÍÏì×/wO ¦ ½½½UZZª-ZHJKKåããSçq®}dPy»U«VJKKS\\|}}uêÔ)µiÓFEEEòõõ喝
»ó¤]»v)**JÓ§O×£>Z¯ópwç*«Õª &ضiL/»;?___
+4HIIIÊÎÎVtt´{ì±úáÜßÈ#µzõj
+8PÙÙÙ5j¾ûî»úáÜ_MËuŬùIãºbÖüÌ~]qû35 Ó3TZZªÒÒRÍ1CáááuÇjµjüøñÊÉÉQ^^F-«ÕjûC4hRRRtñâE¥¤¤(22ÒÕ§âFå®!CháÂ
zúé§]}ncT~vïÓ1Ó?Î0*¿ÁKúõåÆürûµÊ¯¨¨HÒ¯¹UÞoìʯ&ýºâîüûuÅÝùýºbÚâ¹xñbíÙ³G[·VëÖ§Å×k¬;v¨oß¾*..Öm·Ýf·nÖ¬YÚ¶mn½õV}öÙgJNNvÅôÝΨüÆ£þY<ðíÓu¥¥¥®8·2*¿Qù%''kÖ¬YjÑ¢
âããõÞ{ï¹búngT~.ÔØ±cÕ¬Y37δF¨+£ò»öÅ×Þnì×wçר¯+îÎÏìÜúR{m-ÜÏÏO[·nuzIÊÍÍ$EFFVyäyçwjÇ
ÇlÌÙIÕ
ò«Ë8fcüî¸ãåää8t³1C~Ã
+Ó°aÃ:Ù!¿öm×3ç×þ-4s~uÝÆh¦}Æ 7' Añ !( 0Å x ÀO â C¸üässs5sæLWÛ¨mÛ¶Mí:6qh[ò«üC~Î!?çsÈÏ9äçºäç(Ïà^:wö¼ÛîÊa½;¨wß.×ÝüªG~Î!?çsÈÏ9äçòs£ùÕ
KgH¿.
+éçÚ ÞLÈÏ9äçòsù9üC~Î!?ãðO â CP< `' Añ !( 0Å pø{<÷íÉWÆÜÍ
+9 42»?? ðûüÚÖ¡âªÓ§OKW n0a}üáжÏþýû«ÿþÎÌ 79Þã CP< `' Añ !( 0Å x À}gnn®¶mÛÖÐs @#êÐÈ;T<srr´zÝõîÛÅé àÆ±oO¾N>íºâ)I!ýº(~JS ÀeIÚf©Â±my' Añ !( 0Å x ÀO â C8ü=Ø·'_»??àÊ! à&Á½]ú\Z<¿Øq@ÛÿqPa÷ÝçÊa `°/¾üRçÎ7oñ¤°ÐûôÚK/¹zX (eþ»àÚW²y' Añ !( 0Å x ÀO â CP< `' Añ !(.àëàî)Ø\)/WLÜ8·;&n®»åØ ÀüÜZ<}ý´jݺ*˪»]Óú}d·~núâ*ûeçäÈ×?@ÿüä:¿!øúÈ×?@¿ï¨Þêï\eq/¿¬oÐå+W4ø?VÙ·¶9nÚòzßc»¿aËõ¤Öþð#ÊÙ¾½Ö±***ôλóÕ=üßÔºcú¬56TÃmÔßýZ»im]÷{ºiÓû? JnÆsÍ:züx½÷_¸t©¬V«$éò+Êܸ±Ê6éËkÈhñò.?~}è§ßiúÔ)zñåÉUÖWTXåáá¡/òòÔ«{w»ýJ
+j{Ý*,4Ôvÿ¿>ýo_ö¾~øz&¼0V±ã^¬u¬ùôÏO?Ñ%uüÀ·Z¾HÛ¶ï¨2ÿ¢üC;ë-M|õ¯¶åa¡¡Z÷á
n:n/³^¦ñSÿ¢zíß½k7ý#;[µièo·þû£Guìø eÌ«?þ¨#?üàðñ¿úú
=ô°n쨰־ýû%I»¿úJ½ÔwwÕë3ß²m0?_ÿ>ôqµî¤Ú¹{Os÷ôð´»??#Ãö,ìý>¤G¢káÒ¥uz6oï^úûÛî/x{¶îl×NyzxêmÚÔºÿ{«ViîÌê¤&^^
+ô÷×üÙÉ5nߺU+Ûí@}¹oÃs 7·ÏN;j`x¸Þ]Q¯ýÿ·ç½+«ÕªùïiôÈvë3V¬Ô¤ÇÉËÓS/Å¿¨+>þ&iÔð(}¿o¯F
+ÒØ$Iñ_Ñó11:¼g·þÐö×"÷ü'*úÉ:ºÿ%þõU{ùåjçìë 6A4ùo¯ë3~Ý?&F
_}©ûû©¤°@÷÷Óá¼=×}óZ%§O«y³fU×¶SgÅ¿òRf¼Yëþ'úI~~¶ýª{9¾òO<7þ2Õ¶¼yóæ*.)qx® àæâöâ)IÏÇD+gûvýÏÁCv˽6UÙùó¶ûeçÏËÛÛÛnÿöw©m6ôÚkê ;Ú¶µ»téVde)ú
8ùú(ú
8ÈÊÒ¥K:þÁü|R³fÍôô°aúîÐ!Ûò§=®[n¹E#x¶ý¾ýû5vâ$µíÔYâc_XXíùèÃùÊËÉѰ-÷õ{µmûùúhÛöêгÒ-s$Æ«c´liYåñ~<ðÞ~ó
+=7~Bû·iÝZGµíW]é-),PqÁam\±\S¦O·-/++Óm¾¾Ï Ü\LQ<-Þyó
+ýùÕWíôÖìyóTvþ¼ÊÎ×ìyóÔ/$¤Êþ/Õå+ôÜ3ÏØ-_¿y³zvïn+P%
êÕ£ÖoÞìÐñ;vè Õë×ëÂ
Z¥N;Jµzýz]¼xQ«Ö·mÏÝwëÝäY:ñí~[9«ÂÑ5«µmËfRIa5Êá1zvïnWx_ùÛtK<<<TZVVëþ#£Ð©SuøÈ«àûïkݾèbÛíÃGèÞà`ç
+ n.¦(tg»vzjØãvËR´÷ëoØ«·{õÖ¾oö+ufR}û¨¤°@÷õîe·|ñ²åóÒ6fÔ(-©æCFÕ?íJ_¶\wݬ÷W¯ÑÜ·®¾sNR¢æ-^¢½tìÄ Ûöé©s¹q£üïíyÝO×d×<
ôì©ÓgäÛ²¥ÝºkǬiü¡Chûζû];wVøÃ¨}pwÍ¿@KÒRkkb\B{hÈ'Õ¶Sg=ùì-3§Ê<nè ØãõÖëÓlËÿ«Ç}´Îç nÉ'[kÝ())Iù'v(~JTÛ-IÛ,K¯^{é%WÎupùÊ=0^sÓ?vLÜ8-"/OÏëo L-eþ»pÀ¡þwK
¿é^® ܯ[J§$· 4¦y© 76' Añ !( 0Å x ÀO Âåßã¹û˯²`« þµs§üoué.-Á½uîìy-;àÊa `°ö÷ܪÞ}»¸tLÏ~]Òϵ À÷x ÀO â CP< `' Añ !( 0K¿Çsß|íþ/¯Np¯Àë~ +ùÕüC~Î!?çsÈÏ9äçGò«Ï/vÐÎO¿WDD+môrssuîìùëþÁ_õÈÏ9äçòsù9üC~Îq4¿ºpùïjïß¿¿]=l£¤ü;Úüª"?çsÈÏ9äçòsù9§.ù9÷x ÀO â CP< `' Añ !( 0Å x ÀO â C¸µxZ,Y,yzz*((H|ðݺ궯ë8bccµwï^]¾|Y}ûö²ïoÇ®¨¨Ð´iÓÔ®];yxxÔxlw2s~6lP`` ¼¼¼Ô¡Cmذ¡¾§Ù`Ì_VVºvíª¦MªGÊÎÎ$?~\aaaòööVXX?îìéºó«i¹9¿JÓ¦M3å¿}¹óãúa¯®ùqý°WS~êܹs£»~¸ýO«ÕªK.)99Y£Gn°q***äáá¡Ï?ÿ\}úô±ÛÏjµVÙ>11QÚºu«ÊËË«ÝÆÌ_LLÒÒÒTVV¦ÔÔTÅÆÆÖ{n
+ÉÝùe
ee)33SgÏU\\F!I8q¢ÂÃÃuæÌ
kÒ¤Iõ[C2k~5-7³æ'I»wïÖ¢Eê='#5?®öê×{5å÷ÑGiëÖ:sæ¦L¢áÃK2ÿõÃíų§§g"Å¢¥K*88XJMM½î#Ðôôt%''«[·n¦|´ú[f˯}ûö~}ççççù5wå·víZuëÖM>>><x°7o.IÊÎÎVBô6Ê IDATB||| ?þØ%ók(f˯¦åfe¶ü.^¼¨\¹Ò%ójhfËëÇUõÍëÇU×ËoÙ²ejß¾½<<<äéé©víÚI2ÿõÃíÅÓb±ÈÛÛ[ñññZ¸p¡ËÇIHHPqq±"##eµZ©¢¢¢ë>=vì²³³Õ¬Y3ùùùUûô·5¿EiÄòööÖSO=¥Ô{n
+É,ù<yRCUjjª$©¸¸X·ß~»$©U«V*))©÷ÜYó»Þr³0k~'OVtt´Pï9Á¬ùqý¸ª¾ùqý¸Êü,|||ôì³ÏÚö5ûõÃËݨ©Àx{{«´´T-Z´$ÊÇǧÎã\ûh³òv«V¦¸¸¸ÇóõõÕ A¤ììlEGGë±Ç»îùͬù9R«W¯ÖÀQ£Fé»ï¾»îùÍùíÚµKQQQ>}º}ôQIWÿþ:uJmÚ´QQQ|}}ë~r0k~µ-7³æ*«Õª &Øö5ãËÅfÍëÇUõÍëÇUägµZuáÂmÞ¼Y#GÔ¡CLýpû35 Ó3TZZªÒÒRÍ1CáááuÇjµjüøñÊÉÉQ^^F-«ÕZki¤ÁKúõ»1¼\r-wçWTT$é×Ü*ï7Få®!CháÂ
zúé§mû
+4H)))ºxñ¢RRRé²s3»ó«iycáîü***ìÞ¿mÆÒYwçÇõãªúæÇõãªëå S§NI<<<tîÜ9Iæ¿~¶x.^¼X{öìQëÖÕºukåååiñâÅõkÇêÛ·¯uÛm·Ù»öÙ×ÞNNNÖ¬Y³Ô¢EÅÇÇë½÷Þsîæîü.\¨±cǪY³f7né?¤ð[Få7fÌýüóÏzàlùjÖ¬YÚ¶mn½õV}öÙgJNNvÅiÆÝùÕ´¼±pw~»óãúñ«ú
äÇõãWµå¬=z¨eË9s¦Ö¬Y#I¦¿~¸õ¥öÚEûùùiëÖN#I¹¹¹¤ÈÈÈ*Í¿¦}ï¸ãåää8t|w1s~Ã
+Ó°aÃ:¾»9¿-ZhÇß]Ì_cxÎÌùÕuw0s~-Z´àúñ¿¸~Ô©öübbbSe;ï¼ÓÔ×Ó>ã Å x ÀO â CP< `' Añ !\þò¹¹¹9s¦«mÔ¶mÛ¦v8´-ùUE~Î!?çsÈÏ9äçòsN]òsKgp¯@;{^mwå°ÞMÔ»oënG~Õ#?çsÈÏ9äçòsù9ÇÑüêÂ¥Å3¤_
ôsío&äçòsù9üC~Î!?çqx' Añ !( 0Å x ÀO â C8ü=ûöä+cîæ ÝPø}þmëPñ
+
+ÕéÓ§¥+NÍ 7°>~ph[gÿþýÕ¿gæ ïñ !( 0Å x ÀO â CP< `¾Ç377WÛ¶mkè¹
+
+
+uèKä*999Z½nz÷íâôÄ pãØ·'_§Ov]ñ¤~]?%Ê© àÆ²$m³TáØ¶¼Ç x ÀO â CP< `' Añ !þOGìÛ¯Ýpå pà^.ýB.-_ì8 íÿ8¨°ûîså° 0Ø_~©sgÏ·xJRXè}zí¥\=, 2]pí+Ù¼Ç x ÀO â CP< `' Añ !( 0Å x ÀOðõp÷l®+&n[7NWÊËÝrl `~n-¾þZµn]eÕÝ®iýÆ>²[?7}qý²sräë ~òIß|ýäë ßwTïõ÷?®²Í¸_Ö7èò+üCmË7ýýï
+ý÷ÔºcÂ~D9Û·WÙwÓÔ#øÛý
+[¶¨Oä *ûTÎã·ç[QQ¡wÞ¯îáÿ¦ÖÔgÐ`Ù°¡Êüoè nýî×ÚMlëºßÓM¶Øÿy Trû3k6lÔÑãÇë½ÿÂ¥KeµZ%I¯\QæÆU¶I_¾\C|@¯pùñ룤°@?üNÓ§NÑ/O®²¾¢Â*}§^Ý»ÛðÑßõÞÜ4ýæk=ûÇQ=îÅ*û®ûðC
Úîÿ×§ÿõËÞ×_ïÓÆ*ö÷)),PIaAýSæ/Ð??ýDk,ÖñßjUú"mÛ¾£Êüòi4ñÕ¿Ú
jÝÖ= pSp{ñõú4úUTTÔkÿî]»éÙÙ¤¬M4x@»õß=ªcÇO(cî\øñGùáÿÕ×ß(ì¡u{`G
=ô°öíß/IÚýÕWê=` «^ùmûùùú÷¡«uÇ
ÔÎÝ{j»§§Ýýù¶gaïð!=5\.µ=+ùÞ¼¹ê$ooo
+S³fͪ·w¯ýým÷¼=[w¶k'<=<õ6mjÓ{«ViîÌê¤&^^
+ô÷×üÙÉ5nߺU+Ûí@}¹o_ã Ûg§50<\ï.ɨ×þÖÛóÞÕjÕü÷4zäH»õ+VjÒãäåé©â_TÆÿ
I4jx¾ß·W£GiìÄI¤øÉ¯èùÞ³[hûk{þÏýäÝÿÿúªÆ½ürµsöõP Nü·×õοî£Â¯¾TÄýýTRX ûûépÞ*ÏLþ|êF=ÿ¼fN{ÊØ%§O«ùo
+©¯Úvê¬øW^QÊ7«S¥?ý¤ ??Û~Õ½_ùV'Öj[Þ¼ysÔ:> ¸y¹½xJÒó1ÑÊÙ¾]ÿsðÝrï¦MUvþ¼í~Ùùóòöö¶ÛÆ¿ý]jÛ¦&½ö:è¶mmë.]º¤YY~!N¾þ~!N+²²téÒ%0?_£¢¢Ô¬Y3==l¾;tȶü©aë[nÑÈ'°m¿oÿ~8Im;uÖ°èåV{¾%
úåp¾òrr4äÁlË}ýäßã^mÛ¾C¾þÚ¶}:ôì¥ôeËlÛìÙ»Wÿs¨ÑCUÛ·eK»Ì*÷ãoõöoè¹ñªS¥6[ëÈÑ£¶ýª{9¾¤°@ŵqÅrM>ݶ¼¬¬L·ùúÖ:> ¸y¢xZ,½óæúó«¯Ú-
+éÙóæ©ìüy?¯Ùóæ©_HHý_«%ËWè¹g±[¾~ófõìÞÝV J
+Ô«Gß¼Ù¡ãwìÐA«×¯×
´"+K:v$jõúõºxñ¢V[oÛþ»ïֻɳtâÛý¶rV%
£-kVkÛÍ¥Â=;j$éý5k4"v´Þñ¦ø¿ÿ·Ú1zvïnWx_ùÛtK<<<TZVVëFF=¡ S§êð#*//WÁ÷ß׺}Ñ/ŶÛѽÁÁ+ ¸ù¢xJÒíÚé©aÛ-KMJÒÞ¯¿Q`¯Þ
+ìÕ[û¾Ù¯ÔIUöí¢ÂÝ×»ÝòÅËkÌÿ¶JcFÒj>dTÝñÓÞ©ôeËu×=ÁzõÍ}ëêû9ç$%jÞâ%
+èÙKÇN°m:G7ÊÿÞÕ¾Dí]{òÒ³§JNoËvë^¢S¿ü¢¡£þhÿ·Ïn2DÛwî´ÝïÚ¹³Â~Dí»kÎüZ*Ivó»ööĸ8
öÑOªm§ÎzòÙ1Z<gÝ1*?Õûb¼Þz}mù¿rsõø£Öù ÀÍÁ2yòdkbbb%%%)ÿÄÅOªu»%ie)ñÕk/½äÊ9¢._¹¢çÆ+cnáǧEsRäåéyý ©¥Ì_ c8Ôÿn©ð#}ÒËû5ñòrKéä¶ã ÆÁ4/µ àÆFñ !( 0Å x ÀO â C¸ü{<wùR,põ° 0пvî_ð.Ó¥Å3¸W Î=¯£e\9, Öþ[Õ»oéÒâÒ¯Bú¹v ¸1ðO â CP< `' Añ !( 0Å pé÷xîÛ¯ÝóåñÕ îxÝ/a%¿sÈÏ9äçòsù9üãH~uáÒâùÅÚùé÷på°^nn®Î=Ý?8ò«ù9üC~Î!?çsÈÏ9æW.ÿ]íýû÷Wbb¢«mÔbCÛ_Uäçòsù9üC~Î!?çÔ%?GñO â CP< `' Añ !( 0Å x ÀO â CP< `·OÅ"Å"OOOé>°[WÝöu§Rll¬öîÝ«Ë/«oß¾¶åêܹ³6mª=z(;;[¥®]»VYn&fίҴiÓj<®»9¿
+M6MíÚµ)34s~6lP`` ¼¼¼Ô¡CmذÁÙÓu93äWé·?§ÇWXX¼½½¦ãÇ×çóãúa¯®ù]o¹9?³_?Üþ§ÕjÕ¥K¬Ñ£G7Ø8òððÐç®>}úØôÑGÚºu«Î9£)S¦høðá®þé³gÏ*..N#F¨÷ÜYó¤Ý»wkÑ¢EõÌ_bb¢233µuëVËjµÖ{n
+ɬùÅÄÄ(--MeeeJMMUlll½çÖÜTýÏéÄ®3gÎ(<<\&Mª÷ÜYóãúa¯®ùÕ¶ÜLÌÙ¯n/<==dY,-]ºTÁÁÁPjjªíÀ²eËÔ¾}{yxxÈÓÓSíÚµ$]»Vݺu¬æÍ»d~
+Ålù]¼xQ111Z¹r¥KæÕÐÌ_zzºÕ[7Ó=ZÙòkß¾½¤_eðóósÉü»ò«éç4;;[ òññQBB>þøc̯¡-?®WÕ7?®WÕ7?³_?Ü^<-¼½½¯
º|+22RV«U***²{`±Xäãã£g}¶ÊN<©¡C*55µÞskHfÍoòäÉÖêr0k~ÇSvv¶5k&??¿j_~1³æ·hÑ"1BÞÞÞzê©§´`Áúdrw~5ýëöÛo$µjÕJ%%%õ[C2k~¸~Ô/?®WÕ7?³_?¼Ü=öööVii©Z´h!I*--Oǹ¶íWÞnÕªÒÒÒgÛ÷Â
Ú¼y³F©CIvíÚ¥¨¨(M>]>úhÝOÎ fÍ/55UV«U&L°ík¶§û%óæçëë«A)))IÙÙÙÖc=V¯slHfÍoäÈZ½zµ¨ììl5Jß}÷]½Î±!¹;¿~N}}}uêÔ)µiÓFEEEòõõ×ù54³æ'qýê׫ùù5óõÃíÏxÖ$,,L3fÌPii©JKK5cÆ
×y«ÕªñãÇ+''Gyyy=z´¬V«í¢ S§NI<<<tîÜ9IWª2d.\¨§~Úu'fwçWQQ!«Õjû2ã?µqw~ôë?6f|¹¤6îί¨¨HÒ¯¹UÞo,ʯ¦ÓA)%%E/^TJJ"##]wrpw~
\?®ªo~\?®ªo~f¿~¶x.^¼X{öìQëÖÕºukåååiñâÅõkÇêÛ·¯uÛm·ÙV=Ô²eKÍ9SkÖ¬$3F?ÿü³xàÛ§ÎJKK>/£¸;¿ÆÎÝù%''kÖ¬YjÑ¢
âããõÞ{ï9}NFrw~.ÔØ±cÕ¬Y37ÎôRø-£ò«É¬Y³´mÛ6Ýzëúì³Ï\¯c»»óãúñ«úäר¹;?³_?ÜúR{mbüüü´uëV§Ç¤ÜÜ\IRdddGî111©óf`æüê2¾»9¿;î¸C999ß]Ìß°aÃ4lØ0ï.fȯ¦qî¼óNíØ±Ã¡ã»ó3ë¿y×2s~uß]ÌÙ¯¦}Æ 7' Añ !( 0Å x ÀO â C¸üässs5sæLWÛ¨mÛ¶Mí:6qh[ò«üC~Î!?çsÈÏ9äçºäç(Ïà^:wö¼ÛîÊa½;¨wß.×ÝüªG~Î!?çsÈÏ9äçòs£ùÕ
KgH¿.
+éçÚ ÞLÈÏ9äçòsù9üC~Î!?ãðO â CP< `' Añ !( 0Å pø{<÷íÉWÆÜÍ
+9 42»?? ðûüÚÖ¡âªÓ§OKW n0a}üáжÏþýû«ÿþÎÌ 79Þã CP< `' Añ !( 0Å x À}gnn®¶mÛÖÐs @#êÐÈ;T<srr´zÝõîÛÅé àÆ±oO¾N>íºâ)I!ýº(~JS ÀeIÚf©Â±my' Añ !( 0Å x ÀO â C8ü=Ø·'_»??àÊ! à&Á½]ú\Z<¿Øq@ÛÿqPa÷ÝçÊa `°/¾üRçÎ7oñ¤°ÐûôÚK/¹zX (eþ»àÚW²y' Añ !( 0Å x ÀO â CP< `' Añ !(.àëàî)Ø\)/WLÜ8·;&n®»åØ ÀüÜZ<}ý´jݺ*˪»]Óú}d·~núâ*ûeçäÈ×?@ÿüä:¿!øúÈ×?@¿ï¨Þêï\eq/¿¬oÐå+W4ø?ÚoزE}"©uÇ
?ür¶o¯²ï¦-©Gð=×ݧr¿=ß
+½óî|uÿ7µî¤>kÍ
+Uæ[@uëw¿ÖnÚd[×ýnÚ´ÅþÏ Ûñ\³a£?^ïý.]*«Õ*Iº|å27n¬²MúòåòàZ¼|
Ë_%
úéàw>u^|yrõVyxxè¼<õêÞݶü¿>ýo_ö¾~øz&¼0V±ã^¬²ïº?TXhèu÷)),PIaAýSæ/Ð??ýDk,ÖñßjUú"mÛ¾£Êüòi4ñÕ¿Ú
jÝÖ= pSp{ñõú4úUTTÔkÿî]»éÙÙ¤¬M4x@»õß=ªcÇO(cî\øñGùáÿÕ×ß(ì¡u{`G
=ô°öíß/IÚýÕWê=` «^ùmûùùú÷¡«uÇ
ÔÎÝ{j»§§Ýýù¶gaïð!=5\.µ=+¹àíÙº³];Y<<äéá©?´iSe̼½{èïo»ïÈ>×zoÕ*Í9S]ÔÄËKþþ?;¹Æí[·je»èï¯/÷í«u| pór{ñìÔ±£ëÝ%õÚÿOÑÑz{Þ»²ZñFi·>cÅJMzq¼<=õRüÊX±Òáã¿0iF
+Ò÷ûöjÔð(8I?ù=£Ã{vëm-rÏÿy¢¢¡£û¿Qâ__Õ¸_®vξþjÔIÿöºÞ1ã×ýcbTøÕ¸¿J
+q?ÎÛc÷̤¯Úvê¬øW^QÊ7«]rú´7kVåxµís?ý¤ ??Û~Õ½_ùV'Öj[Þ¼ysÔ:> ¸y¹½xJÒó1ÑÊÙ¾]ÿsðÝrï¦MUvþ¼í~Ùùóòöö¶ÛÆ¿ý]jÛ¦&½ö:è¶mmë.]º¤YY~!N¾þ~!N+²²téÒ%0?_£¢¢Ô¬Y3==l¾;tȶü©aë[nÑÈ'°m¿oÿ~8Im;uÖ°èåV{¾%
úåp¾òrr4äÁlË}ýäßã^mÛ¾C¾þÚ¶}:ôì¥ôeËìöýñÀ·zûÍ7ôÜø UÆömÙÒ.3Gö¹VÖuäèQÛ~Õ½_RX âÃÚ¸b¹¦Ln[^VV¦Û|}k ܼLQ<-Þyó
+ýùÕWíôÖìyóTvþ¼ÊÎ×ìyóÔ/$¤Êþ/Õå+ôÜ3ÏØ-_¿y³zvïn+P%
êÕ£ÖoÞìÐñ;vè Õë×ëÂ
Z¥N;Jµzýz]¼xQ«Ö·mÏÝwëÝäY:ñí~[9«ÂÑ5«µmËfRIa5JôÊߦ«¨¸Xäáá¡Ò²²*côìÞÝ®ð:²ÏµFF=¡ S§êð#*//WÁ÷ß׺}Ñ/ŶÛѽÁÁ, ¸é¢xJÒíÚé©aÛ-KMJÒÞ¯¿Q`¯Þ
+ìÕ[û¾Ù¯ÔIUöí¢ÂÝ×»ÝòÅËkÌÿ¶JcFÒj>dTÝñÓÞ©ôeËu×=ÁzõÍ}ëêû9ç$%jÞâ%
+èÙKÇN°m:G7ÊÿÞÕ¾Dí]{òÒ³§JNoËvëºvî¬ðQûàî3¤¥VÙè!Ú¾sçu÷¹v~×Þ§ÐÞ!2âIµíÔYO>;Fç̱;Få§Úc_×[¯O³-ÿWn®ôÑ:3 ¸9X&OlMLL¬u£¤¤$娡ø)Qµn·$m³,%¾zí¥\9GÔÁå+Wô\ÂxeÌM3üØ1qã´hN¼<=¯¿1 0µùtìÂúß-þr¤Oz¹rp¿&^^n)Üv\ Ð8æ¥v ÜØ( 0Å x ÀO â CP< `çî/¿RÊ® ú×Îò¾Õ¥cº´x÷
+Ô¹³çu´ì+ ÁÚßs«z÷íâÒ1]Z<CúuQH?×N 7Þã CP< `' Añ !( 0Å x À.ýÏ}{òµûs¾<¾:Á½¯û%¬äW3òsù9üC~Î!?çsɯ.\Z<¿Øq@;?ý^®¶ÑËÍÍÕ¹³ç¯ûG~Õ#?çsÈÏ9äçòsù9ÇÑüêÂå¿«½ÿþJLLtõ°ZRRòOìph[ò«üC~Î!?çsÈÏ9äçºäç(Þã CP< `' Añ !( 0Å x ÀO â CP< `' áÖâi±Xd±Xäéé© }ðÁvëªÛ¾®ãTÕÞ½{uùòeõíÛ·ÊúiÓ¦Ù¿aÃÊËËK:tÐ
+ês
+ÊùUî[ù_¥ãÇ+,,LÞÞÞ
+ÓñãÇ9Õaæü²²²ÔµkW5mÚT=zôPvv¶3§Ú Ì_¥ßþ\󫨨дiÓÔ®];yxx2C3çÇõÃ^MùÕô÷뽺ægöëÛñ´Zºté5zôè§¢¢BúüóÏÕ§O»u»wïÖ¢EìÅÄÄ(--MeeeJMMUlll½çÖÌÕjµýWiâÄ
+×3g®I&Õ{n
+ɬùeee)33SgÏU\\FQï¹5$³æ'Uÿsm6fÍ/11QÚºu«ÊËË«dkfÍë½ò«éï×{uÍÏì×·ÏJ
+2NJJ,.]ªàà`EDD(55ÕöÈàâÅÑÊ+íökß¾½¤_¥øùù¹d~
+Å]ùIÒï~÷;µhÑBÿñÿ¡ï¿ÿ^ùøø(!!Aü±Kæ×PÌßÚµkÕ[7ùøøhðàÁjÞ¼¹Kæ×PÌ_M?×fe¶üÒ'ns IDATÓÓ¬nݺòÙÎß2[~\?®º^~5ý=ãúqU}ó3ûõÃíÅÓb±ÈÛÛ[ñññZ¸p¡ËÇIHHPqq±"##eµZ©¢¢"Û#É'+::Z°oÑ¢E1b¼½½õÔSOiÁõ[Crw~V«UgÎQAAî¾ûnÛ#«ââbÝ~ûí¤VZ©¤¤Ä³l8fͯÒÉ'5tèP¥¦¦Ö{n
+ɬùÕôsm6fÍïØ±cÊÎÎV³fÍäççWíËf`Öü¸~\u½üjú{ÆõãªúæWɬ×/wO ¦p¼½½UZZª-ZHJKKåããSçq®}Py»U«VJKKS\\RSSeµZ5aÂÛ6V«U#GÔêÕ«5pà@eggkÔ¨Qúî»ïêu
+ÉÝùUjݺµ^ýuýîw¿$ùúúêÔ©SjÓ¦äëë[·3Yó¤]»v)**JÓ§O×£>êøIȬùÕôsm6fÍÏ××W
+RRR²³³Ç{¬n'g ³æÇõãªëåWÓß3®WÕ7?ÉÜ×·?ãY°°0Í1C¥¥¥*--Õ3^çq¬V«Æ¯åååiôèѲZ¶4***ìÞSùÿ¢¢"I¿þaWÞo,ʯÒéÓ§5cÆÿßλDrÅq ÿ¥¸FÄÂbA`àR\ä=\XEËí¬-ñ¿Èn±EÅ%þ©ìv
¬[D42
Hr@RwIôFßæÍ¬÷ùÔoß¼ù2îû:;»_ÇÒÒRDD¬E§Óëëëèt:Ñh4Ær^¹ßááalmmE·Ûííí±SNeçwÛßõ¤(;¿õõõ¸yÿÛßVv~öWÞßm×ýãæWõý£²Å³×ëÅÙÙYÔjµ¨Õjq~~½^ïAs
+ÃXYYËËË-ôn·»»»1
55{{{ÿÂ?åÊïõ7òæææâôôôÍ3uV+AÌÌÌÄÉÉI´ÛíäsÊ©ìüvvvâââ"666ÞyùòeòyåRv~®ìüÚív´Zýýý8::J>§ÊÎÏþqã®ün»Îì7_Õ÷R?j¿ë.Äââb'Ï1""¢ÑhÜùÓÛó4Íh6
_*äwÛkb8:~Yªß$Ü¡«r~÷S*ç7??ý~¿ÐñËRåüì7îÊï¶ëÌþqã!ùUõ=ïµÊÞñ àqQ< ÈBñ Å ,O ²P< ÈBñ Å ,Æþò£Ñ(Æ=íDñáÇO
+ß¿É/üÒÈ/üÒÈ/üÒÜ'¿¢ÆZ<?ùôiüþÛñó¯ßsÚ7ÿôI|¶òìãä÷ßäF~iäF~iäF~iæwc-Ï_<ç/Æ»À÷üÒÈ/üÒÈ/üÒÈ/üòñ' Y( d¡x
â @' Y( d¡x Eáßñüñìøöïþϵ 0a~8ý)¾úâ£BcÏåå帺ºø3i] <2_~¾«««
Æ*õz=êõzÊ xÏyÆ ,O ²P< ÈBñ Å ,O ²P< Èâz½þ׿æfÙë àë÷ûñ7¬z\u* IEND®B`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/images/ppc64-without-smt.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x55555555,0x55555555" complete_cpuset="0xffffffff,0xffffffff" online_cpuset="0x55555555,0x55555555" allowed_cpuset="0xffffffff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f">
+ <page_type size="65536" count="0"/>
+ <page_type size="16777216" count="0"/>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00005555" complete_cpuset="0x00005555" online_cpuset="0x00005555" allowed_cpuset="0x00005555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="31943819264">
+ <page_type size="65536" count="487424"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x55550000" complete_cpuset="0x55550000" online_cpuset="0x55550000" allowed_cpuset="0x55550000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="33554432000">
+ <page_type size="65536" count="512000"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="2" cpuset="0x00005555,0x0" complete_cpuset="0x00005555,0x0" online_cpuset="0x00005555,0x0" allowed_cpuset="0x00005555,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="33554432000">
+ <page_type size="65536" count="512000"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ <object type="PU" os_level="-1" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="3" cpuset="0x55550000,0x0" complete_cpuset="0x55550000,0x0" online_cpuset="0x55550000,0x0" allowed_cpuset="0x55550000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="33285996544">
+ <page_type size="65536" count="507904"/>
+ <page_type size="16777216" count="0"/>
+ <object type="PU" os_level="-1" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ <object type="PU" os_level="-1" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-css.inc
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-css.inc (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-css.inc 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+<link href="tabs.css" rel="stylesheet" type="text/css">
+<link href="doxygen.css" rel="stylesheet" type="text/css">
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-footer.inc
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-footer.inc (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-footer.inc 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+<?php
+include_once("$topdir/includes/footer.inc");
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-header.inc
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-header.inc (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org-header.inc 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,14 @@
+<?php
+$topdir = "../../../..";
+# Note that we must use the PHP "$$" indirection to assign to the
+# "title" variable, because if we list "$ title" (without the space)
+# in this file, Doxygen will replace it with a string title.
+$ver = basename(getcwd());
+$thwarting_doxygen_preprocessor = "title";
+$$thwarting_doxygen_preprocessor = "Portable Hardware Locality (hwloc) Documentation: $ver";
+$header_include_file = "$topdir/projects/hwloc/doc/$ver/www.open-mpi.org-css.inc";
+
+include_once("$topdir/projects/hwloc/nav.inc");
+include_once("$topdir/includes/header.inc");
+include_once("$topdir/includes/code.inc");
+?>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org.cfg
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org.cfg (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/doc/www.open-mpi.org.cfg 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,20 @@
+# Copyright © 2010-2011 inria. All rights reserved.
+# Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+###############################################################
+# Customized for output onto the www.open-mpi.org web site.
+###############################################################
+
+ at INCLUDE = doxygen.cfg
+
+#PROJECT_NUMBER = @VERSION@
+OUTPUT_DIRECTORY = www.open-mpi.org
+#EXAMPLE_PATH = @top_srcdir@/doc
+#IMAGE_PATH = @top_srcdir@/doc/images images
+HTML_FILE_EXTENSION = .php
+HTML_HEADER = www.open-mpi.org-header.inc
+HTML_FOOTER = www.open-mpi.org-footer.inc
+GENERATE_MAN = NO
+GENERATE_LATEX = NO
+#INCLUDE_PATH = @top_srcdir@/doc
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,7 @@
-# Copyright © 2009-2010 INRIA. All rights reserved.
+# Copyright © 2009-2010 inria. All rights reserved.
# Copyright © 2009-2010 Université Bordeaux 1
# Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
# See COPYING in top-level directory.
# Only install the headers if we're in standalone mode (meaning:
@@ -33,6 +34,11 @@
hwloc/linux-libnuma.h
endif HWLOC_HAVE_LINUX
+if HWLOC_HAVE_SOLARIS
+include_hwloc_HEADERS += \
+ private/solaris-chiptype.h
+endif HWLOC_HAVE_SOLARIS
+
if HWLOC_HAVE_SCHED_SETAFFINITY
include_hwloc_HEADERS += hwloc/glibc-sched.h
endif HWLOC_HAVE_SCHED_SETAFFINITY
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/autogen/config.h.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/autogen/config.h.in 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/autogen/config.h.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/* -*- c -*-
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -21,7 +21,11 @@
# endif
#endif
-#undef __hwloc_inline
+#if defined(_MSC_VER) || defined(__HP_cc)
+# define __hwloc_inline __inline
+#else
+# define __hwloc_inline __inline__
+#endif
/*
* Note: this is public. We can not assume anything from the compiler used
@@ -31,53 +35,68 @@
*/
/* Maybe before gcc 2.95 too */
-#if defined(HWLOC_HAVE_ATTRIBUTE_UNUSED) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
-# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || HWLOC_HAVE_ATTRIBUTE_UNUSED
-# define __hwloc_attribute_unused __attribute__((__unused__))
-# else
-# define __hwloc_attribute_unused
-# endif
+#ifdef HWLOC_HAVE_ATTRIBUTE_UNUSED
+#define __HWLOC_HAVE_ATTRIBUTE_UNUSED HWLOC_HAVE_ATTRIBUTE_UNUSED
+#elif defined(__GNUC__)
+# define __HWLOC_HAVE_ATTRIBUTE_UNUSED (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
#else
+# define __HWLOC_HAVE_ATTRIBUTE_UNUSED 0
+#endif
+#if __HWLOC_HAVE_ATTRIBUTE_UNUSED
+# define __hwloc_attribute_unused __attribute__((__unused__))
+#else
# define __hwloc_attribute_unused
#endif
-#if defined(HWLOC_HAVE_ATTRIBUTE_MALLOC) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
-# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) || HWLOC_HAVE_ATTRIBUTE_MALLOC
-# define __hwloc_attribute_malloc __attribute__((__malloc__))
-# else
-# define __hwloc_attribute_malloc
-# endif
+#ifdef HWLOC_HAVE_ATTRIBUTE_MALLOC
+#define __HWLOC_HAVE_ATTRIBUTE_MALLOC HWLOC_HAVE_ATTRIBUTE_MALLOC
+#elif defined(__GNUC__)
+# define __HWLOC_HAVE_ATTRIBUTE_MALLOC (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
#else
+# define __HWLOC_HAVE_ATTRIBUTE_MALLOC 0
+#endif
+#if __HWLOC_HAVE_ATTRIBUTE_MALLOC
+# define __hwloc_attribute_malloc __attribute__((__malloc__))
+#else
# define __hwloc_attribute_malloc
#endif
-#if defined(HWLOC_HAVE_ATTRIBUTE_CONST) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
-# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || HWLOC_HAVE_ATTRIBUTE_CONST
-# define __hwloc_attribute_const __attribute__((__const__))
-# else
-# define __hwloc_attribute_const
-# endif
+#ifdef HWLOC_HAVE_ATTRIBUTE_CONST
+#define __HWLOC_HAVE_ATTRIBUTE_CONST HWLOC_HAVE_ATTRIBUTE_CONST
+#elif defined(__GNUC__)
+# define __HWLOC_HAVE_ATTRIBUTE_CONST (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))
#else
+# define __HWLOC_HAVE_ATTRIBUTE_CONST 0
+#endif
+#if __HWLOC_HAVE_ATTRIBUTE_CONST
+# define __hwloc_attribute_const __attribute__((__const__))
+#else
# define __hwloc_attribute_const
#endif
-#if defined(HWLOC_HAVE_ATTRIBUTE_PURE) || (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
-# if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) || HWLOC_HAVE_ATTRIBUTE_PURE
-# define __hwloc_attribute_pure __attribute__((__pure__))
-# else
-# define __hwloc_attribute_pure
-# endif
+#ifdef HWLOC_HAVE_ATTRIBUTE_PURE
+#define __HWLOC_HAVE_ATTRIBUTE_PURE HWLOC_HAVE_ATTRIBUTE_PURE
+#elif defined(__GNUC__)
+# define __HWLOC_HAVE_ATTRIBUTE_PURE (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96))
#else
+# define __HWLOC_HAVE_ATTRIBUTE_PURE 0
+#endif
+#if __HWLOC_HAVE_ATTRIBUTE_PURE
+# define __hwloc_attribute_pure __attribute__((__pure__))
+#else
# define __hwloc_attribute_pure
#endif
-#if defined(HWLOC_HAVE_ATTRIBUTE_DEPRECATED) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
-# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) || HWLOC_HAVE_ATTRIBUTE_DEPRECATED
-# define __hwloc_attribute_deprecated __attribute__((__deprecated__))
-# else
-# define __hwloc_attribute_deprecated
-# endif
+#ifdef HWLOC_HAVE_ATTRIBUTE_DEPRECATED
+#define __HWLOC_HAVE_ATTRIBUTE_DEPRECATED HWLOC_HAVE_ATTRIBUTE_DEPRECATED
+#elif defined(__GNUC__)
+# define __HWLOC_HAVE_ATTRIBUTE_DEPRECATED (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#else
+# define __HWLOC_HAVE_ATTRIBUTE_DEPRECATED 0
+#endif
+#if __HWLOC_HAVE_ATTRIBUTE_DEPRECATED
+# define __hwloc_attribute_deprecated __attribute__((__deprecated__))
+#else
# define __hwloc_attribute_deprecated
#endif
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/bitmap.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cpuset.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cpuset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
+ * Copyright © 2009-2010 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cuda.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cuda.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cuda.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
- * Copyright © 2010 INRIA. All rights reserved.
- * Copyright © 2010 Université Bordeaux 1
+ * Copyright © 2010 inria. All rights reserved.
+ * Copyright © 2010-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -19,6 +19,7 @@
#include <hwloc.h>
#include <hwloc/autogen/config.h>
#include <hwloc/linux.h>
+#include <hwloc/helper.h>
#include <cuda.h>
@@ -32,6 +33,37 @@
* @{
*/
+/** \brief Return the domain, bus and device IDs of device \p cudevice.
+ */
+static __hwloc_inline int
+hwloc_cuda_get_device_pci_ids(hwloc_topology_t topology __hwloc_attribute_unused,
+ CUdevice cudevice, int *domain, int *bus, int *dev)
+{
+ CUresult cres;
+
+#if CUDA_VERSION >= 4000
+ cres = cuDeviceGetAttribute(domain, CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, cudevice);
+ if (cres != CUDA_SUCCESS) {
+ errno = ENOSYS;
+ return -1;
+ }
+#else
+ *domain = 0;
+#endif
+ cres = cuDeviceGetAttribute(bus, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cudevice);
+ if (cres != CUDA_SUCCESS) {
+ errno = ENOSYS;
+ return -1;
+ }
+ cres = cuDeviceGetAttribute(dev, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cudevice);
+ if (cres != CUDA_SUCCESS) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+ return 0;
+}
+
/** \brief Get the CPU set of logical processors that are physically
* close to device \p cudevice.
*
@@ -47,30 +79,12 @@
#ifdef HWLOC_LINUX_SYS
/* If we're on Linux, use the sysfs mechanism to get the local cpus */
#define HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX 128
- CUresult cres;
- int domainid = 0;
- int deviceid;
- int busid;
char path[HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX];
FILE *sysfile = NULL;
+ int domainid, busid, deviceid;
-#if CUDA_VERSION >= 4000
- cres = cuDeviceGetAttribute(&domainid, CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID, cudevice);
- if (cres != CUDA_SUCCESS) {
- errno = ENOSYS;
+ if (hwloc_cuda_get_device_pci_ids(topology, cudevice, &domainid, &busid, &deviceid))
return -1;
- }
-#endif
- cres = cuDeviceGetAttribute(&busid, CU_DEVICE_ATTRIBUTE_PCI_BUS_ID, cudevice);
- if (cres != CUDA_SUCCESS) {
- errno = ENOSYS;
- return -1;
- }
- cres = cuDeviceGetAttribute(&deviceid, CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID, cudevice);
- if (cres != CUDA_SUCCESS) {
- errno = ENOSYS;
- return -1;
- }
sprintf(path, "/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus", domainid, busid, deviceid);
sysfile = fopen(path, "r");
@@ -78,6 +92,8 @@
return -1;
hwloc_linux_parse_cpumap_file(sysfile, set);
+ if (hwloc_bitmap_iszero(set))
+ hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
fclose(sysfile);
#else
@@ -87,6 +103,23 @@
return 0;
}
+/** \brief Get the hwloc object for the PCI device corresponding
+ * to device \p cudevice.
+ *
+ * For the given CUDA Runtime API device \p cudevice, return the hwloc PCI
+ * object containing the device. Returns NULL if there is none.
+ */
+static __hwloc_inline hwloc_obj_t
+hwloc_cuda_get_device_pcidev(hwloc_topology_t topology, CUdevice cudevice)
+{
+ int domain, bus, dev;
+
+ if (hwloc_cuda_get_device_pci_ids(topology, cudevice, &domain, &bus, &dev))
+ return NULL;
+
+ return hwloc_get_pcidev_by_busid(topology, domain, bus, dev, 0);
+}
+
/** @} */
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cudart.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cudart.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/cudart.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
- * Copyright © 2010 INRIA. All rights reserved.
- * Copyright © 2010 Université Bordeaux 1
+ * Copyright © 2010 inria. All rights reserved.
+ * Copyright © 2010-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -19,6 +19,7 @@
#include <hwloc.h>
#include <hwloc/autogen/config.h>
#include <hwloc/linux.h>
+#include <hwloc/helper.h>
#include <cuda_runtime_api.h>
@@ -32,10 +33,37 @@
* @{
*/
+/** \brief Return the domain, bus and device IDs of device \p device.
+ */
+static __hwloc_inline int
+hwloc_cudart_get_device_pci_ids(hwloc_topology_t topology __hwloc_attribute_unused,
+ int device, int *domain, int *bus, int *dev)
+{
+ cudaError_t cerr;
+ struct cudaDeviceProp prop;
+
+ cerr = cudaGetDeviceProperties(&prop, device);
+ if (cerr) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+#if CUDART_VERSION >= 4000
+ *domain = prop.pciDomainID;
+#else
+ *domain = 0;
+#endif
+
+ *bus = prop.pciBusID;
+ *dev = prop.pciDeviceID;
+
+ return 0;
+}
+
/** \brief Get the CPU set of logical processors that are physically
- * close to device \p cudevice.
+ * close to device \p device.
*
- * For the given CUDA Runtime API device \p cudevice, read the corresponding
+ * For the given CUDA Runtime API device \p device, read the corresponding
* kernel-provided cpumap file and return the corresponding CPU set.
* This function is currently only implemented in a meaningful way for
* Linux; other systems will simply get a full cpuset.
@@ -47,28 +75,20 @@
#ifdef HWLOC_LINUX_SYS
/* If we're on Linux, use the sysfs mechanism to get the local cpus */
#define HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX 128
- cudaError_t cerr;
- struct cudaDeviceProp prop;
char path[HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX];
FILE *sysfile = NULL;
- int pciDomainID = 0;
-
- cerr = cudaGetDeviceProperties(&prop, device);
- if (cerr) {
- errno = ENOSYS;
+ int domain, bus, dev;
+ if (hwloc_cudart_get_device_pci_ids(topology, device, &domain, &bus, &dev))
return -1;
- }
-#if CUDART_VERSION >= 4000
- pciDomainID = prop.pciDomainID;
-#endif
-
- sprintf(path, "/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus", pciDomainID, prop.pciBusID, prop.pciDeviceID);
+ sprintf(path, "/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus", domain, bus, dev);
sysfile = fopen(path, "r");
if (!sysfile)
return -1;
hwloc_linux_parse_cpumap_file(sysfile, set);
+ if (hwloc_bitmap_iszero(set))
+ hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
fclose(sysfile);
#else
@@ -78,6 +98,23 @@
return 0;
}
+/** \brief Get the hwloc object for the PCI device corresponding
+ * to device \p device.
+ *
+ * For the given CUDA Runtime API device \p device, return the hwloc PCI
+ * object containing the device. Returns NULL if there is none.
+ */
+static __hwloc_inline hwloc_obj_t
+hwloc_cudart_get_device_pcidev(hwloc_topology_t topology, int device)
+{
+ int domain, bus, dev;
+
+ if (hwloc_cudart_get_device_pci_ids(topology, device, &domain, &bus, &dev))
+ return NULL;
+
+ return hwloc_get_pcidev_by_busid(topology, domain, bus, dev, 0);
+}
+
/** @} */
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/glibc-sched.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/glibc-sched.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/glibc-sched.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
+ * Copyright © 2009-2010 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -21,7 +21,7 @@
#include <hwloc/helper.h>
#include <assert.h>
-#if !defined _GNU_SOURCE || !defined _SCHED_H || !defined CPU_SETSIZE
+#if !defined _GNU_SOURCE || !defined _SCHED_H || (!defined CPU_SETSIZE && !defined sched_priority)
#error Please make sure to include sched.h before including glibc-sched.h, and define _GNU_SOURCE before any inclusion of sched.h
#endif
@@ -78,8 +78,9 @@
hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology __hwloc_attribute_unused, hwloc_cpuset_t hwlocset,
const cpu_set_t *schedset, size_t schedsetsize)
{
+ int cpu;
#ifdef CPU_ZERO_S
- int cpu, count;
+ int count;
#endif
hwloc_bitmap_zero(hwlocset);
#ifdef CPU_ZERO_S
@@ -96,7 +97,6 @@
/* sched.h does not support dynamic cpu_set_t (introduced in glibc 2.7),
* assume we have a very old interface without CPU_COUNT (added in 2.6)
*/
- int cpu;
assert(schedsetsize == sizeof(cpu_set_t));
for(cpu=0; cpu<CPU_SETSIZE; cpu++)
if (CPU_ISSET(cpu, schedset))
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/helper.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -40,8 +40,13 @@
* If no object of this type is present on the underlying architecture, the
* function returns the depth of the first "present" object typically found
* inside \p type.
+ *
+ * If some objects of the given type exist in different levels, for instance
+ * L1 and L2 caches, the function returns HWLOC_TYPE_DEPTH_MULTIPLE.
*/
-static __hwloc_inline int __hwloc_attribute_pure
+static __hwloc_inline int
+hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
+static __hwloc_inline int
hwloc_get_type_or_below_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -63,8 +68,13 @@
* If no object of this type is present on the underlying architecture, the
* function returns the depth of the first "present" object typically
* containing \p type.
+ *
+ * If some objects of the given type exist in different levels, for instance
+ * L1 and L2 caches, the function returns HWLOC_TYPE_DEPTH_MULTIPLE.
*/
-static __hwloc_inline int __hwloc_attribute_pure
+static __hwloc_inline int
+hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
+static __hwloc_inline int
hwloc_get_type_or_above_depth (hwloc_topology_t topology, hwloc_obj_type_t type)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -100,14 +110,18 @@
* for complex topologies. This function replaces the old deprecated
* hwloc_get_system_obj().
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_root_obj (hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_root_obj (hwloc_topology_t topology)
{
return hwloc_get_obj_by_depth (topology, 0, 0);
}
/** \brief Returns the ancestor object of \p obj at depth \p depth. */
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology __hwloc_attribute_unused, unsigned depth, hwloc_obj_t obj) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_ancestor_obj_by_depth (hwloc_topology_t topology __hwloc_attribute_unused, unsigned depth, hwloc_obj_t obj)
{
hwloc_obj_t ancestor = obj;
@@ -119,7 +133,9 @@
}
/** \brief Returns the ancestor object of \p obj with type \p type. */
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_type_t type, hwloc_obj_t obj) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_ancestor_obj_by_type (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_type_t type, hwloc_obj_t obj)
{
hwloc_obj_t ancestor = obj->parent;
@@ -166,7 +182,9 @@
* processors.
* However, using CPU sets to hide this complexity should often be preferred.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)
{
hwloc_obj_t obj = NULL;
@@ -191,7 +209,9 @@
}
/** \brief Returns the common parent object to objects lvl1 and lvl2 */
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_common_ancestor_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_common_ancestor_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj1, hwloc_obj_t obj2)
{
/* the loop isn't so easy since intermediate ancestors may have
@@ -216,7 +236,9 @@
*
* \note This function assumes that both \p obj and \p subtree_root have a \p cpuset.
*/
-static __hwloc_inline int __hwloc_attribute_pure
+static __hwloc_inline int
+hwloc_obj_is_in_subtree (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, hwloc_obj_t subtree_root) __hwloc_attribute_pure;
+static __hwloc_inline int
hwloc_obj_is_in_subtree (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj, hwloc_obj_t subtree_root)
{
return hwloc_bitmap_isincluded(obj->cpuset, subtree_root->cpuset);
@@ -237,13 +259,15 @@
* This is convenient for iterating over all largest objects within a CPU set
* by doing a loop getting the first largest object and clearing its CPU set
* from the remaining CPU set.
+ *
+ * \note This function cannot work if the root object does not have a CPU set,
+ * e.g. if the topology is made of different machines.
*/
static __hwloc_inline hwloc_obj_t
hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)
{
hwloc_obj_t obj = hwloc_get_root_obj(topology);
- /* FIXME: what if !root->cpuset? */
- if (!hwloc_bitmap_intersects(obj->cpuset, set))
+ if (!obj->cpuset || !hwloc_bitmap_intersects(obj->cpuset, set))
return NULL;
while (!hwloc_bitmap_isincluded(obj->cpuset, set)) {
/* while the object intersects without being included, look at its children */
@@ -265,6 +289,9 @@
/** \brief Get the set of largest objects covering exactly a given cpuset \p set
*
* \return the number of objects returned in \p objs.
+ *
+ * \note This function cannot work if the root object does not have a CPU set,
+ * e.g. if the topology is made of different machines.
*/
HWLOC_DECLSPEC int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set,
hwloc_obj_t * __hwloc_restrict objs, int max);
@@ -274,13 +301,17 @@
* If \p prev is \c NULL, return the first object at depth \p depth
* included in \p set. The next invokation should pass the previous
* return value in \p prev so as to obtain the next object in \p set.
+ *
+ * \note This function cannot work if objects at the given depth do
+ * not have CPU sets or if the topology is made of different machines.
*/
static __hwloc_inline hwloc_obj_t
hwloc_get_next_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
unsigned depth, hwloc_obj_t prev)
{
hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
- /* no need to check next->cpuset because objects in levels always have a cpuset */
+ if (!next || !next->cpuset)
+ return NULL;
while (next && !hwloc_bitmap_isincluded(next->cpuset, set))
next = next->next_cousin;
return next;
@@ -291,6 +322,9 @@
* If there are multiple or no depth for given type, return \c NULL
* and let the caller fallback to
* hwloc_get_next_obj_inside_cpuset_by_depth().
+ *
+ * \note This function cannot work if objects of the given type do
+ * not have CPU sets or if the topology is made of different machines.
*/
static __hwloc_inline hwloc_obj_t
hwloc_get_next_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
@@ -303,15 +337,22 @@
}
/** \brief Return the (logically) \p idx -th object at depth \p depth included in CPU set \p set.
+ *
+ * \note This function cannot work if objects at the given depth do
+ * not have CPU sets or if the topology is made of different machines.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
+ unsigned depth, unsigned idx) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
unsigned depth, unsigned idx)
{
+ hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
unsigned count = 0;
- hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
+ if (!obj || !obj->cpuset)
+ return NULL;
while (obj) {
- /* no need to check obj->cpuset because objects in levels always have a cpuset */
if (hwloc_bitmap_isincluded(obj->cpuset, set)) {
if (count == idx)
return obj;
@@ -327,9 +368,15 @@
* If there are multiple or no depth for given type, return \c NULL
* and let the caller fallback to
* hwloc_get_obj_inside_cpuset_by_depth().
+ *
+ * \note This function cannot work if objects of the given type do
+ * not have CPU sets or if the topology is made of different machines.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
+ hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
hwloc_obj_type_t type, unsigned idx)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -338,15 +385,23 @@
return hwloc_get_obj_inside_cpuset_by_depth(topology, set, depth, idx);
}
-/** \brief Return the number of objects at depth \p depth included in CPU set \p set. */
-static __hwloc_inline unsigned __hwloc_attribute_pure
+/** \brief Return the number of objects at depth \p depth included in CPU set \p set.
+ *
+ * \note This function cannot work if objects at the given depth do
+ * not have CPU sets or if the topology is made of different machines.
+ */
+static __hwloc_inline unsigned
hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
+ unsigned depth) __hwloc_attribute_pure;
+static __hwloc_inline unsigned
+hwloc_get_nbobjs_inside_cpuset_by_depth (hwloc_topology_t topology, hwloc_const_cpuset_t set,
unsigned depth)
{
hwloc_obj_t obj = hwloc_get_obj_by_depth (topology, depth, 0);
- int count = 0;
+ unsigned count = 0;
+ if (!obj || !obj->cpuset)
+ return 0;
while (obj) {
- /* no need to check obj->cpuset because objects in levels always have a cpuset */
if (hwloc_bitmap_isincluded(obj->cpuset, set))
count++;
obj = obj->next_cousin;
@@ -359,9 +414,15 @@
* If no object for that type exists inside CPU set \p set, 0 is
* returned. If there are several levels with objects of that type
* inside CPU set \p set, -1 is returned.
+ *
+ * \note This function cannot work if objects of the given type do
+ * not have CPU sets or if the topology is made of different machines.
*/
-static __hwloc_inline int __hwloc_attribute_pure
+static __hwloc_inline int
hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
+ hwloc_obj_type_t type) __hwloc_attribute_pure;
+static __hwloc_inline int
+hwloc_get_nbobjs_inside_cpuset_by_type (hwloc_topology_t topology, hwloc_const_cpuset_t set,
hwloc_obj_type_t type)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -372,6 +433,31 @@
return hwloc_get_nbobjs_inside_cpuset_by_depth(topology, set, depth);
}
+/** \brief Return the logical index among the objects included in CPU set \p set.
+ *
+ * Consult all objects in the same level as \p obj and inside CPU set \p set
+ * in the logical order, and return the index of \p obj within them.
+ * If \p set covers the entire topology, this is the logical index of \p obj.
+ * Otherwise, this is similar to a logical index within the part of the topology
+ * defined by CPU set \p set.
+ */
+static __hwloc_inline int
+hwloc_get_obj_index_inside_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set,
+ hwloc_obj_t obj) __hwloc_attribute_pure;
+static __hwloc_inline int
+hwloc_get_obj_index_inside_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set,
+ hwloc_obj_t obj)
+{
+ int index = 0;
+ if (!hwloc_bitmap_isincluded(obj->cpuset, set))
+ return -1;
+ /* count how many objects are inside the cpuset on the way from us to the beginning of the level */
+ while ((obj = obj->prev_cousin) != NULL)
+ if (hwloc_bitmap_isincluded(obj->cpuset, set))
+ index++;
+ return index;
+}
+
/** @} */
@@ -383,16 +469,19 @@
/** \brief Get the child covering at least CPU set \p set.
*
* \return \c NULL if no child matches or if \p set is empty.
+ *
+ * \note This function cannot work if parent does not have a CPU set.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
hwloc_get_child_covering_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set,
+ hwloc_obj_t parent) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
+hwloc_get_child_covering_cpuset (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_const_cpuset_t set,
hwloc_obj_t parent)
{
hwloc_obj_t child;
-
- if (hwloc_bitmap_iszero(set))
+ if (!parent->cpuset || hwloc_bitmap_iszero(set))
return NULL;
-
child = parent->first_child;
while (child) {
if (child->cpuset && hwloc_bitmap_isincluded(set, child->cpuset))
@@ -405,19 +494,18 @@
/** \brief Get the lowest object covering at least CPU set \p set
*
* \return \c NULL if no object matches or if \p set is empty.
+ *
+ * \note This function cannot work if the root object does not have a CPU set,
+ * e.g. if the topology is made of different machines.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
{
struct hwloc_obj *current = hwloc_get_root_obj(topology);
-
- if (hwloc_bitmap_iszero(set))
+ if (hwloc_bitmap_iszero(set) || !current->cpuset || !hwloc_bitmap_isincluded(set, current->cpuset))
return NULL;
-
- /* FIXME: what if !root->cpuset? */
- if (!hwloc_bitmap_isincluded(set, current->cpuset))
- return NULL;
-
while (1) {
hwloc_obj_t child = hwloc_get_child_covering_cpuset(topology, set, current);
if (!child)
@@ -441,13 +529,17 @@
* depth covering at least part of CPU set \p set. The next
* invokation should pass the previous return value in \p prev so as
* to obtain the next object covering at least another part of \p set.
+ *
+ * \note This function cannot work if objects at the given depth do
+ * not have CPU sets or if the topology is made of different machines.
*/
static __hwloc_inline hwloc_obj_t
hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set,
unsigned depth, hwloc_obj_t prev)
{
hwloc_obj_t next = hwloc_get_next_obj_by_depth(topology, depth, prev);
- /* no need to check next->cpuset because objects in levels always have a cpuset */
+ if (!next || !next->cpuset)
+ return NULL;
while (next && !hwloc_bitmap_intersects(set, next->cpuset))
next = next->next_cousin;
return next;
@@ -464,6 +556,9 @@
* If there are no or multiple depths for type \p type, \c NULL is returned.
* The caller may fallback to hwloc_get_next_obj_covering_cpuset_by_depth()
* for each depth.
+ *
+ * \note This function cannot work if objects of the given type do
+ * not have CPU sets or if the topology is made of different machines.
*/
static __hwloc_inline hwloc_obj_t
hwloc_get_next_obj_covering_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set,
@@ -485,9 +580,14 @@
/** \brief Get the first cache covering a cpuset \p set
*
- * \return \c NULL if no cache matches
+ * \return \c NULL if no cache matches.
+ *
+ * \note This function cannot work if the root object does not have a CPU set,
+ * e.g. if the topology is made of different machines.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_cache_covering_cpuset (hwloc_topology_t topology, hwloc_const_cpuset_t set)
{
hwloc_obj_t current = hwloc_get_obj_covering_cpuset(topology, set);
@@ -503,7 +603,9 @@
*
* \return \c NULL if no cache matches or if an invalid object is given.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_shared_cache_covering_obj (hwloc_topology_t topology __hwloc_attribute_unused, hwloc_obj_t obj)
{
hwloc_obj_t current = obj->parent;
@@ -539,6 +641,8 @@
* \return the number of objects returned in \p objs.
*
* \return 0 if \p src is an I/O object.
+ *
+ * \note This function requires the \p src object to have a CPU set.
*/
/* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */
HWLOC_DECLSPEC unsigned hwloc_get_closest_objs (hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t * __hwloc_restrict objs, unsigned max);
@@ -552,18 +656,22 @@
*
* For instance, if type1 is SOCKET, idx1 is 2, type2 is CORE and idx2
* is 3, return the fourth core object below the third socket.
+ *
+ * \note This function requires these objects to have a CPU set.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_below_by_type (hwloc_topology_t topology,
hwloc_obj_type_t type1, unsigned idx1,
+ hwloc_obj_type_t type2, unsigned idx2) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_below_by_type (hwloc_topology_t topology,
+ hwloc_obj_type_t type1, unsigned idx1,
hwloc_obj_type_t type2, unsigned idx2)
{
hwloc_obj_t obj;
-
obj = hwloc_get_obj_by_type (topology, type1, idx1);
- if (!obj)
+ if (!obj || !obj->cpuset)
return NULL;
-
return hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, type2, idx2);
}
@@ -581,20 +689,22 @@
* For instance, if nr is 3, typev contains NODE, SOCKET and CORE,
* and idxv contains 0, 1 and 2, return the third core object below
* the second socket below the first NUMA node.
+ *
+ * \note This function requires all these objects and the root object
+ * to have a CPU set.
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_below_array_by_type (hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)
{
hwloc_obj_t obj = hwloc_get_root_obj(topology);
int i;
-
- /* FIXME: what if !root->cpuset? */
for(i=0; i<nr; i++) {
+ if (!obj || !obj->cpuset)
+ return NULL;
obj = hwloc_get_obj_inside_cpuset_by_type(topology, obj->cpuset, typev[i], idxv[i]);
- if (!obj)
- return NULL;
}
-
return obj;
}
@@ -618,6 +728,8 @@
*
* The caller may typically want to also call hwloc_bitmap_singlify()
* before binding a thread so that it does not move at all.
+ *
+ * \note This function requires the \p root object to have a CPU set.
*/
static __hwloc_inline void
hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *root, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until);
@@ -625,15 +737,12 @@
hwloc_distribute(hwloc_topology_t topology, hwloc_obj_t root, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
{
unsigned i;
-
- /* FIXME: what if !root->cpuset? */
if (!root->arity || n == 1 || root->depth >= until) {
/* Got to the bottom, we can't split any more, put everything there. */
for (i=0; i<n; i++)
cpuset[i] = hwloc_bitmap_dup(root->cpuset);
return;
}
-
hwloc_distributev(topology, root->children, root->arity, cpuset, n, until);
}
@@ -641,6 +750,8 @@
*
* This is the same as hwloc_distribute, but takes an array of roots instead of
* just one root.
+ *
+ * \note This function requires the \p roots objects to have a CPU set.
*/
static __hwloc_inline void
hwloc_distributev(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *cpuset, unsigned n, unsigned until)
@@ -719,7 +830,9 @@
* \note The returned cpuset is not newly allocated and should thus not be
* changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_cpuset_t
+hwloc_topology_get_complete_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_cpuset_t
hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->complete_cpuset;
@@ -735,7 +848,9 @@
* \note The returned cpuset is not newly allocated and should thus not be
* changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_cpuset_t
+hwloc_topology_get_topology_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_cpuset_t
hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->cpuset;
@@ -750,7 +865,9 @@
* \note The returned cpuset is not newly allocated and should thus not be
* changed or freed; hwloc_cpuset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_cpuset_t
+hwloc_topology_get_online_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_cpuset_t
hwloc_topology_get_online_cpuset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->online_cpuset;
@@ -765,7 +882,9 @@
* \note The returned cpuset is not newly allocated and should thus not be
* changed or freed, hwloc_cpuset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_cpuset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_cpuset_t
+hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_cpuset_t
hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->allowed_cpuset;
@@ -787,7 +906,9 @@
* \note The returned nodeset is not newly allocated and should thus not be
* changed or freed; hwloc_nodeset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_nodeset_t
+hwloc_topology_get_complete_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_nodeset_t
hwloc_topology_get_complete_nodeset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->complete_nodeset;
@@ -803,7 +924,9 @@
* \note The returned nodeset is not newly allocated and should thus not be
* changed or freed; hwloc_nodeset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_nodeset_t
+hwloc_topology_get_topology_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_nodeset_t
hwloc_topology_get_topology_nodeset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->nodeset;
@@ -818,7 +941,9 @@
* \note The returned nodeset is not newly allocated and should thus not be
* changed or freed, hwloc_nodeset_dup must be used to obtain a local copy.
*/
-static __hwloc_inline hwloc_const_nodeset_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_const_nodeset_t
+hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_const_nodeset_t
hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology)
{
return hwloc_get_root_obj(topology)->allowed_nodeset;
@@ -1018,7 +1143,7 @@
/** \brief Get distances for the given depth and covering some objects
*
* Return a distance matrix that describes depth \p depth and covers at
- * least object \p obj and all its ancestors.
+ * least object \p obj and all its children.
*
* When looking for the distance between some objects, a common ancestor should
* be passed in \p obj.
@@ -1102,7 +1227,7 @@
* object. This regular object may then be used for binding because
* its locality is the same as \p ioobj.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_non_io_ancestor_obj(hwloc_topology_t topology __hwloc_attribute_unused,
hwloc_obj_t ioobj)
{
@@ -1117,7 +1242,7 @@
*
* \return the first PCI device if \p prev is \c NULL.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_next_pcidev(hwloc_topology_t topology, hwloc_obj_t prev)
{
return hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_PCI_DEVICE, prev);
@@ -1126,7 +1251,7 @@
/** \brief Find the PCI device object matching the PCI bus id
* given domain, bus device and function PCI bus id.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_pcidev_by_busid(hwloc_topology_t topology,
unsigned domain, unsigned bus, unsigned dev, unsigned func)
{
@@ -1144,7 +1269,7 @@
/** \brief Find the PCI device object matching the PCI bus id
* given as a string xxxx:yy:zz.t or yy:zz.t.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_pcidev_by_busidstring(hwloc_topology_t topology, const char *busid)
{
unsigned domain = 0; /* default */
@@ -1163,7 +1288,7 @@
*
* \return the first OS device if \p prev is \c NULL.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)
{
return hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_OS_DEVICE, prev);
@@ -1173,7 +1298,7 @@
*
* \return the first bridge if \p prev is \c NULL.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_next_bridge(hwloc_topology_t topology, hwloc_obj_t prev)
{
return hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_BRIDGE, prev);
@@ -1181,7 +1306,7 @@
/* \brief Checks whether a given bridge covers a given PCI bus.
*/
-static __inline int
+static __hwloc_inline int
hwloc_bridge_covers_pcibus(hwloc_obj_t bridge,
unsigned domain, unsigned bus)
{
@@ -1197,7 +1322,7 @@
* This is useful for finding the locality of a bus because
* it is the hostbridge parent cpuset.
*/
-static __inline hwloc_obj_t
+static __hwloc_inline hwloc_obj_t
hwloc_get_hostbridge_by_pcibus(hwloc_topology_t topology,
unsigned domain, unsigned bus)
{
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux-libnuma.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux-libnuma.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux-libnuma.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
- * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010, 2012 Université Bordeaux 1
* See COPYING in top-level directory.
*/
@@ -10,6 +10,15 @@
*
* Applications that use both Linux libnuma and hwloc may want to
* include this file so as to ease conversion between their respective types.
+ *
+ * This helper also offers a consistent behavior on non-NUMA machines
+ * or non-NUMA-aware kernels by assuming that the machines have a single
+ * NUMA node.
+ *
+ * \note The behavior of libnuma is undefined if the kernel is not NUMA-aware.
+ * (when CONFIG_NUMA is not set in the kernel configuration).
+ * This helper and libnuma may thus not be strictly compatible in this case,
+ * which may be detected by checking whether numa_available() returns -1.
*/
#ifndef HWLOC_LINUX_LIBNUMA_H
@@ -133,15 +142,12 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- unsigned i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(cpuset);
- for(i=0; i<maxnode; i++)
- if (mask[i/sizeof(*mask)/8] & (1UL << (i% (sizeof(*mask)*8)))) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (node->os_index < maxnode
+ && (mask[node->os_index/sizeof(*mask)/8] & (1UL << (node->os_index % (sizeof(*mask)*8)))))
+ hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
} else {
/* if no numa, libnuma assumes we have a single node */
if (mask[0] & 1)
@@ -169,15 +175,12 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- unsigned i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(nodeset);
- for(i=0; i<maxnode; i++)
- if (mask[i/sizeof(*mask)/8] & (1UL << (i% (sizeof(*mask)*8)))) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_set(nodeset, node->os_index);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (node->os_index < maxnode
+ && (mask[node->os_index/sizeof(*mask)/8] & (1UL << (node->os_index % (sizeof(*mask)*8)))))
+ hwloc_bitmap_set(nodeset, node->os_index);
} else {
/* if no numa, libnuma assumes we have a single node */
if (mask[0] & 1)
@@ -207,7 +210,9 @@
*
* \return newly allocated struct bitmask.
*/
-static __hwloc_inline struct bitmask * __hwloc_attribute_malloc
+static __hwloc_inline struct bitmask *
+hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset) __hwloc_attribute_malloc;
+static __hwloc_inline struct bitmask *
hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)
{
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
@@ -218,7 +223,8 @@
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
hwloc_obj_t node = NULL;
while ((node = hwloc_get_next_obj_covering_cpuset_by_type(topology, cpuset, HWLOC_OBJ_NODE, node)) != NULL)
- numa_bitmask_setbit(bitmask, node->os_index);
+ if (node->memory.local_memory)
+ numa_bitmask_setbit(bitmask, node->os_index);
} else {
/* if no numa, libnuma assumes we have a single node */
if (!hwloc_bitmap_iszero(cpuset))
@@ -237,7 +243,9 @@
*
* \return newly allocated struct bitmask.
*/
-static __hwloc_inline struct bitmask * __hwloc_attribute_malloc
+static __hwloc_inline struct bitmask *
+hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset) __hwloc_attribute_malloc;
+static __hwloc_inline struct bitmask *
hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)
{
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
@@ -248,7 +256,7 @@
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
hwloc_obj_t node = NULL;
while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL)
- if (hwloc_bitmap_isset(nodeset, node->os_index))
+ if (hwloc_bitmap_isset(nodeset, node->os_index) && node->memory.local_memory)
numa_bitmask_setbit(bitmask, node->os_index);
} else {
/* if no numa, libnuma assumes we have a single node */
@@ -271,15 +279,11 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- int i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(cpuset);
- for(i=0; i<NUMA_NUM_NODES; i++)
- if (numa_bitmask_isbitset(bitmask, i)) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (numa_bitmask_isbitset(bitmask, node->os_index))
+ hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
} else {
/* if no numa, libnuma assumes we have a single node */
if (numa_bitmask_isbitset(bitmask, 0))
@@ -303,15 +307,11 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- int i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(nodeset);
- for(i=0; i<NUMA_NUM_NODES; i++)
- if (numa_bitmask_isbitset(bitmask, i)) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_set(nodeset, node->os_index);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (numa_bitmask_isbitset(bitmask, node->os_index))
+ hwloc_bitmap_set(nodeset, node->os_index);
} else {
/* if no numa, libnuma assumes we have a single node */
if (numa_bitmask_isbitset(bitmask, 0))
@@ -329,6 +329,12 @@
#ifdef NUMA_VERSION1_COMPATIBILITY
/** \defgroup hwlocality_linux_libnuma_nodemask Helpers for manipulating Linux libnuma nodemask_t
+ *
+ * \note The Linux libnuma nodemask_t interface is deprecated and
+ * its implementation is at least incorrect with respect to sparse
+ * NUMA node ids. It is strongly advised to use struct bitmask
+ * instead of nodemask_t, or even to use hwloc directly.
+ *
* @{
*/
@@ -398,15 +404,11 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- int i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(cpuset);
- for(i=0; i<NUMA_NUM_NODES; i++)
- if (nodemask_isset(nodemask, i)) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (nodemask_isset(nodemask, node->os_index))
+ hwloc_bitmap_or(cpuset, cpuset, node->cpuset);
} else {
/* if no numa, libnuma assumes we have a single node */
if (nodemask_isset(nodemask, 0))
@@ -430,15 +432,11 @@
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
if (depth != HWLOC_TYPE_DEPTH_UNKNOWN) {
- hwloc_obj_t node;
- int i;
+ hwloc_obj_t node = NULL;
hwloc_bitmap_zero(nodeset);
- for(i=0; i<NUMA_NUM_NODES; i++)
- if (nodemask_isset(nodemask, i)) {
- node = hwloc_get_obj_by_depth(topology, depth, i);
- if (node)
- hwloc_bitmap_set(nodeset, node->os_index);
- }
+ while ((node = hwloc_get_next_obj_by_depth(topology, depth, node)) != NULL)
+ if (nodemask_isset(nodemask, node->os_index))
+ hwloc_bitmap_set(nodeset, node->os_index);
} else {
/* if no numa, libnuma assumes we have a single node */
if (nodemask_isset(nodemask, 0))
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/linux.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
+ * Copyright © 2009-2010 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* See COPYING in top-level directory.
*/
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/myriexpress.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/myriexpress.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/myriexpress.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010 INRIA. All rights reserved.
+ * Copyright © 2010 inria. All rights reserved.
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/openfabrics-verbs.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
+ * Copyright © 2009-2010 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -61,6 +61,8 @@
return -1;
hwloc_linux_parse_cpumap_file(sysfile, set);
+ if (hwloc_bitmap_iszero(set))
+ hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
fclose(sysfile);
#else
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc/rename.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
- * Copyright © 2010-2011 INRIA. All rights reserved.
+ * Copyright © 2010-2011 inria. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -118,6 +118,7 @@
#define hwloc_topology_set_synthetic HWLOC_NAME(topology_set_synthetic)
#define hwloc_topology_set_xml HWLOC_NAME(topology_set_xml)
#define hwloc_topology_set_xmlbuffer HWLOC_NAME(topology_set_xmlbuffer)
+#define hwloc_topology_set_custom HWLOC_NAME(topology_set_custom)
#define hwloc_topology_set_distance_matrix HWLOC_NAME(topology_set_distance_matrix)
#define hwloc_topology_discovery_support HWLOC_NAME(topology_discovery_support)
@@ -132,6 +133,9 @@
#define hwloc_topology_insert_misc_object_by_cpuset HWLOC_NAME(topology_insert_misc_object_by_cpuset)
#define hwloc_topology_insert_misc_object_by_parent HWLOC_NAME(topology_insert_misc_object_by_parent)
+#define hwloc_custom_insert_topology HWLOC_NAME(custom_insert_topology)
+#define hwloc_custom_insert_group_object_by_parent HWLOC_NAME(custom_insert_group_object_by_parent)
+
#define hwloc_restrict_flags_e HWLOC_NAME(restrict_flags_e)
#define HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES HWLOC_NAME_CAPS(RESTRICT_FLAG_ADAPT_DISTANCES)
#define HWLOC_RESTRICT_FLAG_ADAPT_MISC HWLOC_NAME_CAPS(RESTRICT_FLAG_ADAPT_MISC)
@@ -229,7 +233,6 @@
/* hwloc/bitmap.h */
-#define hwloc_bitmap HWLOC_NAME(bitmap)
#define hwloc_bitmap_s HWLOC_NAME(bitmap_s)
#define hwloc_bitmap_t HWLOC_NAME(bitmap_t)
#define hwloc_const_bitmap_t HWLOC_NAME(const_bitmap_t)
@@ -283,11 +286,6 @@
/* hwloc/cpuset.h -- deprecated but still available */
-#define hwloc_cpuset HWLOC_NAME(cpuset)
-#define hwloc_cpuset_s HWLOC_NAME(cpuset_s)
-#define hwloc_cpuset_t HWLOC_NAME(cpuset_t)
-#define hwloc_const_cpuset_t HWLOC_NAME(const_cpuset_t)
-
#define hwloc_cpuset_alloc HWLOC_NAME(cpuset_alloc)
#define hwloc_cpuset_free HWLOC_NAME(cpuset_free)
#define hwloc_cpuset_dup HWLOC_NAME(cpuset_dup)
@@ -419,11 +417,15 @@
/* cuda.h */
+#define hwloc_cuda_get_device_pci_ids HWLOC_NAME(cuda_get_device_pci_ids)
#define hwloc_cuda_get_device_cpuset HWLOC_NAME(cuda_get_device_cpuset)
+#define hwloc_cuda_get_device_pcidev HWLOC_NAME(cuda_get_device_pcidev)
/* cudart.h */
+#define hwloc_cudart_get_device_pci_ids HWLOC_NAME(cudart_get_device_pci_ids)
#define hwloc_cudart_get_device_cpuset HWLOC_NAME(cudart_get_device_cpuset)
+#define hwloc_cudart_get_device_pcidev HWLOC_NAME(cudart_get_device_pcidev)
/* private/debug.h */
@@ -458,29 +460,31 @@
#define HWLOC_BACKEND_NONE HWLOC_NAME_CAPS(BACKEND_NONE)
#define HWLOC_BACKEND_SYNTHETIC HWLOC_NAME_CAPS(BACKEND_SYNTHETIC)
-#define HWLOC_BACKEND_SYSFS HWLOC_NAME_CAPS(BACKEND_SYSFS)
+#define HWLOC_BACKEND_LINUXFS HWLOC_NAME_CAPS(BACKEND_LINUXFS)
#define HWLOC_BACKEND_XML HWLOC_NAME_CAPS(BACKEND_XML)
#define HWLOC_BACKEND_MAX HWLOC_NAME_CAPS(BACKEND_MAX)
#define hwloc_backend_params_u HWLOC_NAME(backend_params_u)
-#define hwloc_backend_params_sysfs_s HWLOC_NAME(backend_params_sysfs_s)
+#define hwloc_backend_params_linuxfs_s HWLOC_NAME(backend_params_linuxfs_s)
#define hwloc_backend_params_osf HWLOC_NAME(backend_params_osf)
#define hwloc_backend_params_xml_s HWLOC_NAME(backend_params_xml_s)
#define hwloc_backend_params_synthetic_s HWLOC_NAME(backend_params_synthetic_s)
+#define hwloc_xml_imported_distances_s HWLOC_NAME(xml_imported_distances_s)
+
#define hwloc_setup_pu_level HWLOC_NAME(setup_pu_level)
-#define hwloc_setup_misc_level_from_distances HWLOC_NAME(setup_misc_level_from_distances)
#define hwloc_get_sysctlbyname HWLOC_NAME(get_sysctlbyname)
#define hwloc_get_sysctl HWLOC_NAME(get_sysctl)
#define hwloc_fallback_nbprocessors HWLOC_NAME(fallback_nbprocessors)
+#define hwloc_connect_children HWLOC_NAME(connect_children)
+#define hwloc_connect_levels HWLOC_NAME(connect_levels)
-#define hwloc_look_linux HWLOC_NAME(look_linux)
-#define hwloc_set_linux_hooks HWLOC_NAME(set_linux_hooks)
-#define hwloc_backend_sysfs_init HWLOC_NAME(backend_sysfs_init)
-#define hwloc_backend_sysfs_exit HWLOC_NAME(backend_sysfs_exit)
+#define hwloc_look_linuxfs HWLOC_NAME(look_linuxfs)
+#define hwloc_set_linuxfs_hooks HWLOC_NAME(set_linuxfs_hooks)
+#define hwloc_backend_linuxfs_init HWLOC_NAME(backend_linuxfs_init)
+#define hwloc_backend_linuxfs_exit HWLOC_NAME(backend_linuxfs_exit)
#define hwloc_backend_xml_init HWLOC_NAME(backend_xml_init)
-#define hwloc_xml_check_distances HWLOC_NAME(xml_check_distances)
#define hwloc_look_xml HWLOC_NAME(look_xml)
#define hwloc_backend_xml_exit HWLOC_NAME(backend_xml_exit)
@@ -520,7 +524,6 @@
#define hwloc__insert_object_by_cpuset HWLOC_NAME(_insert_object_by_cpuset)
#define hwloc_insert_object_by_parent HWLOC_NAME(insert_object_by_parent)
#define hwloc_add_uname_info HWLOC_NAME(add_uname_info)
-#define hwloc_free_object HWLOC_NAME(free_object)
#define hwloc_bitmap_printf_value HWLOC_NAME(bitmap_printf_value)
#define hwloc_alloc_setup_object HWLOC_NAME(alloc_setup_object)
#define hwloc_free_unlinked_object HWLOC_NAME(free_unlinked_object)
@@ -532,15 +535,17 @@
#define hwloc_free_mmap HWLOC_NAME(free_mmap)
#define hwloc_alloc_or_fail HWLOC_NAME(alloc_or_fail)
-#define hwloc_topology_distances_init HWLOC_NAME(topology_distances_init)
-#define hwloc_topology_distances_clear HWLOC_NAME(topology_distances_clear)
-#define hwloc_topology_distances_destroy HWLOC_NAME(topology_distances_destroy)
-#define hwloc_topology__set_distance_matrix HWLOC_NAME(topology__set_distance_matrix)
-#define hwloc_store_distances_from_env HWLOC_NAME(store_distances_from_env)
-#define hwloc_convert_distances_indexes_into_objects HWLOC_NAME(convert_distances_indexes_into_objects)
-#define hwloc_finalize_logical_distances HWLOC_NAME(finalize_logical_distances)
-#define hwloc_restrict_distances HWLOC_NAME(restrict_distances)
-#define hwloc_free_logical_distances HWLOC_NAME(free_logical_distances)
+#define hwloc_distances_init HWLOC_NAME(distances_init)
+#define hwloc_distances_clear HWLOC_NAME(distances_clear)
+#define hwloc_distances_destroy HWLOC_NAME(distances_destroy)
+#define hwloc_distances_set HWLOC_NAME(distances_set)
+#define hwloc_distances_set_from_env HWLOC_NAME(distances_set_from_env)
+#define hwloc_distances_restrict_os HWLOC_NAME(distances_restrict_os)
+#define hwloc_distances_restrict HWLOC_NAME(distances_restrict)
+#define hwloc_distances_finalize_os HWLOC_NAME(distances_finalize_os)
+#define hwloc_distances_finalize_logical HWLOC_NAME(distances_finalize_logical)
+#define hwloc_clear_object_distances HWLOC_NAME(clear_object_distances)
+#define hwloc_clear_object_distances_one HWLOC_NAME(clear_object_distances_one)
#define hwloc_group_by_distances HWLOC_NAME(group_by_distances)
#endif /* HWLOC_SYM_TRANSFORM */
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/hwloc.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -75,7 +75,7 @@
*/
/** \brief Indicate at build time which hwloc API version is being used. */
-#define HWLOC_API_VERSION 0x00010300
+#define HWLOC_API_VERSION 0x00010400
/** \brief Indicate at runtime which hwloc API version was used at build time. */
HWLOC_DECLSPEC unsigned hwloc_get_api_version(void);
@@ -338,7 +338,11 @@
* may be \c NULL if no attribute value was found */
/* global position */
- unsigned depth; /**< \brief Vertical index in the hierarchy */
+ unsigned depth; /**< \brief Vertical index in the hierarchy.
+ * If the topology is symmetric, this is equal to the
+ * parent depth plus one, and also equal to the number
+ * of parent/child links from the root object to here.
+ */
unsigned logical_index; /**< \brief Horizontal index in the whole list of similar objects,
* could be a "cousin_rank" since it's the rank within the "cousin" list below */
signed os_level; /**< \brief OS-provided physical level, -1 if unknown or meaningless */
@@ -455,6 +459,10 @@
struct hwloc_obj_info_s *infos; /**< \brief Array of stringified info type=name. */
unsigned infos_count; /**< \brief Size of infos array. */
+
+ int symmetric_subtree; /**< \brief Set if the subtree of objects below this object is symmetric,
+ * which means all children and their children have identical subtrees.
+ */
};
/**
* \brief Convenience typedef; a pointer to a struct hwloc_obj.
@@ -717,6 +725,22 @@
*/
HWLOC_DECLSPEC int hwloc_topology_set_flags (hwloc_topology_t topology, unsigned long flags);
+/** \brief Change which pid the topology is viewed from
+ *
+ * On some systems, processes may have different views of the machine, for
+ * instance the set of allowed CPUs. By default, hwloc exposes the view from
+ * the current process. Calling hwloc_topology_set_pid() permits to make it
+ * expose the topology of the machine from the point of view of another
+ * process.
+ *
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
+ *
+ * \note -1 is returned and errno is set to ENOSYS on platforms that do not
+ * support this feature.
+ */
+HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
+
/** \brief Change the file-system root path when building the topology from sysfs/procfs.
*
* On Linux system, use sysfs and procfs files as if they were mounted on the given
@@ -730,28 +754,19 @@
* still need to invoke hwloc_topology_load() to actually load the
* topology information.
*
+ * \return -1 with errno set to ENOSYS on non-Linux and on Linux systems that
+ * do not support it.
+ * \return -1 with the appropriate errno if \p fsroot_path cannot be used.
+ *
* \note For convenience, this backend provides empty binding hooks which just
* return success. To have hwloc still actually call OS-specific hooks, the
* HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
* file is really the underlying system.
+ *
+ * \note The existing topology is cleared even on failure.
*/
HWLOC_DECLSPEC int hwloc_topology_set_fsroot(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict fsroot_path);
-/** \brief Change which pid the topology is viewed from
- *
- * On some systems, processes may have different views of the machine, for
- * instance the set of allowed CPUs. By default, hwloc exposes the view from
- * the current process. Calling hwloc_topology_set_pid() permits to make it
- * expose the topology of the machine from the point of view of another
- * process.
- *
- * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
- * platforms
- * \note -1 is returned and errno is set to ENOSYS on platforms that do not
- * support this feature.
- */
-HWLOC_DECLSPEC int hwloc_topology_set_pid(hwloc_topology_t __hwloc_restrict topology, hwloc_pid_t pid);
-
/** \brief Enable synthetic topology.
*
* Gather topology information from the given \p description,
@@ -773,6 +788,8 @@
*
* \note For convenience, this backend provides empty binding hooks which just
* return success.
+ *
+ * \note The existing topology is cleared even on failure.
*/
HWLOC_DECLSPEC int hwloc_topology_set_synthetic(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict description);
@@ -780,17 +797,22 @@
*
* Gather topology information from the XML file given at \p xmlpath.
* Setting the environment variable HWLOC_XMLFILE may also result in this behavior.
- * This file may have been generated earlier with lstopo file.xml.
+ * This file may have been generated earlier with hwloc_topology_export_xml()
+ * or lstopo file.xml.
*
* Note that this function does not actually load topology
* information; it just tells hwloc where to load it from. You'll
* still need to invoke hwloc_topology_load() to actually load the
* topology information.
*
+ * \return -1 with errno set to EINVAL on failure to read the XML file.
+ *
* \note For convenience, this backend provides empty binding hooks which just
* return success. To have hwloc still actually call OS-specific hooks, the
* HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
* file is really the underlying system.
+ *
+ * \note The existing topology is cleared even on failure.
*/
HWLOC_DECLSPEC int hwloc_topology_set_xml(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict xmlpath);
@@ -806,9 +828,28 @@
* still need to invoke hwloc_topology_load() to actually load the
* topology information.
*
+ * \return -1 with errno set to EINVAL on failure to read the XML buffer.
+ *
+ * \note For convenience, this backend provides empty binding hooks which just
+ * return success. To have hwloc still actually call OS-specific hooks, the
+ * HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM has to be set to assert that the loaded
+ * file is really the underlying system.
+ *
+ * \note The existing topology is cleared even on failure.
*/
HWLOC_DECLSPEC int hwloc_topology_set_xmlbuffer(hwloc_topology_t __hwloc_restrict topology, const char * __hwloc_restrict buffer, int size);
+/** \brief Prepare the topology for custom assembly.
+ *
+ * The topology then contains a single root object.
+ * It may then be built by inserting other topologies with
+ * hwloc_custom_insert_topology() or single objects with
+ * hwloc_custom_insert_group_object_by_parent().
+ * hwloc_topology_load() must be called to finalize the new
+ * topology as usual.
+ */
+HWLOC_DECLSPEC int hwloc_topology_set_custom(hwloc_topology_t topology);
+
/** \brief Provide a distance matrix.
*
* Provide the matrix of distances between a set of objects of the given type.
@@ -823,6 +864,8 @@
* it will be replaced by the given one.
* If \p nbobjs is \c 0, \p os_index is \c NULL and \p distances is \c NULL,
* the existing distance matrix for the given type is removed.
+ *
+ * \note Distance matrices are ignored in multi-node topologies.
*/
HWLOC_DECLSPEC int hwloc_topology_set_distance_matrix(hwloc_topology_t __hwloc_restrict topology,
hwloc_obj_type_t type, unsigned nbobjs,
@@ -1063,7 +1106,9 @@
* If no object for that type exists, 0 is returned.
* If there are several levels with objects of that type, -1 is returned.
*/
-static __hwloc_inline int __hwloc_attribute_pure
+static __hwloc_inline int
+hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type) __hwloc_attribute_pure;
+static __hwloc_inline int
hwloc_get_nbobjs_by_type (hwloc_topology_t topology, hwloc_obj_type_t type)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -1105,7 +1150,9 @@
* If there are several levels with objects of that type, \c NULL is returned
* and ther caller may fallback to hwloc_get_obj_by_depth().
*/
-static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+static __hwloc_inline hwloc_obj_t
+hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx) __hwloc_attribute_pure;
+static __hwloc_inline hwloc_obj_t
hwloc_get_obj_by_type (hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)
{
int depth = hwloc_get_type_depth(topology, type);
@@ -1199,7 +1246,9 @@
*
* \return \c NULL if no such key exists.
*/
-static __hwloc_inline char * __hwloc_attribute_pure
+static __hwloc_inline const char *
+hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name) __hwloc_attribute_pure;
+static __hwloc_inline const char *
hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)
{
unsigned i;
@@ -1331,7 +1380,7 @@
*/
} hwloc_cpubind_flags_t;
-/** \brief Bind current process or thread on cpus given in bitmap \p set.
+/** \brief Bind current process or thread on cpus given in physical bitmap \p set.
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
@@ -1340,24 +1389,24 @@
/** \brief Get current process or thread binding.
*
- * Writes into \p set the cpuset which the process or thread (according to \e
+ * Writes into \p set the physical cpuset which the process or thread (according to \e
* flags) was last bound to.
*/
HWLOC_DECLSPEC int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
-/** \brief Bind a process \p pid on cpus given in bitmap \p set.
+/** \brief Bind a process \p pid on cpus given in physical bitmap \p set.
*
- * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
- * platforms
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*
* \note HWLOC_CPUBIND_THREAD can not be used in \p flags.
*/
HWLOC_DECLSPEC int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags);
-/** \brief Get the current binding of process \p pid.
+/** \brief Get the current physical binding of process \p pid.
*
- * \note hwloc_pid_t is pid_t on unix platforms, and HANDLE on native Windows
- * platforms
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*
* \note HWLOC_CPUBIND_THREAD can not be used in \p flags.
*
@@ -1368,10 +1417,10 @@
HWLOC_DECLSPEC int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags);
#ifdef hwloc_thread_t
-/** \brief Bind a thread \p thread on cpus given in bitmap \p set.
+/** \brief Bind a thread \p thread on cpus given in physical bitmap \p set.
*
- * \note hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native
- * Windows platforms
+ * \note \p hwloc_thread_t is \p pthread_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*
* \note HWLOC_CPUBIND_PROCESS can not be used in \p flags.
*/
@@ -1379,17 +1428,17 @@
#endif
#ifdef hwloc_thread_t
-/** \brief Get the current binding of thread \p tid.
+/** \brief Get the current physical binding of thread \p tid.
*
- * \note hwloc_thread_t is pthread_t on unix platforms, and HANDLE on native
- * Windows platforms
+ * \note \p hwloc_thread_t is \p pthread_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*
* \note HWLOC_CPUBIND_PROCESS can not be used in \p flags.
*/
-HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t tid, hwloc_cpuset_t set, int flags);
+HWLOC_DECLSPEC int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags);
#endif
-/** \brief Get the last CPU where the current process or thread ran.
+/** \brief Get the last physical CPU where the current process or thread ran.
*
* The operating system may move some tasks from one processor
* to another at any time according to their binding,
@@ -1398,13 +1447,16 @@
*/
HWLOC_DECLSPEC int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags);
-/** \brief Get the last CPU where a process ran.
+/** \brief Get the last physical CPU where a process ran.
*
* The operating system may move some tasks from one processor
* to another at any time according to their binding,
* so this function may return something that is already
* outdated.
*
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
+ *
* \note HWLOC_CPUBIND_THREAD can not be used in \p flags.
*
* \note As a special case on Linux, if a tid (thread ID) is supplied
@@ -1612,7 +1664,7 @@
} hwloc_membind_flags_t;
/** \brief Set the default memory binding policy of the current
- * process or thread to prefer the NUMA node(s) specified by \p nodeset
+ * process or thread to prefer the NUMA node(s) specified by physical \p nodeset
*
* If neither HWLOC_MEMBIND_PROCESS nor HWLOC_MEMBIND_THREAD is
* specified, the current process is assumed to be single-threaded.
@@ -1626,7 +1678,7 @@
HWLOC_DECLSPEC int hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Set the default memory binding policy of the current
- * process or thread to prefer the NUMA node(s) near the specified \p
+ * process or thread to prefer the NUMA node(s) near the specified physical \p
* cpuset
*
* If neither HWLOC_MEMBIND_PROCESS nor HWLOC_MEMBIND_THREAD is
@@ -1640,7 +1692,7 @@
*/
HWLOC_DECLSPEC int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
-/** \brief Query the default memory binding policy and locality of the
+/** \brief Query the default memory binding policy and physical locality of the
* current process or thread.
*
* This function has two output parameters: \p nodeset and \p policy.
@@ -1682,7 +1734,7 @@
*/
HWLOC_DECLSPEC int hwloc_get_membind_nodeset(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
-/** \brief Query the default memory binding policy and locality of the
+/** \brief Query the default memory binding policy and physical locality of the
* current process or thread (the locality is returned in \p cpuset as
* CPUs near the locality's actual NUMA node(s)).
*
@@ -1730,22 +1782,28 @@
HWLOC_DECLSPEC int hwloc_get_membind(hwloc_topology_t topology, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
/** \brief Set the default memory binding policy of the specified
- * process to prefer the NUMA node(s) specified by \p nodeset
+ * process to prefer the NUMA node(s) specified by physical \p nodeset
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
+ *
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*/
HWLOC_DECLSPEC int hwloc_set_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Set the default memory binding policy of the specified
- * process to prefer the NUMA node(s) near the specified \p cpuset
+ * process to prefer the NUMA node(s) near the specified physical \p cpuset
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
+ *
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*/
HWLOC_DECLSPEC int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
-/** \brief Query the default memory binding policy and locality of the
+/** \brief Query the default memory binding policy and physical locality of the
* specified process.
*
* This function has two output parameters: \p nodeset and \p policy.
@@ -1777,10 +1835,13 @@
*
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
+ *
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*/
HWLOC_DECLSPEC int hwloc_get_proc_membind_nodeset(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
-/** \brief Query the default memory binding policy and locality of the
+/** \brief Query the default memory binding policy and physical locality of the
* specified process (the locality is returned in \p cpuset as CPUs
* near the locality's actual NUMA node(s)).
*
@@ -1815,11 +1876,14 @@
*
* If any other flags are specified, -1 is returned and errno is set
* to EINVAL.
+ *
+ * \note \p hwloc_pid_t is \p pid_t on Unix platforms,
+ * and \p HANDLE on native Windows platforms.
*/
HWLOC_DECLSPEC int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t cpuset, hwloc_membind_policy_t * policy, int flags);
/** \brief Bind the already-allocated memory identified by (addr, len)
- * to the NUMA node(s) in \p nodeset.
+ * to the NUMA node(s) in physical \p nodeset.
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
@@ -1827,14 +1891,14 @@
HWLOC_DECLSPEC int hwloc_set_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags);
/** \brief Bind the already-allocated memory identified by (addr, len)
- * to the NUMA node(s) near \p cpuset.
+ * to the NUMA node(s) near physical \p cpuset.
*
* \return -1 with errno set to ENOSYS if the action is not supported
* \return -1 with errno set to EXDEV if the binding cannot be enforced
*/
HWLOC_DECLSPEC int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_cpuset_t cpuset, hwloc_membind_policy_t policy, int flags);
-/** \brief Query the NUMA node(s) and binding policy of the memory
+/** \brief Query the physical NUMA node(s) and binding policy of the memory
* identified by (\p addr, \p len ).
*
* This function has two output parameters: \p nodeset and \p policy.
@@ -1858,7 +1922,7 @@
*/
HWLOC_DECLSPEC int hwloc_get_area_membind_nodeset(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t * policy, int flags);
-/** \brief Query the CPUs near the NUMA node(s) and binding policy of
+/** \brief Query the CPUs near the physical NUMA node(s) and binding policy of
* the memory identified by (\p addr, \p len ).
*
* This function has two output parameters: \p cpuset and \p policy.
@@ -1893,7 +1957,7 @@
*/
HWLOC_DECLSPEC void *hwloc_alloc(hwloc_topology_t topology, size_t len);
-/** \brief Allocate some memory on the given nodeset \p nodeset
+/** \brief Allocate some memory on the given physical nodeset \p nodeset
*
* \return -1 with errno set to ENOSYS if the action is not supported
* and HWLOC_MEMBIND_STRICT is given
@@ -1904,7 +1968,7 @@
*/
HWLOC_DECLSPEC void *hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags) __hwloc_attribute_malloc;
-/** \brief Allocate some memory on memory nodes near the given cpuset \p cpuset
+/** \brief Allocate some memory on memory nodes near the given physical cpuset \p cpuset
*
* \return -1 with errno set to ENOSYS if the action is not supported
* and HWLOC_MEMBIND_STRICT is given
@@ -1924,6 +1988,56 @@
+/** \defgroup hwlocality_custom Building Custom Topologies
+ *
+ * A custom topology may be initialized by calling hwloc_topology_set_custom()
+ * after hwloc_topology_init(). It may then be modified by inserting objects
+ * or entire topologies. Once done assembling, hwloc_topology_load() should
+ * be invoked as usual to finalize the topology.
+ * @{
+ */
+
+/** \brief Insert an existing topology inside a custom topology
+ *
+ * Duplicate the existing topology \p oldtopology inside a new
+ * custom topology \p newtopology as a leaf of object \p newparent.
+ *
+ * If \p oldroot is not \c NULL, duplicate \p oldroot and all its
+ * children instead of the entire \p oldtopology. Passing the root
+ * object of \p oldtopology in \p oldroot is equivalent to passing
+ * \c NULL.
+ *
+ * The custom topology \p newtopology must have been prepared with
+ * hwloc_topology_set_custom() and not loaded with hwloc_topology_load()
+ * yet.
+ *
+ * \p newparent may be either the root of \p newtopology or an object
+ * that was added through hwloc_custom_insert_group_object_by_parent().
+ */
+HWLOC_DECLSPEC int hwloc_custom_insert_topology(hwloc_topology_t newtopology, hwloc_obj_t newparent, hwloc_topology_t oldtopology, hwloc_obj_t oldroot);
+
+/** \brief Insert a new group object inside a custom topology
+ *
+ * An object with type ::HWLOC_OBJ_GROUP is inserted as a new child
+ * of object \p parent.
+ *
+ * \p groupdepth is the depth attribute to be given to the new object.
+ * It may for instance be 0 for top-level groups, 1 for their children,
+ * and so on.
+ *
+ * The custom topology \p newtopology must have been prepared with
+ * hwloc_topology_set_custom() and not loaded with hwloc_topology_load()
+ * yet.
+ *
+ * \p parent may be either the root of \p topology or an object that
+ * was added earlier through hwloc_custom_insert_group_object_by_parent().
+ */
+HWLOC_DECLSPEC hwloc_obj_t hwloc_custom_insert_group_object_by_parent(hwloc_topology_t topology, hwloc_obj_t parent, int groupdepth);
+
+/** @} */
+
+
+
#ifdef __cplusplus
} /* extern "C" */
#endif
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/cpuid.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2011 Université Bordeaux 1
+ * Copyright © 2010-2012 Université Bordeaux 1
* Copyright © 2010 Cisco Systems, Inc. All rights reserved.
*
* See COPYING in top-level directory.
@@ -51,22 +51,24 @@
static __hwloc_inline void hwloc_cpuid(unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx)
{
+#ifdef HWLOC_X86_64_ARCH
+ unsigned long sav_ebx;
+#endif
asm(
-#ifdef HWLOC_X86_32_ARCH
+#ifdef HWLOC_X86_32_ARCH
"push %%ebx\n\t"
+#else
+ "mov %%rbx,%2\n\t"
#endif
"cpuid\n\t"
-#ifdef HWLOC_X86_32_ARCH
+#ifdef HWLOC_X86_32_ARCH
"mov %%ebx,%1\n\t"
"pop %%ebx\n\t"
-#endif
- : "+a" (*eax),
-#ifdef HWLOC_X86_32_ARCH
- "=r" (*ebx),
#else
- "=b" (*ebx),
+ "mov %%ebx,%1\n\t"
+ "mov %2,%%rbx\n\t"
#endif
- "+c" (*ecx), "=d" (*edx));
+ : "+a" (*eax), "=r" (*ebx), "=r"(sav_ebx), "+c" (*ecx), "=d" (*edx));
}
#endif /* HWLOC_PRIVATE_CPUID_H */
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/debug.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
+ * Copyright © 2009-2010 inria. All rights reserved.
* Copyright © 2009, 2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/misc.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2010 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -46,8 +46,15 @@
* ffsl helpers.
*/
-#ifdef __GNUC__
+#if defined(HWLOC_HAVE_BROKEN_FFS)
+/* System has a broken ffs().
+ * We must check the before __GNUC__ or HWLOC_HAVE_FFSL
+ */
+# define HWLOC_NO_FFS
+
+#elif defined(__GNUC__)
+
# if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
/* Starting from 3.4, gcc has a long variant. */
# define hwloc_ffsl(x) __builtin_ffsl(x)
@@ -75,7 +82,16 @@
#else /* no ffs implementation */
-static __hwloc_inline int __hwloc_attribute_const
+# define HWLOC_NO_FFS
+
+#endif
+
+#ifdef HWLOC_NO_FFS
+
+/* no ffs or it is known to be broken */
+static __hwloc_inline int
+hwloc_ffsl(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_ffsl(unsigned long x)
{
int i;
@@ -114,14 +130,14 @@
return i;
}
-#endif
+#elif defined(HWLOC_NEED_FFSL)
-#ifdef HWLOC_NEED_FFSL
-
/* We only have an int ffs(int) implementation, build a long one. */
/* First make it 32 bits if it was only 16. */
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_ffs32(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_ffs32(unsigned long x)
{
#if HWLOC_BITS_PER_INT == 16
@@ -142,7 +158,9 @@
}
/* Then make it 64 bit if longs are. */
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_ffsl(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_ffsl(unsigned long x)
{
#if HWLOC_BITS_PER_LONG == 64
@@ -211,7 +229,9 @@
#else /* no fls implementation */
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_flsl(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_flsl(unsigned long x)
{
int i = 0;
@@ -257,7 +277,9 @@
/* We only have an int fls(int) implementation, build a long one. */
/* First make it 32 bits if it was only 16. */
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_fls32(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_fls32(unsigned long x)
{
#if HWLOC_BITS_PER_INT == 16
@@ -278,7 +300,9 @@
}
/* Then make it 64 bit if longs are. */
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_flsl(unsigned long x) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_flsl(unsigned long x)
{
#if HWLOC_BITS_PER_LONG == 64
@@ -299,7 +323,9 @@
}
#endif
-static __hwloc_inline int __hwloc_attribute_const
+static __hwloc_inline int
+hwloc_weight_long(unsigned long w) __hwloc_attribute_const;
+static __hwloc_inline int
hwloc_weight_long(unsigned long w)
{
#if HWLOC_BITS_PER_LONG == 32
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/private.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
*
* See COPYING in top-level directory.
@@ -20,7 +20,9 @@
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
-
+#ifdef HAVE_SYS_UTSNAME_H
+#include <sys/utsname.h>
+#endif
#include <string.h>
#ifdef HWLOC_HAVE_ATTRIBUTE_FORMAT
@@ -45,9 +47,10 @@
HWLOC_BACKEND_NONE,
HWLOC_BACKEND_SYNTHETIC,
#ifdef HWLOC_LINUX_SYS
- HWLOC_BACKEND_SYSFS,
+ HWLOC_BACKEND_LINUXFS,
#endif
HWLOC_BACKEND_XML,
+ HWLOC_BACKEND_CUSTOM,
/* This value is only here so that we can end the enum list without
a comma (thereby preventing compiler warnings) */
HWLOC_BACKEND_MAX
@@ -108,6 +111,7 @@
struct hwloc_topology_support support;
struct hwloc_os_distances_s {
+ hwloc_obj_type_t type;
int nbobjs;
unsigned *indexes; /* array of OS indexes before we can convert them into objs. always available.
*/
@@ -120,16 +124,19 @@
* will be copied into the main logical-index-ordered distance at the end of the discovery.
*/
int forced; /* set if the user forced a matrix to ignore the OS one */
- } os_distances[HWLOC_OBJ_TYPE_MAX];
+ struct hwloc_os_distances_s *prev, *next;
+ } *first_osdist, *last_osdist;
+
hwloc_backend_t backend_type;
union hwloc_backend_params_u {
#ifdef HWLOC_LINUX_SYS
- struct hwloc_backend_params_sysfs_s {
- /* sysfs backend parameters */
+ struct hwloc_backend_params_linuxfs_s {
+ /* FS root parameters */
char *root_path; /* The path of the file system root, used when browsing, e.g., Linux' sysfs and procfs. */
int root_fd; /* The file descriptor for the file system root, used when browsing, e.g., Linux' sysfs and procfs. */
- } sysfs;
+ struct utsname utsname; /* cached result of uname, used multiple times */
+ } linuxfs;
#endif /* HWLOC_LINUX_SYS */
#if defined(HWLOC_OSF_SYS) || defined(HWLOC_COMPILE_PORTS)
struct hwloc_backend_params_osf {
@@ -142,9 +149,15 @@
void *doc;
#endif /* HWLOC_HAVE_LIBXML2 */
char *buffer; /* only used when not using libxml2 */
+ struct hwloc_xml_imported_distances_s {
+ hwloc_obj_t root;
+ struct hwloc_distances_s distances;
+ struct hwloc_xml_imported_distances_s *prev, *next;
+ } *first_distances, *last_distances;
} xml;
struct hwloc_backend_params_synthetic_s {
/* synthetic backend parameters */
+ char *string;
#define HWLOC_SYNTHETIC_MAX_DEPTH 128
unsigned arity[HWLOC_SYNTHETIC_MAX_DEPTH];
hwloc_obj_type_t type[HWLOC_SYNTHETIC_MAX_DEPTH];
@@ -159,16 +172,18 @@
extern int hwloc_get_sysctlbyname(const char *name, int64_t *n);
extern int hwloc_get_sysctl(int name[], unsigned namelen, int *n);
extern unsigned hwloc_fallback_nbprocessors(struct hwloc_topology *topology);
+extern void hwloc_connect_children(hwloc_obj_t obj);
+extern int hwloc_connect_levels(hwloc_topology_t topology);
+
#if defined(HWLOC_LINUX_SYS)
-extern void hwloc_look_linux(struct hwloc_topology *topology);
-extern void hwloc_set_linux_hooks(struct hwloc_topology *topology);
-extern int hwloc_backend_sysfs_init(struct hwloc_topology *topology, const char *fsroot_path);
-extern void hwloc_backend_sysfs_exit(struct hwloc_topology *topology);
+extern void hwloc_look_linuxfs(struct hwloc_topology *topology);
+extern void hwloc_set_linuxfs_hooks(struct hwloc_topology *topology);
+extern int hwloc_backend_linuxfs_init(struct hwloc_topology *topology, const char *fsroot_path);
+extern void hwloc_backend_linuxfs_exit(struct hwloc_topology *topology);
#endif /* HWLOC_LINUX_SYS */
extern int hwloc_backend_xml_init(struct hwloc_topology *topology, const char *xmlpath, const char *xmlbuffer, int buflen);
-extern void hwloc_xml_check_distances(struct hwloc_topology *topology);
extern int hwloc_look_xml(struct hwloc_topology *topology);
extern void hwloc_backend_xml_exit(struct hwloc_topology *topology);
@@ -260,6 +275,7 @@
/* Insert uname-specific names/values in the object infos array */
extern void hwloc_add_uname_info(struct hwloc_topology *topology);
+#ifdef HWLOC_INSIDE_LIBHWLOC
/** \brief Return a locally-allocated stringified bitmap for printf-like calls. */
static __hwloc_inline char *
hwloc_bitmap_printf_value(hwloc_const_bitmap_t bitmap)
@@ -317,6 +333,7 @@
}
hwloc_debug("%s", "\n");
}
+#endif
/* This can be used for the alloc field to get allocated data that can be freed by free() */
void *hwloc_alloc_heap(hwloc_topology_t topology, size_t len);
@@ -340,15 +357,17 @@
return hwloc_alloc(topology, len);
}
-extern void hwloc_topology_distances_init(struct hwloc_topology *topology);
-extern void hwloc_topology_distances_clear(struct hwloc_topology *topology);
-extern void hwloc_topology_distances_destroy(struct hwloc_topology *topology);
-extern void hwloc_topology__set_distance_matrix(struct hwloc_topology *topology, hwloc_obj_type_t type, unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs, float *distances, int force);
-extern void hwloc_store_distances_from_env(struct hwloc_topology *topology);
-extern void hwloc_convert_distances_indexes_into_objects(struct hwloc_topology *topology);
-extern void hwloc_finalize_logical_distances(struct hwloc_topology *topology);
-extern void hwloc_restrict_distances(struct hwloc_topology *topology, unsigned long flags);
-extern void hwloc_free_logical_distances(struct hwloc_distances_s *dist);
+extern void hwloc_distances_init(struct hwloc_topology *topology);
+extern void hwloc_distances_clear(struct hwloc_topology *topology);
+extern void hwloc_distances_destroy(struct hwloc_topology *topology);
+extern void hwloc_distances_set(struct hwloc_topology *topology, hwloc_obj_type_t type, unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs, float *distances, int force);
+extern void hwloc_distances_set_from_env(struct hwloc_topology *topology);
+extern void hwloc_distances_restrict_os(struct hwloc_topology *topology);
+extern void hwloc_distances_restrict(struct hwloc_topology *topology, unsigned long flags);
+extern void hwloc_distances_finalize_os(struct hwloc_topology *topology);
+extern void hwloc_distances_finalize_logical(struct hwloc_topology *topology);
+extern void hwloc_clear_object_distances(struct hwloc_obj *obj);
+extern void hwloc_clear_object_distances_one(struct hwloc_distances_s *distances);
extern void hwloc_group_by_distances(struct hwloc_topology *topology);
#endif /* HWLOC_PRIVATE_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/solaris-chiptype.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/solaris-chiptype.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/include/private/solaris-chiptype.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2009-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * $COPYRIGHT$
+ *
+ * Additional copyrights may follow
+ *
+ * $HEADER$
+ */
+
+/* SPARC Chip Modes. */
+#define MODE_UNKNOWN 0
+#define MODE_SPITFIRE 1
+#define MODE_BLACKBIRD 2
+#define MODE_CHEETAH 3
+#define MODE_SPARC64_VI 4
+#define MODE_T1 5
+#define MODE_T2 6
+#define MODE_SPARC64_VII 7
+#define MODE_ROCK 8
+
+/* SPARC Chip Implementations. */
+#define IMPL_SPARC64_VI 0x6
+#define IMPL_SPARC64_VII 0x7
+#define IMPL_SPITFIRE 0x10
+#define IMPL_BLACKBIRD 0x11
+#define IMPL_SABRE 0x12
+#define IMPL_HUMMINGBIRD 0x13
+#define IMPL_CHEETAH 0x14
+#define IMPL_CHEETAHPLUS 0x15
+#define IMPL_JALAPENO 0x16
+#define IMPL_JAGUAR 0x18
+#define IMPL_PANTHER 0x19
+#define IMPL_NIAGARA 0x23
+#define IMPL_NIAGARA_2 0x24
+#define IMPL_ROCK 0x25
+
+/* Default Mfg, Cache, Speed settings */
+#define TI_MANUFACTURER 0x17
+#define TWO_MEG_CACHE 2097152
+#define SPITFIRE_SPEED 142943750
+
+char* hwloc_solaris_get_chip_type(void);
+char* hwloc_solaris_get_chip_model(void);
+
+
Deleted: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/m4/decl.m4
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/m4/decl.m4 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/m4/decl.m4 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,31 +0,0 @@
-dnl -*- Autoconf -*-
-dnl Copyright © 2009 CNRS
-dnl Copyright © 2009 INRIA. All rights reserved.
-dnl Copyright © 2009 Université Bordeaux 1
-dnl See COPYING in top-level directory.
-
-dnl HWLOC_CHECK_DECL
-dnl
-dnl Check declaration of given function by trying to call it with an insane
-dnl number of arguments (10). Success means the compiler couldn't really check.
-AC_DEFUN([HWLOC_CHECK_DECL], [
- AC_MSG_CHECKING([whether function $1 is declared])
- AC_REQUIRE([AC_PROG_CC])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT([$4])],[$1(1,2,3,4,5,6,7,8,9,10);])],
- ac_res=no
- $3,
- ac_res=yes
- $2
- )
- AC_MSG_RESULT([$ac_res])
-])
-
-dnl HWLOC_CHECK_DECLS
-dnl
-dnl Same as HWLOCK_CHECK_DECL, but defines HAVE_DECL_foo to 1 or 0 depending on
-dnl the result.
-AC_DEFUN([HWLOC_CHECK_DECLS], [
- HWLOC_CHECK_DECL([$1], [ac_have_decl=1], [ac_have_decl=0], [$4])
- AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_DECL_$1]), [$ac_have_decl],
- [Define to 1 if you have the declaration of `$1', and to 0 if you don't])
-])
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,10 +1,11 @@
-# Copyright © 2009-2010 INRIA. All rights reserved.
-# Copyright © 2009-2010 Université Bordeaux 1
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2010, 2012 Université Bordeaux 1
# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
# See COPYING in top-level directory.
AM_CFLAGS = $(HWLOC_CFLAGS)
-AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS) -DHWLOC_INSIDE_LIBHWLOC
AM_LDFLAGS = $(HWLOC_LDFLAGS)
EXTRA_DIST = dolib.c
@@ -39,6 +40,8 @@
if HWLOC_HAVE_SOLARIS
sources += topology-solaris.c
+sources += topology-solaris-chiptype.c
+ldflags += -lpicl
endif HWLOC_HAVE_SOLARIS
if HWLOC_HAVE_LINUX
@@ -83,32 +86,31 @@
if HWLOC_HAVE_MS_LIB
.libs/libhwloc.lib: libhwloc.la dolib
- ./dolib "$(HWLOC_MS_LIB)" X86 .libs/libhwloc.def libhwloc-$(HWLOC_SOVERSION) .libs/libhwloc.lib
+ [ ! -r .libs/libhwloc.def ] || ./dolib "$(HWLOC_MS_LIB)" $(HWLOC_MS_LIB_ARCH) .libs/libhwloc.def $(libhwloc_so_version) .libs/libhwloc.lib
all-local: .libs/libhwloc.lib
endif HWLOC_HAVE_MS_LIB
install-exec-hook:
- $(INSTALL) .libs/libhwloc.def $(DESTDIR)$(libdir)
+ [ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.def $(DESTDIR)$(libdir)
if HWLOC_HAVE_MS_LIB
- $(INSTALL) .libs/libhwloc.lib $(DESTDIR)$(libdir)
- $(INSTALL) .libs/libhwloc.exp $(DESTDIR)$(libdir)
+ [ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.lib $(DESTDIR)$(libdir)
+ [ ! -r .libs/libhwloc.def ] || $(INSTALL) .libs/libhwloc.exp $(DESTDIR)$(libdir)
endif HWLOC_HAVE_MS_LIB
endif HWLOC_HAVE_WINDOWS
-if HWLOC_HAVE_CPUID
sources += topology-x86.c
-endif HWLOC_HAVE_CPUID
# Installable library
libhwloc_la_SOURCES = $(sources)
-libhwloc_la_LDFLAGS = $(ldflags) -version-number $(libhwloc_so_version) $(HWLOC_LIBXML2_LIBS) $(HWLOC_LINUX_LIBNUMA_LIBS) $(HWLOC_PCI_LIBS)
+libhwloc_la_LDFLAGS = $(ldflags) -version-info $(libhwloc_so_version) $(HWLOC_LIBS)
# Embedded library (note the lack of a .so version number -- that
-# intentionally only appears in the installable library)
+# intentionally only appears in the installable library). Also note
+# the lack of _LDFLAGS -- all libs are added by the upper layer (via
+# HWLOC_EMBEDDED_LIBS).
libhwloc_embedded_la_SOURCES = $(sources)
-libhwloc_embedded_la_LDFLAGS = $(ldflags) $(HWLOC_LIBXML2_LIBS) $(HWLOC_LINUX_LIBNUMA_LIBS)
# XML data (only install if we're building in standalone mode)
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/bind.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/cpuset.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/distances.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
- * Copyright © 2010-2011 INRIA. All rights reserved.
- * Copyright © 2011 Université Bordeaux 1
+ * Copyright © 2010-2011 inria. All rights reserved.
+ * Copyright © 2011-2012 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -13,76 +13,113 @@
#include <float.h>
#include <math.h>
+/**************************
+ * Main Init/Clear/Destroy
+ */
+
/* called during topology init */
-void hwloc_topology_distances_init(struct hwloc_topology *topology)
+void hwloc_distances_init(struct hwloc_topology *topology)
{
- unsigned i;
- for (i = HWLOC_OBJ_SYSTEM; i < HWLOC_OBJ_TYPE_MAX; i++) {
- /* no distances yet */
- topology->os_distances[i].nbobjs = 0;
- topology->os_distances[i].objs = NULL;
- topology->os_distances[i].indexes = NULL;
- topology->os_distances[i].distances = NULL;
- topology->os_distances[i].forced = 0;
- }
+ topology->first_osdist = topology->last_osdist = NULL;
}
/* called when reloading a topology.
* keep initial parameters (from set_distances and environment),
* but drop what was generated during previous load().
*/
-void hwloc_topology_distances_clear(struct hwloc_topology *topology)
+void hwloc_distances_clear(struct hwloc_topology *topology)
{
- unsigned i;
- for (i = HWLOC_OBJ_SYSTEM; i < HWLOC_OBJ_TYPE_MAX; i++) {
+ struct hwloc_os_distances_s * osdist;
+ for(osdist = topology->first_osdist; osdist; osdist = osdist->next) {
/* remove final distance matrices, but keep physically-ordered ones */
- free(topology->os_distances[i].objs);
- topology->os_distances[i].objs = NULL;
+ free(osdist->objs);
+ osdist->objs = NULL;
}
}
/* called during topology destroy */
-void hwloc_topology_distances_destroy(struct hwloc_topology *topology)
+void hwloc_distances_destroy(struct hwloc_topology * topology)
{
- unsigned i;
- for (i = HWLOC_OBJ_SYSTEM; i < HWLOC_OBJ_TYPE_MAX; i++) {
+ struct hwloc_os_distances_s *osdist, *next = topology->first_osdist;
+ while ((osdist = next) != NULL) {
+ next = osdist->next;
/* remove final distance matrics AND physically-ordered ones */
- free(topology->os_distances[i].indexes);
- topology->os_distances[i].indexes = NULL;
- free(topology->os_distances[i].objs);
- topology->os_distances[i].objs = NULL;
- free(topology->os_distances[i].distances);
- topology->os_distances[i].distances = NULL;
+ free(osdist->indexes);
+ free(osdist->objs);
+ free(osdist->distances);
+ free(osdist);
}
+ topology->first_osdist = topology->last_osdist = NULL;
}
+/******************************************************
+ * Inserting distances in the topology
+ * from a backend, from the environment or by the user
+ */
+
/* insert a distance matrix in the topology.
* the caller gives us those pointers, we take care of freeing them later and so on.
*/
-void hwloc_topology__set_distance_matrix(hwloc_topology_t __hwloc_restrict topology, hwloc_obj_type_t type,
- unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs, float *distances,
- int force)
+void hwloc_distances_set(hwloc_topology_t __hwloc_restrict topology, hwloc_obj_type_t type,
+ unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs, float *distances,
+ int force)
{
- if (topology->os_distances[type].forced && !force) {
- free(indexes);
- free(objs);
- free(distances);
- return;
+ struct hwloc_os_distances_s *osdist, *next = topology->first_osdist;
+ /* look for existing distances for the same type */
+ while ((osdist = next) != NULL) {
+ next = osdist->next;
+ if (osdist->type == type) {
+ if (osdist->forced && !force) {
+ /* there is a forced distance element, ignore the new non-forced one */
+ free(indexes);
+ free(objs);
+ free(distances);
+ return;
+ } else if (force) {
+ /* we're forcing a new distance, remove the old ones */
+ free(osdist->indexes);
+ free(osdist->objs);
+ free(osdist->distances);
+ /* remove current object */
+ if (osdist->prev)
+ osdist->prev->next = next;
+ else
+ topology->first_osdist = next;
+ if (next)
+ next->prev = osdist->prev;
+ else
+ topology->last_osdist = osdist->prev;
+ /* free current object */
+ free(osdist);
+ }
+ }
}
- free(topology->os_distances[type].indexes);
- free(topology->os_distances[type].objs);
- free(topology->os_distances[type].distances);
- topology->os_distances[type].nbobjs = nbobjs;
- topology->os_distances[type].indexes = indexes;
- topology->os_distances[type].objs = objs;
- topology->os_distances[type].distances = distances;
- topology->os_distances[type].forced = force;
+ if (!nbobjs)
+ /* we're just clearing, return now */
+ return;
+
+ /* create the new element */
+ osdist = malloc(sizeof(struct hwloc_os_distances_s));
+ osdist->nbobjs = nbobjs;
+ osdist->indexes = indexes;
+ osdist->objs = objs;
+ osdist->distances = distances;
+ osdist->forced = force;
+ osdist->type = type;
+ /* insert it */
+ osdist->next = NULL;
+ osdist->prev = topology->last_osdist;
+ if (topology->last_osdist)
+ topology->last_osdist->next = osdist;
+ else
+ topology->first_osdist = osdist;
+ topology->last_osdist = osdist;
}
/* make sure a user-given distance matrix is sane */
-static int hwloc_topology__check_distance_matrix(hwloc_topology_t __hwloc_restrict topology __hwloc_attribute_unused, hwloc_obj_type_t type __hwloc_attribute_unused,
- unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs __hwloc_attribute_unused, float *distances __hwloc_attribute_unused)
+static int hwloc_distances__check_matrix(hwloc_topology_t __hwloc_restrict topology __hwloc_attribute_unused, hwloc_obj_type_t type __hwloc_attribute_unused,
+ unsigned nbobjs, unsigned *indexes, hwloc_obj_t *objs __hwloc_attribute_unused, float *distances __hwloc_attribute_unused)
{
unsigned i,j;
/* make sure we don't have the same index twice */
@@ -95,24 +132,9 @@
return 0;
}
-static hwloc_obj_t hwloc_find_obj_by_type_and_os_index(hwloc_obj_t root, hwloc_obj_type_t type, unsigned os_index)
+static void hwloc_distances__set_from_string(struct hwloc_topology *topology,
+ hwloc_obj_type_t type, char *string)
{
- hwloc_obj_t child;
- if (root->type == type && root->os_index == os_index)
- return root;
- child = root->first_child;
- while (child) {
- hwloc_obj_t found = hwloc_find_obj_by_type_and_os_index(child, type, os_index);
- if (found)
- return found;
- child = child->next_sibling;
- }
- return NULL;
-}
-
-static void hwloc_get_type_distances_from_string(struct hwloc_topology *topology,
- hwloc_obj_type_t type, char *string)
-{
/* the string format is: "index[0],...,index[N-1]:distance[0],...,distance[N*N-1]"
* or "index[0],...,index[N-1]:X*Y" or "index[0],...,index[N-1]:X*Y*Z"
*/
@@ -122,40 +144,58 @@
unsigned nbobjs = 0, i, j, x, y, z;
if (!strcmp(string, "none")) {
- hwloc_topology__set_distance_matrix(topology, type, 0, NULL, NULL, NULL, 1 /* force */);
+ hwloc_distances_set(topology, type, 0, NULL, NULL, NULL, 1 /* force */);
return;
}
- /* count indexes */
- while (1) {
- size_t size = strspn(tmp, "0123456789");
- if (tmp[size] != ',') {
- /* last element */
- tmp += size;
+ if (sscanf(string, "%u-%u:", &i, &j) == 2) {
+ /* range i-j */
+ nbobjs = j-i+1;
+ indexes = calloc(nbobjs, sizeof(unsigned));
+ distances = calloc(nbobjs*nbobjs, sizeof(float));
+ /* make sure the user didn't give a veeeeery large range */
+ if (!indexes || !distances) {
+ free(indexes);
+ free(distances);
+ return;
+ }
+ for(j=0; j<nbobjs; j++)
+ indexes[j] = j+i;
+ tmp = strchr(string, ':') + 1;
+
+ } else {
+ /* explicit list of indexes, count them */
+ while (1) {
+ size_t size = strspn(tmp, "0123456789");
+ if (tmp[size] != ',') {
+ /* last element */
+ tmp += size;
+ nbobjs++;
+ break;
+ }
+ /* another index */
+ tmp += size+1;
nbobjs++;
- break;
}
- /* another index */
- tmp += size+1;
- nbobjs++;
- }
- if (*tmp != ':') {
- fprintf(stderr, "Ignoring %s distances from environment variable, missing colon\n",
- hwloc_obj_type_string(type));
- return;
+ if (*tmp != ':') {
+ fprintf(stderr, "Ignoring %s distances from environment variable, missing colon\n",
+ hwloc_obj_type_string(type));
+ return;
+ }
+
+ indexes = calloc(nbobjs, sizeof(unsigned));
+ distances = calloc(nbobjs*nbobjs, sizeof(float));
+ tmp = string;
+
+ /* parse indexes */
+ for(i=0; i<nbobjs; i++) {
+ indexes[i] = strtoul(tmp, &next, 0);
+ tmp = next+1;
+ }
}
- indexes = calloc(nbobjs, sizeof(unsigned));
- distances = calloc(nbobjs*nbobjs, sizeof(float));
- tmp = string;
- /* parse indexes */
- for(i=0; i<nbobjs; i++) {
- indexes[i] = strtoul(tmp, &next, 0);
- tmp = next+1;
- }
-
/* parse distances */
z=1; /* default if sscanf finds only 2 values below */
if (sscanf(tmp, "%u*%u*%u", &x, &y, &z) >= 2) {
@@ -195,20 +235,20 @@
}
}
- if (hwloc_topology__check_distance_matrix(topology, type, nbobjs, indexes, NULL, distances) < 0) {
+ if (hwloc_distances__check_matrix(topology, type, nbobjs, indexes, NULL, distances) < 0) {
fprintf(stderr, "Ignoring invalid %s distances from environment variable\n", hwloc_obj_type_string(type));
free(indexes);
free(distances);
return;
}
- hwloc_topology__set_distance_matrix(topology, type, nbobjs, indexes, NULL, distances, 1 /* force */);
+ hwloc_distances_set(topology, type, nbobjs, indexes, NULL, distances, 1 /* force */);
}
/* take distances in the environment, store them as is in the topology.
* we'll convert them into object later once the tree is filled
*/
-void hwloc_store_distances_from_env(struct hwloc_topology *topology)
+void hwloc_distances_set_from_env(struct hwloc_topology *topology)
{
hwloc_obj_type_t type;
for(type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
@@ -216,11 +256,13 @@
snprintf(envname, sizeof(envname), "HWLOC_%s_DISTANCES", hwloc_obj_type_string(type));
env = getenv(envname);
if (env)
- hwloc_get_type_distances_from_string(topology, type, env);
+ hwloc_distances__set_from_string(topology, type, env);
}
}
-/* take the given distance, store them as is in the topology.
+/* The actual set() function exported to the user
+ *
+ * take the given distance, store them as is in the topology.
* we'll convert them into object later once the tree is filled.
*/
int hwloc_topology_set_distance_matrix(hwloc_topology_t __hwloc_restrict topology, hwloc_obj_type_t type,
@@ -230,14 +272,14 @@
float *_distances;
if (!nbobjs && !indexes && !distances) {
- hwloc_topology__set_distance_matrix(topology, type, 0, NULL, NULL, NULL, 1 /* force */);
+ hwloc_distances_set(topology, type, 0, NULL, NULL, NULL, 1 /* force */);
return 0;
}
if (!nbobjs || !indexes || !distances)
return -1;
- if (hwloc_topology__check_distance_matrix(topology, type, nbobjs, indexes, NULL, distances) < 0)
+ if (hwloc_distances__check_matrix(topology, type, nbobjs, indexes, NULL, distances) < 0)
return -1;
/* copy the input arrays and give them to the topology */
@@ -245,127 +287,262 @@
memcpy(_indexes, indexes, nbobjs*sizeof(unsigned));
_distances = malloc(nbobjs*nbobjs*sizeof(float));
memcpy(_distances, distances, nbobjs*nbobjs*sizeof(float));
- hwloc_topology__set_distance_matrix(topology, type, nbobjs, _indexes, NULL, _distances, 1 /* force */);
+ hwloc_distances_set(topology, type, nbobjs, _indexes, NULL, _distances, 1 /* force */);
return 0;
}
+/************************
+ * Restricting distances
+ */
+
+/* called when some objects have been removed because empty/ignored/cgroup/restrict,
+ * we must rebuild the list of objects from indexes (in hwloc_distances_finalize_os())
+ */
+void hwloc_distances_restrict_os(struct hwloc_topology *topology)
+{
+ struct hwloc_os_distances_s * osdist;
+ for(osdist = topology->first_osdist; osdist; osdist = osdist->next) {
+ /* remove the objs array, we'll rebuild it from the indexes
+ * depending on remaining objects */
+ free(osdist->objs);
+ osdist->objs = NULL;
+ }
+}
+
+
/* cleanup everything we created from distances so that we may rebuild them
* at the end of restrict()
*/
-void hwloc_restrict_distances(struct hwloc_topology *topology, unsigned long flags)
+void hwloc_distances_restrict(struct hwloc_topology *topology, unsigned long flags)
{
- hwloc_obj_type_t type;
- for(type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
- /* remove the objs array, we'll rebuild it from the indexes
- * depending on remaining objects */
- free(topology->os_distances[type].objs);
- topology->os_distances[type].objs = NULL;
+ if (flags & HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES) {
+ /* some objects may have been removed, clear objects arrays so that finalize_os rebuilds them properly */
+ hwloc_distances_restrict_os(topology);
+ } else {
/* if not adapting distances, drop everything */
- if (!(flags & HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES)) {
- free(topology->os_distances[type].indexes);
- topology->os_distances[type].indexes = NULL;
- free(topology->os_distances[type].distances);
- topology->os_distances[type].distances = NULL;
- topology->os_distances[type].nbobjs = 0;
- }
+ hwloc_distances_destroy(topology);
}
}
+/**************************************************************
+ * Convert user/env given array of indexes into actual objects
+ */
+
+static hwloc_obj_t hwloc_find_obj_by_type_and_os_index(hwloc_obj_t root, hwloc_obj_type_t type, unsigned os_index)
+{
+ hwloc_obj_t child;
+ if (root->type == type && root->os_index == os_index)
+ return root;
+ child = root->first_child;
+ while (child) {
+ hwloc_obj_t found = hwloc_find_obj_by_type_and_os_index(child, type, os_index);
+ if (found)
+ return found;
+ child = child->next_sibling;
+ }
+ return NULL;
+}
+
/* convert distance indexes that were previously stored in the topology
* into actual objects if not done already.
- * it's already done when distances come from backends.
+ * it's already done when distances come from backends (this function should not be called then).
* it's not done when distances come from the user.
+ *
+ * returns -1 if the matrix was invalid
*/
-void hwloc_convert_distances_indexes_into_objects(struct hwloc_topology *topology)
+static int
+hwloc_distances__finalize_os(struct hwloc_topology *topology, struct hwloc_os_distances_s *osdist)
{
- hwloc_obj_type_t type;
- for(type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
- unsigned nbobjs = topology->os_distances[type].nbobjs;
- unsigned *indexes = topology->os_distances[type].indexes;
- float *distances = topology->os_distances[type].distances;
- unsigned i, j;
- if (!topology->os_distances[type].objs) {
- hwloc_obj_t *objs = calloc(nbobjs, sizeof(hwloc_obj_t));
- /* traverse the topology and look for the relevant objects */
- for(i=0; i<nbobjs; i++) {
- hwloc_obj_t obj = hwloc_find_obj_by_type_and_os_index(topology->levels[0][0], type, indexes[i]);
- if (!obj) {
+ unsigned nbobjs = osdist->nbobjs;
+ unsigned *indexes = osdist->indexes;
+ float *distances = osdist->distances;
+ unsigned i, j;
+ hwloc_obj_type_t type = osdist->type;
+ hwloc_obj_t *objs = calloc(nbobjs, sizeof(hwloc_obj_t));
- /* shift the matrix */
+ assert(!osdist->objs);
+
+ /* traverse the topology and look for the relevant objects */
+ for(i=0; i<nbobjs; i++) {
+ hwloc_obj_t obj = hwloc_find_obj_by_type_and_os_index(topology->levels[0][0], type, indexes[i]);
+ if (!obj) {
+
+ /* shift the matrix */
#define OLDPOS(i,j) (distances+(i)*nbobjs+(j))
#define NEWPOS(i,j) (distances+(i)*(nbobjs-1)+(j))
- if (i>0) {
- /** no need to move beginning of 0th line */
- for(j=0; j<i-1; j++)
- /** move end of jth line + beginning of (j+1)th line */
- memmove(NEWPOS(j,i), OLDPOS(j,i+1), (nbobjs-1)*sizeof(*distances));
- /** move end of (i-1)th line */
- memmove(NEWPOS(i-1,i), OLDPOS(i-1,i+1), (nbobjs-i-1)*sizeof(*distances));
- }
- if (i<nbobjs-1) {
- /** move beginning of (i+1)th line */
- memmove(NEWPOS(i,0), OLDPOS(i+1,0), i*sizeof(*distances));
- /** move end of jth line + beginning of (j+1)th line */
- for(j=i; j<nbobjs-2; j++)
- memmove(NEWPOS(j,i), OLDPOS(j+1,i+1), (nbobjs-1)*sizeof(*distances));
- /** move end of (nbobjs-2)th line */
- memmove(NEWPOS(nbobjs-2,i), OLDPOS(nbobjs-1,i+1), (nbobjs-i-1)*sizeof(*distances));
- }
+ if (i>0) {
+ /** no need to move beginning of 0th line */
+ for(j=0; j<i-1; j++)
+ /** move end of jth line + beginning of (j+1)th line */
+ memmove(NEWPOS(j,i), OLDPOS(j,i+1), (nbobjs-1)*sizeof(*distances));
+ /** move end of (i-1)th line */
+ memmove(NEWPOS(i-1,i), OLDPOS(i-1,i+1), (nbobjs-i-1)*sizeof(*distances));
+ }
+ if (i<nbobjs-1) {
+ /** move beginning of (i+1)th line */
+ memmove(NEWPOS(i,0), OLDPOS(i+1,0), i*sizeof(*distances));
+ /** move end of jth line + beginning of (j+1)th line */
+ for(j=i; j<nbobjs-2; j++)
+ memmove(NEWPOS(j,i), OLDPOS(j+1,i+1), (nbobjs-1)*sizeof(*distances));
+ /** move end of (nbobjs-2)th line */
+ memmove(NEWPOS(nbobjs-2,i), OLDPOS(nbobjs-1,i+1), (nbobjs-i-1)*sizeof(*distances));
+ }
- /* shift the indexes array */
- memmove(indexes+i, indexes+i+1, (nbobjs-i-1)*sizeof(*indexes));
+ /* shift the indexes array */
+ memmove(indexes+i, indexes+i+1, (nbobjs-i-1)*sizeof(*indexes));
- /* update counters */
- nbobjs--;
- i--;
- continue;
- }
- objs[i] = obj;
- }
+ /* update counters */
+ nbobjs--;
+ i--;
+ continue;
+ }
+ objs[i] = obj;
+ }
- topology->os_distances[type].nbobjs = nbobjs;
- if (!nbobjs) {
- /* the whole matrix was invalid */
- free(objs);
- free(topology->os_distances[type].indexes);
- topology->os_distances[type].indexes = NULL;
- free(topology->os_distances[type].distances);
- topology->os_distances[type].distances = NULL;
- } else {
- /* setup the objs array */
- topology->os_distances[type].objs = objs;
- }
+ osdist->nbobjs = nbobjs;
+ if (!nbobjs) {
+ /* the whole matrix was invalid, let the caller remove this distances */
+ free(objs);
+ return -1;
+ }
+
+ /* setup the objs array */
+ osdist->objs = objs;
+ return 0;
+}
+
+
+void hwloc_distances_finalize_os(struct hwloc_topology *topology)
+{
+ int dropall = !topology->levels[0][0]->cpuset; /* we don't support distances on multinode systems */
+
+ struct hwloc_os_distances_s *osdist, *next = topology->first_osdist;
+ while ((osdist = next) != NULL) {
+ int err;
+ next = osdist->next;
+
+ if (dropall)
+ goto drop;
+
+ /* remove final distance matrics AND physically-ordered ones */
+
+ if (osdist->objs)
+ /* nothing to do, switch to the next element */
+ continue;
+
+ err = hwloc_distances__finalize_os(topology, osdist);
+ if (!err)
+ /* convert ok, switch to the next element */
+ continue;
+
+ drop:
+ /* remove this element */
+ free(osdist->indexes);
+ free(osdist->distances);
+ /* remove current object */
+ if (osdist->prev)
+ osdist->prev->next = next;
+ else
+ topology->first_osdist = next;
+ if (next)
+ next->prev = osdist->prev;
+ else
+ topology->last_osdist = osdist->prev;
+ /* free current object */
+ free(osdist);
+ }
+}
+
+/***********************************************************
+ * Convert internal distances given by the backend/env/user
+ * into exported logical distances attached to objects
+ */
+
+static hwloc_obj_t
+hwloc_get_obj_covering_cpuset_nodeset(struct hwloc_topology *topology,
+ hwloc_const_cpuset_t cpuset,
+ hwloc_const_nodeset_t nodeset)
+{
+ hwloc_obj_t parent = hwloc_get_root_obj(topology), child;
+
+ assert(cpuset);
+ assert(nodeset);
+ assert(hwloc_bitmap_isincluded(cpuset, parent->cpuset));
+ assert(!nodeset || hwloc_bitmap_isincluded(nodeset, parent->nodeset));
+
+ trychildren:
+ child = parent->first_child;
+ while (child) {
+ /* look for a child with a cpuset containing ours.
+ * if it has a nodeset, it must also contain ours.
+ */
+ if (child->cpuset && hwloc_bitmap_isincluded(cpuset, child->cpuset)
+ && (!child->nodeset || hwloc_bitmap_isincluded(nodeset, child->nodeset))) {
+ parent = child;
+ goto trychildren;
}
+ child = child->next_sibling;
}
+ return parent;
}
static void
-hwloc_setup_distances_from_os_matrix(struct hwloc_topology *topology,
- unsigned nbobjs,
- hwloc_obj_t *objs, float *osmatrix)
+hwloc_distances__finalize_logical(struct hwloc_topology *topology,
+ unsigned nbobjs,
+ hwloc_obj_t *objs, float *osmatrix)
{
unsigned i, j, li, lj, minl;
float min = FLT_MAX, max = FLT_MIN;
hwloc_obj_t root;
float *matrix;
- hwloc_cpuset_t set;
+ hwloc_cpuset_t cpuset;
+ hwloc_nodeset_t nodeset;
unsigned relative_depth;
int idx;
/* find the root */
- set = hwloc_bitmap_alloc();
- for(i=0; i<nbobjs; i++)
- hwloc_bitmap_or(set, set, objs[i]->cpuset);
- root = hwloc_get_obj_covering_cpuset(topology, set);
- assert(root);
- if (!hwloc_bitmap_isequal(set, root->cpuset)) {
- /* partial distance matrix not including all the children of a single object */
- /* TODO insert an intermediate object (group?) covering only these children ? */
- hwloc_bitmap_free(set);
+ cpuset = hwloc_bitmap_alloc();
+ nodeset = hwloc_bitmap_alloc();
+ for(i=0; i<nbobjs; i++) {
+ hwloc_bitmap_or(cpuset, cpuset, objs[i]->cpuset);
+ if (objs[i]->nodeset)
+ hwloc_bitmap_or(nodeset, nodeset, objs[i]->nodeset);
+ }
+ /* find the object covering cpuset AND nodeset (can't use hwloc_get_obj_covering_cpuset()) */
+ root = hwloc_get_obj_covering_cpuset_nodeset(topology, cpuset, nodeset);
+ if (!root) {
+ /* should not happen, ignore the distance matrix and report an error. */
+ if (!hwloc_hide_errors()) {
+ char *a, *b;
+ hwloc_bitmap_asprintf(&a, cpuset);
+ hwloc_bitmap_asprintf(&b, nodeset);
+ fprintf(stderr, "****************************************************************************\n");
+ fprintf(stderr, "* Hwloc has encountered an error when adding a distance matrix to the topology.\n");
+ fprintf(stderr, "*\n");
+ fprintf(stderr, "* hwloc_distances__finalize_logical() could not find any object covering\n");
+ fprintf(stderr, "* cpuset %s and nodeset %s\n", a, b);
+ fprintf(stderr, "*\n");
+ fprintf(stderr, "* Please report this error message to the hwloc user's mailing list,\n");
+ fprintf(stderr, "* along with the output from the hwloc-gather-topology.sh script.\n");
+ fprintf(stderr, "****************************************************************************\n");
+ free(a);
+ free(b);
+ }
+ hwloc_bitmap_free(cpuset);
+ hwloc_bitmap_free(nodeset);
return;
}
- hwloc_bitmap_free(set);
+ /* ideally, root has the exact cpuset and nodeset.
+ * but ignoring or other things that remove objects may cause the object array to reduce */
+ assert(hwloc_bitmap_isincluded(cpuset, root->cpuset));
+ assert(hwloc_bitmap_isincluded(nodeset, root->nodeset));
+ hwloc_bitmap_free(cpuset);
+ hwloc_bitmap_free(nodeset);
+ if (root->depth >= objs[0]->depth) {
+ /* strange topology led us to find invalid relative depth, ignore */
+ return;
+ }
relative_depth = objs[0]->depth - root->depth; /* this assume that we have distances between objects of the same level */
/* get the logical index offset, it's the min of all logical indexes */
@@ -417,39 +594,58 @@
* that can be exposed in the API
*/
void
-hwloc_finalize_logical_distances(struct hwloc_topology *topology)
+hwloc_distances_finalize_logical(struct hwloc_topology *topology)
{
unsigned nbobjs;
- hwloc_obj_type_t type;
int depth;
+ struct hwloc_os_distances_s * osdist;
+ for(osdist = topology->first_osdist; osdist; osdist = osdist->next) {
- for (type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
- nbobjs = topology->os_distances[type].nbobjs;
+ nbobjs = osdist->nbobjs;
if (!nbobjs)
continue;
- depth = hwloc_get_type_depth(topology, type);
+ depth = hwloc_get_type_depth(topology, osdist->type);
if (depth == HWLOC_TYPE_DEPTH_UNKNOWN || depth == HWLOC_TYPE_DEPTH_MULTIPLE)
continue;
- if (topology->os_distances[type].objs) {
- assert(topology->os_distances[type].distances);
-
- hwloc_setup_distances_from_os_matrix(topology, nbobjs,
- topology->os_distances[type].objs,
- topology->os_distances[type].distances);
+ if (osdist->objs) {
+ assert(osdist->distances);
+ hwloc_distances__finalize_logical(topology, nbobjs,
+ osdist->objs,
+ osdist->distances);
}
}
}
-/* destroy a object distances structure */
+/***************************************************
+ * Destroying logical distances attached to objects
+ */
+
+/* destroy an object distances structure */
void
-hwloc_free_logical_distances(struct hwloc_distances_s * dist)
+hwloc_clear_object_distances_one(struct hwloc_distances_s * distances)
{
- free(dist->latency);
- free(dist);
+ free(distances->latency);
+ free(distances);
+
}
+void
+hwloc_clear_object_distances(hwloc_obj_t obj)
+{
+ unsigned i;
+ for (i=0; i<obj->distances_count; i++)
+ hwloc_clear_object_distances_one(obj->distances[i]);
+ free(obj->distances);
+ obj->distances = NULL;
+ obj->distances_count = 0;
+}
+
+/******************************************
+ * Grouping objects according to distances
+ */
+
static void hwloc_report_user_distance_error(const char *msg, int line)
{
static int reported = 0;
@@ -480,11 +676,11 @@
* Return how many groups were created, or 0 if some incomplete distance graphs were found.
*/
static unsigned
-hwloc_setup_group_from_min_distance(unsigned nbobjs,
- float *_distances,
- float accuracy,
- unsigned *groupids,
- int verbose)
+hwloc__find_groups_by_min_distance(unsigned nbobjs,
+ float *_distances,
+ float accuracy,
+ unsigned *groupids,
+ int verbose)
{
float min_distance = FLT_MAX;
unsigned groupid = 1;
@@ -593,14 +789,14 @@
* Look at object physical distances to group them.
*/
static void
-hwloc_setup_groups_from_distances(struct hwloc_topology *topology,
- unsigned nbobjs,
- struct hwloc_obj **objs,
- float *_distances,
- unsigned nbaccuracies, float *accuracies,
- int fromuser,
- int needcheck,
- int verbose)
+hwloc__groups_by_distances(struct hwloc_topology *topology,
+ unsigned nbobjs,
+ struct hwloc_obj **objs,
+ float *_distances,
+ unsigned nbaccuracies, float *accuracies,
+ int fromuser,
+ int needcheck,
+ int verbose)
{
unsigned *groupids = NULL;
unsigned nbgroups = 0;
@@ -621,7 +817,7 @@
nbobjs, hwloc_obj_type_string(objs[0]->type), accuracies[i]);
if (needcheck && hwloc__check_grouping_matrix(nbobjs, _distances, accuracies[i], verbose) < 0)
continue;
- nbgroups = hwloc_setup_group_from_min_distance(nbobjs, _distances, accuracies[i], groupids, verbose);
+ nbgroups = hwloc__find_groups_by_min_distance(nbobjs, _distances, accuracies[i], groupids, verbose);
if (nbgroups)
break;
}
@@ -651,10 +847,17 @@
group_obj->cpuset = hwloc_bitmap_alloc();
group_obj->attr->group.depth = topology->next_group_depth;
for (j=0; j<nbobjs; j++)
- if (groupids[j] == i+1) {
- hwloc_bitmap_or(group_obj->cpuset, group_obj->cpuset, objs[j]->cpuset);
- groupsizes[i]++;
- }
+ if (groupids[j] == i+1) {
+ /* assemble the group cpuset */
+ hwloc_bitmap_or(group_obj->cpuset, group_obj->cpuset, objs[j]->cpuset);
+ /* if one obj has a nodeset, assemble a group nodeset */
+ if (objs[j]->nodeset) {
+ if (!group_obj->nodeset)
+ group_obj->nodeset = hwloc_bitmap_alloc();
+ hwloc_bitmap_or(group_obj->nodeset, group_obj->nodeset, objs[j]->nodeset);
+ }
+ groupsizes[i]++;
+ }
hwloc_debug_1arg_bitmap("adding Group object with %u objects and cpuset %s\n",
groupsizes[i], group_obj->cpuset);
hwloc__insert_object_by_cpuset(topology, group_obj,
@@ -673,8 +876,11 @@
if (groupids[j])
GROUP_DISTANCE(groupids[i]-1, groupids[j]-1) += DISTANCE(i, j);
for(i=0; i<nbgroups; i++)
- for(j=0; j<nbgroups; j++)
- GROUP_DISTANCE(i, j) /= groupsizes[i]*groupsizes[j];
+ for(j=0; j<nbgroups; j++) {
+ unsigned groupsize = groupsizes[i]*groupsizes[j];
+ float groupsizef = (float) groupsize;
+ GROUP_DISTANCE(i, j) /= groupsizef;
+ }
#ifdef HWLOC_DEBUG
hwloc_debug("%s", "generated new distance matrix between groups:\n");
hwloc_debug("%s", " index");
@@ -690,7 +896,7 @@
#endif
topology->next_group_depth++;
- hwloc_setup_groups_from_distances(topology, nbgroups, groupobjs, (float*) groupdistances, nbaccuracies, accuracies, fromuser, 0 /* no need to check generated matrix */, verbose);
+ hwloc__groups_by_distances(topology, nbgroups, groupobjs, (float*) groupdistances, nbaccuracies, accuracies, fromuser, 0 /* no need to check generated matrix */, verbose);
inner_free:
/* Safely free everything */
@@ -715,13 +921,15 @@
hwloc_group_by_distances(struct hwloc_topology *topology)
{
unsigned nbobjs;
- hwloc_obj_type_t type;
+ struct hwloc_os_distances_s * osdist;
char *env;
float accuracies[5] = { 0.0, 0.01, 0.02, 0.05, 0.1 };
unsigned nbaccuracies = 5;
+ hwloc_obj_t group_obj;
int verbose = 0;
+ unsigned i;
#ifdef HWLOC_DEBUG
- unsigned i,j;
+ unsigned j;
#endif
env = getenv("HWLOC_GROUPING");
@@ -749,38 +957,60 @@
verbose = atoi(env);
#endif
- for (type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++) {
- nbobjs = topology->os_distances[type].nbobjs;
+ for(osdist = topology->first_osdist; osdist; osdist = osdist->next) {
+
+ nbobjs = osdist->nbobjs;
if (!nbobjs)
continue;
- if (topology->os_distances[type].objs) {
+ if (osdist->objs) {
/* if we have objs, we must have distances as well,
* thanks to hwloc_convert_distances_indexes_into_objects()
*/
- assert(topology->os_distances[type].distances);
+ assert(osdist->distances);
#ifdef HWLOC_DEBUG
hwloc_debug("%s", "trying to group objects using distance matrix:\n");
hwloc_debug("%s", " index");
for(j=0; j<nbobjs; j++)
- hwloc_debug(" % 5d", (int) topology->os_distances[type].objs[j]->os_index);
+ hwloc_debug(" % 5d", (int) osdist->objs[j]->os_index);
hwloc_debug("%s", "\n");
for(i=0; i<nbobjs; i++) {
- hwloc_debug(" % 5d", (int) topology->os_distances[type].objs[i]->os_index);
+ hwloc_debug(" % 5d", (int) osdist->objs[i]->os_index);
for(j=0; j<nbobjs; j++)
- hwloc_debug(" %2.3f", topology->os_distances[type].distances[i*nbobjs + j]);
+ hwloc_debug(" %2.3f", osdist->distances[i*nbobjs + j]);
hwloc_debug("%s", "\n");
}
#endif
- hwloc_setup_groups_from_distances(topology, nbobjs,
- topology->os_distances[type].objs,
- topology->os_distances[type].distances,
- nbaccuracies, accuracies,
- topology->os_distances[type].indexes != NULL,
- 1 /* check the first matrice */,
- verbose);
+ hwloc__groups_by_distances(topology, nbobjs,
+ osdist->objs,
+ osdist->distances,
+ nbaccuracies, accuracies,
+ osdist->indexes != NULL,
+ 1 /* check the first matrice */,
+ verbose);
+
+ /* add a final group object covering everybody so that the distance matrix can be stored somewhere.
+ * this group will be merged into a regular object if the matrix isn't strangely incomplete
+ */
+ group_obj = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, -1);
+ group_obj->attr->group.depth = topology->next_group_depth++;
+ group_obj->cpuset = hwloc_bitmap_alloc();
+ for(i=0; i<nbobjs; i++) {
+ /* assemble the group cpuset */
+ hwloc_bitmap_or(group_obj->cpuset, group_obj->cpuset, osdist->objs[i]->cpuset);
+ /* if one obj has a nodeset, assemble a group nodeset */
+ if (osdist->objs[i]->nodeset) {
+ if (!group_obj->nodeset)
+ group_obj->nodeset = hwloc_bitmap_alloc();
+ hwloc_bitmap_or(group_obj->nodeset, group_obj->nodeset, osdist->objs[i]->nodeset);
+ }
+ }
+ hwloc_debug_1arg_bitmap("adding Group object (as root of distance matrix with %u objects) with cpuset %s\n",
+ nbobjs, group_obj->cpuset);
+ hwloc__insert_object_by_cpuset(topology, group_obj,
+ osdist->indexes != NULL ? hwloc_report_user_distance_error : hwloc_report_os_error);
}
}
}
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/dolib.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/dolib.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/dolib.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009 INRIA. All rights reserved.
- * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009, 2012 Université Bordeaux 1
* See COPYING in top-level directory.
*/
@@ -12,8 +12,10 @@
#include <stdlib.h>
int main(int argc, char *argv[]) {
- char *prog, *arch, *def, *name, *lib;
+ char *prog, *arch, *def, *version, *lib;
char s[1024];
+ char name[16];
+ int current, age, revision;
if (argc != 6) {
fprintf(stderr,"bad number of arguments");
@@ -23,9 +25,15 @@
prog = argv[1];
arch = argv[2];
def = argv[3];
- name = argv[4];
+ version = argv[4];
lib = argv[5];
+ if (sscanf(version, "%d:%d:%d", ¤t, &age, &revision) != 3)
+ exit(EXIT_FAILURE);
+
+ snprintf(name, sizeof(name), "libhwloc-%d", current - age);
+ printf("using soname %s\n", name);
+
snprintf(s, sizeof(s), "\"%s\" /machine:%s /def:%s /name:%s /out:%s",
prog, arch, def, name, lib);
if (system(s)) {
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/misc.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-aix.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-darwin.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-freebsd.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-hpux.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-libpci.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-libpci.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-libpci.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* See COPYING in top-level directory.
*/
@@ -113,8 +113,8 @@
fillinfo(topology, obj, path);
}
}
+ closedir(dir);
}
- closedir(dir);
}
}
@@ -513,11 +513,9 @@
/* restrict to the existing topology cpuset to avoid errors later */
hwloc_bitmap_and(cpuset, cpuset, topology->levels[0][0]->cpuset);
- /* why not inserting a group and let the core remove it if useless?
- * 1) we need to make sure that the group is above all objects
- * with same cpuset (to avoid attaching to caches or so)
- * 2) the merge-keep-structure code is already done when coming here
- */
+ /* if the remaining cpuset is empty, take the root */
+ if (hwloc_bitmap_iszero(cpuset))
+ hwloc_bitmap_copy(cpuset, hwloc_topology_get_topology_cpuset(topology));
/* attach the hostbridge now that it contains the right objects */
parent = hwloc_get_obj_covering_cpuset(topology, cpuset);
@@ -560,6 +558,11 @@
longjmp(err_buf, 1);
}
+static void
+hwloc_pci_warning(char *msg __hwloc_attribute_unused, ...)
+{
+}
+
void
hwloc_look_libpci(struct hwloc_topology *topology)
{
@@ -576,6 +579,7 @@
pciaccess = pci_alloc();
pciaccess->error = hwloc_pci_error;
+ pciaccess->warning = hwloc_pci_warning;
if (setjmp(err_buf)) {
pci_cleanup(pciaccess);
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-linux.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
- * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* Copyright © 2010 IBM
* See COPYING in top-level directory.
@@ -14,6 +14,7 @@
#include <private/private.h>
#include <private/misc.h>
#include <private/debug.h>
+#include <sys/utsname.h>
#include <limits.h>
#include <stdio.h>
@@ -33,7 +34,7 @@
#include <numaif.h>
#endif
-#if !defined(HWLOC_HAVE_CPU_SET) && !(defined(HWLOC_HAVE_CPU_SET_S) && !defined(HWLOC_HAVE_OLD_SCHED_SETAFFINITY)) && defined(HWLOC_HAVE__SYSCALL3)
+#if !(defined HWLOC_HAVE_SCHED_SETAFFINITY) && (defined HWLOC_HAVE__SYSCALL3)
/* libc doesn't have support for sched_setaffinity, build system call
* ourselves: */
# include <linux/unistd.h>
@@ -463,52 +464,13 @@
return 0;
}
-/* Callbacks for binding each process sub-tid */
-typedef int (*hwloc_linux_foreach_proc_tid_cb_t)(hwloc_topology_t topology, pid_t tid, void *data, int idx, int flags);
+/* Per-tid callbacks */
+typedef int (*hwloc_linux_foreach_proc_tid_cb_t)(hwloc_topology_t topology, pid_t tid, void *data, int idx);
static int
-hwloc_linux_foreach_proc_tid_set_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx __hwloc_attribute_unused, int flags __hwloc_attribute_unused)
-{
- hwloc_bitmap_t cpuset = data;
- return hwloc_linux_set_tid_cpubind(topology, tid, cpuset);
-}
-
-static int
-hwloc_linux_foreach_proc_tid_get_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx, int flags)
-{
- hwloc_bitmap_t *cpusets = data;
- hwloc_bitmap_t cpuset = cpusets[0];
- hwloc_bitmap_t tidset = cpusets[1];
-
- if (hwloc_linux_get_tid_cpubind(topology, tid, tidset))
- return -1;
-
- /* reset the cpuset on first iteration */
- if (!idx)
- hwloc_bitmap_zero(cpuset);
-
- if (flags & HWLOC_CPUBIND_STRICT) {
- /* if STRICT, we want all threads to have the same binding */
- if (!idx) {
- /* this is the first thread, copy its binding */
- hwloc_bitmap_copy(cpuset, tidset);
- } else if (!hwloc_bitmap_isequal(cpuset, tidset)) {
- /* this is not the first thread, and it's binding is different */
- errno = EXDEV;
- return -1;
- }
- } else {
- /* if not STRICT, just OR all thread bindings */
- hwloc_bitmap_or(cpuset, cpuset, tidset);
- }
- return 0;
-}
-
-/* Call the callback for each process tid. */
-static int
hwloc_linux_foreach_proc_tid(hwloc_topology_t topology,
pid_t pid, hwloc_linux_foreach_proc_tid_cb_t cb,
- void *data, int flags)
+ void *data)
{
char taskdir_path[128];
DIR *taskdir;
@@ -536,7 +498,7 @@
retry:
/* apply the callback to all threads */
for(i=0; i<nr; i++) {
- err = cb(topology, tids[i], data, i, flags);
+ err = cb(topology, tids[i], data, i);
if (err < 0)
goto out_with_tids;
}
@@ -562,26 +524,74 @@
return err;
}
+/* Per-tid proc_set_cpubind callback and caller.
+ * Callback data is a hwloc_bitmap_t. */
static int
-hwloc_linux_set_pid_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_const_bitmap_t hwloc_set, int flags)
+hwloc_linux_foreach_proc_tid_set_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx __hwloc_attribute_unused)
{
+ return hwloc_linux_set_tid_cpubind(topology, tid, (hwloc_bitmap_t) data);
+}
+
+static int
+hwloc_linux_set_pid_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_const_bitmap_t hwloc_set, int flags __hwloc_attribute_unused)
+{
return hwloc_linux_foreach_proc_tid(topology, pid,
hwloc_linux_foreach_proc_tid_set_cpubind_cb,
- (void*) hwloc_set, flags);
+ (void*) hwloc_set);
}
+/* Per-tid proc_get_cpubind callback data, callback function and caller */
+struct hwloc_linux_foreach_proc_tid_get_cpubind_cb_data_s {
+ hwloc_bitmap_t cpuset;
+ hwloc_bitmap_t tidset;
+ int flags;
+};
+
static int
+hwloc_linux_foreach_proc_tid_get_cpubind_cb(hwloc_topology_t topology, pid_t tid, void *_data, int idx)
+{
+ struct hwloc_linux_foreach_proc_tid_get_cpubind_cb_data_s *data = _data;
+ hwloc_bitmap_t cpuset = data->cpuset;
+ hwloc_bitmap_t tidset = data->tidset;
+ int flags = data->flags;
+
+ if (hwloc_linux_get_tid_cpubind(topology, tid, tidset))
+ return -1;
+
+ /* reset the cpuset on first iteration */
+ if (!idx)
+ hwloc_bitmap_zero(cpuset);
+
+ if (flags & HWLOC_CPUBIND_STRICT) {
+ /* if STRICT, we want all threads to have the same binding */
+ if (!idx) {
+ /* this is the first thread, copy its binding */
+ hwloc_bitmap_copy(cpuset, tidset);
+ } else if (!hwloc_bitmap_isequal(cpuset, tidset)) {
+ /* this is not the first thread, and it's binding is different */
+ errno = EXDEV;
+ return -1;
+ }
+ } else {
+ /* if not STRICT, just OR all thread bindings */
+ hwloc_bitmap_or(cpuset, cpuset, tidset);
+ }
+ return 0;
+}
+
+static int
hwloc_linux_get_pid_cpubind(hwloc_topology_t topology, pid_t pid, hwloc_bitmap_t hwloc_set, int flags)
{
+ struct hwloc_linux_foreach_proc_tid_get_cpubind_cb_data_s data;
hwloc_bitmap_t tidset = hwloc_bitmap_alloc();
- hwloc_bitmap_t cpusets[2];
int ret;
- cpusets[0] = hwloc_set;
- cpusets[1] = tidset;
+ data.cpuset = hwloc_set;
+ data.tidset = tidset;
+ data.flags = flags;
ret = hwloc_linux_foreach_proc_tid(topology, pid,
- hwloc_linux_foreach_proc_tid_get_cpubind_cb,
- (void*) cpusets, flags);
+ hwloc_linux_foreach_proc_tid_get_cpubind_cb,
+ (void*) &data);
hwloc_bitmap_free(tidset);
return ret;
}
@@ -790,7 +800,7 @@
}
hwloc_bitmap_zero(hwloc_set);
- for(cpu=0; cpu<(unsigned) last; cpu++)
+ for(cpu=0; cpu<=(unsigned) last; cpu++)
if (CPU_ISSET_S(cpu, setsize, plinux_set))
hwloc_bitmap_set(hwloc_set, cpu);
@@ -907,12 +917,18 @@
return 0;
}
+/* Per-tid proc_get_last_cpu_location callback data, callback function and caller */
+struct hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb_data_s {
+ hwloc_bitmap_t cpuset;
+ hwloc_bitmap_t tidset;
+};
+
static int
-hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb(hwloc_topology_t topology, pid_t tid, void *data, int idx, int flags __hwloc_attribute_unused)
+hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb(hwloc_topology_t topology, pid_t tid, void *_data, int idx)
{
- hwloc_bitmap_t *cpusets = data;
- hwloc_bitmap_t cpuset = cpusets[0];
- hwloc_bitmap_t tidset = cpusets[1];
+ struct hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb_data_s *data = _data;
+ hwloc_bitmap_t cpuset = data->cpuset;
+ hwloc_bitmap_t tidset = data->tidset;
if (hwloc_linux_get_tid_last_cpu_location(topology, tid, tidset))
return -1;
@@ -926,17 +942,17 @@
}
static int
-hwloc_linux_get_pid_last_cpu_location(hwloc_topology_t topology, pid_t pid, hwloc_bitmap_t hwloc_set, int flags)
+hwloc_linux_get_pid_last_cpu_location(hwloc_topology_t topology, pid_t pid, hwloc_bitmap_t hwloc_set, int flags __hwloc_attribute_unused)
{
+ struct hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb_data_s data;
hwloc_bitmap_t tidset = hwloc_bitmap_alloc();
- hwloc_bitmap_t cpusets[2];
int ret;
- cpusets[0] = hwloc_set;
- cpusets[1] = tidset;
+ data.cpuset = hwloc_set;
+ data.tidset = tidset;
ret = hwloc_linux_foreach_proc_tid(topology, pid,
hwloc_linux_foreach_proc_tid_get_last_cpu_location_cb,
- (void*) cpusets, flags);
+ &data);
hwloc_bitmap_free(tidset);
return ret;
}
@@ -1207,6 +1223,26 @@
}
static int
+hwloc_linux_membind_policy_to_hwloc(int linuxpolicy, hwloc_membind_policy_t *policy)
+{
+ switch (linuxpolicy) {
+ case MPOL_DEFAULT:
+ *policy = HWLOC_MEMBIND_FIRSTTOUCH;
+ return 0;
+ case MPOL_PREFERRED:
+ case MPOL_BIND:
+ *policy = HWLOC_MEMBIND_BIND;
+ return 0;
+ case MPOL_INTERLEAVE:
+ *policy = HWLOC_MEMBIND_INTERLEAVE;
+ return 0;
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+}
+
+static int
hwloc_linux_get_thisthread_membind(hwloc_topology_t topology, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags __hwloc_attribute_unused)
{
unsigned max_os_index;
@@ -1232,21 +1268,9 @@
hwloc_linux_membind_mask_to_nodeset(topology, nodeset, max_os_index, linuxmask);
}
- switch (linuxpolicy) {
- case MPOL_DEFAULT:
- *policy = HWLOC_MEMBIND_FIRSTTOUCH;
- break;
- case MPOL_PREFERRED:
- case MPOL_BIND:
- *policy = HWLOC_MEMBIND_BIND;
- break;
- case MPOL_INTERLEAVE:
- *policy = HWLOC_MEMBIND_INTERLEAVE;
- break;
- default:
- errno = EINVAL;
+ err = hwloc_linux_membind_policy_to_hwloc(linuxpolicy, policy);
+ if (err < 0)
goto out_with_mask;
- }
free(linuxmask);
return 0;
@@ -1257,19 +1281,95 @@
return -1;
}
+static int
+hwloc_linux_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_nodeset_t nodeset, hwloc_membind_policy_t *policy, int flags __hwloc_attribute_unused)
+{
+ unsigned max_os_index;
+ unsigned long *linuxmask, *globallinuxmask;
+ int linuxpolicy, globallinuxpolicy;
+ int mixed = 0;
+ int full = 0;
+ int first = 1;
+ int pagesize = getpagesize();
+ char *tmpaddr;
+ int err;
+ unsigned i;
+
+ max_os_index = hwloc_linux_find_kernel_max_numnodes(topology);
+
+ linuxmask = malloc(max_os_index/HWLOC_BITS_PER_LONG * sizeof(long));
+ if (!linuxmask) {
+ errno = ENOMEM;
+ goto out;
+ }
+ globallinuxmask = calloc(max_os_index/HWLOC_BITS_PER_LONG, sizeof(long));
+ if (!globallinuxmask) {
+ errno = ENOMEM;
+ goto out_with_masks;
+ }
+
+ for(tmpaddr = (char *)((unsigned long)addr & ~(pagesize-1));
+ tmpaddr < (char *)addr + len;
+ tmpaddr += pagesize) {
+ err = get_mempolicy(&linuxpolicy, linuxmask, max_os_index, tmpaddr, MPOL_F_ADDR);
+ if (err < 0)
+ goto out_with_masks;
+
+ /* use the first found policy. if we find a different one later, set mixed to 1 */
+ if (first)
+ globallinuxpolicy = linuxpolicy;
+ else if (globallinuxpolicy != linuxpolicy)
+ mixed = 1;
+
+ /* agregate masks, and set full to 1 if we ever find DEFAULT */
+ if (full || linuxpolicy == MPOL_DEFAULT) {
+ full = 1;
+ } else {
+ for(i=0; i<max_os_index/HWLOC_BITS_PER_LONG; i++)
+ globallinuxmask[i] |= linuxmask[i];
+ }
+
+ first = 0;
+ }
+
+ if (mixed) {
+ *policy = HWLOC_MEMBIND_MIXED;
+ } else {
+ err = hwloc_linux_membind_policy_to_hwloc(linuxpolicy, policy);
+ if (err < 0)
+ goto out_with_masks;
+ }
+
+ if (full) {
+ hwloc_bitmap_copy(nodeset, hwloc_topology_get_topology_nodeset(topology));
+ } else {
+ hwloc_linux_membind_mask_to_nodeset(topology, nodeset, max_os_index, globallinuxmask);
+ }
+
+ free(globallinuxmask);
+ free(linuxmask);
+ return 0;
+
+ out_with_masks:
+ free(globallinuxmask);
+ free(linuxmask);
+ out:
+ return -1;
+}
+
#endif /* HWLOC_HAVE_SET_MEMPOLICY */
int
-hwloc_backend_sysfs_init(struct hwloc_topology *topology, const char *fsroot_path __hwloc_attribute_unused)
+hwloc_backend_linuxfs_init(struct hwloc_topology *topology, const char *fsroot_path __hwloc_attribute_unused)
{
-#ifdef HAVE_OPENAT
- int root;
+ int root = -1;
assert(topology->backend_type == HWLOC_BACKEND_NONE);
if (!fsroot_path)
fsroot_path = "/";
+#ifdef HAVE_OPENAT
root = open(fsroot_path, O_RDONLY | O_DIRECTORY);
if (root < 0)
return -1;
@@ -1277,28 +1377,44 @@
if (strcmp(fsroot_path, "/"))
topology->is_thissystem = 0;
- topology->backend_params.sysfs.root_path = strdup(fsroot_path);
- topology->backend_params.sysfs.root_fd = root;
+ topology->backend_params.linuxfs.root_path = strdup(fsroot_path);
#else
- topology->backend_params.sysfs.root_path = NULL;
- topology->backend_params.sysfs.root_fd = -1;
+ if (strcmp(fsroot_path, "/")) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+ topology->backend_params.linuxfs.root_path = NULL;
#endif
- topology->backend_type = HWLOC_BACKEND_SYSFS;
+ topology->backend_params.linuxfs.root_fd = root;
+ topology->backend_type = HWLOC_BACKEND_LINUXFS;
return 0;
}
void
-hwloc_backend_sysfs_exit(struct hwloc_topology *topology)
+hwloc_backend_linuxfs_exit(struct hwloc_topology *topology)
{
- assert(topology->backend_type == HWLOC_BACKEND_SYSFS);
+ assert(topology->backend_type == HWLOC_BACKEND_LINUXFS);
#ifdef HAVE_OPENAT
- close(topology->backend_params.sysfs.root_fd);
- free(topology->backend_params.sysfs.root_path);
- topology->backend_params.sysfs.root_path = NULL;
+ close(topology->backend_params.linuxfs.root_fd);
+ free(topology->backend_params.linuxfs.root_path);
+ topology->backend_params.linuxfs.root_path = NULL;
#endif
topology->backend_type = HWLOC_BACKEND_NONE;
}
+/* cpuinfo array */
+struct hwloc_linux_cpuinfo_proc {
+ /* set during hwloc_linux_parse_cpuinfo */
+ unsigned long Pproc;
+ /* set during hwloc_linux_parse_cpuinfo or -1 if unknown*/
+ long Pcore, Psock;
+ /* set later, or -1 if unknown */
+ long Lcore, Lsock;
+ /* set during hwloc_linux_parse_cpuinfo or NULL if unknown */
+ char *cpumodel;
+};
+
static int
hwloc_parse_sysfs_unsigned(const char *mappath, unsigned *value, int fsroot_fd)
{
@@ -1399,7 +1515,7 @@
hwloc_strdup_mntpath(const char *escapedpath, size_t length)
{
char *path = malloc(length+1);
- const char *src = escapedpath, *tmp = src;
+ const char *src = escapedpath, *tmp;
char *dst = path;
while ((tmp = strchr(src, '\\')) != NULL) {
@@ -1642,7 +1758,7 @@
hwloc_bitmap_t tmpset;
cpuset_mask = hwloc_read_linux_cpuset_mask(cgroup_mntpnt, cpuset_mntpnt, cpuset_name,
- attr_name, topology->backend_params.sysfs.root_fd);
+ attr_name, topology->backend_params.linuxfs.root_fd);
if (!cpuset_mask)
return;
@@ -1697,7 +1813,7 @@
char string[64];
FILE *fd;
- fd = hwloc_fopen(path, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(path, "r", topology->backend_params.linuxfs.root_fd);
if (!fd)
return;
@@ -1738,14 +1854,14 @@
char line[64];
char path[SYSFS_NUMA_NODE_PATH_LEN];
- dir = hwloc_opendir(dirpath, topology->backend_params.sysfs.root_fd);
+ dir = hwloc_opendir(dirpath, topology->backend_params.linuxfs.root_fd);
if (dir) {
while ((dirent = readdir(dir)) != NULL) {
if (strncmp(dirent->d_name, "hugepages-", 10))
continue;
memory->page_types[index_].size = strtoul(dirent->d_name+10, NULL, 0) * 1024ULL;
sprintf(path, "%s/%s/nr_hugepages", dirpath, dirent->d_name);
- hpfd = hwloc_fopen(path, "r", topology->backend_params.sysfs.root_fd);
+ hpfd = hwloc_fopen(path, "r", topology->backend_params.linuxfs.root_fd);
if (hpfd) {
if (fgets(line, sizeof(line), hpfd)) {
fclose(hpfd);
@@ -1803,24 +1919,30 @@
uint64_t meminfo_hugepages_count, meminfo_hugepages_size = 0;
struct stat st;
int has_sysfs_hugepages = 0;
+ char *pagesize_env = getenv("HWLOC_DEBUG_PAGESIZE");
int types = 2;
int err;
- err = hwloc_stat("/sys/kernel/mm/hugepages", &st, topology->backend_params.sysfs.root_fd);
+ err = hwloc_stat("/sys/kernel/mm/hugepages", &st, topology->backend_params.linuxfs.root_fd);
if (!err) {
types = 1 + st.st_nlink-2;
has_sysfs_hugepages = 1;
}
+ if (topology->is_thissystem || pagesize_env) {
+ /* we cannot report any page_type info unless we have the page size.
+ * we'll take it either from the system if local, or from the debug env variable
+ */
+ memory->page_types_len = types;
+ memory->page_types = calloc(types, sizeof(*memory->page_types));
+ }
+
if (topology->is_thissystem) {
- memory->page_types_len = types;
- memory->page_types = malloc(types*sizeof(*memory->page_types));
- memset(memory->page_types, 0, types*sizeof(*memory->page_types));
- /* Try to get the hugepage size from sysconf in case we fail to get it from /proc/meminfo later */
+ /* Get the page and hugepage sizes from sysconf */
#ifdef HAVE__SC_LARGE_PAGESIZE
memory->page_types[1].size = sysconf(_SC_LARGE_PAGESIZE);
#endif
- memory->page_types[0].size = getpagesize();
+ memory->page_types[0].size = getpagesize(); /* might be overwritten later by /proc/meminfo or sysfs */
}
hwloc_parse_meminfo_info(topology, "/proc/meminfo", 0 /* no prefix */,
@@ -1843,6 +1965,18 @@
memory->page_types_len = 1;
}
}
+
+ if (pagesize_env) {
+ /* We cannot get the pagesize if not thissystem, use the env-given one to experience the code during make check */
+ memory->page_types[0].size = strtoull(pagesize_env, NULL, 10);
+ /* If failed, use 4kB */
+ if (!memory->page_types[0].size)
+ memory->page_types[0].size = 4096;
+ }
+ assert(memory->page_types[0].size); /* from sysconf if local or from the env */
+ /* memory->page_types[1].size from sysconf if local, or from /proc/meminfo, or from sysfs,
+ * may be 0 if no hugepage support in the kernel */
+
memory->page_types[0].count = remaining_local_memory / memory->page_types[0].size;
}
}
@@ -1862,7 +1996,7 @@
int err;
sprintf(path, "%s/node%d/hugepages", syspath, node);
- err = hwloc_stat(path, &st, topology->backend_params.sysfs.root_fd);
+ err = hwloc_stat(path, &st, topology->backend_params.linuxfs.root_fd);
if (!err) {
types = 1 + st.st_nlink-2;
has_sysfs_hugepages = 1;
@@ -1937,7 +2071,7 @@
fclose(fd);
}
-static void
+static int
look_sysfsnode(struct hwloc_topology *topology, const char *path, unsigned *found)
{
unsigned osnode;
@@ -1945,14 +2079,15 @@
DIR *dir;
struct dirent *dirent;
hwloc_obj_t node;
- hwloc_bitmap_t nodeset = hwloc_bitmap_alloc();
+ hwloc_bitmap_t nodeset;
*found = 0;
/* Get the list of nodes first */
- dir = hwloc_opendir(path, topology->backend_params.sysfs.root_fd);
+ dir = hwloc_opendir(path, topology->backend_params.linuxfs.root_fd);
if (dir)
{
+ nodeset = hwloc_bitmap_alloc();
while ((dirent = readdir(dir)) != NULL)
{
if (strncmp(dirent->d_name, "node", 4))
@@ -1963,11 +2098,13 @@
}
closedir(dir);
}
+ else
+ return -1;
if (nbnodes <= 1)
{
hwloc_bitmap_free(nodeset);
- return;
+ return 0;
}
/* For convenience, put these declarations inside a block. */
@@ -2010,7 +2147,7 @@
osnode = indexes[index_];
sprintf(nodepath, "%s/node%u/cpumap", path, osnode);
- cpuset = hwloc_parse_cpumap(nodepath, topology->backend_params.sysfs.root_fd);
+ cpuset = hwloc_parse_cpumap(nodepath, topology->backend_params.linuxfs.root_fd);
if (!cpuset)
continue;
@@ -2029,14 +2166,15 @@
/* Linux nodeX/distance file contains distance from X to other localities (from ACPI SLIT table or so),
* store them in slots X*N...X*N+N-1 */
sprintf(nodepath, "%s/node%u/distance", path, osnode);
- hwloc_parse_node_distance(nodepath, nbnodes, distances+index_*nbnodes, topology->backend_params.sysfs.root_fd);
+ hwloc_parse_node_distance(nodepath, nbnodes, distances+index_*nbnodes, topology->backend_params.linuxfs.root_fd);
}
- hwloc_topology__set_distance_matrix(topology, HWLOC_OBJ_NODE, nbnodes, indexes, nodes, distances, 0 /* OS cannot force */);
+ hwloc_distances_set(topology, HWLOC_OBJ_NODE, nbnodes, indexes, nodes, distances, 0 /* OS cannot force */);
}
out:
*found = nbnodes;
+ return 0;
}
/* Reads the entire file and returns bytes read if bytes_read != NULL
@@ -2184,11 +2322,11 @@
struct hwloc_obj *c = NULL;
hwloc_read_unit32be(cpu, "d-cache-line-size", &d_cache_line_size,
- topology->backend_params.sysfs.root_fd);
+ topology->backend_params.linuxfs.root_fd);
hwloc_read_unit32be(cpu, "d-cache-size", &d_cache_size,
- topology->backend_params.sysfs.root_fd);
+ topology->backend_params.linuxfs.root_fd);
hwloc_read_unit32be(cpu, "d-cache-sets", &d_cache_sets,
- topology->backend_params.sysfs.root_fd);
+ topology->backend_params.linuxfs.root_fd);
if ( (0 == d_cache_line_size) && (0 == d_cache_size) )
return;
@@ -2219,7 +2357,7 @@
device_tree_cpus_t cpus;
const char ofroot[] = "/proc/device-tree/cpus";
unsigned int i;
- int root_fd = topology->backend_params.sysfs.root_fd;
+ int root_fd = topology->backend_params.linuxfs.root_fd;
DIR *dt = hwloc_opendir(ofroot, root_fd);
struct dirent *dirent;
@@ -2363,8 +2501,9 @@
}
/* Look at Linux' /sys/devices/system/cpu/cpu%d/topology/ */
-static void
-look_sysfscpu(struct hwloc_topology *topology, const char *path)
+static int
+look_sysfscpu(struct hwloc_topology *topology, const char *path,
+ struct hwloc_linux_cpuinfo_proc * cpuinfo_Lprocs, unsigned cpuinfo_numprocs)
{
hwloc_bitmap_t cpuset; /* Set of cpus for which we have topology information */
#define CPU_TOPOLOGY_STR_LEN 128
@@ -2374,12 +2513,14 @@
FILE *fd;
unsigned caches_added;
- cpuset = hwloc_bitmap_alloc();
-
/* fill the cpuset of interesting cpus */
- dir = hwloc_opendir(path, topology->backend_params.sysfs.root_fd);
- if (dir) {
+ dir = hwloc_opendir(path, topology->backend_params.linuxfs.root_fd);
+ if (!dir)
+ return -1;
+ else {
struct dirent *dirent;
+ cpuset = hwloc_bitmap_alloc();
+
while ((dirent = readdir(dir)) != NULL) {
unsigned long cpu;
char online[2];
@@ -2393,7 +2534,7 @@
/* check whether this processor is online */
sprintf(str, "%s/cpu%lu/online", path, cpu);
- fd = hwloc_fopen(str, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(str, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(online, sizeof(online), fd)) {
fclose(fd);
@@ -2410,7 +2551,7 @@
/* check whether the kernel exports topology information for this cpu */
sprintf(str, "%s/cpu%lu/topology", path, cpu);
- if (hwloc_access(str, X_OK, topology->backend_params.sysfs.root_fd) < 0 && errno == ENOENT) {
+ if (hwloc_access(str, X_OK, topology->backend_params.linuxfs.root_fd) < 0 && errno == ENOENT) {
hwloc_debug("os proc %lu has no accessible %s/cpu%lu/topology\n",
cpu, path, cpu);
continue;
@@ -2436,10 +2577,10 @@
/* look at the socket */
mysocketid = 0; /* shut-up the compiler */
sprintf(str, "%s/cpu%d/topology/physical_package_id", path, i);
- hwloc_parse_sysfs_unsigned(str, &mysocketid, topology->backend_params.sysfs.root_fd);
+ hwloc_parse_sysfs_unsigned(str, &mysocketid, topology->backend_params.linuxfs.root_fd);
sprintf(str, "%s/cpu%d/topology/core_siblings", path, i);
- socketset = hwloc_parse_cpumap(str, topology->backend_params.sysfs.root_fd);
+ socketset = hwloc_parse_cpumap(str, topology->backend_params.linuxfs.root_fd);
if (socketset && hwloc_bitmap_first(socketset) == i) {
/* first cpu in this socket, add the socket */
sock = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, mysocketid);
@@ -2447,6 +2588,17 @@
hwloc_debug_1arg_bitmap("os socket %u has cpuset %s\n",
mysocketid, socketset);
hwloc_insert_object_by_cpuset(topology, sock);
+ /* add cpuinfo */
+ if (cpuinfo_Lprocs) {
+ for(j=0; j<(int) cpuinfo_numprocs; j++)
+ if ((int) cpuinfo_Lprocs[j].Pproc == i
+ && cpuinfo_Lprocs[j].cpumodel) {
+ /* FIXME add to name as well? */
+ hwloc_obj_add_info(sock, "CPUModel", cpuinfo_Lprocs[j].cpumodel);
+ }
+ }
+ if (topology->backend_params.linuxfs.utsname.machine[0] != '\0')
+ hwloc_obj_add_info(sock, "CPUType", topology->backend_params.linuxfs.utsname.machine);
socketset = NULL; /* don't free it */
}
hwloc_bitmap_free(socketset);
@@ -2454,10 +2606,10 @@
/* look at the core */
mycoreid = 0; /* shut-up the compiler */
sprintf(str, "%s/cpu%d/topology/core_id", path, i);
- hwloc_parse_sysfs_unsigned(str, &mycoreid, topology->backend_params.sysfs.root_fd);
+ hwloc_parse_sysfs_unsigned(str, &mycoreid, topology->backend_params.linuxfs.root_fd);
sprintf(str, "%s/cpu%d/topology/thread_siblings", path, i);
- coreset = hwloc_parse_cpumap(str, topology->backend_params.sysfs.root_fd);
+ coreset = hwloc_parse_cpumap(str, topology->backend_params.linuxfs.root_fd);
savedcoreset = coreset; /* store it for later work-arounds */
if (coreset && hwloc_bitmap_weight(coreset) > 1) {
@@ -2468,7 +2620,7 @@
siblingid = hwloc_bitmap_first(set);
siblingcoreid = mycoreid;
sprintf(str, "%s/cpu%d/topology/core_id", path, siblingid);
- hwloc_parse_sysfs_unsigned(str, &siblingcoreid, topology->backend_params.sysfs.root_fd);
+ hwloc_parse_sysfs_unsigned(str, &siblingcoreid, topology->backend_params.linuxfs.root_fd);
threadwithcoreid = (siblingcoreid != mycoreid);
hwloc_bitmap_free(set);
}
@@ -2493,10 +2645,10 @@
/* look at the books */
mybookid = 0; /* shut-up the compiler */
sprintf(str, "%s/cpu%d/topology/book_id", path, i);
- if (hwloc_parse_sysfs_unsigned(str, &mybookid, topology->backend_params.sysfs.root_fd) == 0) {
+ if (hwloc_parse_sysfs_unsigned(str, &mybookid, topology->backend_params.linuxfs.root_fd) == 0) {
sprintf(str, "%s/cpu%d/topology/book_siblings", path, i);
- bookset = hwloc_parse_cpumap(str, topology->backend_params.sysfs.root_fd);
+ bookset = hwloc_parse_cpumap(str, topology->backend_params.linuxfs.root_fd);
if (bookset && hwloc_bitmap_first(bookset) == i) {
book = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, mybookid);
book->cpuset = bookset;
@@ -2532,7 +2684,7 @@
/* get the cache level depth */
sprintf(mappath, "%s/cpu%d/cache/index%d/level", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2,sizeof(str2), fd))
depth = strtoul(str2, NULL, 10)-1;
@@ -2544,7 +2696,7 @@
/* ignore Instruction caches */
sprintf(mappath, "%s/cpu%d/cache/index%d/type", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2, sizeof(str2), fd)) {
fclose(fd);
@@ -2559,7 +2711,7 @@
/* get the cache size */
sprintf(mappath, "%s/cpu%d/cache/index%d/size", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2,sizeof(str2), fd))
kB = atol(str2); /* in kB */
@@ -2568,7 +2720,7 @@
/* get the line size */
sprintf(mappath, "%s/cpu%d/cache/index%d/coherency_line_size", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2,sizeof(str2), fd))
linesize = atol(str2); /* in bytes */
@@ -2580,14 +2732,14 @@
* some archs (ia64, ppc) put 0 there when fully-associative, while others (x86) put something like -1 there.
*/
sprintf(mappath, "%s/cpu%d/cache/index%d/number_of_sets", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2,sizeof(str2), fd))
sets = atol(str2);
fclose(fd);
}
sprintf(mappath, "%s/cpu%d/cache/index%d/physical_line_partition", path, i, j);
- fd = hwloc_fopen(mappath, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(mappath, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
if (fgets(str2,sizeof(str2), fd))
lines_per_tag = atol(str2);
@@ -2595,7 +2747,7 @@
}
sprintf(mappath, "%s/cpu%d/cache/index%d/shared_cpu_map", path, i, j);
- cacheset = hwloc_parse_cpumap(mappath, topology->backend_params.sysfs.root_fd);
+ cacheset = hwloc_parse_cpumap(mappath, topology->backend_params.linuxfs.root_fd);
if (cacheset) {
if (hwloc_bitmap_weight(cacheset) < 1) {
/* mask is wrong (useful for many itaniums) */
@@ -2637,173 +2789,332 @@
look_powerpc_device_tree(topology);
hwloc_bitmap_free(cpuset);
+
+ return 0;
}
-/* Look at Linux' /proc/cpuinfo */
-# define PROCESSOR "processor"
-# define PHYSID "physical id"
-# define COREID "core id"
-#define HWLOC_NBMAXCPUS 1024 /* FIXME: drop */
+/*
+ * architecture properly detected:
+ * arm: "Processor\t:" => OK
+ * avr32: "chip type\t:" => OK
+ * blackfin: "model name\t:" => OK
+ * h8300: "CPU:" => OK
+ * ia64: "model name :" => OK
+ * m68k: "CPU:" => OK
+ * mips: "cpu model\t\t:" => OK
+ * openrisc: "CPU:" => OK
+ * ppc: "cpu\t\t:" => OK
+ * sparc: "cpu\t\t:" => OK
+ * tile: "model name\t:" => OK
+ * unicore32: "Processor\t:" => OK
+ * x86: "model name\t:" => OK
+ *
+ * cannot work:
+ * alpha: "cpu\t\t\t:" + "cpu model\t\t:" => no processor index lines anyway
+ *
+ * partially supported:
+ * cris: "cpu\t\t:" + "cpu model\t:" => only "cpu"
+ * frv: "CPU-Core:" + "CPU:" => only "CPU"
+ * mn10300: "cpu core :" + "model name :" => only "model name"
+ * parisc: "cpu family\t:" + "cpu\t\t:" => only "cpu"
+ *
+ * not supported because of conflicts with other arch minor lines:
+ * m32r: "cpu family\t:" => KO (adding "cpu family" would break "blackfin")
+ * microblaze: "CPU-Family:" => KO
+ * sh: "cpu family\t:" + "cpu type\t:" => KO
+ * xtensa: "model\t\t:" => KO
+ */
static int
-look_cpuinfo(struct hwloc_topology *topology, const char *path,
- hwloc_bitmap_t online_cpuset)
+hwloc_linux_parse_cpuinfo_model(const char *prefix, const char *value,
+ char **model)
{
+ if (!strcmp("model name", prefix)
+ || !strcmp("Processor", prefix)
+ || !strcmp("chip type", prefix)
+ || !strcmp("cpu model", prefix)
+ || !strcasecmp("cpu", prefix)) {
+ if (!*model)
+ *model = strdup(value);
+ }
+ return 0;
+}
+
+static int
+hwloc_linux_parse_cpuinfo(struct hwloc_topology *topology, const char *path,
+ struct hwloc_linux_cpuinfo_proc ** Lprocs_p)
+{
FILE *fd;
char *str = NULL;
char *endptr;
unsigned len;
- unsigned proc_physids[HWLOC_NBMAXCPUS];
- unsigned osphysids[HWLOC_NBMAXCPUS];
- unsigned proc_coreids[HWLOC_NBMAXCPUS];
- unsigned oscoreids[HWLOC_NBMAXCPUS];
- unsigned proc_osphysids[HWLOC_NBMAXCPUS];
- unsigned core_osphysids[HWLOC_NBMAXCPUS];
- unsigned procid_max=0;
- unsigned numprocs=0;
- unsigned numsockets=0;
- unsigned numcores=0;
- unsigned long physid;
- unsigned long coreid;
- unsigned missingsocket;
- unsigned missingcore;
- unsigned long processor = (unsigned long) -1;
- unsigned i;
- hwloc_bitmap_t cpuset;
- hwloc_obj_t obj;
+ unsigned allocated_Lprocs = 0;
+ struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
+ unsigned numprocs = 0;
+ char *global_cpumodel = NULL;
- for (i = 0; i < HWLOC_NBMAXCPUS; i++) {
- proc_physids[i] = -1;
- osphysids[i] = -1;
- proc_coreids[i] = -1;
- oscoreids[i] = -1;
- proc_osphysids[i] = -1;
- core_osphysids[i] = -1;
- }
-
- if (!(fd=hwloc_fopen(path,"r", topology->backend_params.sysfs.root_fd)))
+ if (!(fd=hwloc_fopen(path,"r", topology->backend_params.linuxfs.root_fd)))
{
- hwloc_debug("%s", "could not open /proc/cpuinfo\n");
+ hwloc_debug("could not open %s\n", path);
return -1;
}
- cpuset = hwloc_bitmap_alloc();
- /* Just record information and count number of sockets and cores */
-
- len = strlen(PHYSID) + 1 + 9 + 1 + 1;
+# define PROCESSOR "processor"
+# define PACKAGEID "physical id" /* the longest one */
+# define COREID "core id"
+ len = 128; /* vendor/model can be very long */
str = malloc(len);
- hwloc_debug("%s", "\n\n * Topology extraction from /proc/cpuinfo *\n\n");
- while (fgets(str,len,fd)!=NULL)
- {
-# define getprocnb_begin(field, var) \
- if ( !strncmp(field,str,strlen(field))) \
- { \
- char *c = strchr(str, ':')+1; \
- var = strtoul(c,&endptr,0); \
- if (endptr==c) \
- { \
- hwloc_debug("%s", "no number in "field" field of /proc/cpuinfo\n"); \
- hwloc_bitmap_free(cpuset); \
- free(str); \
- return -1; \
- } \
- else if (var==ULONG_MAX) \
- { \
- hwloc_debug("%s", "too big "field" number in /proc/cpuinfo\n"); \
- hwloc_bitmap_free(cpuset); \
- free(str); \
- return -1; \
- } \
- hwloc_debug(field " %lu\n", var)
-# define getprocnb_end() \
- }
- getprocnb_begin(PROCESSOR,processor);
- hwloc_bitmap_set(cpuset, processor);
+ hwloc_debug("\n\n * Topology extraction from %s *\n\n", path);
+ while (fgets(str,len,fd)!=NULL) {
+ unsigned long Psock, Pcore, Pproc;
+ char *end, *dot, *prefix, *value;
+ int noend = 0;
- obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, processor);
- obj->cpuset = hwloc_bitmap_alloc();
- hwloc_bitmap_only(obj->cpuset, processor);
+ /* remove the ending \n */
+ end = strchr(str, '\n');
+ if (end)
+ *end = 0;
+ else
+ noend = 1;
+ /* skip lines with no dot */
+ dot = strchr(str, ':');
+ if (!dot)
+ continue;
+ /* skip lines not starting with a letter */
+ if (*str > 'z' || *str < 'a')
+ continue;
- hwloc_debug_2args_bitmap("cpu %u (os %lu) has cpuset %s\n",
- numprocs, processor, obj->cpuset);
- numprocs++;
- hwloc_insert_object_by_cpuset(topology, obj);
+ /* mark the end of the prefix */
+ prefix = str;
+ end = dot;
+ while (end[-1] == ' ' || end[-1] == ' ') end--; /* need a strrspn() */
+ *end = 0;
+ /* find beginning of value, its end is already marked */
+ value = dot+1 + strspn(dot+1, " ");
- getprocnb_end() else
- getprocnb_begin(PHYSID,physid);
- proc_osphysids[processor]=physid;
- for (i=0; i<numsockets; i++)
- if (physid == osphysids[i])
- break;
- proc_physids[processor]=i;
- hwloc_debug("%lu on socket %u (%lx)\n", processor, i, physid);
- if (i==numsockets)
- osphysids[(numsockets)++] = physid;
- getprocnb_end() else
- getprocnb_begin(COREID,coreid);
- for (i=0; i<numcores; i++)
- if (coreid == oscoreids[i] && proc_osphysids[processor] == core_osphysids[i])
- break;
- proc_coreids[processor]=i;
- if (i==numcores)
- {
- core_osphysids[numcores] = proc_osphysids[processor];
- oscoreids[numcores] = coreid;
- (numcores)++;
- }
- getprocnb_end()
- if (str[strlen(str)-1]!='\n')
- {
- /* ignore end of line */
- if (fscanf(fd,"%*[^\n]") == EOF)
- break;
- getc(fd);
- }
+ /* defines for parsing numbers */
+# define getprocnb_begin(field, var) \
+ if (!strcmp(field,prefix)) { \
+ var = strtoul(value,&endptr,0); \
+ if (endptr==value) { \
+ hwloc_debug("no number in "field" field of %s\n", path); \
+ free(str); \
+ return -1; \
+ } else if (var==ULONG_MAX) { \
+ hwloc_debug("too big "field" number in %s\n", path); \
+ free(str); \
+ return -1; \
+ } \
+ hwloc_debug(field " %lu\n", var)
+# define getprocnb_end() \
}
+ /* actually parse numbers */
+ getprocnb_begin(PROCESSOR, Pproc);
+ numprocs++;
+ if (numprocs > allocated_Lprocs) {
+ if (!allocated_Lprocs)
+ allocated_Lprocs = 8;
+ else
+ allocated_Lprocs *= 2;
+ Lprocs = realloc(Lprocs, allocated_Lprocs * sizeof(*Lprocs));
+ }
+ Lprocs[numprocs-1].Pproc = Pproc;
+ Lprocs[numprocs-1].Pcore = -1;
+ Lprocs[numprocs-1].Psock = -1;
+ Lprocs[numprocs-1].Lcore = -1;
+ Lprocs[numprocs-1].Lsock = -1;
+ Lprocs[numprocs-1].cpumodel = global_cpumodel ? strdup(global_cpumodel) : NULL;
+ getprocnb_end() else
+ getprocnb_begin(PACKAGEID, Psock);
+ Lprocs[numprocs-1].Psock = Psock;
+ getprocnb_end() else
+ getprocnb_begin(COREID, Pcore);
+ Lprocs[numprocs-1].Pcore = Pcore;
+ getprocnb_end() else {
+ /* we can't assume that we already got a processor index line:
+ * alpha/frv/h8300/m68k/microblaze/sparc have no processor lines at all, only a global entry.
+ * tile has a global section with model name before the list of processor lines.
+ */
+ hwloc_linux_parse_cpuinfo_model(prefix, value, numprocs ? &Lprocs[numprocs-1].cpumodel : &global_cpumodel);
+ }
+
+ if (noend) {
+ /* ignore end of line */
+ if (fscanf(fd,"%*[^\n]") == EOF)
+ break;
+ getc(fd);
+ }
+ }
fclose(fd);
free(str);
+ free(global_cpumodel);
- if (processor == (unsigned long) -1) {
- hwloc_bitmap_free(cpuset);
+ *Lprocs_p = Lprocs;
+ return numprocs;
+}
+
+static void
+hwloc_linux_free_cpuinfo(struct hwloc_linux_cpuinfo_proc * Lprocs, unsigned numprocs)
+{
+ unsigned i;
+ for(i=0; i<numprocs; i++)
+ free(Lprocs[i].cpumodel);
+ free(Lprocs);
+}
+
+static int
+look_cpuinfo(struct hwloc_topology *topology, const char *path,
+ hwloc_bitmap_t online_cpuset)
+{
+ struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
+ /* P for physical/OS index, L for logical (e.g. in we order we get them, not in the final hwloc logical order) */
+ unsigned *Lcore_to_Pcore;
+ unsigned *Lcore_to_Psock; /* needed because Lcore is equivalent to Pcore+Psock, not to Pcore alone */
+ unsigned *Lsock_to_Psock;
+ int _numprocs;
+ unsigned numprocs;
+ unsigned numsockets=0;
+ unsigned numcores=0;
+ unsigned long Lproc;
+ unsigned missingsocket;
+ unsigned missingcore;
+ unsigned i,j;
+ hwloc_bitmap_t cpuset;
+
+ /* parse the entire cpuinfo first, fill the Lprocs array and numprocs */
+ _numprocs = hwloc_linux_parse_cpuinfo(topology, path, &Lprocs);
+ if (_numprocs <= 0)
return -1;
+ numprocs = _numprocs;
+
+ /* initialize misc arrays, there can be at most numprocs entries */
+ Lcore_to_Pcore = malloc(numprocs * sizeof(*Lcore_to_Pcore));
+ Lcore_to_Psock = malloc(numprocs * sizeof(*Lcore_to_Psock));
+ Lsock_to_Psock = malloc(numprocs * sizeof(*Lsock_to_Psock));
+ for (i = 0; i < numprocs; i++) {
+ Lcore_to_Pcore[i] = -1;
+ Lcore_to_Psock[i] = -1;
+ Lsock_to_Psock[i] = -1;
}
+ cpuset = hwloc_bitmap_alloc();
+
+ /* create PU objects */
+ for(Lproc=0; Lproc<numprocs; Lproc++) {
+ unsigned long Pproc = Lprocs[Lproc].Pproc;
+ hwloc_obj_t obj = hwloc_alloc_setup_object(HWLOC_OBJ_PU, Pproc);
+ hwloc_bitmap_set(cpuset, Pproc);
+ obj->cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_only(obj->cpuset, Pproc);
+ hwloc_debug_2args_bitmap("cpu %lu (os %lu) has cpuset %s\n",
+ Lproc, Pproc, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+
topology->support.discovery->pu = 1;
- /* setup the final number of procs */
- procid_max = processor + 1;
hwloc_bitmap_copy(online_cpuset, cpuset);
hwloc_bitmap_free(cpuset);
- hwloc_debug("%u online processors found, with id max %u\n", numprocs, procid_max);
+ hwloc_debug("%u online processors found\n", numprocs);
hwloc_debug_bitmap("online processor cpuset: %s\n", online_cpuset);
hwloc_debug("%s", "\n * Topology summary *\n");
- hwloc_debug("%u processors (%u max id)\n", numprocs, procid_max);
+ hwloc_debug("%u processors)\n", numprocs);
+ /* fill Lprocs[].Lsock and Lsock_to_Psock */
+ for(Lproc=0; Lproc<numprocs; Lproc++) {
+ long Psock = Lprocs[Lproc].Psock;
+ if (Psock != -1) {
+ unsigned long Pproc = Lprocs[Lproc].Pproc;
+ for (i=0; i<numsockets; i++)
+ if ((unsigned) Psock == Lsock_to_Psock[i])
+ break;
+ Lprocs[Lproc].Lsock = i;
+ hwloc_debug("%lu on socket %u (%lx)\n", Pproc, i, Psock);
+ if (i==numsockets) {
+ Lsock_to_Psock[numsockets] = Psock;
+ numsockets++;
+ }
+ }
+ }
/* Some buggy Linuxes don't provide numbers for processor 0, which makes us
* provide bogus information. We should rather drop it. */
missingsocket=0;
+ for(j=0; j<numprocs; j++)
+ if (Lprocs[i].Psock == -1) {
+ missingsocket=1;
+ break;
+ }
+ /* create Socket objects */
+ hwloc_debug("%u sockets%s\n", numsockets, missingsocket ? ", but some missing socket" : "");
+ if (!missingsocket && numsockets>0) {
+ for (i = 0; i < numsockets; i++) {
+ struct hwloc_obj *obj = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, Lsock_to_Psock[i]);
+ char *cpumodel = NULL;
+ obj->cpuset = hwloc_bitmap_alloc();
+ for(j=0; j<numprocs; j++)
+ if ((unsigned) Lprocs[j].Lsock == i) {
+ hwloc_bitmap_set(obj->cpuset, Lprocs[j].Pproc);
+ if (Lprocs[j].cpumodel && !cpumodel) /* use the first one, they should all be equal anyway */
+ cpumodel = Lprocs[j].cpumodel;
+ }
+ if (cpumodel) {
+ /* FIXME add to name as well? */
+ hwloc_obj_add_info(obj, "CPUModel", cpumodel);
+ }
+ if (topology->backend_params.linuxfs.utsname.machine[0] != '\0')
+ hwloc_obj_add_info(obj, "CPUType", topology->backend_params.linuxfs.utsname.machine);
+ hwloc_debug_1arg_bitmap("Socket %d has cpuset %s\n", i, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+ hwloc_debug("%s", "\n");
+ }
+
+ /* fill Lprocs[].Lcore, Lcore_to_Psock and Lcore_to_Pcore */
+ for(Lproc=0; Lproc<numprocs; Lproc++) {
+ long Pcore = Lprocs[Lproc].Pcore;
+ if (Pcore != -1) {
+ for (i=0; i<numcores; i++)
+ if ((unsigned) Pcore == Lcore_to_Pcore[i] && (unsigned) Lprocs[Lproc].Psock == Lcore_to_Psock[i])
+ break;
+ Lprocs[Lproc].Lcore = i;
+ if (i==numcores) {
+ Lcore_to_Psock[numcores] = Lprocs[Lproc].Psock;
+ Lcore_to_Pcore[numcores] = Pcore;
+ numcores++;
+ }
+ }
+ }
+ /* Some buggy Linuxes don't provide numbers for processor 0, which makes us
+ * provide bogus information. We should rather drop it. */
missingcore=0;
- hwloc_bitmap_foreach_begin(processor, online_cpuset)
- if (proc_physids[processor] == (unsigned) -1)
- missingsocket=1;
- if (proc_coreids[processor] == (unsigned) -1)
+ for(j=0; j<numprocs; j++)
+ if (Lprocs[i].Pcore == -1) {
missingcore=1;
- if (missingcore && missingsocket)
- /* No usable information, no need to continue */
break;
- hwloc_bitmap_foreach_end();
+ }
+ /* create Core objects */
+ hwloc_debug("%u cores%s\n", numcores, missingcore ? ", but some missing core" : "");
+ if (!missingcore && numcores>0) {
+ for (i = 0; i < numcores; i++) {
+ struct hwloc_obj *obj = hwloc_alloc_setup_object(HWLOC_OBJ_CORE, Lcore_to_Pcore[i]);
+ obj->cpuset = hwloc_bitmap_alloc();
+ for(j=0; j<numprocs; j++)
+ if ((unsigned) Lprocs[j].Lcore == i)
+ hwloc_bitmap_set(obj->cpuset, Lprocs[j].Pproc);
+ hwloc_debug_1arg_bitmap("Core %d has cpuset %s\n", i, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+ hwloc_debug("%s", "\n");
+ }
- hwloc_debug("%u sockets%s\n", numsockets, missingsocket ? ", but some missing socket" : "");
- if (!missingsocket && numsockets>0)
- hwloc_setup_level(procid_max, numsockets, osphysids, proc_physids, topology, HWLOC_OBJ_SOCKET);
+ free(Lcore_to_Pcore);
+ free(Lcore_to_Psock);
+ free(Lsock_to_Psock);
+ hwloc_linux_free_cpuinfo(Lprocs, numprocs);
+
look_powerpc_device_tree(topology);
-
- hwloc_debug("%u cores%s\n", numcores, missingcore ? ", but some missing core" : "");
- if (!missingcore && numcores>0)
- hwloc_setup_level(procid_max, numcores, oscoreids, proc_coreids, topology, HWLOC_OBJ_CORE);
-
return 0;
}
@@ -2818,7 +3129,7 @@
snprintf(sysfs_path, sizeof(sysfs_path), "/sys/class/dmi/id/%s", sysfs_name);
dmi_line[0] = '\0';
- fd = hwloc_fopen(sysfs_path, "r", topology->backend_params.sysfs.root_fd);
+ fd = hwloc_fopen(sysfs_path, "r", topology->backend_params.linuxfs.root_fd);
if (fd) {
tmp = fgets(dmi_line, sizeof(dmi_line), fd);
fclose (fd);
@@ -2856,17 +3167,21 @@
}
void
-hwloc_look_linux(struct hwloc_topology *topology)
+hwloc_look_linuxfs(struct hwloc_topology *topology)
{
DIR *nodes_dir;
unsigned nbnodes;
char *cpuset_mntpnt, *cgroup_mntpnt, *cpuset_name = NULL;
int err;
+ memset(&topology->backend_params.linuxfs.utsname, 0, sizeof(topology->backend_params.linuxfs.utsname));
+ if (topology->is_thissystem)
+ uname(&topology->backend_params.linuxfs.utsname);
+
/* Gather the list of admin-disabled cpus and mems */
- hwloc_find_linux_cpuset_mntpnt(&cgroup_mntpnt, &cpuset_mntpnt, topology->backend_params.sysfs.root_fd);
+ hwloc_find_linux_cpuset_mntpnt(&cgroup_mntpnt, &cpuset_mntpnt, topology->backend_params.linuxfs.root_fd);
if (cgroup_mntpnt || cpuset_mntpnt) {
- cpuset_name = hwloc_read_linux_cpuset_name(topology->backend_params.sysfs.root_fd, topology->pid);
+ cpuset_name = hwloc_read_linux_cpuset_name(topology->backend_params.linuxfs.root_fd, topology->pid);
if (cpuset_name) {
hwloc_admin_disable_set_from_cpuset(topology, cgroup_mntpnt, cpuset_mntpnt, cpuset_name, "cpus", topology->levels[0][0]->allowed_cpuset);
hwloc_admin_disable_set_from_cpuset(topology, cgroup_mntpnt, cpuset_mntpnt, cpuset_name, "mems", topology->levels[0][0]->allowed_nodeset);
@@ -2875,7 +3190,7 @@
free(cpuset_mntpnt);
}
- nodes_dir = hwloc_opendir("/proc/nodes", topology->backend_params.sysfs.root_fd);
+ nodes_dir = hwloc_opendir("/proc/nodes", topology->backend_params.linuxfs.root_fd);
if (nodes_dir) {
/* Kerrighed */
struct dirent *dirent;
@@ -2920,7 +3235,8 @@
hwloc_get_procfs_meminfo_info(topology, &topology->levels[0][0]->memory);
/* Gather NUMA information. Must be after hwloc_get_procfs_meminfo_info so that the hugepage size is known */
- look_sysfsnode(topology, "/sys/devices/system/node", &nbnodes);
+ if (look_sysfsnode(topology, "/sys/bus/node/devices", &nbnodes) < 0)
+ look_sysfsnode(topology, "/sys/devices/system/node", &nbnodes);
/* if we found some numa nodes, the machine object has no local memory */
if (nbnodes) {
@@ -2933,8 +3249,10 @@
/* Gather the list of cpus now */
if (getenv("HWLOC_LINUX_USE_CPUINFO")
- || (hwloc_access("/sys/devices/system/cpu/cpu0/topology/core_siblings", R_OK, topology->backend_params.sysfs.root_fd) < 0
- && hwloc_access("/sys/devices/system/cpu/cpu0/topology/thread_siblings", R_OK, topology->backend_params.sysfs.root_fd) < 0)) {
+ || (hwloc_access("/sys/devices/system/cpu/cpu0/topology/core_siblings", R_OK, topology->backend_params.linuxfs.root_fd) < 0
+ && hwloc_access("/sys/devices/system/cpu/cpu0/topology/thread_siblings", R_OK, topology->backend_params.linuxfs.root_fd) < 0
+ && hwloc_access("/sys/bus/cpu/devices/cpu0/topology/thread_siblings", R_OK, topology->backend_params.linuxfs.root_fd) < 0
+ && hwloc_access("/sys/bus/cpu/devices/cpu0/topology/core_siblings", R_OK, topology->backend_params.linuxfs.root_fd) < 0)) {
/* revert to reading cpuinfo only if /sys/.../topology unavailable (before 2.6.16)
* or not containing anything interesting */
err = look_cpuinfo(topology, "/proc/cpuinfo", topology->levels[0][0]->online_cpuset);
@@ -2947,7 +3265,14 @@
hwloc_setup_pu_level(topology, 1);
}
} else {
- look_sysfscpu(topology, "/sys/devices/system/cpu");
+ struct hwloc_linux_cpuinfo_proc * Lprocs = NULL;
+ int numprocs = hwloc_linux_parse_cpuinfo(topology, "/proc/cpuinfo", &Lprocs);
+ if (numprocs <= 0)
+ Lprocs = NULL;
+ if (look_sysfscpu(topology, "/sys/bus/cpu/devices", Lprocs, numprocs) < 0)
+ look_sysfscpu(topology, "/sys/devices/system/cpu", Lprocs, numprocs);
+ if (Lprocs)
+ hwloc_linux_free_cpuinfo(Lprocs, numprocs);
}
/* Gather DMI info */
@@ -2962,11 +3287,12 @@
/* gather uname info if fsroot wasn't changed */
if (topology->is_thissystem)
+ /* FIXME: reuse topology->backend_params.linuxfs.utsname */
hwloc_add_uname_info(topology);
}
void
-hwloc_set_linux_hooks(struct hwloc_topology *topology)
+hwloc_set_linuxfs_hooks(struct hwloc_topology *topology)
{
topology->set_thisthread_cpubind = hwloc_linux_set_thisthread_cpubind;
topology->get_thisthread_cpubind = hwloc_linux_get_thisthread_cpubind;
@@ -2986,6 +3312,7 @@
#ifdef HWLOC_HAVE_SET_MEMPOLICY
topology->set_thisthread_membind = hwloc_linux_set_thisthread_membind;
topology->get_thisthread_membind = hwloc_linux_get_thisthread_membind;
+ topology->get_area_membind = hwloc_linux_get_area_membind;
#endif /* HWLOC_HAVE_SET_MEMPOLICY */
#ifdef HWLOC_HAVE_MBIND
topology->set_area_membind = hwloc_linux_set_area_membind;
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-osf.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -313,7 +313,7 @@
}
}
- hwloc_topology__set_distance_matrix(topology, HWLOC_OBJ_NODE, nbnodes, indexes, nodes, distances, 0 /* OS cannot force */);
+ hwloc_distances_set(topology, HWLOC_OBJ_NODE, nbnodes, indexes, nodes, distances, 0 /* OS cannot force */);
}
radsetdestroy(&radset2);
radsetdestroy(&radset);
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris-chiptype.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris-chiptype.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris-chiptype.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,331 @@
+/*
+ * Copyright (c) 2009-2010 Oracle and/or its affiliates. All rights reserved.
+ *
+ * $COPYRIGHT$
+ *
+ * Additional copyrights may follow
+ *
+ * $HEADER$
+ */
+
+#include <private/autogen/config.h>
+#include <private/solaris-chiptype.h>
+#include <stdlib.h>
+#include <strings.h>
+
+#ifdef HAVE_PICL_H
+#include <sys/systeminfo.h>
+#include <picl.h>
+
+/*****************************************************************************
+ Order of this list is important for the assign_value and
+ assign_string_value routines
+*****************************************************************************/
+
+static const char* items[] = {
+ "clock-frequency",
+ "cpu-mhz",
+ "ecache-size",
+ "l2-cache-size",
+ "sectored-l2-cache-size",
+ "implementation#",
+ "manufacturer#",
+ "compatible",
+ "ProcessorType",
+ "vendor-id",
+ "brand-string"
+};
+
+#define NUM_ITEMS (sizeof(items) / sizeof(items[0]))
+
+/*****************************************************************************
+SPARC strings for chip modes and implementation
+*****************************************************************************/
+static const char* sparc_modes[] = {
+ "UNKNOWN",
+ "SPITFIRE",
+ "BLACKBIRD",
+ "CHEETAH",
+ "SPARC64_VI",
+ "T1",
+ "T2",
+ "SPARC64_VII",
+ "ROCK"
+};
+
+/*****************************************************************************
+Default values are for Unknown so we can build up from there.
+*****************************************************************************/
+
+static long dss_chip_mode = MODE_UNKNOWN;
+static long dss_chip_impl = IMPL_SPITFIRE;
+static long dss_chip_cache = TWO_MEG_CACHE;
+static long dss_chip_manufacturer = TI_MANUFACTURER;
+static long long dss_chip_speed = SPITFIRE_SPEED;
+static char dss_chip_type[PICL_PROPNAMELEN_MAX];
+static char dss_chip_model[PICL_PROPNAMELEN_MAX];
+static int called_cpu_probe = 0;
+
+/*****************************************************************************
+Assigns values based on the value of index. For this reason, the order of
+the items array is important.
+*****************************************************************************/
+static void assign_value(int index, long long val) {
+ if (index == 0) { /* clock-frequency */
+ dss_chip_speed = val;
+ }
+ if (index == 1) { /* cpu-mhz */
+ dss_chip_speed = val * 1000000; /* Scale since value was in MHz */
+ }
+ else if ((index >= 2) && (index <= 4)) {
+ /* ecache-size, l2-cache-size, sectored-l2-cache-size */
+ dss_chip_cache = val;
+ }
+ else if (index == 5) {
+ /* implementation# T1, T2, and Rock do not have this, see RFE 6615268 */
+ dss_chip_impl = val;
+ if (dss_chip_impl == IMPL_SPITFIRE) {
+ dss_chip_mode = 1;
+ }
+ else if ((dss_chip_impl >= IMPL_BLACKBIRD) &&
+ (dss_chip_impl <= IMPL_HUMMINGBIRD)) {
+ dss_chip_mode = 2;
+ }
+ else if ((dss_chip_impl >= IMPL_CHEETAH) &&
+ (dss_chip_impl <= IMPL_PANTHER)) {
+ dss_chip_mode = 3;
+ }
+ else if (dss_chip_impl == IMPL_SPARC64_VI) {
+ dss_chip_mode = 4;
+ }
+ else if (dss_chip_impl == IMPL_NIAGARA) {
+ dss_chip_mode = 5;
+ }
+ else if (dss_chip_impl == IMPL_NIAGARA_2) {
+ dss_chip_mode = 6;
+ }
+ else if (dss_chip_impl == IMPL_SPARC64_VII) {
+ dss_chip_mode = 7;
+ }
+ else if (dss_chip_impl == IMPL_ROCK) {
+ dss_chip_mode = 8;
+ }
+ }
+ else if (index == 6) { /* manufacturer# */
+ dss_chip_manufacturer = val;
+ }
+}
+
+/*****************************************************************************
+Assigns values based on the value of index. For this reason, the order of
+the items array is important.
+*****************************************************************************/
+static void assign_string_value(int index, char* string_val) {
+ if (index == 7) { /* compatible */
+ if (strncasecmp(string_val, "FJSV,SPARC64-VI",
+ PICL_PROPNAMELEN_MAX) == 0) {
+ dss_chip_mode = 4;
+ }
+ else if (strncasecmp(string_val, "SUNW,UltraSPARC-T1",
+ PICL_PROPNAMELEN_MAX) == 0) {
+ dss_chip_mode = 5;
+ }
+ else if (strncasecmp(string_val, "SUNW,UltraSPARC-T2",
+ PICL_PROPNAMELEN_MAX) == 0) {
+ dss_chip_mode = 6;
+ }
+ else if (strncasecmp(string_val, "FJSV,SPARC64-VII",
+ PICL_PROPNAMELEN_MAX) == 0) {
+ dss_chip_mode = 7;
+ }
+ else if (strncasecmp(string_val, "SUNW,Rock",
+ PICL_PROPNAMELEN_MAX) == 0) {
+ dss_chip_mode = 8;
+ }
+ } else if (index == 8) { /* ProcessorType */
+ strncpy(&dss_chip_type[0], string_val, PICL_PROPNAMELEN_MAX);
+ } else if (index == 10) { /* brand-string */
+ strncpy(&dss_chip_model[0], string_val, PICL_PROPNAMELEN_MAX);
+ }
+
+}
+
+/*****************************************************************************
+Gets called by probe_cpu. Cycles through the table values until we find
+what we are looking for.
+*****************************************************************************/
+static void search_table(int index, picl_prophdl_t table_hdl) {
+
+ picl_prophdl_t col_hdl;
+ picl_prophdl_t row_hdl;
+ picl_propinfo_t p_info;
+ int val;
+ char string_val[PICL_PROPNAMELEN_MAX];
+
+ for (val = picl_get_next_by_col(table_hdl, &row_hdl); val != PICL_ENDOFLIST;
+ val = picl_get_next_by_col(row_hdl, &row_hdl)) {
+ if (val == PICL_SUCCESS) {
+ for (col_hdl = row_hdl; val != PICL_ENDOFLIST;
+ val = picl_get_next_by_row(col_hdl, &col_hdl)) {
+ if (val == PICL_SUCCESS) {
+ val = picl_get_propinfo(col_hdl, &p_info);
+ if (val == PICL_SUCCESS) {
+ if (p_info.type == PICL_PTYPE_CHARSTRING) {
+ val = picl_get_propval(col_hdl, &string_val, sizeof(string_val));
+ if (val == PICL_SUCCESS) {
+ assign_string_value(index, string_val);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/*****************************************************************************
+Gets called by picl_walk_tree_by_class. Then it cycles through the properties
+until we find what we are looking for. Once we are done, we return
+PICL_WALK_TERMINATE to stop picl_walk_tree_by_class from traversing the tree.
+
+Note that PICL_PTYPE_UNSIGNED_INT and PICL_PTYPE_INT can either be 4-bytes
+or 8-bytes.
+*****************************************************************************/
+static int probe_cpu(picl_nodehdl_t node_hdl, void* dummy_arg) {
+
+ picl_prophdl_t p_hdl;
+ picl_prophdl_t table_hdl;
+ picl_propinfo_t p_info;
+ long long long_long_val;
+ unsigned int uint_val;
+ int index;
+ int int_val;
+ int val;
+ char string_val[PICL_PROPNAMELEN_MAX];
+
+ val = picl_get_first_prop(node_hdl, &p_hdl);
+ while (val == PICL_SUCCESS) {
+ called_cpu_probe = 1;
+ val = picl_get_propinfo(p_hdl, &p_info);
+ if (val == PICL_SUCCESS) {
+ for (index = 0; index < NUM_ITEMS; index++) {
+ if (strcasecmp(p_info.name, items[index]) == 0) {
+ if (p_info.type == PICL_PTYPE_UNSIGNED_INT) {
+ if (p_info.size == sizeof(uint_val)) {
+ val = picl_get_propval(p_hdl, &uint_val, sizeof(uint_val));
+ if (val == PICL_SUCCESS) {
+ long_long_val = uint_val;
+ assign_value(index, long_long_val);
+ }
+ }
+ else if (p_info.size == sizeof(long_long_val)) {
+ val = picl_get_propval(p_hdl, &long_long_val,
+ sizeof(long_long_val));
+ if (val == PICL_SUCCESS) {
+ assign_value(index, long_long_val);
+ }
+ }
+ }
+ else if (p_info.type == PICL_PTYPE_INT) {
+ if (p_info.size == sizeof(int_val)) {
+ val = picl_get_propval(p_hdl, &int_val, sizeof(int_val));
+ if (val == PICL_SUCCESS) {
+ long_long_val = int_val;
+ assign_value(index, long_long_val);
+ }
+ }
+ else if (p_info.size == sizeof(long_long_val)) {
+ val = picl_get_propval(p_hdl, &long_long_val,
+ sizeof(long_long_val));
+ if (val == PICL_SUCCESS) {
+ assign_value(index, long_long_val);
+ }
+ }
+ }
+ else if (p_info.type == PICL_PTYPE_CHARSTRING) {
+ val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
+ if (val == PICL_SUCCESS) {
+ assign_string_value(index, string_val);
+ }
+ }
+ else if (p_info.type == PICL_PTYPE_TABLE) {
+ val = picl_get_propval(p_hdl, &table_hdl, p_info.size);
+ if (val == PICL_SUCCESS) {
+ search_table(index, table_hdl);
+ }
+ }
+ break;
+ } else if (index == NUM_ITEMS-1) {
+ if (p_info.type == PICL_PTYPE_CHARSTRING) {
+ val = picl_get_propval(p_hdl, &string_val, sizeof(string_val));
+ if (val == PICL_SUCCESS) {
+ }
+ }
+ }
+ }
+ }
+
+ val = picl_get_next_prop(p_hdl, &p_hdl);
+ }
+ return PICL_WALK_TERMINATE;
+}
+
+
+/*****************************************************************************
+Initializes, gets the root, then walks the picl tree looking for information
+
+Currently, the "core" class is only needed for OPL systems
+*****************************************************************************/
+char* hwloc_solaris_get_chip_type(void) {
+ picl_nodehdl_t root;
+ int val;
+ static char chip_type[PICL_PROPNAMELEN_MAX];
+
+ val = picl_initialize();
+ if (val != PICL_SUCCESS) { /* Can't initialize session with PICL daemon */
+ return(NULL);
+ }
+ val = picl_get_root(&root);
+ if (val != PICL_SUCCESS) { /* Failed to get root node of the PICL tree */
+ return(NULL);
+ }
+ val = picl_walk_tree_by_class(root, "cpu", (void *)NULL, probe_cpu);
+ val = picl_walk_tree_by_class(root, "core", (void *)NULL, probe_cpu);
+ picl_shutdown();
+
+ if (called_cpu_probe) {
+ strncpy(chip_type, dss_chip_type, PICL_PROPNAMELEN_MAX);
+ } else {
+ /* no picl information on machine available */
+ sysinfo(SI_HW_PROVIDER, chip_type, PICL_PROPNAMELEN_MAX);
+ }
+ return(chip_type);
+}
+
+/*****************************************************************************
+Initializes, gets the root, then walks the picl tree looking for information
+
+Currently, the "core" class is only needed for OPL systems
+*****************************************************************************/
+char *hwloc_solaris_get_chip_model(void) {
+
+ if (called_cpu_probe) {
+ if (dss_chip_mode != MODE_UNKNOWN) { /* SPARC chip */
+ strncpy(dss_chip_model, sparc_modes[dss_chip_mode],
+ PICL_PROPNAMELEN_MAX);
+ }
+ } else {
+ /* no picl information on machine available */
+ sysinfo(SI_PLATFORM, dss_chip_model, PICL_PROPNAMELEN_MAX);
+ }
+ return(dss_chip_model);
+}
+
+#else
+char* hwloc_solaris_get_chip_type(void) {
+ return NULL;
+}
+char *hwloc_solaris_get_chip_model(void) {
+ return NULL;
+}
+#endif
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-solaris.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,8 +1,9 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -10,6 +11,7 @@
#include <hwloc.h>
#include <private/private.h>
#include <private/debug.h>
+#include <private/solaris-chiptype.h>
#include <stdio.h>
#include <errno.h>
@@ -426,7 +428,7 @@
for (j = 0; j < curlgrp; j++)
distances[i*curlgrp+j] = (float) lgrp_latency_cookie(cookie, glob_lgrps[i]->os_index, glob_lgrps[j]->os_index, LGRP_LAT_CPU_TO_MEM);
}
- hwloc_topology__set_distance_matrix(topology, HWLOC_OBJ_NODE, curlgrp, indexes, glob_lgrps, distances, 0 /* OS cannot force */);
+ hwloc_distances_set(topology, HWLOC_OBJ_NODE, curlgrp, indexes, glob_lgrps, distances, 0 /* OS cannot force */);
}
#endif /* HAVE_LGRP_LATENCY_COOKIE */
}
@@ -440,6 +442,10 @@
static int
hwloc_look_kstat(struct hwloc_topology *topology)
{
+ /* FIXME this assumes that all sockets are identical */
+ char *CPUType = hwloc_solaris_get_chip_type();
+ char *CPUModel = hwloc_solaris_get_chip_model();
+
kstat_ctl_t *kc = kstat_open();
kstat_t *ksp;
kstat_named_t *stat;
@@ -608,8 +614,22 @@
* however. */
}
- if (look_chips)
- hwloc_setup_level(procid_max, numsockets, osphysids, proc_physids, topology, HWLOC_OBJ_SOCKET);
+ if (look_chips) {
+ struct hwloc_obj *obj;
+ unsigned j;
+ hwloc_debug("%d Sockets\n", numsockets);
+ for (j = 0; j < numsockets; j++) {
+ obj = hwloc_alloc_setup_object(HWLOC_OBJ_SOCKET, osphysids[j]);
+ if (CPUType)
+ hwloc_obj_add_info(obj, "CPUType", CPUType);
+ if (CPUModel)
+ hwloc_obj_add_info(obj, "CPUModel", CPUModel);
+ hwloc_object_cpuset_from_array(obj, j, proc_physids, procid_max);
+ hwloc_debug_1arg_bitmap("Socket %d has cpuset %s\n", j, obj->cpuset);
+ hwloc_insert_object_by_cpuset(topology, obj);
+ }
+ hwloc_debug("%s", "\n");
+ }
if (look_cores)
hwloc_setup_level(procid_max, numcores, oscoreids, proc_coreids, topology, HWLOC_OBJ_CORE);
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-synthetic.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -28,7 +28,12 @@
int cache_depth = 0, group_depth = 0;
int nb_machine_levels = 0, nb_node_levels = 0;
int nb_pu_levels = 0;
+ int verbose = 0;
+ char *env = getenv("HWLOC_SYNTHETIC_VERBOSE");
+ if (env)
+ verbose = atoi(env);
+
assert(topology->backend_type == HWLOC_BACKEND_NONE);
for (pos = description, count = 1; *pos; pos = next_pos) {
@@ -58,12 +63,13 @@
type = HWLOC_OBJ_MISC;
else if (!hwloc_namecoloncmp(pos, "group", 2))
type = HWLOC_OBJ_GROUP;
- else
- fprintf(stderr, "Unknown object type `%s'\n", pos);
+ else if (verbose)
+ fprintf(stderr, "Synthetic string with unknown object type `%s'\n", pos);
next_pos = strchr(pos, ':');
if (!next_pos) {
- fprintf(stderr,"synthetic string doesn't have a `:' after object type at '%s'\n", pos);
+ if (verbose)
+ fprintf(stderr,"Synthetic string doesn't have a `:' after object type at '%s'\n", pos);
errno = EINVAL;
return -1;
}
@@ -71,18 +77,21 @@
}
item = strtoul(pos, (char **)&next_pos, 0);
if (next_pos == pos) {
- fprintf(stderr,"synthetic string doesn't have a number of objects at '%s'\n", pos);
+ if (verbose)
+ fprintf(stderr,"Synthetic string doesn't have a number of objects at '%s'\n", pos);
errno = EINVAL;
return -1;
}
if (count + 1 >= HWLOC_SYNTHETIC_MAX_DEPTH) {
- fprintf(stderr,"Too many synthetic levels, max %d\n", HWLOC_SYNTHETIC_MAX_DEPTH);
+ if (verbose)
+ fprintf(stderr,"Too many synthetic levels, max %d\n", HWLOC_SYNTHETIC_MAX_DEPTH);
errno = EINVAL;
return -1;
}
if (item > UINT_MAX) {
- fprintf(stderr,"Too big arity, max %u\n", UINT_MAX);
+ if (verbose)
+ fprintf(stderr,"Too big arity, max %u\n", UINT_MAX);
errno = EINVAL;
return -1;
}
@@ -93,7 +102,8 @@
}
if (count <= 0) {
- fprintf(stderr,"synthetic string doesn't contain any object\n");
+ if (verbose)
+ fprintf(stderr, "Synthetic string doesn't contain any object\n");
errno = EINVAL;
return -1;
}
@@ -125,9 +135,10 @@
switch (type) {
case HWLOC_OBJ_PU:
if (nb_pu_levels) {
- fprintf(stderr,"synthetic string can not have several PU levels\n");
- errno = EINVAL;
- return -1;
+ if (verbose)
+ fprintf(stderr, "Synthetic string can not have several PU levels\n");
+ errno = EINVAL;
+ return -1;
}
nb_pu_levels++;
break;
@@ -149,23 +160,27 @@
}
if (!nb_pu_levels) {
- fprintf(stderr,"synthetic string missing ending number of PUs\n");
+ if (verbose)
+ fprintf(stderr, "Synthetic string missing ending number of PUs\n");
errno = EINVAL;
return -1;
}
if (nb_pu_levels > 1) {
- fprintf(stderr,"synthetic string can not have several PU levels\n");
+ if (verbose)
+ fprintf(stderr, "Synthetic string can not have several PU levels\n");
errno = EINVAL;
return -1;
}
if (nb_node_levels > 1) {
- fprintf(stderr,"synthetic string can not have several NUMA node levels\n");
+ if (verbose)
+ fprintf(stderr, "Synthetic string can not have several NUMA node levels\n");
errno = EINVAL;
return -1;
}
if (nb_machine_levels > 1) {
- fprintf(stderr,"synthetic string can not have several machine levels\n");
+ if (verbose)
+ fprintf(stderr, "Synthetic string can not have several machine levels\n");
errno = EINVAL;
return -1;
}
@@ -191,6 +206,7 @@
}
topology->backend_type = HWLOC_BACKEND_SYNTHETIC;
+ topology->backend_params.synthetic.string = strdup(description);
topology->backend_params.synthetic.arity[count-1] = 0;
topology->is_thissystem = 0;
@@ -201,6 +217,7 @@
hwloc_backend_synthetic_exit(struct hwloc_topology *topology)
{
assert(topology->backend_type == HWLOC_BACKEND_SYNTHETIC);
+ free(topology->backend_params.synthetic.string);
topology->backend_type = HWLOC_BACKEND_NONE;
}
@@ -343,5 +360,6 @@
hwloc_bitmap_free(cpuset);
hwloc_obj_add_info(topology->levels[0][0], "Backend", "Synthetic");
+ hwloc_obj_add_info(topology->levels[0][0], "SyntheticDescription", topology->backend_params.synthetic.string);
}
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-windows.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -579,8 +579,8 @@
}
for (procInfo = procInfoTotal;
- (void*) procInfo < (void*) ((unsigned long) procInfoTotal + length);
- procInfo = (void*) ((unsigned long) procInfo + procInfo->Size)) {
+ (void*) procInfo < (void*) ((uintptr_t) procInfoTotal + length);
+ procInfo = (void*) ((uintptr_t) procInfo + procInfo->Size)) {
unsigned num, i;
GROUP_AFFINITY *GroupMask;
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-x86.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
- * Copyright © 2010-2011 INRIA. All rights reserved.
- * Copyright © 2010-2011 Université Bordeaux 1
+ * Copyright © 2010-2011 inria. All rights reserved.
+ * Copyright © 2010-2012 Université Bordeaux 1
* Copyright © 2010-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*
@@ -18,9 +18,11 @@
#include <hwloc.h>
#include <private/private.h>
#include <private/debug.h>
-#include <private/cpuid.h>
#include <private/misc.h>
+#if defined(HWLOC_HAVE_CPUID)
+#include <private/cpuid.h>
+
struct cacheinfo {
unsigned type;
unsigned level;
@@ -162,7 +164,6 @@
/* AMD doesn't actually provide 0x04 information */
if (cpuid_type != amd && highest_cpuid >= 0x04) {
- cachenum = 0;
for (cachenum = 0; ; cachenum++) {
unsigned type;
eax = 0x04;
@@ -212,7 +213,7 @@
else
cache->ways = ways = ((ebx >> 22) & 0x3ff) + 1;
cache->sets = sets = ecx + 1;
- cache->size = linesize * linepart * ways * sets;
+ cache->size = linesize * linepart * ways * sets; /* FIXME: what if ways == -1 ? */
hwloc_debug("cache %u type %u L%u t%u c%u linesize %u linepart %u ways %u sets %u, size %uKB\n", cachenum, cache->type, cache->level, cache->nbthreads_sharing, infos->max_nbcores, linesize, linepart, ways, sets, cache->size >> 10);
infos->max_nbthreads = infos->max_log_proc / infos->max_nbcores;
@@ -458,8 +459,9 @@
#define AMD_EBX ('A' | ('u'<<8) | ('t'<<16) | ('h'<<24))
#define AMD_EDX ('e' | ('n'<<8) | ('t'<<16) | ('i'<<24))
#define AMD_ECX ('c' | ('A'<<8) | ('M'<<16) | ('D'<<24))
+#endif
-void hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs)
+void hwloc_look_x86(struct hwloc_topology *topology, unsigned nbprocs __hwloc_attribute_unused)
{
/* This function must always be here, but it's ok if it's empty. */
#if defined(HWLOC_HAVE_CPUID)
@@ -536,8 +538,10 @@
hwloc_obj_add_info(topology->levels[0][0], "Backend", "x86");
+#if defined(HWLOC_HAVE_CPUID)
free:
if (NULL != infos) {
free(infos);
}
+#endif
}
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology-xml.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2011 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
@@ -116,7 +116,7 @@
fclose(file);
topology->backend_params.xml.buffer = buffer;
- buflen = offset+1;
+ /* buflen = offset+1; */
}
topology->is_thissystem = 0;
@@ -491,10 +491,10 @@
if (hwloc__xml_verbose())
fprintf(stderr, "ignoring unexpected xml attr type %u\n", attr->type);
}
- return -1;
#else
assert(0);
#endif
+ return -1;
} else {
int namelen;
size_t len, escaped;
@@ -577,14 +577,14 @@
if (child->content && child->content[0] != '\0' && child->content[0] != '\n')
if (hwloc__xml_verbose())
fprintf(stderr, "ignoring object text content %s\n", (const char*) child->content);
- } else {
+ } else if (child->type != XML_COMMENT_NODE) {
if (hwloc__xml_verbose())
fprintf(stderr, "ignoring unexpected xml node type %u\n", child->type);
}
- return 0;
#else
assert(0);
#endif
+ return 0;
} else {
char *buffer = state->tagbuffer;
char *end;
@@ -643,10 +643,10 @@
if (state->use_libxml) {
#ifdef HWLOC_HAVE_LIBXML2
/* nothing */
- return 0;
#else
assert(0);
#endif
+ return 0;
} else {
char *buffer = state->tagbuffer;
char *end;
@@ -768,17 +768,16 @@
}
if (nbobjs && reldepth && latbase) {
- int idx = obj->distances_count;
unsigned i;
float *matrix, latmax = 0;
+ struct hwloc_xml_imported_distances_s *distances;
- obj->distances = realloc(obj->distances, (idx+1)*sizeof(*obj->distances));
- obj->distances_count = idx+1;
- obj->distances[idx] = malloc(sizeof(**obj->distances));
- obj->distances[idx]->relative_depth = reldepth;
- obj->distances[idx]->nbobjs = nbobjs;
- obj->distances[idx]->latency = matrix = malloc(nbobjs*nbobjs*sizeof(float));
- obj->distances[idx]->latency_base = latbase;
+ distances = malloc(sizeof(*distances));
+ distances->root = obj;
+ distances->distances.relative_depth = reldepth;
+ distances->distances.nbobjs = nbobjs;
+ distances->distances.latency = matrix = malloc(nbobjs*nbobjs*sizeof(float));
+ distances->distances.latency_base = latbase;
for(i=0; i<nbobjs*nbobjs; i++) {
struct hwloc__xml_import_state_s childstate;
@@ -788,17 +787,15 @@
ret = hwloc__xml_import_find_child(state, &childstate, &tag);
if (ret <= 0 || strcmp(tag, "latency")) {
/* a latency child is needed */
- free(obj->distances[idx]->latency);
- free(obj->distances[idx]);
- obj->distances_count--;
+ free(distances->distances.latency);
+ free(distances);
return -1;
}
ret = hwloc__xml_import_next_attr(&childstate, &attrname, &attrvalue);
if (ret < 0 || strcmp(attrname, "value")) {
- free(obj->distances[idx]->latency);
- free(obj->distances[idx]);
- obj->distances_count--;
+ free(distances->distances.latency);
+ free(distances);
return -1;
}
@@ -814,7 +811,14 @@
hwloc__xml_import_close_child(&childstate);
}
- obj->distances[idx]->latency_max = latmax;
+ distances->distances.latency_max = latmax;
+
+ if (topology->backend_params.xml.last_distances)
+ topology->backend_params.xml.last_distances->next = distances;
+ else
+ topology->backend_params.xml.first_distances = distances;
+ distances->prev = topology->backend_params.xml.last_distances;
+ distances->next = NULL;
}
return hwloc__xml_import_close_tag(state);
@@ -879,6 +883,49 @@
********* main XML import *********
***********************************/
+static void
+hwloc_xml__handle_distances(struct hwloc_topology *topology)
+{
+ struct hwloc_xml_imported_distances_s *xmldist, *next = topology->backend_params.xml.first_distances;
+
+ if (!next)
+ return;
+
+ /* connect things now because we need levels to check/build, they'll be reconnected properly later anyway */
+ hwloc_connect_children(topology->levels[0][0]);
+ hwloc_connect_levels(topology);
+
+ while ((xmldist = next) != NULL) {
+ hwloc_obj_t root = xmldist->root;
+ unsigned depth = root->depth + xmldist->distances.relative_depth;
+ unsigned nbobjs = hwloc_get_nbobjs_inside_cpuset_by_depth(topology, root->cpuset, depth);
+ if (nbobjs != xmldist->distances.nbobjs) {
+ /* distances invalid, drop */
+ if (hwloc__xml_verbose())
+ fprintf(stderr, "ignoring invalid distance matrix with %u objs instead of %u\n",
+ xmldist->distances.nbobjs, nbobjs);
+ free(xmldist->distances.latency);
+ } else {
+ /* distances valid, add it to the internal OS distances list for grouping */
+ unsigned *indexes = malloc(nbobjs * sizeof(unsigned));
+ hwloc_obj_t child, *objs = malloc(nbobjs * sizeof(hwloc_obj_t));
+ unsigned j;
+ for(j=0, child = hwloc_get_next_obj_inside_cpuset_by_depth(topology, root->cpuset, depth, NULL);
+ j<nbobjs;
+ j++, child = hwloc_get_next_obj_inside_cpuset_by_depth(topology, root->cpuset, depth, child)) {
+ indexes[j] = child->os_index;
+ objs[j] = child;
+ }
+ for(j=0; j<nbobjs*nbobjs; j++)
+ xmldist->distances.latency[j] *= xmldist->distances.latency_base;
+ hwloc_distances_set(topology, objs[0]->type, nbobjs, indexes, objs, xmldist->distances.latency, 0 /* XML cannot force */);
+ }
+
+ next = xmldist->next;
+ free(xmldist);
+ }
+}
+
/* this canNOT be the first XML call */
int
hwloc_look_xml(struct hwloc_topology *topology)
@@ -893,6 +940,8 @@
state.use_libxml = 0;
state.parent = NULL;
+ topology->backend_params.xml.first_distances = topology->backend_params.xml.last_distances = NULL;
+
#ifdef HWLOC_HAVE_LIBXML2
env = getenv("HWLOC_NO_LIBXML_IMPORT");
if (!env || !atoi(env)) {
@@ -963,6 +1012,9 @@
/* keep the "Backend" information intact */
/* we could add "BackendSource=XML" to notify that XML was used between the actual backend and here */
+ /* if we added some distances, we must check them, and make them groupable */
+ hwloc_xml__handle_distances(topology);
+ topology->backend_params.xml.first_distances = topology->backend_params.xml.last_distances = NULL;
topology->support.discovery->pu = 1;
return 0;
@@ -975,41 +1027,6 @@
return -1;
}
-static void
-hwloc_xml__check_distances(struct hwloc_topology *topology, hwloc_obj_t obj)
-{
- hwloc_obj_t child;
- unsigned i=0;
- while (i<obj->distances_count) {
- unsigned depth = obj->depth + obj->distances[i]->relative_depth;
- unsigned nbobjs = hwloc_get_nbobjs_inside_cpuset_by_depth(topology, obj->cpuset, depth);
- if (nbobjs != obj->distances[i]->nbobjs) {
- if (hwloc__xml_verbose())
- fprintf(stderr, "ignoring invalid distance matrix with %u objs instead of %u\n",
- obj->distances[i]->nbobjs, nbobjs);
- hwloc_free_logical_distances(obj->distances[i]);
- memmove(&obj->distances[i], &obj->distances[i+1], (obj->distances_count-i-1)*sizeof(*obj->distances));
- obj->distances_count--;
- } else
- i++;
- }
-
- child = obj->first_child;
- while (child != NULL) {
- hwloc_xml__check_distances(topology, child);
- child = child->next_sibling;
- }
-}
-
-/* this canNOT be the first XML call */
-void
-hwloc_xml_check_distances(struct hwloc_topology *topology)
-{
- /* now that the topology tree has been properly setup,
- * check that our distance matrice sizes make sense */
- hwloc_xml__check_distances(topology, topology->levels[0][0]);
-}
-
/************************************************
********* XML export (common routines) *********
************************************************/
@@ -1088,7 +1105,7 @@
case '<': strcpy(dst, "<"); replen=4; break;
case '>': strcpy(dst, ">"); replen=4; break;
case '&': strcpy(dst, "&"); replen=5; break;
- default: break;
+ default: replen=0; break;
}
dst+=replen; src++;
@@ -1163,8 +1180,10 @@
hwloc__xml_export_new_child(output, "object");
hwloc__xml_export_new_prop(output, "type", hwloc_obj_type_string(obj->type));
- sprintf(tmp, "%d", obj->os_level);
- hwloc__xml_export_new_prop(output, "os_level", tmp);
+ if (obj->os_level != -1) {
+ sprintf(tmp, "%d", obj->os_level);
+ hwloc__xml_export_new_prop(output, "os_level", tmp);
+ }
if (obj->os_index != (unsigned) -1) {
sprintf(tmp, "%u", obj->os_index);
hwloc__xml_export_new_prop(output, "os_index", tmp);
@@ -1329,7 +1348,6 @@
struct hwloc__xml_export_output_s output;
xmlDocPtr doc = NULL; /* document pointer */
xmlNodePtr root_node = NULL; /* root pointer */
- xmlDtdPtr dtd = NULL; /* DTD pointer */
LIBXML_TEST_VERSION;
hwloc_libxml2_disable_stderrwarnings();
@@ -1340,7 +1358,7 @@
xmlDocSetRootElement(doc, root_node);
/* Creates a DTD declaration. Isn't mandatory. */
- dtd = xmlCreateIntSubset(doc, BAD_CAST "topology", NULL, BAD_CAST "hwloc.dtd");
+ (void) xmlCreateIntSubset(doc, BAD_CAST "topology", NULL, BAD_CAST "hwloc.dtd");
output.use_libxml = 1;
output.current_node = root_node;
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/topology.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,7 +1,7 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
- * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
*/
@@ -82,7 +82,10 @@
static void
hwloc_topology_clear (struct hwloc_topology *topology);
+static void
+hwloc_topology_setup_defaults(struct hwloc_topology *topology);
+
#if defined(HAVE_SYSCTLBYNAME)
int hwloc_get_sysctlbyname(const char *name, int64_t *ret)
{
@@ -200,6 +203,8 @@
hwloc_debug("%*s", 2*indent, "");
hwloc_obj_snprintf(line, sizeof(line), topology, obj, "#", 1);
hwloc_debug("%s", line);
+ if (obj->name)
+ hwloc_debug(" name %s", obj->name);
if (obj->cpuset) {
hwloc_bitmap_asprintf(&cpuset, obj->cpuset);
hwloc_debug(" cpuset %s", cpuset);
@@ -263,17 +268,6 @@
obj->infos_count++;
}
-static void
-hwloc_clear_object_distances(hwloc_obj_t obj)
-{
- unsigned i;
- for (i=0; i<obj->distances_count; i++)
- hwloc_free_logical_distances(obj->distances[i]);
- free(obj->distances);
- obj->distances = NULL;
- obj->distances_count = 0;
-}
-
/* Free an object and all its content. */
void
hwloc_free_unlinked_object(hwloc_obj_t obj)
@@ -303,6 +297,57 @@
free(obj);
}
+static void
+hwloc__duplicate_objects(struct hwloc_topology *newtopology,
+ struct hwloc_obj *newparent,
+ struct hwloc_obj *src)
+{
+ hwloc_obj_t newobj;
+ hwloc_obj_t child;
+ size_t len;
+ unsigned i;
+
+ newobj = hwloc_alloc_setup_object(src->type, src->os_index);
+ if (src->name)
+ newobj->name = strdup(src->name);
+ newobj->userdata = src->userdata;
+
+ memcpy(&newobj->memory, &src->memory, sizeof(struct hwloc_obj_memory_s));
+ if (src->memory.page_types_len) {
+ len = src->memory.page_types_len * sizeof(struct hwloc_obj_memory_page_type_s);
+ newobj->memory.page_types = malloc(len);
+ memcpy(newobj->memory.page_types, src->memory.page_types, len);
+ }
+
+ memcpy(newobj->attr, src->attr, sizeof(*newobj->attr));
+
+ newobj->cpuset = hwloc_bitmap_dup(src->cpuset);
+ newobj->nodeset = hwloc_bitmap_dup(src->nodeset);
+
+ if (src->distances_count) {
+ newobj->distances_count = src->distances_count;
+ newobj->distances = malloc(src->distances_count * sizeof(struct hwloc_distances_s *));
+ for(i=0; i<src->distances_count; i++) {
+ newobj->distances[i] = malloc(sizeof(struct hwloc_distances_s));
+ /* ugly copy first */
+ memcpy(newobj->distances[i], src->distances[i], sizeof(struct hwloc_distances_s));
+ /* now duplicate matrices for real */
+ len = src->distances[i]->nbobjs * src->distances[i]->nbobjs * sizeof(float);
+ newobj->distances[i]->latency = malloc(len);
+ memcpy(newobj->distances[i]->latency, src->distances[i]->latency, len);
+ }
+ }
+
+ for(i=0; i<src->infos_count; i++)
+ hwloc_obj_add_info(newobj, src->infos[i].name, src->infos[i].value);
+
+ child = NULL;
+ while ((child = hwloc_get_next_child(newtopology, src, child)) != NULL)
+ hwloc__duplicate_objects(newtopology, newobj, child);
+
+ hwloc_insert_object_by_parent(newtopology, newparent, newobj);
+}
+
/*
* How to compare objects based on types.
*
@@ -381,19 +426,22 @@
}
#endif
+static int hwloc_obj_type_is_io (hwloc_obj_type_t type)
+{
+ return type == HWLOC_OBJ_BRIDGE || type == HWLOC_OBJ_PCI_DEVICE || type == HWLOC_OBJ_OS_DEVICE;
+}
+
int hwloc_compare_types (hwloc_obj_type_t type1, hwloc_obj_type_t type2)
{
unsigned order1 = hwloc_get_type_order(type1);
unsigned order2 = hwloc_get_type_order(type2);
/* bridge and devices are only comparable with each others and with machine and system */
- if ((type1 == HWLOC_OBJ_BRIDGE || type1 == HWLOC_OBJ_PCI_DEVICE || type1 == HWLOC_OBJ_OS_DEVICE)
- && type2 != HWLOC_OBJ_BRIDGE && type2 != HWLOC_OBJ_PCI_DEVICE && type2 != HWLOC_OBJ_OS_DEVICE
- && type2 != HWLOC_OBJ_SYSTEM && type2 != HWLOC_OBJ_MACHINE)
+ if (hwloc_obj_type_is_io(type1)
+ && !hwloc_obj_type_is_io(type2) && type2 != HWLOC_OBJ_SYSTEM && type2 != HWLOC_OBJ_MACHINE)
return HWLOC_TYPE_UNORDERED;
- if ((type2 == HWLOC_OBJ_BRIDGE || type2 == HWLOC_OBJ_PCI_DEVICE || type2 == HWLOC_OBJ_OS_DEVICE)
- && type1 != HWLOC_OBJ_BRIDGE && type1 != HWLOC_OBJ_PCI_DEVICE && type1 != HWLOC_OBJ_OS_DEVICE
- && type1 != HWLOC_OBJ_SYSTEM && type1 != HWLOC_OBJ_MACHINE)
+ if (hwloc_obj_type_is_io(type2)
+ && !hwloc_obj_type_is_io(type1) && type1 != HWLOC_OBJ_SYSTEM && type1 != HWLOC_OBJ_MACHINE)
return HWLOC_TYPE_UNORDERED;
return order1 - order2;
@@ -449,13 +497,24 @@
static int
hwloc_obj_cmp(hwloc_obj_t obj1, hwloc_obj_t obj2)
{
- if (!obj1->cpuset || hwloc_bitmap_iszero(obj1->cpuset)
- || !obj2->cpuset || hwloc_bitmap_iszero(obj2->cpuset))
+ hwloc_bitmap_t set1, set2;
+
+ /* compare cpusets if possible, or fallback to nodeset, or return */
+ if (obj1->cpuset && !hwloc_bitmap_iszero(obj1->cpuset)
+ && obj2->cpuset && !hwloc_bitmap_iszero(obj2->cpuset)) {
+ set1 = obj1->cpuset;
+ set2 = obj2->cpuset;
+ } else if (obj1->nodeset && !hwloc_bitmap_iszero(obj1->nodeset)
+ && obj2->nodeset && !hwloc_bitmap_iszero(obj2->nodeset)) {
+ set1 = obj1->nodeset;
+ set2 = obj2->nodeset;
+ } else {
return HWLOC_OBJ_DIFFERENT;
+ }
- if (hwloc_bitmap_isequal(obj1->cpuset, obj2->cpuset)) {
+ if (hwloc_bitmap_isequal(set1, set2)) {
- /* Same cpuset, subsort by type to have a consistent ordering. */
+ /* Same sets, subsort by type to have a consistent ordering. */
switch (hwloc_type_cmp(obj1, obj2)) {
case HWLOC_TYPE_DEEPER:
@@ -475,7 +534,7 @@
return HWLOC_OBJ_EQUAL;
}
- /* Same level cpuset and type! Let's hope it's coherent. */
+ /* Same sets and types! Let's hope it's coherent. */
return HWLOC_OBJ_EQUAL;
}
@@ -484,15 +543,15 @@
} else {
- /* Different cpusets, sort by inclusion. */
+ /* Different sets, sort by inclusion. */
- if (hwloc_bitmap_isincluded(obj1->cpuset, obj2->cpuset))
+ if (hwloc_bitmap_isincluded(set1, set2))
return HWLOC_OBJ_INCLUDED;
- if (hwloc_bitmap_isincluded(obj2->cpuset, obj1->cpuset))
+ if (hwloc_bitmap_isincluded(set2, set1))
return HWLOC_OBJ_CONTAINS;
- if (hwloc_bitmap_intersects(obj1->cpuset, obj2->cpuset))
+ if (hwloc_bitmap_intersects(set1, set2))
return HWLOC_OBJ_INTERSECTS;
return HWLOC_OBJ_DIFFERENT;
@@ -550,6 +609,37 @@
fprintf(stderr, "Different OS indexes\n");
return -1;
}
+ if (obj->distances_count) {
+ if (child->distances_count) {
+ child->distances_count += obj->distances_count;
+ child->distances = realloc(child->distances, child->distances_count * sizeof(*child->distances));
+ memcpy(child->distances + obj->distances_count, obj->distances, obj->distances_count * sizeof(*child->distances));
+ } else {
+ child->distances_count = obj->distances_count;
+ child->distances = obj->distances;
+ }
+ obj->distances_count = 0;
+ obj->distances = NULL;
+ }
+ if (obj->infos_count) {
+ if (child->infos_count) {
+ child->infos_count += obj->infos_count;
+ child->infos = realloc(child->infos, child->infos_count * sizeof(*child->infos));
+ memcpy(child->infos + obj->infos_count, obj->infos, obj->infos_count * sizeof(*child->infos));
+ } else {
+ child->infos_count = obj->infos_count;
+ child->infos = obj->infos;
+ }
+ obj->infos_count = 0;
+ obj->infos = NULL;
+ }
+ if (obj->name) {
+ if (child->name)
+ free(child->name);
+ child->name = obj->name;
+ obj->name = NULL;
+ }
+ assert(!obj->userdata); /* user could not set userdata here (we're before load() */
switch(obj->type) {
case HWLOC_OBJ_NODE:
/* Do not check these, it may change between calls */
@@ -632,7 +722,7 @@
case HWLOC_OBJ_DIFFERENT:
/* Leave CHILD in CUR. */
- if (!put && hwloc_bitmap_compare_first(obj->cpuset, child->cpuset) < 0) {
+ if (!put && (!child->cpuset || hwloc_bitmap_compare_first(obj->cpuset, child->cpuset) < 0)) {
/* Sort children by cpuset: put OBJ before CHILD in CUR's children. */
*cur_children = obj;
cur_children = &obj->next_sibling;
@@ -719,8 +809,6 @@
}
}
-static void
-hwloc_connect_children(hwloc_obj_t parent);
/* Adds a misc object _after_ detection, and thus has to reconnect all the pointers */
hwloc_obj_t
hwloc_topology_insert_misc_object_by_cpuset(struct hwloc_topology *topology, hwloc_const_bitmap_t cpuset, const char *name)
@@ -728,6 +816,11 @@
hwloc_obj_t obj, child;
int err;
+ if (!topology->is_loaded) {
+ errno = EINVAL;
+ return NULL;
+ }
+
if (hwloc_bitmap_iszero(cpuset))
return NULL;
if (!hwloc_bitmap_isincluded(cpuset, hwloc_topology_get_complete_cpuset(topology)))
@@ -737,6 +830,9 @@
if (name)
obj->name = strdup(name);
+ /* misc objects go in no level (needed here because level building doesn't see Misc objects inside I/O trees) */
+ obj->depth = (unsigned) HWLOC_TYPE_DEPTH_UNKNOWN;
+
obj->cpuset = hwloc_bitmap_dup(cpuset);
/* initialize default cpusets, we'll adjust them later */
obj->complete_cpuset = hwloc_bitmap_dup(cpuset);
@@ -786,6 +882,15 @@
if (name)
obj->name = strdup(name);
+ if (!topology->is_loaded) {
+ hwloc_free_unlinked_object(obj);
+ errno = EINVAL;
+ return NULL;
+ }
+
+ /* misc objects go in no level (needed here because level building doesn't see Misc objects inside I/O trees) */
+ obj->depth = (unsigned) HWLOC_TYPE_DEPTH_UNKNOWN;
+
hwloc_insert_object_by_parent(topology, parent, obj);
hwloc_connect_children(topology->levels[0][0]);
@@ -794,6 +899,22 @@
return obj;
}
+hwloc_obj_t
+hwloc_custom_insert_group_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, int groupdepth)
+{
+ hwloc_obj_t obj = hwloc_alloc_setup_object(HWLOC_OBJ_GROUP, -1);
+ obj->attr->group.depth = groupdepth;
+
+ if (topology->backend_type != HWLOC_BACKEND_CUSTOM || topology->is_loaded) {
+ errno = EINVAL;
+ return NULL;
+ }
+
+ hwloc_insert_object_by_parent(topology, parent, obj);
+
+ return obj;
+}
+
/* Traverse children of a parent in a safe way: reread the next pointer as
* appropriate to prevent crash on child deletion: */
#define for_each_child_safe(child, parent, pchild) \
@@ -997,9 +1118,7 @@
hwloc_obj_t child, *temp;
/* I/O devices (and their children) have no sets */
- if (obj->type == HWLOC_OBJ_BRIDGE
- || obj->type == HWLOC_OBJ_PCI_DEVICE
- || obj->type == HWLOC_OBJ_OS_DEVICE)
+ if (hwloc_obj_type_is_io(obj->type))
return;
if (parent_has_sets || obj->cpuset) {
@@ -1056,9 +1175,7 @@
for_each_child_safe(child, obj, temp) {
/* don't propagate nodesets in I/O objects, keep them NULL */
- if (child->type == HWLOC_OBJ_BRIDGE
- || child->type == HWLOC_OBJ_PCI_DEVICE
- || child->type == HWLOC_OBJ_OS_DEVICE)
+ if (hwloc_obj_type_is_io(child->type))
return;
/* Propagate singleton nodesets down */
@@ -1090,9 +1207,7 @@
for_each_child_safe(child, obj, temp) {
/* don't propagate nodesets in I/O objects, keep them NULL */
- if (child->type == HWLOC_OBJ_BRIDGE
- || child->type == HWLOC_OBJ_PCI_DEVICE
- || child->type == HWLOC_OBJ_OS_DEVICE)
+ if (hwloc_obj_type_is_io(child->type))
continue;
if (obj->nodeset) {
@@ -1246,9 +1361,8 @@
if (obj->type != HWLOC_OBJ_NODE
&& !obj->first_child /* only remove if all children were removed above, so that we don't remove parents of NUMAnode */
- && obj->type != HWLOC_OBJ_BRIDGE
- && obj->type != HWLOC_OBJ_PCI_DEVICE
- && obj->type != HWLOC_OBJ_OS_DEVICE
+ && !hwloc_obj_type_is_io(obj->type)
+ && obj->cpuset /* don't remove if no cpuset at all, there's likely a good reason why it's different from having an empty cpuset */
&& hwloc_bitmap_iszero(obj->cpuset)) {
/* Remove empty children */
hwloc_debug("%s", "\nRemoving empty object ");
@@ -1281,7 +1395,7 @@
if (obj->type == HWLOC_OBJ_MISC) {
dropping = droppingparent && !(flags & HWLOC_RESTRICT_FLAG_ADAPT_MISC);
- } else if (obj->type == HWLOC_OBJ_BRIDGE || obj->type == HWLOC_OBJ_PCI_DEVICE || obj->type == HWLOC_OBJ_OS_DEVICE) {
+ } else if (hwloc_obj_type_is_io(obj->type)) {
dropping = droppingparent && !(flags & HWLOC_RESTRICT_FLAG_ADAPT_IO);
} else {
dropping = droppingparent || (obj->cpuset && hwloc_bitmap_iszero(obj->cpuset));
@@ -1357,7 +1471,9 @@
}
}
-/* If WHOLE_IO is not set, we drop non-interesting devices,
+/*
+ * If IO_DEVICES and WHOLE_IO are not set, we drop everything.
+ * If WHOLE_IO is not set, we drop non-interesting devices,
* and bridges that have no children.
* If IO_BRIDGES is also not set, we also drop all bridges
* except the hostbridges.
@@ -1367,6 +1483,14 @@
{
hwloc_obj_t child, *pchild;
+ if (!(topology->flags & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO))) {
+ /* drop all I/O children */
+ for_each_child_safe(child, root, pchild)
+ if (hwloc_obj_type_is_io(child->type))
+ unlink_and_free_object_and_children(pchild);
+ return;
+ }
+
if (!(topology->flags & HWLOC_TOPOLOGY_FLAG_WHOLE_IO)) {
/* drop non-interesting devices */
for_each_child_safe(child, root, pchild) {
@@ -1376,6 +1500,7 @@
if (baseclass != 0x03 /* PCI_BASE_CLASS_DISPLAY */
&& baseclass != 0x02 /* PCI_BASE_CLASS_NETWORK */
&& baseclass != 0x01 /* PCI_BASE_CLASS_STORAGE */
+ && baseclass != 0x0b /* PCI_BASE_CLASS_PROCESSOR */
&& classid != 0x0c06 /* PCI_CLASS_SERIAL_INFINIBAND */)
unlink_and_free_object_and_children(pchild);
}
@@ -1423,6 +1548,55 @@
}
}
+static void
+hwloc_propagate_symmetric_subtree(hwloc_topology_t topology, hwloc_obj_t root)
+{
+ hwloc_obj_t child, *array;
+
+ /* assume we're not symmetric by default */
+ root->symmetric_subtree = 0;
+
+ /* if no child, we are symmetric */
+ if (!root->arity) {
+ root->symmetric_subtree = 1;
+ return;
+ }
+
+ /* look at children, and return if they are not symmetric */
+ child = NULL;
+ while ((child = hwloc_get_next_child(topology, root, child)) != NULL)
+ hwloc_propagate_symmetric_subtree(topology, child);
+ while ((child = hwloc_get_next_child(topology, root, child)) != NULL)
+ if (!child->symmetric_subtree)
+ return;
+
+ /* now check that children subtrees are identical.
+ * just walk down the first child in each tree and compare their depth and arities
+ */
+ array = malloc(root->arity * sizeof(*array));
+ memcpy(array, root->children, root->arity * sizeof(*array));
+ while (1) {
+ unsigned i;
+ /* check current level arities and depth */
+ for(i=1; i<root->arity; i++)
+ if (array[i]->depth != array[0]->depth
+ || array[i]->arity != array[0]->arity) {
+ free(array);
+ return;
+ }
+ if (!array[0]->arity)
+ /* no more children level, we're ok */
+ break;
+ /* look at first child of each element now */
+ for(i=0; i<root->arity; i++)
+ array[i] = array[i]->first_child;
+ }
+ free(array);
+
+ /* everything went fine, we're symmetric */
+ root->symmetric_subtree = 1;
+}
+
/*
* Initialize handy pointers in the whole topology.
* The topology only had first_child and next_sibling pointers.
@@ -1430,7 +1604,7 @@
* The remaining fields (levels, cousins, logical_index, depth, ...) will
* be setup later in hwloc_connect_levels().
*/
-static void
+void
hwloc_connect_children(hwloc_obj_t parent)
{
unsigned n;
@@ -1521,9 +1695,7 @@
hwloc_obj_t *new_obj, hwloc_obj_t old)
{
unsigned i, total;
- if (old->type == HWLOC_OBJ_BRIDGE
- || old->type == HWLOC_OBJ_PCI_DEVICE
- || old->type == HWLOC_OBJ_OS_DEVICE) {
+ if (hwloc_obj_type_is_io(old->type)) {
if (new_obj)
append_iodevs(topology, old);
return 0;
@@ -1535,8 +1707,11 @@
}
for(i=0, total=0; i<old->arity; i++) {
int nb = hwloc_level_filter_object(topology, new_obj, old->children[i]);
- if (new_obj)
+ if (new_obj) {
new_obj += nb;
+ /* misc objects go in no level (needed here because insert_misc() not always involved e.g. during XML import) */
+ old->depth = (unsigned) HWLOC_TYPE_DEPTH_UNKNOWN;
+ }
total += nb;
}
return total;
@@ -1556,9 +1731,7 @@
/* anything to filter? */
for(i=0; i<nold; i++)
- if (old[i]->type == HWLOC_OBJ_BRIDGE
- || old[i]->type == HWLOC_OBJ_PCI_DEVICE
- || old[i]->type == HWLOC_OBJ_OS_DEVICE
+ if (hwloc_obj_type_is_io(old[i]->type)
|| old[i]->type == HWLOC_OBJ_MISC)
break;
if (i==nold)
@@ -1616,7 +1789,7 @@
/*
* Do the remaining work that hwloc_connect_children() did not do earlier.
*/
-static int
+int
hwloc_connect_levels(hwloc_topology_t topology)
{
unsigned l, i=0;
@@ -1713,7 +1886,10 @@
/* New level. */
taken_objs = malloc((n_taken_objs + 1) * sizeof(taken_objs[0]));
/* New list of pending objects. */
- new_objs = malloc((n_objs - n_taken_objs + n_new_objs) * sizeof(new_objs[0]));
+ if (n_objs - n_taken_objs + n_new_objs)
+ new_objs = malloc((n_objs - n_taken_objs + n_new_objs) * sizeof(new_objs[0]));
+ else
+ new_objs = NULL;
n_new_objs = hwloc_level_take_objects(top_obj,
objs, n_objs,
@@ -1765,12 +1941,15 @@
}
/* It's empty now. */
- free(objs);
+ if (objs)
+ free(objs);
topology->bridge_nbobjects = hwloc_build_level_from_list(topology->first_bridge, &topology->bridge_level);
topology->pcidev_nbobjects = hwloc_build_level_from_list(topology->first_pcidev, &topology->pcidev_level);
topology->osdev_nbobjects = hwloc_build_level_from_list(topology->first_osdev, &topology->osdev_level);
+ hwloc_propagate_symmetric_subtree(topology, topology->levels[0][0]);
+
return 0;
}
@@ -1897,9 +2076,13 @@
static int
hwloc_discover(struct hwloc_topology *topology)
{
+ int gotsomeio = 1;
+
if (topology->backend_type == HWLOC_BACKEND_SYNTHETIC) {
alloc_cpusets(topology->levels[0][0]);
hwloc_look_synthetic(topology);
+ } else if (topology->backend_type == HWLOC_BACKEND_CUSTOM) {
+ /* nothing to do, just connect levels below */
} else if (topology->backend_type == HWLOC_BACKEND_XML) {
if (hwloc_look_xml(topology) < 0) {
hwloc_topology_clear(topology);
@@ -1957,7 +2140,7 @@
# ifdef HWLOC_LINUX_SYS
# define HAVE_OS_SUPPORT
- hwloc_look_linux(topology);
+ hwloc_look_linuxfs(topology);
# endif /* HWLOC_LINUX_SYS */
# ifdef HWLOC_AIX_SYS
@@ -2016,7 +2199,7 @@
/*
* Group levels by distances
*/
- hwloc_convert_distances_indexes_into_objects(topology);
+ hwloc_distances_finalize_os(topology);
hwloc_group_by_distances(topology);
/* First tweak a bit to clean the topology. */
@@ -2096,58 +2279,52 @@
* and there.
*/
- /* PCI */
- if (topology->flags & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO)) {
- int gotsome = 0;
+ /* I/O devices */
+
+ /* see if the backend already imported some I/O devices */
+ if (topology->backend_type == HWLOC_BACKEND_XML
+ || topology->backend_type == HWLOC_BACKEND_SYNTHETIC
+ || topology->backend_type == HWLOC_BACKEND_CUSTOM)
+ gotsomeio = 1;
+ /* import from libpci if needed */
+ if (topology->flags & (HWLOC_TOPOLOGY_FLAG_IO_DEVICES|HWLOC_TOPOLOGY_FLAG_WHOLE_IO)
+ && (topology->backend_type == HWLOC_BACKEND_NONE
+#ifdef HWLOC_LINUX_SYS
+ || topology->backend_type == HWLOC_BACKEND_LINUXFS
+#endif
+ )) {
hwloc_debug("%s", "\nLooking for PCI devices\n");
-
- if (topology->backend_type == HWLOC_BACKEND_SYNTHETIC) {
- /* TODO */
- }
- else if (topology->backend_type == HWLOC_BACKEND_XML) {
- /* TODO */
- }
#ifdef HWLOC_HAVE_LIBPCI
- else if (topology->is_thissystem) {
+ if (topology->is_thissystem) {
hwloc_look_libpci(topology);
- gotsome = 1;
- }
+ print_objects(topology, 0, topology->levels[0][0]);
+ gotsomeio = 1;
+ } else
#endif
-
- if (gotsome) {
- print_objects(topology, 0, topology->levels[0][0]);
-
- hwloc_drop_useless_io(topology, topology->levels[0][0]);
-
- hwloc_propagate_bridge_depth(topology, topology->levels[0][0], 0);
-
- hwloc_debug("%s", "\nNow reconnecting\n");
-
- hwloc_connect_children(topology->levels[0][0]);
- hwloc_connect_levels(topology);
-
- print_objects(topology, 0, topology->levels[0][0]);
- } else {
+ {
hwloc_debug("%s", "\nno PCI detection\n");
}
}
+ /* if we got anything, filter interesting objects and update the tree */
+ if (gotsomeio) {
+ hwloc_drop_useless_io(topology, topology->levels[0][0]);
+ hwloc_debug("%s", "\nNow reconnecting\n");
+ hwloc_connect_children(topology->levels[0][0]);
+ hwloc_connect_levels(topology);
+ print_objects(topology, 0, topology->levels[0][0]);
+ hwloc_propagate_bridge_depth(topology, topology->levels[0][0], 0);
+ }
/*
* Now that objects are numbered, take distance matrices from backends and put them in the main topology.
*
* Some objects may have disappeared (in removed_empty or removed_ignored) since we setup os distances
- * (hwloc_convert_distances_indexes_into_objects()) above. Reset them so as to not point to disappeared objects anymore.
+ * (hwloc_distances_finalize_os()) above. Reset them so as to not point to disappeared objects anymore.
*/
- hwloc_restrict_distances(topology, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
- hwloc_convert_distances_indexes_into_objects(topology);
- hwloc_finalize_logical_distances(topology);
+ hwloc_distances_restrict_os(topology);
+ hwloc_distances_finalize_os(topology);
+ hwloc_distances_finalize_logical(topology);
-# ifdef HWLOC_HAVE_XML
- if (topology->backend_type == HWLOC_BACKEND_XML)
- /* make sure the XML-imported distances are ok now that the tree is properly setup */
- hwloc_xml_check_distances(topology);
-# endif
-
/*
* Now set binding hooks.
* If the represented system is actually not this system, use dummy binding
@@ -2159,7 +2336,7 @@
if (topology->is_thissystem) {
# ifdef HWLOC_LINUX_SYS
- hwloc_set_linux_hooks(topology);
+ hwloc_set_linuxfs_hooks(topology);
# endif /* HWLOC_LINUX_SYS */
# ifdef HWLOC_AIX_SYS
@@ -2230,8 +2407,10 @@
DO(cpu,get_proc_cpubind);
DO(cpu,set_thisthread_cpubind);
DO(cpu,get_thisthread_cpubind);
+#ifdef hwloc_thread_t
DO(cpu,set_thread_cpubind);
DO(cpu,get_thread_cpubind);
+#endif
DO(cpu,get_thisproc_last_cpu_location);
DO(cpu,get_proc_last_cpu_location);
DO(cpu,get_thisthread_last_cpu_location);
@@ -2286,7 +2465,7 @@
/* Only the System object on top by default */
topology->nb_levels = 1; /* there's at least SYSTEM */
topology->next_group_depth = 0;
- topology->levels[0] = malloc (sizeof (struct hwloc_obj));
+ topology->levels[0] = malloc (sizeof (hwloc_obj_t));
topology->level_nbobjects[0] = 1;
/* NULLify other levels so that we can detect and free old ones in hwloc_connect_levels() if needed */
memset(topology->levels+1, 0, (HWLOC_DEPTH_MAX-1)*sizeof(*topology->levels));
@@ -2334,7 +2513,7 @@
topology->ignored_types[i] = HWLOC_IGNORE_TYPE_NEVER;
topology->ignored_types[HWLOC_OBJ_GROUP] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
- hwloc_topology_distances_init(topology);
+ hwloc_distances_init(topology);
/* Make the topology look like something coherent but empty */
hwloc_topology_setup_defaults(topology);
@@ -2343,13 +2522,64 @@
return 0;
}
+int
+hwloc_topology_set_pid(struct hwloc_topology *topology __hwloc_attribute_unused,
+ hwloc_pid_t pid __hwloc_attribute_unused)
+{
+ /* this does *not* change the backend */
+#ifdef HWLOC_LINUX_SYS
+ topology->pid = pid;
+ return 0;
+#else /* HWLOC_LINUX_SYS */
+ errno = ENOSYS;
+ return -1;
+#endif /* HWLOC_LINUX_SYS */
+}
+
+static int
+hwloc_backend_custom_init(struct hwloc_topology *topology)
+{
+ assert(topology->backend_type == HWLOC_BACKEND_NONE);
+
+ topology->levels[0][0]->type = HWLOC_OBJ_SYSTEM;
+ topology->is_thissystem = 0;
+ topology->backend_type = HWLOC_BACKEND_CUSTOM;
+ return 0;
+}
+
+int
+hwloc_custom_insert_topology(struct hwloc_topology *newtopology,
+ struct hwloc_obj *newparent,
+ struct hwloc_topology *oldtopology,
+ struct hwloc_obj *oldroot)
+{
+ if (newtopology->backend_type != HWLOC_BACKEND_CUSTOM || newtopology->is_loaded || !oldtopology->is_loaded) {
+ errno = EINVAL;
+ return -1;
+ }
+
+ hwloc__duplicate_objects(newtopology, newparent, oldroot ? oldroot : oldtopology->levels[0][0]);
+ return 0;
+}
+
static void
+hwloc_backend_custom_exit(struct hwloc_topology *topology)
+{
+ assert(topology->backend_type == HWLOC_BACKEND_CUSTOM);
+
+ hwloc_topology_clear(topology);
+ hwloc_topology_setup_defaults(topology);
+
+ topology->backend_type = HWLOC_BACKEND_NONE;
+}
+
+static void
hwloc_backend_exit(struct hwloc_topology *topology)
{
switch (topology->backend_type) {
#ifdef HWLOC_LINUX_SYS
- case HWLOC_BACKEND_SYSFS:
- hwloc_backend_sysfs_exit(topology);
+ case HWLOC_BACKEND_LINUXFS:
+ hwloc_backend_linuxfs_exit(topology);
break;
#endif
case HWLOC_BACKEND_XML:
@@ -2358,11 +2588,21 @@
case HWLOC_BACKEND_SYNTHETIC:
hwloc_backend_synthetic_exit(topology);
break;
+ case HWLOC_BACKEND_CUSTOM:
+ hwloc_backend_custom_exit(topology);
+ break;
default:
break;
}
assert(topology->backend_type == HWLOC_BACKEND_NONE);
+
+ if (topology->is_loaded) {
+ hwloc_topology_clear(topology);
+ hwloc_distances_destroy(topology);
+ hwloc_topology_setup_defaults(topology);
+ topology->is_loaded = 0;
+ }
}
int
@@ -2372,20 +2612,9 @@
hwloc_backend_exit(topology);
#ifdef HWLOC_LINUX_SYS
- if (hwloc_backend_sysfs_init(topology, fsroot_path) < 0)
+ if (hwloc_backend_linuxfs_init(topology, fsroot_path) < 0)
return -1;
-#endif /* HWLOC_LINUX_SYS */
-
return 0;
-}
-
-int
-hwloc_topology_set_pid(struct hwloc_topology *topology __hwloc_attribute_unused,
- hwloc_pid_t pid __hwloc_attribute_unused)
-{
-#ifdef HWLOC_LINUX_SYS
- topology->pid = pid;
- return 0;
#else /* HWLOC_LINUX_SYS */
errno = ENOSYS;
return -1;
@@ -2412,6 +2641,15 @@
}
int
+hwloc_topology_set_custom(struct hwloc_topology *topology)
+{
+ /* cleanup existing backend */
+ hwloc_backend_exit(topology);
+
+ return hwloc_backend_custom_init(topology);
+}
+
+int
hwloc_topology_set_xmlbuffer(struct hwloc_topology *topology __hwloc_attribute_unused,
const char *xmlbuffer __hwloc_attribute_unused,
int size __hwloc_attribute_unused)
@@ -2441,9 +2679,7 @@
/* we need the PU level */
errno = EINVAL;
return -1;
- } else if (type == HWLOC_OBJ_PCI_DEVICE
- || type == HWLOC_OBJ_BRIDGE
- || type == HWLOC_OBJ_OS_DEVICE) {
+ } else if (hwloc_obj_type_is_io(type)) {
/* I/O devices aren't in any level, use topology flags to ignore them */
errno = EINVAL;
return -1;
@@ -2465,9 +2701,7 @@
/* we need the PU level */
errno = EINVAL;
return -1;
- } else if (type == HWLOC_OBJ_PCI_DEVICE
- || type == HWLOC_OBJ_BRIDGE
- || type == HWLOC_OBJ_OS_DEVICE) {
+ } else if (hwloc_obj_type_is_io(type)) {
/* I/O devices aren't in any level, use topology flags to ignore them */
errno = EINVAL;
return -1;
@@ -2483,19 +2717,24 @@
unsigned type;
for(type = HWLOC_OBJ_SYSTEM; type < HWLOC_OBJ_TYPE_MAX; type++)
if (type != HWLOC_OBJ_PU
- && type != HWLOC_OBJ_PCI_DEVICE
- && type != HWLOC_OBJ_BRIDGE
- && type != HWLOC_OBJ_OS_DEVICE)
+ && !hwloc_obj_type_is_io(type))
topology->ignored_types[type] = HWLOC_IGNORE_TYPE_KEEP_STRUCTURE;
return 0;
}
+/* traverse the tree and free everything.
+ * only use first_child/next_sibling so that it works before load()
+ * and may be used when switching between backend.
+ */
static void
hwloc_topology_clear_tree (struct hwloc_topology *topology, struct hwloc_obj *root)
{
- unsigned i;
- for(i=0; i<root->arity; i++)
- hwloc_topology_clear_tree (topology, root->children[i]);
+ hwloc_obj_t child = root->first_child;
+ while (child) {
+ hwloc_obj_t nextchild = child->next_sibling;
+ hwloc_topology_clear_tree (topology, child);
+ child = nextchild;
+ }
hwloc_free_unlinked_object (root);
}
@@ -2503,10 +2742,12 @@
hwloc_topology_clear (struct hwloc_topology *topology)
{
unsigned l;
- hwloc_topology_distances_clear(topology);
+ hwloc_distances_clear(topology);
hwloc_topology_clear_tree (topology, topology->levels[0][0]);
- for (l=0; l<topology->nb_levels; l++)
+ for (l=0; l<topology->nb_levels; l++) {
free(topology->levels[l]);
+ topology->levels[l] = NULL;
+ }
free(topology->bridge_level);
free(topology->pcidev_level);
free(topology->osdev_level);
@@ -2515,9 +2756,9 @@
void
hwloc_topology_destroy (struct hwloc_topology *topology)
{
+ hwloc_backend_exit(topology);
hwloc_topology_clear(topology);
- hwloc_topology_distances_destroy(topology);
- hwloc_backend_exit(topology);
+ hwloc_distances_destroy(topology);
free(topology->support.discovery);
free(topology->support.cpubind);
free(topology->support.membind);
@@ -2542,7 +2783,7 @@
char *fsroot_path_env = getenv("HWLOC_FORCE_FSROOT");
if (fsroot_path_env) {
hwloc_backend_exit(topology);
- hwloc_backend_sysfs_init(topology, fsroot_path_env);
+ hwloc_backend_linuxfs_init(topology, fsroot_path_env);
}
}
#endif
@@ -2559,7 +2800,7 @@
if (topology->backend_type == HWLOC_BACKEND_NONE) {
char *fsroot_path_env = getenv("HWLOC_FSROOT");
if (fsroot_path_env)
- hwloc_backend_sysfs_init(topology, fsroot_path_env);
+ hwloc_backend_linuxfs_init(topology, fsroot_path_env);
}
#endif
if (topology->backend_type == HWLOC_BACKEND_NONE) {
@@ -2576,7 +2817,7 @@
/* if we haven't chosen the backend, set the OS-specific one if needed */
if (topology->backend_type == HWLOC_BACKEND_NONE) {
#ifdef HWLOC_LINUX_SYS
- if (hwloc_backend_sysfs_init(topology, "/") < 0)
+ if (hwloc_backend_linuxfs_init(topology, "/") < 0)
return -1;
#endif
}
@@ -2584,7 +2825,7 @@
/* get distance matrix from the environment are store them (as indexes) in the topology.
* indexes will be converted into objects later once the tree will be filled
*/
- hwloc_store_distances_from_env(topology);
+ hwloc_distances_set_from_env(topology);
/* actual topology discovery */
err = hwloc_discover(topology);
@@ -2631,9 +2872,9 @@
hwloc_connect_children(topology->levels[0][0]);
hwloc_connect_levels(topology);
propagate_total_memory(topology->levels[0][0]);
- hwloc_restrict_distances(topology, flags);
- hwloc_convert_distances_indexes_into_objects(topology);
- hwloc_finalize_logical_distances(topology);
+ hwloc_distances_restrict(topology, flags);
+ hwloc_distances_finalize_os(topology);
+ hwloc_distances_finalize_logical(topology);
return 0;
}
@@ -2710,6 +2951,25 @@
}
}
+static void
+hwloc__check_children_depth(struct hwloc_topology *topology, struct hwloc_obj *parent)
+{
+ hwloc_obj_t child = NULL;
+ while ((child = hwloc_get_next_child(topology, parent, child)) != NULL) {
+ if (child->type == HWLOC_OBJ_BRIDGE)
+ assert(child->depth == (unsigned) HWLOC_TYPE_DEPTH_BRIDGE);
+ else if (child->type == HWLOC_OBJ_PCI_DEVICE)
+ assert(child->depth == (unsigned) HWLOC_TYPE_DEPTH_PCI_DEVICE);
+ else if (child->type == HWLOC_OBJ_OS_DEVICE)
+ assert(child->depth == (unsigned) HWLOC_TYPE_DEPTH_OS_DEVICE);
+ else if (child->type == HWLOC_OBJ_MISC)
+ assert(child->depth == (unsigned) -1);
+ else if (parent->depth != (unsigned) -1)
+ assert(child->depth > parent->depth);
+ hwloc__check_children_depth(topology, child);
+ }
+}
+
/* check a whole topology structure */
void
hwloc_topology_check(struct hwloc_topology *topology)
@@ -2805,6 +3065,11 @@
/* bottom-level object must always be PU */
assert(obj->type == HWLOC_OBJ_PU);
}
+
+ /* check relative depths */
+ obj = hwloc_get_root_obj(topology);
+ assert(obj->depth == 0);
+ hwloc__check_children_depth(topology, obj);
}
const struct hwloc_topology_support *
Modified: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/src/traversal.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,6 +1,6 @@
/*
* Copyright © 2009 CNRS
- * Copyright © 2009-2011 INRIA. All rights reserved.
+ * Copyright © 2009-2011 inria. All rights reserved.
* Copyright © 2009-2010 Université Bordeaux 1
* Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
* See COPYING in top-level directory.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,105 @@
+# Copyright © 2009-2011 inria. All rights reserved.
+# Copyright © 2009-2012 Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+SUBDIRS = ports xml
+DIST_SUBDIRS = ports xml linux rename
+
+if HWLOC_HAVE_LINUX
+SUBDIRS += linux
+endif HWLOC_HAVE_LINUX
+
+LDADD =
+
+if HWLOC_BUILD_TESTS
+check_PROGRAMS = hwloc_bitmap \
+ hwloc_bitmap_string \
+ hwloc_get_closest_objs \
+ hwloc_get_obj_covering_cpuset \
+ hwloc_get_cache_covering_cpuset \
+ hwloc_get_largest_objs_inside_cpuset \
+ hwloc_get_next_obj_covering_cpuset \
+ hwloc_get_obj_inside_cpuset \
+ hwloc_get_shared_cache_covering_obj \
+ hwloc_get_obj_below_array_by_type \
+ hwloc_bitmap_first_last_weight \
+ hwloc_bitmap_singlify \
+ hwloc_type_depth \
+ hwloc_bind \
+ hwloc_get_last_cpu_location \
+ hwloc_object_userdata \
+ hwloc_synthetic \
+ hwloc_custom \
+ hwloc_backends \
+ hwloc_is_thissystem \
+ hwloc_distances \
+ hwloc_groups \
+ hwloc_groups2 \
+ hwloc_insert_misc \
+ hwloc_topology_restrict \
+ hwloc_obj_infos \
+ hwloc_iodevs \
+ xmlbuffer
+
+if HWLOC_HAVE_LINUX_LIBNUMA
+check_PROGRAMS += linux-libnuma
+endif HWLOC_HAVE_LINUX_LIBNUMA
+
+if HWLOC_HAVE_SCHED_SETAFFINITY
+check_PROGRAMS += glibc-sched
+endif HWLOC_HAVE_SCHED_SETAFFINITY
+
+if HWLOC_HAVE_LIBIBVERBS
+check_PROGRAMS += openfabrics-verbs
+endif HWLOC_HAVE_LIBIBVERBS
+
+if HWLOC_HAVE_MYRIEXPRESS
+check_PROGRAMS += myriexpress
+endif HWLOC_HAVE_MYRIEXPRESS
+
+if HWLOC_HAVE_CUDA
+check_PROGRAMS += cuda
+endif HWLOC_HAVE_CUDA
+
+if HWLOC_HAVE_CUDART
+check_PROGRAMS += cudart
+endif HWLOC_HAVE_CUDART
+
+TESTS = $(check_PROGRAMS)
+
+# The library has a different name depending on whether we are
+# building in standalone or embedded mode.
+if HWLOC_BUILD_STANDALONE
+hwloc_lib = libhwloc.la
+else
+hwloc_lib = libhwloc_embedded.la
+endif
+
+LDADD += $(HWLOC_top_builddir)/src/$(hwloc_lib)
+
+linux_libnuma_LDADD = $(LDADD) -lnuma
+openfabrics_verbs_LDADD = $(LDADD) -libverbs
+myriexpress_LDADD = $(LDADD) -lmyriexpress
+cuda_LDADD = $(LDADD) -lcuda
+cudart_LDADD = $(LDADD) -lcuda -lcudart
+xmlbuffer_LDADD = $(LDADD) $(HWLOC_LIBXML2_LIBS)
+hwloc_backends_LDADD = $(LDADD) $(HWLOC_LIBXML2_LIBS)
+hwloc_bind_LDADD = $(LDADD) -lpthread
+
+endif HWLOC_BUILD_TESTS
+
+# ship the embedded test code but don't actually let automake ever
+# look at it because we have another configure stuff in there
+EXTRA_DIST = embedded/autogen.sh \
+ embedded/configure.ac \
+ embedded/Makefile.am \
+ embedded/do_test.c \
+ embedded/main.c \
+ embedded/run-embedded-tests.sh \
+ embedded/README.txt \
+ embedded/config/README.txt
Deleted: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/README 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/README 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,4 +0,0 @@
-The contents of this directory have been deleted from the MPICH2 repository.
-Because we build hwloc in "embedded" mode, these directories cause problems with
-the tarballs resulting from "make dist". The directory itself is left in place
-to keep automake happy and hold this README.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cuda.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cuda.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cuda.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,64 @@
+/*
+ * Copyright © 2010 inria. All rights reserved.
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <cuda.h>
+#include <hwloc.h>
+#include <hwloc/cuda.h>
+
+/* check the CUDA Driver API helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ CUresult cres;
+ CUdevice device;
+ int count, i;
+ int err;
+
+ cres = cuInit(0);
+ if (cres != CUDA_SUCCESS) {
+ printf("cuInit failed %d\n", cres);
+ return 0;
+ }
+
+ cres = cuDeviceGetCount(&count);
+ if (cres != CUDA_SUCCESS) {
+ printf("cuDeviceGetCount failed %d\n", cres);
+ return 0;
+ }
+ printf("cuDeviceGetCount found %d devices\n", count);
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ for(i=0; i<count; i++) {
+ hwloc_bitmap_t set;
+
+ cres = cuDeviceGet(&device, i);
+ if (cres != CUDA_SUCCESS) {
+ printf("failed to get device %d\n", i);
+ continue;
+ }
+
+ set = hwloc_bitmap_alloc();
+ err = hwloc_cuda_get_device_cpuset(topology, device, set);
+ if (err < 0) {
+ printf("failed to get cpuset for device %d\n", i);
+ } else {
+ char *cpuset_string = NULL;
+ hwloc_bitmap_asprintf(&cpuset_string, set);
+ printf("got cpuset %s for device %d\n", cpuset_string, i);
+ free(cpuset_string);
+ }
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cudart.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cudart.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/cudart.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,51 @@
+/*
+ * Copyright © 2010 inria. All rights reserved.
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <cuda_runtime_api.h>
+#include <hwloc.h>
+#include <hwloc/cudart.h>
+
+/* check the CUDA Runtime API helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ cudaError_t cerr;
+ int count, i;
+ int err;
+
+ cerr = cudaGetDeviceCount(&count);
+ if (cerr) {
+ printf("cudaGetDeviceCount failed %d\n", cerr);
+ return -1;
+ }
+ printf("cudaGetDeviceCount found %d devices\n", count);
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ for(i=0; i<count; i++) {
+ hwloc_bitmap_t set;
+
+ set = hwloc_bitmap_alloc();
+ err = hwloc_cudart_get_device_cpuset(topology, i, set);
+ if (err < 0) {
+ printf("failed to get cpuset for device %d\n", i);
+ } else {
+ char *cpuset_string = NULL;
+ hwloc_bitmap_asprintf(&cpuset_string, set);
+ printf("got cpuset %s for device %d\n", cpuset_string, i);
+ free(cpuset_string);
+ }
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,21 @@
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+ACLOCAL_AMFLAGS = -I./config -I./hwloc-tree/config
+
+SUBDIRS = hwloc-tree
+
+AM_CPPFLAGS = $(HWLOC_EMBEDDED_CPPFLAGS)
+
+TESTS = main
+
+noinst_PROGRAMS = main
+noinst_LTLIBRARIES = libdo_test.la
+
+libdo_test_la_SOURCES = do_test.c
+
+main_SOURCES = main.c
+main_LDADD = libdo_test.la $(HWLOC_EMBEDDED_LDADD) $(HWLOC_EMBEDDED_LIBS)
+main_DEPENDENCIES = libdo_test.la
+
+EXTRA_DIST = run-embedded-tests.sh
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/README.txt
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/README.txt (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/README.txt 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,36 @@
+This test is meant to be run manually; it is not part of "make check".
+
+Someday I may figure out how to make this part of "make check", but
+today is not that day. :-)
+
+You can run these tests in one of two ways:
+
+1. PREFERRED METHOD: From this directory, invoke
+ "./run-embedded-tests.sh <path-to-hwloc-tarball>". This will run a
+ battery of tests against that tarball to verify that embedding is
+ working properly from that tarball.
+
+2. MANUAL METHOD: Expand a distribution hwloc tarball in this
+ directory and rename the top-level directory from hwloc-<version>/
+ to hwloc-tree/. Then run ./autogen.sh, ./configure, and make. And
+ whatever other tests you'd like to run.
+
+Things to test (most of which are done in the run-embedded-tests.sh
+script):
+
+ - autogen.sh runs properly and to completion
+ - configure runs properly and to completion (normal, absolute VPATH,
+ and relative VPATH)
+ - make runs properly and to completion
+ - you can run the resulting "./main" executable and it properly shows
+ the hwloc depth of the current machine
+ - make test works
+
+If you look at configure.ac, you see that it uses the HWLOC m4 macros
+to build the hwloc located at hwloc-tree/, and renames all the symbols
+from "hwloc_<foo>" to "mytest_<foo>". The main.c source calls several
+hwloc functions via the "mytest_<foo>" symbols.
+
+Bottom line: if the "main" executable runs and prints the current
+depth (or you can run "make check" successfully), the embedding should
+be working properly.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/autogen.sh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/autogen.sh (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/autogen.sh 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+:
+autoreconf -ivf
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/autogen.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/config/README.txt
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/config/README.txt (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/config/README.txt 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+This file exists solely so that the config/ directory exists in hg and
+git checkouts.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/configure.ac
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/configure.ac (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/configure.ac 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,37 @@
+# Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AC_INIT([hwloc-embedded-test], [1.0], [http://www.open-mpi.org/projects/hwloc/], [hwloc-embedded-test])
+AC_PREREQ([2.63])
+AC_CONFIG_AUX_DIR([./config])
+AC_CONFIG_MACRO_DIR([./config])
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE([1.10 dist-bzip2 foreign subdir-objects tar-ustar -Wall -Werror])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AC_LANG([C])
+
+AC_PROG_CC
+
+cat <<EOF
+
+=== Configuring hwloc (embedded mode)
+EOF
+
+HWLOC_SET_SYMBOL_PREFIX([mytest_])
+HWLOC_SETUP_CORE([hwloc-tree], [hwloc_setup=happy], [hwloc_setup=unhappy])
+AS_IF([test "$hwloc_setup" = "unhappy"],
+ [AC_MSG_ERROR([Cannot build hwloc core])])
+HWLOC_DO_AM_CONDITIONALS
+
+cat <<EOF
+=== Done configuring hwloc (embedded mode)
+
+EOF
+
+AM_ENABLE_SHARED
+AM_DISABLE_STATIC
+AM_PROG_LIBTOOL
+
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/do_test.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/do_test.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/do_test.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,33 @@
+#include <hwloc.h>
+#include <stdio.h>
+
+/* The body of the test is in a separate .c file and a separate
+ library, just to ensure that hwloc didn't force compilation with
+ visibility flags enabled. */
+
+int do_test(void)
+{
+ mytest_hwloc_topology_t topology;
+ unsigned depth;
+ hwloc_bitmap_t cpu_set;
+
+ /* Just call a bunch of functions to see if we can link and run */
+
+ printf("*** Test 1: bitmap alloc\n");
+ cpu_set = mytest_hwloc_bitmap_alloc();
+ if (NULL == cpu_set) return 1;
+ printf("*** Test 2: topology init\n");
+ if (0 != mytest_hwloc_topology_init(&topology)) return 1;
+ printf("*** Test 3: topology load\n");
+ if (0 != mytest_hwloc_topology_load(topology)) return 1;
+ printf("*** Test 4: topology get depth\n");
+ depth = mytest_hwloc_topology_get_depth(topology);
+ if (depth < 0) return 1;
+ printf(" Max depth: %u\n", depth);
+ printf("*** Test 5: topology destroy\n");
+ mytest_hwloc_topology_destroy(topology);
+ printf("*** Test 6: bitmap free\n");
+ mytest_hwloc_bitmap_free(cpu_set);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/main.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/main.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/main.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,21 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+#include <stdio.h>
+
+extern int do_test(void);
+
+
+int main(int argc, char *argv[])
+{
+ /* Make the test be in a separate library that will fail to link
+ properly if hwloc forces compilation with visibility
+ enabled. */
+ return do_test();
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/run-embedded-tests.sh (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/run-embedded-tests.sh 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,133 @@
+#!/bin/bash
+#
+# Copyright © 2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+# Simple script to help test embedding:
+#
+# ./run-embedded-tests.sh <tarball_name>
+#
+
+set -o pipefail
+
+tarball=$1
+if test "$tarball" = ""; then
+ echo "Usage: $0 <tarball_name>"
+ exit 1
+elif test ! -r $tarball; then
+ echo cannot read tarball: $tarball
+ exit 1
+fi
+
+#---------------------------------------------------------------------
+
+i=1
+last_print=
+print() {
+ last_print="=== $i: $*"
+ echo $last_print
+ i=`expr $i + 1`
+}
+
+#---------------------------------------------------------------------
+
+try() {
+ cmd=$*
+ eval $cmd
+ status=$?
+ if test "$status" != "0"; then
+ echo "Command failed (status $status): $cmd"
+ echo "Last print was: $last_print"
+ exit 1
+ fi
+}
+
+#---------------------------------------------------------------------
+
+# $1 = announcement banner
+# $2 = path to configure script
+do_build() {
+ print Running $1 configure...
+ try $2/configure 2>&1 | tee config.out
+ if test "$?" != 0; then exit $?; fi
+
+ print Running make
+ try make 2>&1 | tee make.out
+ if test "$?" != 0; then exit $?; fi
+
+ print Running make check
+ try make check 2>&1 | tee check.out
+ if test "$?" != 0; then exit $?; fi
+
+ print Running make clean
+ try make clean 2>&1 | tee clean.out
+ if test "$?" != 0; then exit $?; fi
+
+ print Running make distclean
+ try make distclean 2>&1 | tee distclean.out
+ if test "$?" != 0; then exit $?; fi
+}
+
+#---------------------------------------------------------------------
+
+# Get tarball name
+print Got tarball: $tarball
+
+# Get the version
+ver=`echo $tarball | sed -e 's/^.*hwloc-//' -e 's/.tar.*$//'`
+print Got version: $ver
+
+# Extract
+print Extracting tarball...
+rm -rf hwloc-$ver
+if test "`echo $tarball | grep .tar.bz2`" != ""; then
+ try tar jxf $tarball
+else
+ try tar zxf $tarball
+fi
+
+print Removing old tree...
+rm -rf hwloc-tree
+mv hwloc-$ver hwloc-tree
+
+# Autogen
+print Running autogen...
+try ./autogen.sh
+
+# Do it normally (non-VPATH)
+do_build non-VPATH .
+
+# Do a VPATH in the same tree that we just setup
+mkdir build
+cd build
+do_build VPATH ..
+
+cd ..
+rm -rf build
+
+# Now whack the tree and do a clean VPATH
+print Re-extracting tarball...
+rm -rf hwloc-$ver
+if test "`echo $tarball | grep .tar.bz2`" != ""; then
+ try tar jxf $tarball
+else
+ try tar zxf $tarball
+fi
+
+print Removing old tree...
+rm -rf hwloc-tree
+mv hwloc-$ver hwloc-tree
+
+# Autogen
+print Running autogen...
+try ./autogen.sh
+
+# Run it again on a clean VPATH
+mkdir build
+cd build
+do_build VPATH-clean ..
+
+cd ..
+rm -rf build
+
+print All tests passed!
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/embedded/run-embedded-tests.sh
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/glibc-sched.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/glibc-sched.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/glibc-sched.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,89 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#define _GNU_SOURCE
+#include <sched.h>
+#include <assert.h>
+#include <private/autogen/config.h> /* for HWLOC_HAVE_OLD_SCHED_SETAFFINITY */
+#include <hwloc.h>
+#include <hwloc/glibc-sched.h>
+
+/* check the linux libnuma helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+#ifdef HWLOC_HAVE_CPU_SET
+ unsigned depth;
+ hwloc_bitmap_t hwlocset;
+ cpu_set_t schedset;
+ hwloc_obj_t obj;
+ int err;
+#endif /* HWLOC_HAVE_CPU_SET */
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+#ifdef HWLOC_HAVE_CPU_SET
+
+ depth = hwloc_topology_get_depth(topology);
+
+ hwlocset = hwloc_bitmap_dup(hwloc_topology_get_complete_cpuset(topology));
+ hwloc_cpuset_to_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+ err = sched_setaffinity(0, sizeof(schedset));
+#else
+ err = sched_setaffinity(0, sizeof(schedset), &schedset);
+#endif
+ assert(!err);
+ hwloc_bitmap_free(hwlocset);
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+ err = sched_getaffinity(0, sizeof(schedset));
+#else
+ err = sched_getaffinity(0, sizeof(schedset), &schedset);
+#endif
+ assert(!err);
+ hwlocset = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
+ assert(hwloc_bitmap_isincluded(hwlocset, hwloc_topology_get_complete_cpuset(topology)));
+ hwloc_bitmap_andnot(hwlocset, hwlocset, hwloc_topology_get_online_cpuset(topology));
+ hwloc_bitmap_andnot(hwlocset, hwlocset, hwloc_topology_get_allowed_cpuset(topology));
+ assert(hwloc_bitmap_iszero(hwlocset));
+ hwloc_bitmap_free(hwlocset);
+
+ obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1) - 1);
+ assert(obj);
+ assert(obj->type == HWLOC_OBJ_PU);
+
+ hwlocset = hwloc_bitmap_dup(obj->cpuset);
+ hwloc_cpuset_to_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+ err = sched_setaffinity(0, sizeof(schedset));
+#else
+ err = sched_setaffinity(0, sizeof(schedset), &schedset);
+#endif
+ assert(!err);
+ hwloc_bitmap_free(hwlocset);
+
+#ifdef HWLOC_HAVE_OLD_SCHED_SETAFFINITY
+ err = sched_getaffinity(0, sizeof(schedset));
+#else
+ err = sched_getaffinity(0, sizeof(schedset), &schedset);
+#endif
+ assert(!err);
+ hwlocset = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_glibc_sched_affinity(topology, hwlocset, &schedset, sizeof(schedset));
+ assert(hwloc_bitmap_isequal(hwlocset, obj->cpuset));
+ hwloc_bitmap_free(hwlocset);
+
+#endif /* HWLOC_HAVE_CPU_SET */
+
+ hwloc_topology_destroy(topology);
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_backends.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+/* mostly useful with valgrind, to check if backend cleanup properly */
+
+int main(void)
+{
+ hwloc_topology_t topology1, topology2;
+ char *xmlbuf;
+ int xmlbuflen;
+ char xmlfile[] = "hwloc_backends.tmpxml.XXXXXX";
+ int xmlbufok = 0, xmlfileok = 0;
+ hwloc_obj_t sw;
+
+ printf("trying to export topology to XML buffer and file for later...\n");
+ hwloc_topology_init(&topology1);
+ hwloc_topology_load(topology1);
+ if (hwloc_topology_export_xmlbuffer(topology1, &xmlbuf, &xmlbuflen) < 0)
+ printf("XML buffer export failed (%s), ignoring\n", strerror(errno));
+ else
+ xmlbufok = 1;
+ mktemp(xmlfile);
+ if (hwloc_topology_export_xml(topology1, xmlfile) < 0)
+ printf("XML file export failed (%s), ignoring\n", strerror(errno));
+ else
+ xmlfileok = 1;
+
+
+ printf("init...\n");
+ hwloc_topology_init(&topology2);
+ if (xmlfileok) {
+ printf("switching to xml...\n");
+ assert(!hwloc_topology_set_xml(topology2, xmlfile));
+ }
+ if (xmlbufok) {
+ printf("switching to xmlbuffer...\n");
+ assert(!hwloc_topology_set_xmlbuffer(topology2, xmlbuf, xmlbuflen));
+ }
+ printf("switching to synthetic...\n");
+ hwloc_topology_set_synthetic(topology2, "machine:2 node:3 cache:2 pu:4");
+ printf("switching to custom...\n");
+ hwloc_topology_set_custom(topology2);
+ printf("switching sysfs fsroot...\n");
+ hwloc_topology_set_fsroot(topology2, "/");
+
+ if (xmlfileok) {
+ printf("switching to xml and loading...\n");
+ assert(!hwloc_topology_set_xml(topology2, xmlfile));
+ hwloc_topology_load(topology2);
+ }
+ if (xmlbufok) {
+ printf("switching to xmlbuffer and loading...\n");
+ assert(!hwloc_topology_set_xmlbuffer(topology2, xmlbuf, xmlbuflen));
+ hwloc_topology_load(topology2);
+ }
+ printf("switching to synthetic and loading...\n");
+ hwloc_topology_set_synthetic(topology2, "machine:2 node:3 cache:2 pu:4");
+ hwloc_topology_load(topology2);
+ printf("switching to custom and loading...\n");
+ hwloc_topology_set_custom(topology2);
+ sw = hwloc_custom_insert_group_object_by_parent(topology2, hwloc_get_root_obj(topology2), 0);
+ assert(sw);
+ hwloc_custom_insert_topology(topology2, sw, topology1, NULL);
+ hwloc_topology_load(topology2);
+ printf("switching sysfs fsroot and loading...\n");
+ hwloc_topology_set_fsroot(topology2, "/");
+ hwloc_topology_load(topology2);
+
+ printf("switching to synthetic...\n");
+ hwloc_topology_set_synthetic(topology2, "machine:2 node:3 cache:2 pu:4");
+
+ hwloc_topology_destroy(topology2);
+
+
+ if (xmlbufok)
+ hwloc_free_xmlbuffer(topology1, xmlbuf);
+ if (xmlfileok)
+ unlink(xmlfile);
+ hwloc_topology_destroy(topology1);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bind.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bind.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,226 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <private/autogen/config.h> /* for HWLOC_WIN_SYS */
+#include <hwloc.h>
+
+/* check the binding functions */
+hwloc_topology_t topology;
+const struct hwloc_topology_support *support;
+
+static void result_set(const char *msg, int err, int supported)
+{
+ const char *errmsg = strerror(errno);
+ if (err)
+ printf("%-40s: %sFAILED (%d, %s)\n", msg, supported?"":"X", errno, errmsg);
+ else
+ printf("%-40s: OK\n", msg);
+}
+
+static void result_get(const char *msg, hwloc_const_bitmap_t expected, hwloc_const_bitmap_t result, int err, int supported)
+{
+ const char *errmsg = strerror(errno);
+ if (err)
+ printf("%-40s: %sFAILED (%d, %s)\n", msg, supported?"":"X", errno, errmsg);
+ else if (!expected || hwloc_bitmap_isequal(expected, result))
+ printf("%-40s: OK\n", msg);
+ else {
+ char *expected_s, *result_s;
+ hwloc_bitmap_asprintf(&expected_s, expected);
+ hwloc_bitmap_asprintf(&result_s, result);
+ printf("%-40s: expected %s, got %s\n", msg, expected_s, result_s);
+ }
+}
+
+static void test(hwloc_const_bitmap_t cpuset, int flags)
+{
+ hwloc_bitmap_t new_cpuset = hwloc_bitmap_alloc();
+ result_set("Bind this singlethreaded process", hwloc_set_cpubind(topology, cpuset, flags), support->cpubind->set_thisproc_cpubind || support->cpubind->set_thisthread_cpubind);
+ result_get("Get this singlethreaded process", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags), support->cpubind->get_thisproc_cpubind || support->cpubind->get_thisthread_cpubind);
+ result_set("Bind this thread", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->set_thisthread_cpubind);
+ result_get("Get this thread", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->get_thisthread_cpubind);
+ result_set("Bind this whole process", hwloc_set_cpubind(topology, cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_thisproc_cpubind);
+ result_get("Get this whole process", cpuset, new_cpuset, hwloc_get_cpubind(topology, new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_thisproc_cpubind);
+
+#ifdef HWLOC_WIN_SYS
+ result_set("Bind process", hwloc_set_proc_cpubind(topology, GetCurrentProcess(), cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_proc_cpubind);
+ result_get("Get process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, GetCurrentProcess(), new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_proc_cpubind);
+ result_set("Bind thread", hwloc_set_thread_cpubind(topology, GetCurrentThread(), cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->set_thread_cpubind);
+ result_get("Get thread", cpuset, new_cpuset, hwloc_get_thread_cpubind(topology, GetCurrentThread(), new_cpuset, flags | HWLOC_CPUBIND_THREAD), support->cpubind->get_thread_cpubind);
+#else /* !HWLOC_WIN_SYS */
+ result_set("Bind whole process", hwloc_set_proc_cpubind(topology, getpid(), cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->set_proc_cpubind);
+ result_get("Get whole process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, getpid(), new_cpuset, flags | HWLOC_CPUBIND_PROCESS), support->cpubind->get_proc_cpubind);
+ result_set("Bind process", hwloc_set_proc_cpubind(topology, getpid(), cpuset, flags), support->cpubind->set_proc_cpubind);
+ result_get("Get process", cpuset, new_cpuset, hwloc_get_proc_cpubind(topology, getpid(), new_cpuset, flags), support->cpubind->get_proc_cpubind);
+#ifdef hwloc_thread_t
+ result_set("Bind thread", hwloc_set_thread_cpubind(topology, pthread_self(), cpuset, flags), support->cpubind->set_thread_cpubind);
+ result_get("Get thread", cpuset, new_cpuset, hwloc_get_thread_cpubind(topology, pthread_self(), new_cpuset, flags), support->cpubind->get_thread_cpubind);
+#endif
+#endif /* !HWLOC_WIN_SYS */
+ printf("\n");
+ hwloc_bitmap_free(new_cpuset);
+}
+
+static void testmem(hwloc_const_bitmap_t nodeset, hwloc_membind_policy_t policy, int flags, int expected)
+{
+ hwloc_bitmap_t new_nodeset = hwloc_bitmap_alloc();
+ hwloc_membind_policy_t newpolicy;
+ void *area;
+ size_t area_size = 1024;
+
+ result_set("Bind this singlethreaded process memory", hwloc_set_membind(topology, nodeset, policy, flags), (support->membind->set_thisproc_membind || support->membind->set_thisthread_membind) && expected);
+ result_get("Get this singlethreaded process memory", nodeset, new_nodeset, hwloc_get_membind(topology, new_nodeset, &newpolicy, flags), (support->membind->get_thisproc_membind || support->membind->get_thisthread_membind) && expected);
+
+ result_set("Bind this thread memory", hwloc_set_membind(topology, nodeset, policy, flags | HWLOC_MEMBIND_THREAD), support->membind->set_thisproc_membind && expected);
+ result_get("Get this thread memory", nodeset, new_nodeset, hwloc_get_membind(topology, new_nodeset, &newpolicy, flags | HWLOC_MEMBIND_THREAD), support->membind->get_thisproc_membind && expected);
+
+ result_set("Bind this whole process memory", hwloc_set_membind(topology, nodeset, policy, flags | HWLOC_MEMBIND_PROCESS), support->membind->set_thisproc_membind && expected);
+ result_get("Get this whole process memory", nodeset, new_nodeset, hwloc_get_membind(topology, new_nodeset, &newpolicy, flags | HWLOC_MEMBIND_PROCESS), support->membind->get_thisproc_membind && expected);
+
+#ifdef HWLOC_WIN_SYS
+ result_set("Bind process memory", hwloc_set_proc_membind(topology, GetCurrentProcess(), nodeset, policy, flags), support->membind->set_proc_membind && expected);
+ result_get("Get process memory", nodeset, new_nodeset, hwloc_get_proc_membind(topology, GetCurrentProcess(), new_nodeset, &newpolicy, flags), support->membind->get_proc_membind && expected);
+#else /* !HWLOC_WIN_SYS */
+ result_set("Bind process memory", hwloc_set_proc_membind(topology, getpid(), nodeset, policy, flags), support->membind->set_proc_membind && expected);
+ result_get("Get process memory", nodeset, new_nodeset, hwloc_get_proc_membind(topology, getpid(), new_nodeset, &newpolicy, flags), support->membind->get_proc_membind && expected);
+#endif /* !HWLOC_WIN_SYS */
+
+ result_set("Bind area", hwloc_set_area_membind(topology, &new_nodeset, sizeof(new_nodeset), nodeset, policy, flags), support->membind->set_area_membind && expected);
+ result_get("Get area", nodeset, new_nodeset, hwloc_get_area_membind(topology, &new_nodeset, sizeof(new_nodeset), new_nodeset, &newpolicy, flags), support->membind->get_area_membind && expected);
+
+ if (!(flags & HWLOC_MEMBIND_MIGRATE)) {
+ result_set("Alloc bound area", (area = hwloc_alloc_membind(topology, area_size, nodeset, policy, flags)) == NULL, (support->membind->alloc_membind && expected) || !(flags & HWLOC_MEMBIND_STRICT));
+ if (area) {
+ memset(area, 0, area_size);
+ result_get("Get bound area", nodeset, new_nodeset, hwloc_get_area_membind(topology, area, area_size, new_nodeset, &newpolicy, flags), support->membind->get_area_membind && expected);
+ result_get("Free bound area", NULL, NULL, hwloc_free(topology, area, area_size), support->membind->alloc_membind && expected);
+ }
+
+ result_set("Alloc bound area through policy", (area = hwloc_alloc_membind_policy(topology, area_size, nodeset, policy, flags)) == NULL, (support->membind->set_thisproc_membind && expected) || !(flags & HWLOC_MEMBIND_STRICT));
+ if (area) {
+ memset(area, 0, area_size);
+ result_get("Get bound area", nodeset, new_nodeset, hwloc_get_area_membind(topology, area, area_size, new_nodeset, &newpolicy, flags), support->membind->get_area_membind && expected);
+ result_get("Free bound area", NULL, NULL, hwloc_free(topology, area, area_size), support->membind->alloc_membind && expected);
+ }
+ }
+ printf("\n");
+ hwloc_bitmap_free(new_nodeset);
+}
+
+static void testmem2(hwloc_const_bitmap_t set, int flags)
+{
+ printf(" default\n");
+ testmem(set, HWLOC_MEMBIND_DEFAULT, flags, 1);
+ printf(" firsttouch\n");
+ testmem(set, HWLOC_MEMBIND_FIRSTTOUCH, flags, support->membind->firsttouch_membind);
+ printf(" bound\n");
+ testmem(set, HWLOC_MEMBIND_BIND, flags, support->membind->bind_membind);
+ printf(" interleave\n");
+ testmem(set, HWLOC_MEMBIND_INTERLEAVE, flags, support->membind->interleave_membind);
+ printf(" replicate\n");
+ testmem(set, HWLOC_MEMBIND_REPLICATE, flags, support->membind->replicate_membind);
+ printf(" nexttouch\n");
+ testmem(set, HWLOC_MEMBIND_NEXTTOUCH, flags, support->membind->nexttouch_membind);
+}
+
+static void testmem3(hwloc_const_bitmap_t set)
+{
+ testmem2(set, 0);
+ printf("now strict\n\n");
+ testmem2(set, HWLOC_MEMBIND_STRICT);
+ printf("now migrate\n\n");
+ testmem2(set, HWLOC_MEMBIND_MIGRATE);
+ printf("now strictly migrate\n\n");
+ testmem2(set, HWLOC_MEMBIND_STRICT | HWLOC_MEMBIND_MIGRATE);
+}
+
+int main(void)
+{
+ hwloc_bitmap_t set;
+ hwloc_obj_t obj;
+ char *str = NULL;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ support = hwloc_topology_get_support(topology);
+
+ obj = hwloc_get_root_obj(topology);
+ set = hwloc_bitmap_dup(obj->cpuset);
+
+ while (hwloc_bitmap_isequal(obj->cpuset, set)) {
+ if (!obj->arity)
+ break;
+ obj = obj->children[0];
+ }
+
+ hwloc_bitmap_asprintf(&str, set);
+ printf("system set is %s\n", str);
+ free(str);
+
+ test(set, 0);
+ printf("now strict\n");
+ test(set, HWLOC_CPUBIND_STRICT);
+
+ hwloc_bitmap_free(set);
+ set = hwloc_bitmap_dup(obj->cpuset);
+ hwloc_bitmap_asprintf(&str, set);
+ printf("obj set is %s\n", str);
+ free(str);
+
+ test(set, 0);
+ printf("now strict\n");
+ test(set, HWLOC_CPUBIND_STRICT);
+
+ hwloc_bitmap_singlify(set);
+ hwloc_bitmap_asprintf(&str, set);
+ printf("singlified to %s\n", str);
+ free(str);
+
+ test(set, 0);
+ printf("now strict\n");
+ test(set, HWLOC_CPUBIND_STRICT);
+ hwloc_bitmap_free(set);
+
+ printf("\n\nmemory tests\n\n");
+ printf("complete node set\n");
+ set = hwloc_bitmap_dup(hwloc_get_root_obj(topology)->cpuset);
+ hwloc_bitmap_asprintf(&str, set);
+ printf("i.e. cpuset %s\n", str);
+ free(str);
+ testmem3(set);
+ hwloc_bitmap_free(set);
+
+ obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, 0);
+ if (obj) {
+ set = hwloc_bitmap_dup(obj->cpuset);
+ hwloc_bitmap_asprintf(&str, set);
+ printf("cpuset set is %s\n", str);
+ free(str);
+
+ testmem3(set);
+
+ obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, 1);
+ if (obj) {
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ hwloc_bitmap_asprintf(&str, set);
+ printf("cpuset set is %s\n", str);
+ free(str);
+
+ testmem3(set);
+ }
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_topology_destroy(topology);
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,146 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <assert.h>
+
+/* check misc bitmap stuff */
+
+int main(void)
+{
+ hwloc_bitmap_t set;
+
+ /* check an empty bitmap */
+ set = hwloc_bitmap_alloc();
+ assert(hwloc_bitmap_to_ulong(set) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == 0UL);
+ /* check a non-empty bitmap */
+ hwloc_bitmap_from_ith_ulong(set, 4, 0xff);
+ assert(hwloc_bitmap_to_ith_ulong(set, 4) == 0xff);
+ assert(hwloc_bitmap_to_ulong(set) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == 0UL);
+ /* check a zeroed bitmap */
+ hwloc_bitmap_zero(set);
+ assert(hwloc_bitmap_to_ulong(set) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 4) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == 0UL);
+ hwloc_bitmap_free(set);
+
+ /* check a full bitmap */
+ set = hwloc_bitmap_alloc_full();
+ assert(hwloc_bitmap_to_ulong(set) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == ~0UL);
+ /* check a almost full bitmap */
+ hwloc_bitmap_set_ith_ulong(set, 4, 0xff);
+ assert(hwloc_bitmap_to_ith_ulong(set, 4) == 0xff);
+ assert(hwloc_bitmap_to_ulong(set) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == ~0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == ~0UL);
+ /* check a almost empty bitmap */
+ hwloc_bitmap_from_ith_ulong(set, 4, 0xff);
+ assert(hwloc_bitmap_to_ith_ulong(set, 4) == 0xff);
+ assert(hwloc_bitmap_to_ulong(set) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0UL);
+ assert(hwloc_bitmap_to_ith_ulong(set, 23) == 0UL);
+ hwloc_bitmap_free(set);
+
+ /* check ranges */
+ set = hwloc_bitmap_alloc();
+ assert(hwloc_bitmap_weight(set) == 0);
+ /* 23-45 */
+ hwloc_bitmap_set_range(set, 23, 45);
+ assert(hwloc_bitmap_weight(set) == 23);
+ /* 23-45,78- */
+ hwloc_bitmap_set_range(set, 78, -1);
+ assert(hwloc_bitmap_weight(set) == -1);
+ /* 23- */
+ hwloc_bitmap_set_range(set, 44, 79);
+ assert(hwloc_bitmap_weight(set) == -1);
+ assert(hwloc_bitmap_first(set) == 23);
+ assert(!hwloc_bitmap_isfull(set));
+ /* 0- */
+ hwloc_bitmap_set_range(set, 0, 22);
+ assert(hwloc_bitmap_weight(set) == -1);
+ assert(hwloc_bitmap_isfull(set));
+ /* 0-34,57- */
+ hwloc_bitmap_clr_range(set, 35, 56);
+ assert(hwloc_bitmap_weight(set) == -1);
+ assert(!hwloc_bitmap_isfull(set));
+ /* 0-34,57 */
+ hwloc_bitmap_clr_range(set, 58, -1);
+ assert(hwloc_bitmap_weight(set) == 36);
+ assert(hwloc_bitmap_last(set) == 57);
+ assert(hwloc_bitmap_next(set, 34) == 57);
+ /* 0-34 */
+ hwloc_bitmap_clr(set, 57);
+ assert(hwloc_bitmap_weight(set) == 35);
+ assert(hwloc_bitmap_last(set) == 34);
+ /* empty */
+ hwloc_bitmap_clr_range(set, 0, 34);
+ assert(hwloc_bitmap_weight(set) == 0);
+ assert(hwloc_bitmap_first(set) == -1);
+ hwloc_bitmap_free(set);
+
+ /* check miscellaneous other functions */
+ set = hwloc_bitmap_alloc();
+ /* from_ulong */
+ hwloc_bitmap_from_ulong(set, 0x0ff0);
+ assert(hwloc_bitmap_first(set) == 4);
+ assert(hwloc_bitmap_last(set) == 11);
+ assert(hwloc_bitmap_weight(set) == 8);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0xff0);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0);
+ /* from_ith_ulong */
+ hwloc_bitmap_zero(set);
+ assert(hwloc_bitmap_weight(set) == 0);
+ hwloc_bitmap_from_ith_ulong(set, 2, 0xff00);
+ assert(hwloc_bitmap_weight(set) == 8);
+ assert(hwloc_bitmap_to_ith_ulong(set, 0) == 0);
+ assert(hwloc_bitmap_to_ith_ulong(set, 1) == 0);
+ assert(hwloc_bitmap_to_ith_ulong(set, 2) == 0xff00);
+ assert(hwloc_bitmap_to_ith_ulong(set, 3) == 0);
+ /* allbut and not */
+ hwloc_bitmap_allbut(set, 153);
+ assert(hwloc_bitmap_weight(set) == -1);
+ hwloc_bitmap_not(set, set);
+ assert(hwloc_bitmap_weight(set) == 1);
+ assert(hwloc_bitmap_first(set) == 153);
+ assert(hwloc_bitmap_last(set) == 153);
+ /* clr_range */
+ hwloc_bitmap_fill(set);
+ hwloc_bitmap_clr_range(set, 178, 3589);
+ hwloc_bitmap_not(set, set);
+ assert(hwloc_bitmap_weight(set) == 3589-178+1);
+ assert(hwloc_bitmap_first(set) == 178);
+ assert(hwloc_bitmap_last(set) == 3589);
+ /* singlify */
+ hwloc_bitmap_zero(set);
+ hwloc_bitmap_set_range(set, 0, 127);
+ assert(hwloc_bitmap_weight(set) == 128);
+ hwloc_bitmap_not(set, set);
+ assert(hwloc_bitmap_weight(set) == -1);
+ hwloc_bitmap_singlify(set);
+ assert(hwloc_bitmap_weight(set) == 1);
+ assert(hwloc_bitmap_first(set) == 128);
+ assert(hwloc_bitmap_last(set) == 128);
+
+ hwloc_bitmap_free(set);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_first_last_weight.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_first_last_weight.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_first_last_weight.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,85 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <assert.h>
+
+/* check hwloc_bitmap_first(), _last(), _next() and _weight() */
+
+int main(void)
+{
+ hwloc_bitmap_t set;
+ int i, cpu, expected_cpu = 0;
+
+ /* empty set */
+ set = hwloc_bitmap_alloc();
+ assert(hwloc_bitmap_first(set) == -1);
+ assert(hwloc_bitmap_last(set) == -1);
+ assert(hwloc_bitmap_next(set, 0) == -1);
+ assert(hwloc_bitmap_next(set, -1) == -1);
+ assert(hwloc_bitmap_weight(set) == 0);
+
+ /* full set */
+ hwloc_bitmap_fill(set);
+ assert(hwloc_bitmap_first(set) == 0);
+ assert(hwloc_bitmap_last(set) == -1);
+ assert(hwloc_bitmap_next(set, -1) == 0);
+ assert(hwloc_bitmap_next(set, 0) == 1);
+ assert(hwloc_bitmap_next(set, 1) == 2);
+ assert(hwloc_bitmap_next(set, 2) == 3);
+ assert(hwloc_bitmap_next(set, 30) == 31);
+ assert(hwloc_bitmap_next(set, 31) == 32);
+ assert(hwloc_bitmap_next(set, 32) == 33);
+ assert(hwloc_bitmap_next(set, 62) == 63);
+ assert(hwloc_bitmap_next(set, 63) == 64);
+ assert(hwloc_bitmap_next(set, 64) == 65);
+ assert(hwloc_bitmap_next(set, 12345) == 12346);
+ assert(hwloc_bitmap_weight(set) == -1);
+
+ /* custom sets */
+ hwloc_bitmap_zero(set);
+ hwloc_bitmap_set_range(set, 36, 59);
+ assert(hwloc_bitmap_first(set) == 36);
+ assert(hwloc_bitmap_last(set) == 59);
+ assert(hwloc_bitmap_next(set, -1) == 36);
+ assert(hwloc_bitmap_next(set, 0) == 36);
+ assert(hwloc_bitmap_next(set, 36) == 37);
+ assert(hwloc_bitmap_next(set, 59) == -1);
+ assert(hwloc_bitmap_weight(set) == 24);
+ hwloc_bitmap_set_range(set, 136, 259);
+ assert(hwloc_bitmap_first(set) == 36);
+ assert(hwloc_bitmap_last(set) == 259);
+ assert(hwloc_bitmap_next(set, 59) == 136);
+ assert(hwloc_bitmap_next(set, 259) == -1);
+ assert(hwloc_bitmap_weight(set) == 148);
+ hwloc_bitmap_clr(set, 199);
+ assert(hwloc_bitmap_first(set) == 36);
+ assert(hwloc_bitmap_last(set) == 259);
+ assert(hwloc_bitmap_next(set, 198) == 200);
+ assert(hwloc_bitmap_next(set, 199) == 200);
+ assert(hwloc_bitmap_weight(set) == 147);
+
+ i = 0;
+ hwloc_bitmap_foreach_begin(cpu, set) {
+ if (0 <= i && i < 24)
+ expected_cpu = i + 36;
+ else if (24 <= i && i < 87)
+ expected_cpu = i + 112;
+ else if (87 <= i && i < 147)
+ expected_cpu = i + 113;
+
+ assert(expected_cpu == cpu);
+
+ i++;
+ } hwloc_bitmap_foreach_end();
+
+ hwloc_bitmap_free(set);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_singlify.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_singlify.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_singlify.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_bitmap_singlify() */
+
+int main(void)
+{
+ hwloc_bitmap_t orig, expected;
+
+ orig = hwloc_bitmap_alloc();
+ expected = hwloc_bitmap_alloc();
+
+ /* empty set gives empty set */
+ hwloc_bitmap_singlify(orig);
+ assert(hwloc_bitmap_iszero(orig));
+
+ /* full set gives first bit only */
+ hwloc_bitmap_fill(orig);
+ hwloc_bitmap_singlify(orig);
+ hwloc_bitmap_zero(expected);
+ hwloc_bitmap_set(expected, 0);
+ assert(hwloc_bitmap_isequal(orig, expected));
+ assert(!hwloc_bitmap_compare(orig, expected));
+
+ /* actual non-trivial set */
+ hwloc_bitmap_zero(orig);
+ hwloc_bitmap_set(orig, 45);
+ hwloc_bitmap_set(orig, 46);
+ hwloc_bitmap_set(orig, 517);
+ hwloc_bitmap_singlify(orig);
+ hwloc_bitmap_zero(expected);
+ hwloc_bitmap_set(expected, 45);
+ assert(hwloc_bitmap_isequal(orig, expected));
+ assert(!hwloc_bitmap_compare(orig, expected));
+
+ hwloc_bitmap_free(orig);
+ hwloc_bitmap_free(expected);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_string.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_string.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_bitmap_string.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,170 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_bitmap_asprintf(), hwloc_obj_cpuset_snprintf() and hwloc_bitmap_sscanf() */
+
+static void check_cpuset(hwloc_bitmap_t set, const char *expected)
+{
+ hwloc_bitmap_t set2 = hwloc_bitmap_alloc();
+ char *string = NULL;
+
+ hwloc_bitmap_asprintf(&string, set);
+ if (expected)
+ assert(!strcmp(string, expected));
+ hwloc_bitmap_sscanf(set2, string);
+ free(string);
+ assert(hwloc_bitmap_isequal(set, set2));
+
+ hwloc_bitmap_list_asprintf(&string, set);
+ hwloc_bitmap_list_sscanf(set2, string);
+ free(string);
+ assert(hwloc_bitmap_isequal(set, set2));
+
+ hwloc_bitmap_taskset_asprintf(&string, set);
+ hwloc_bitmap_taskset_sscanf(set2, string);
+ free(string);
+ assert(hwloc_bitmap_isequal(set, set2));
+
+ hwloc_bitmap_free(set2);
+}
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ unsigned depth;
+ char *string = NULL;
+ int stringlen, len;
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+
+ /* check an empty cpuset */
+ set = hwloc_bitmap_alloc();
+ check_cpuset(set, "0x0");
+ hwloc_bitmap_free(set);
+ printf("empty cpuset converted back and forth, ok\n");
+
+ /* check a full (and infinite) cpuset */
+ set = hwloc_bitmap_alloc_full();
+ check_cpuset(set, "0xf...f");
+ hwloc_bitmap_free(set);
+ printf("full cpuset converted back and forth, ok\n");
+
+ /* check an infinite (but non full) cpuset */
+ set = hwloc_bitmap_alloc_full();
+ hwloc_bitmap_clr(set, 173);
+ hwloc_bitmap_clr_range(set, 60, 70);
+ hwloc_bitmap_asprintf(&string, set);
+ check_cpuset(set, NULL);
+ hwloc_bitmap_free(set);
+ printf("infinite/nonfull cpuset converted back and forth, ok\n");
+
+ /* check an finite cpuset */
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(set, 2);
+ hwloc_bitmap_set_range(set, 67, 70);
+ check_cpuset(set, "0x00000078,,0x00000004");
+ hwloc_bitmap_free(set);
+ printf("finite/nonnull cpuset converted back and forth, ok\n");
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "6 5 4 3 2");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+
+ obj = hwloc_get_root_obj(topology);
+ stringlen = hwloc_bitmap_asprintf(&string, obj->cpuset);
+ printf("system cpuset is %s\n", string);
+ check_cpuset(obj->cpuset, NULL);
+ printf("system cpuset converted back and forth, ok\n");
+
+ printf("truncating system cpuset to NULL buffer\n");
+ len = hwloc_obj_cpuset_snprintf(NULL, 0, 1, &obj);
+ assert(len == stringlen);
+
+ printf("truncating system cpuset to 0 char (no modification)\n");
+ memset(string, 'X', 1);
+ string[1] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 0, 1, &obj);
+ assert(len == stringlen);
+ assert(string[0] == 'X');
+
+ printf("truncating system cpuset to 1 char (empty string)\n");
+ memset(string, 'X', 2);
+ string[2] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 1, 1, &obj);
+ printf("got %s\n", string);
+ assert(len == stringlen);
+ assert(string[0] == 0);
+ assert(string[1] == 'X');
+
+ printf("truncating system cpuset to 10 chars (single 32bit subset except last char)\n");
+ memset(string, 'X', 11);
+ string[11] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 10, 1, &obj);
+ printf("got %s\n", string);
+ assert(len == stringlen);
+ assert(string[8] == 'f');
+ assert(string[9] == 0);
+ assert(string[10] == 'X');
+
+ printf("truncating system cpuset to 11 chars (single 32bit subset)\n");
+ memset(string, 'X', 12);
+ string[12] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 11, 1, &obj);
+ printf("got %s\n", string);
+ assert(len == stringlen);
+ assert(string[9] == 'f');
+ assert(string[10] == 0);
+ assert(string[11] == 'X');
+
+ printf("truncating system cpuset to 23 chars (two 32bit subsets with ending comma)\n");
+ memset(string, 'X', 24);
+ string[24] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 23, 1, &obj);
+ printf("got %s\n", string);
+ assert(len == stringlen);
+ assert(string[20] == 'f');
+ assert(string[21] == ',');
+ assert(string[22] == 0);
+ assert(string[23] == 'X');
+
+ printf("truncating system cpuset to 51 chars (truncate to four and a half 32bit subsets)\n");
+ memset(string, 'X', 52);
+ string[52] = 0;
+ len = hwloc_obj_cpuset_snprintf(string, 51, 1, &obj);
+ printf("got %s\n", string);
+ assert(len == stringlen);
+ assert(string[49] == 'f');
+ assert(string[50] == 0);
+ assert(string[51] == 'X');
+
+ obj = hwloc_get_obj_by_depth(topology, depth-1, 0);
+ hwloc_obj_cpuset_snprintf(string, stringlen+1, 1, &obj);
+ printf("first cpu cpuset is %s\n", string);
+ check_cpuset(obj->cpuset, NULL);
+ printf("first cpu cpuset converted back and forth, ok\n");
+
+ obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1) - 1);
+ hwloc_obj_cpuset_snprintf(string, stringlen+1, 1, &obj);
+ printf("last cpu cpuset is %s\n", string);
+ check_cpuset(obj->cpuset, NULL);
+ printf("last cpu cpuset converted back and forth, ok\n");
+
+ free(string);
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_custom.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,77 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+int main(void)
+{
+ hwloc_topology_t local, global;
+ hwloc_obj_t sw1, sw2, sw11, sw12, sw21, sw22, root;
+
+ printf("Loading the local topology...\n");
+ hwloc_topology_init(&local);
+ hwloc_topology_set_synthetic(local, "n:2 s:2 ca:1 core:2 ca:2 pu:2");
+ hwloc_topology_load(local);
+
+ printf("Creating a custom topology...\n");
+ hwloc_topology_init(&global);
+ hwloc_topology_set_custom(global);
+
+ printf("Inserting the local topology into the global one...\n");
+ root = hwloc_get_root_obj(global);
+
+ sw1 = hwloc_custom_insert_group_object_by_parent(global, root, 0);
+ sw11 = hwloc_custom_insert_group_object_by_parent(global, sw1, 1);
+ hwloc_custom_insert_topology(global, sw11, local, NULL);
+ hwloc_custom_insert_topology(global, sw11, local, NULL);
+ sw12 = hwloc_custom_insert_group_object_by_parent(global, sw1, 1);
+ hwloc_custom_insert_topology(global, sw12, local, NULL);
+ hwloc_custom_insert_topology(global, sw12, local, NULL);
+
+ sw2 = hwloc_custom_insert_group_object_by_parent(global, root, 0);
+ sw21 = hwloc_custom_insert_group_object_by_parent(global, sw2, 1);
+ hwloc_custom_insert_topology(global, sw21, local, NULL);
+ hwloc_custom_insert_topology(global, sw21, local, NULL);
+ sw22 = hwloc_custom_insert_group_object_by_parent(global, sw2, 1);
+ hwloc_custom_insert_topology(global, sw22, local, NULL);
+ hwloc_custom_insert_topology(global, sw22, local, NULL);
+
+ hwloc_topology_destroy(local);
+
+ printf("Building the global topology...\n");
+ hwloc_topology_load(global);
+ hwloc_topology_check(global);
+
+ assert(hwloc_topology_get_depth(global) == 10);
+ assert(hwloc_get_depth_type(global, 0) == HWLOC_OBJ_SYSTEM);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_SYSTEM) == 1);
+ assert(hwloc_get_depth_type(global, 1) == HWLOC_OBJ_GROUP);
+ assert(hwloc_get_nbobjs_by_depth(global, 1) == 2);
+ assert(hwloc_get_depth_type(global, 2) == HWLOC_OBJ_GROUP);
+ assert(hwloc_get_nbobjs_by_depth(global, 2) == 4);
+ assert(hwloc_get_depth_type(global, 3) == HWLOC_OBJ_MACHINE);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_MACHINE) == 8);
+ assert(hwloc_get_depth_type(global, 4) == HWLOC_OBJ_NODE);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_NODE) == 16);
+ assert(hwloc_get_depth_type(global, 5) == HWLOC_OBJ_SOCKET);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_SOCKET) == 32);
+ assert(hwloc_get_depth_type(global, 6) == HWLOC_OBJ_CACHE);
+ assert(hwloc_get_nbobjs_by_depth(global, 6) == 32);
+ assert(hwloc_get_depth_type(global, 7) == HWLOC_OBJ_CORE);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_CORE) == 64);
+ assert(hwloc_get_depth_type(global, 8) == HWLOC_OBJ_CACHE);
+ assert(hwloc_get_nbobjs_by_depth(global, 8) == 128);
+ assert(hwloc_get_depth_type(global, 9) == HWLOC_OBJ_PU);
+ assert(hwloc_get_nbobjs_by_type(global, HWLOC_OBJ_PU) == 256);
+
+ hwloc_topology_destroy(global);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_distances.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_distances.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_distances.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,132 @@
+/*
+ * Copyright © 2010-2011 inria. All rights reserved.
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* test setting/retrieving distances */
+
+static void print_distances(const struct hwloc_distances_s *distances)
+{
+ unsigned nbobjs = distances->nbobjs;
+ unsigned i, j;
+
+ printf(" ");
+ /* column header */
+ for(j=0; j<nbobjs; j++)
+ printf(" % 5d", (int) j);
+ printf("\n");
+
+ /* each line */
+ for(i=0; i<nbobjs; i++) {
+ /* row header */
+ printf("% 5d", (int) i);
+ /* each value */
+ for(j=0; j<nbobjs; j++)
+ printf(" %2.3f", distances->latency[i*nbobjs+j]);
+ printf("\n");
+ }
+}
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ unsigned nbobjs;
+ const struct hwloc_distances_s *distances;
+ float d1, d2;
+ unsigned depth, topodepth, i, j;
+ int err;
+ hwloc_obj_t obj1, obj2;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "node:4 core:4 pu:1");
+ putenv("HWLOC_NUMANode_DISTANCES=0,1,2,3:2*2");
+ putenv("HWLOC_PU_DISTANCES=0-15:4*2*2");
+ hwloc_topology_load(topology);
+
+ topodepth = hwloc_topology_get_depth(topology);
+
+ for(depth=0; depth<topodepth; depth++) {
+ distances = hwloc_get_whole_distance_matrix_by_depth(topology, depth);
+ if (!distances || !distances->latency) {
+ printf("No distance at depth %u\n", depth);
+ continue;
+ }
+
+ printf("distance matrix for depth %u:\n", depth);
+ print_distances(distances);
+ nbobjs = distances->nbobjs;
+
+ obj1 = hwloc_get_obj_by_depth(topology, depth, 0);
+ obj2 = hwloc_get_obj_by_depth(topology, depth, nbobjs-1);
+ err = hwloc_get_latency(topology, obj1, obj2, &d1, &d2);
+ assert(!err);
+ assert(d1 == distances->latency[0*nbobjs+(nbobjs-1)]);
+ assert(d2 == distances->latency[(nbobjs-1)*nbobjs+0]);
+ }
+
+ /* check that hwloc_get_latency works fine on numa distances */
+ distances = hwloc_get_whole_distance_matrix_by_type(topology, HWLOC_OBJ_NODE);
+ if (!distances || !distances->latency) {
+ fprintf(stderr, "No NUMA distance matrix!\n");
+ return -1;
+ }
+ printf("distance matrix for NUMA nodes\n");
+ print_distances(distances);
+ nbobjs = distances->nbobjs;
+ for(i=0; i<nbobjs; i++)
+ for(j=0; j<nbobjs; j++) {
+ obj1 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, i);
+ obj2 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, j);
+ err = hwloc_get_latency(topology, obj1, obj2, &d1, &d2);
+ assert(!err);
+ assert(d1 == distances->latency[i*nbobjs+j]);
+ assert(d2 == distances->latency[j*nbobjs+i]);
+ }
+ /* check that some random values are ok */
+ assert(distances->latency[0] == 1.0); /* diagonal */
+ assert(distances->latency[4] == 4.0); /* same group */
+ assert(distances->latency[6] == 8.0); /* different group */
+ assert(distances->latency[9] == 8.0); /* different group */
+ assert(distances->latency[10] == 1.0); /* diagonal */
+ assert(distances->latency[14] == 4.0); /* same group */
+
+ /* check that hwloc_get_latency works fine on PU distances */
+ distances = hwloc_get_whole_distance_matrix_by_type(topology, HWLOC_OBJ_PU);
+ if (!distances || !distances->latency) {
+ fprintf(stderr, "No PU distance matrix!\n");
+ return -1;
+ }
+ printf("distance matrix for PU nodes\n");
+ print_distances(distances);
+ nbobjs = distances->nbobjs;
+ for(i=0; i<16; i++)
+ for(j=0; j<16; j++) {
+ obj1 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, i);
+ obj2 = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, j);
+ err = hwloc_get_latency(topology, obj1, obj2, &d1, &d2);
+ assert(!err);
+ assert(d1 == distances->latency[i*nbobjs+j]);
+ assert(d2 == distances->latency[j*nbobjs+i]);
+ }
+ /* check that some random values are ok */
+ assert(distances->latency[0] == 1.0); /* diagonal */
+ assert(distances->latency[1] == 2.0); /* same group */
+ assert(distances->latency[3] == 4.0); /* same biggroup */
+ assert(distances->latency[15] == 8.0); /* different biggroup */
+ assert(distances->latency[250] == 8.0); /* different biggroup */
+ assert(distances->latency[253] == 4.0); /* same group */
+ assert(distances->latency[254] == 2.0); /* same biggroup */
+ assert(distances->latency[255] == 1.0); /* diagonal */
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_cache_covering_cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,87 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_get_cache_covering_cpuset() */
+
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj, cache;
+ hwloc_bitmap_t set;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
+ hwloc_topology_load(topology);
+
+ /* check the cache above a given cpu */
+#define CPUINDEX 180
+ set = hwloc_bitmap_alloc();
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ cache = hwloc_get_cache_covering_cpuset(topology, set);
+ assert(cache);
+ assert(cache->type == HWLOC_OBJ_CACHE);
+ assert(cache->logical_index == CPUINDEX/2/3);
+ assert(hwloc_obj_is_in_subtree(topology, obj, cache));
+ hwloc_bitmap_free(set);
+
+ /* check the cache above two nearby cpus */
+#define CPUINDEX1 180
+#define CPUINDEX2 183
+ set = hwloc_bitmap_alloc();
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX1);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX2);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ cache = hwloc_get_cache_covering_cpuset(topology, set);
+ assert(cache);
+ assert(cache->type == HWLOC_OBJ_CACHE);
+ assert(cache->logical_index == CPUINDEX1/2/3);
+ assert(cache->logical_index == CPUINDEX2/2/3);
+ assert(hwloc_obj_is_in_subtree(topology, obj, cache));
+ hwloc_bitmap_free(set);
+
+ /* check no cache above two distant cpus */
+#undef CPUINDEX1
+#define CPUINDEX1 300
+ set = hwloc_bitmap_alloc();
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX1);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX2);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ cache = hwloc_get_cache_covering_cpuset(topology, set);
+ assert(!cache);
+ hwloc_bitmap_free(set);
+
+ /* check no cache above higher level */
+ set = hwloc_bitmap_alloc();
+ obj = hwloc_get_obj_by_depth(topology, 2, 0);
+ assert(obj);
+ hwloc_bitmap_or(set, set, obj->cpuset);
+ cache = hwloc_get_cache_covering_cpuset(topology, set);
+ assert(!cache);
+ hwloc_bitmap_free(set);
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_closest_objs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_closest_objs.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_closest_objs.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * check hwloc_get_closest_objs()
+ *
+ * - get the last object of the last level
+ * - get all closest objects
+ * - get the common ancestor of last level and its less close object.
+ * - check that the ancestor is the system level
+ */
+
+int
+main (void)
+{
+ hwloc_topology_t topology;
+ unsigned depth;
+ hwloc_obj_t last;
+ hwloc_obj_t *closest;
+ unsigned found;
+ int err;
+ unsigned numprocs;
+ hwloc_obj_t ancestor;
+
+ err = hwloc_topology_init (&topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ hwloc_topology_set_synthetic (topology, "2 3 4 5");
+
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ depth = hwloc_topology_get_depth(topology);
+
+ /* get the last object of last level */
+ numprocs = hwloc_get_nbobjs_by_depth(topology, depth-1);
+ last = hwloc_get_obj_by_depth(topology, depth-1, numprocs-1);
+
+ /* allocate the array of closest objects */
+ closest = malloc(numprocs * sizeof(*closest));
+ assert(closest);
+
+ /* get closest levels */
+ found = hwloc_get_closest_objs (topology, last, closest, numprocs);
+ printf("looked for %u closest entries, found %u\n", numprocs, found);
+ assert(found == numprocs-1);
+
+ /* check first found is closest */
+ assert(closest[0] == hwloc_get_obj_by_depth(topology, depth-1, numprocs-5 /* arity is 5 on last level */));
+ /* check some other expected positions */
+ assert(closest[found-1] == hwloc_get_obj_by_depth(topology, depth-1, 1*3*4*5-1 /* last of first half */));
+ assert(closest[found/2-1] == hwloc_get_obj_by_depth(topology, depth-1, 1*3*4*5+2*4*5-1 /* last of second third of second half */));
+ assert(closest[found/2/3-1] == hwloc_get_obj_by_depth(topology, depth-1, 1*3*4*5+2*4*5+3*5-1 /* last of third quarter of third third of second half */));
+
+ /* get ancestor of last and less close object */
+ ancestor = hwloc_get_common_ancestor_obj(topology, last, closest[found-1]);
+ assert(hwloc_obj_is_in_subtree(topology, last, ancestor));
+ assert(hwloc_obj_is_in_subtree(topology, closest[found-1], ancestor));
+ assert(ancestor == hwloc_get_root_obj(topology));
+ printf("ancestor type %u depth %u number %u is system level\n",
+ ancestor->type, ancestor->depth, ancestor->logical_index);
+
+ free(closest);
+ hwloc_topology_destroy (topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_largest_objs_inside_cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,113 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_get_largest_objs_inside_cpuset()
+ * and hwloc_get_first_largest_obj_inside_cpuset()
+ */
+
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
+
+#define GIVEN_LARGESPLIT_CPUSET_STRING "8000,,,,,,,,,,,,,,,,,,,,,,1" /* first and last(735th) bit set */
+#define GIVEN_TOOLARGE_CPUSET_STRING "10000,,,,,,,,,,,,,,,,,,,,,,0" /* 736th bit is too large for the 720-wide topology */
+#define GIVEN_HARD_CPUSET_STRING "07ff,ffffffff,e0000000"
+
+#define OBJ_MAX 16
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ unsigned depth;
+ hwloc_obj_t objs[OBJ_MAX];
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+ int ret;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+
+ /* just get the system object */
+ obj = hwloc_get_root_obj(topology);
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, obj->cpuset, objs, 1);
+ assert(ret == 1);
+ assert(objs[0] == obj);
+ objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, obj->cpuset);
+ assert(objs[0] == obj);
+
+ /* just get the very last object */
+ obj = hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1);
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, obj->cpuset, objs, 1);
+ assert(ret == 1);
+ assert(objs[0] == obj);
+
+ /* try an empty one */
+ set = hwloc_bitmap_alloc();
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
+ assert(ret == 0);
+ objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ assert(objs[0] == NULL);
+ hwloc_bitmap_free(set);
+
+ /* try an impossible one */
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(set, GIVEN_TOOLARGE_CPUSET_STRING);
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
+ assert(ret == -1);
+ objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ assert(objs[0] == NULL);
+ hwloc_bitmap_free(set);
+
+ /* try a harder one with 1 obj instead of 2 needed */
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(set, GIVEN_LARGESPLIT_CPUSET_STRING);
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 1);
+ assert(ret == 1);
+ assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+ objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+ /* try a harder one with lots of objs instead of 2 needed */
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, 2);
+ assert(ret == 2);
+ assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+ assert(objs[1] == hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1));
+ objs[0] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ hwloc_bitmap_andnot(set, set, objs[0]->cpuset);
+ objs[1] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ hwloc_bitmap_andnot(set, set, objs[1]->cpuset);
+ objs[2] = hwloc_get_first_largest_obj_inside_cpuset(topology, set);
+ assert(objs[0] == hwloc_get_obj_by_depth(topology, depth-1, 0));
+ assert(objs[1] == hwloc_get_obj_by_depth(topology, depth-1, hwloc_get_nbobjs_by_depth(topology, depth-1)-1));
+ assert(objs[2] == NULL);
+ assert(hwloc_bitmap_iszero(set));
+ hwloc_bitmap_free(set);
+
+ /* try a very hard one */
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(set, GIVEN_HARD_CPUSET_STRING);
+ ret = hwloc_get_largest_objs_inside_cpuset(topology, set, objs, OBJ_MAX);
+ assert(objs[0] == hwloc_get_obj_by_depth(topology, 5, 29));
+ assert(objs[1] == hwloc_get_obj_by_depth(topology, 3, 5));
+ assert(objs[2] == hwloc_get_obj_by_depth(topology, 3, 6));
+ assert(objs[3] == hwloc_get_obj_by_depth(topology, 3, 7));
+ assert(objs[4] == hwloc_get_obj_by_depth(topology, 2, 2));
+ assert(objs[5] == hwloc_get_obj_by_depth(topology, 4, 36));
+ assert(objs[6] == hwloc_get_obj_by_depth(topology, 5, 74));
+ hwloc_bitmap_free(set);
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_last_cpu_location.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,77 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * Copyright © 2011 Université Bordeaux 1. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <private/autogen/config.h> /* for HWLOC_WIN_SYS */
+#include <hwloc.h>
+
+hwloc_topology_t topology;
+const struct hwloc_topology_support *support;
+
+/* check that a bound process execs on a non-empty cpuset included in the binding */
+static int check(hwloc_const_cpuset_t set, int flags)
+{
+ hwloc_cpuset_t last;
+ int ret;
+
+ ret = hwloc_set_cpubind(topology, set, flags);
+ if (ret)
+ return 0;
+
+ last = hwloc_bitmap_alloc();
+ ret = hwloc_get_last_cpu_location(topology, last, flags);
+ assert(!ret);
+ assert(!hwloc_bitmap_iszero(last));
+ assert(hwloc_bitmap_isincluded(last, set));
+
+ hwloc_bitmap_free(last);
+ return 0;
+}
+
+static int checkall(hwloc_const_cpuset_t set)
+{
+ if (support->cpubind->get_thisthread_last_cpu_location)
+ check(set, HWLOC_CPUBIND_THREAD);
+ if (support->cpubind->get_thisproc_last_cpu_location)
+ check(set, HWLOC_CPUBIND_PROCESS);
+ if (support->cpubind->get_thisthread_last_cpu_location || support->cpubind->get_thisproc_last_cpu_location)
+ check(set, 0);
+ return 0;
+}
+
+int main(void)
+{
+ unsigned depth;
+ hwloc_obj_t obj;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ support = hwloc_topology_get_support(topology);
+
+ /* check at top level */
+ obj = hwloc_get_root_obj(topology);
+ checkall(obj->cpuset);
+
+ depth = hwloc_topology_get_depth(topology);
+ /* check at intermediate level if it exists */
+ if (depth >= 3) {
+ obj = NULL;
+ while ((obj = hwloc_get_next_obj_by_depth(topology, (depth-1)/2, obj)) != NULL)
+ checkall(obj->cpuset);
+ }
+
+ /* check at bottom level */
+ obj = NULL;
+ while ((obj = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_PU, obj)) != NULL)
+ checkall(obj->cpuset);
+
+ hwloc_topology_destroy(topology);
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_next_obj_covering_cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,82 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * check hwloc_get_next_obj_covering_cpuset*()
+ */
+
+int
+main (void)
+{
+ hwloc_topology_t topology;
+ hwloc_bitmap_t set;
+ hwloc_obj_t obj;
+ int depth;
+ int err;
+
+ err = hwloc_topology_init (&topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ set = hwloc_bitmap_alloc();
+
+
+
+ hwloc_topology_set_synthetic (topology, "nodes:8 cores:2 1");
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ hwloc_bitmap_sscanf(set, "00008f18");
+
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, NULL);
+ assert(obj == hwloc_get_obj_by_depth(topology, 1, 1));
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
+ assert(obj == hwloc_get_obj_by_depth(topology, 1, 2));
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
+ assert(obj == hwloc_get_obj_by_depth(topology, 1, 4));
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
+ assert(obj == hwloc_get_obj_by_depth(topology, 1, 5));
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
+ assert(obj == hwloc_get_obj_by_depth(topology, 1, 7));
+ obj = hwloc_get_next_obj_covering_cpuset_by_type(topology, set, HWLOC_OBJ_NODE, obj);
+ assert(!obj);
+
+
+
+ hwloc_topology_set_synthetic (topology, "nodes:2 socket:5 cores:3 4");
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ hwloc_bitmap_sscanf(set, "0ff08000");
+
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+ assert(depth == 2);
+ obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, depth, NULL);
+ assert(obj == hwloc_get_obj_by_depth(topology, depth, 1));
+ obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, depth, obj);
+ assert(obj == hwloc_get_obj_by_depth(topology, depth, 2));
+ obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, depth, obj);
+ assert(!obj);
+
+
+
+ hwloc_bitmap_free(set);
+
+ hwloc_topology_destroy (topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_below_array_by_type.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * check hwloc_get_obj_below_array_by_type()
+ */
+
+int
+main (void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj;
+ hwloc_obj_type_t typev[4];
+ unsigned idxv[4];
+ int err;
+
+ err = hwloc_topology_init (&topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ hwloc_topology_set_synthetic (topology, "node:3 socket:3 core:3 proc:3");
+
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+
+ /* find the first thread */
+ typev[0] = HWLOC_OBJ_NODE; idxv[0] = 0;
+ typev[1] = HWLOC_OBJ_SOCKET; idxv[1] = 0;
+ typev[2] = HWLOC_OBJ_CORE; idxv[2] = 0;
+ typev[3] = HWLOC_OBJ_PU; idxv[3] = 0;
+ obj = hwloc_get_obj_below_array_by_type(topology, 4, typev, idxv);
+ assert(obj == hwloc_get_obj_by_depth(topology, 4, 0));
+
+ /* find the last core */
+ typev[0] = HWLOC_OBJ_NODE; idxv[0] = 2;
+ typev[1] = HWLOC_OBJ_SOCKET; idxv[1] = 2;
+ typev[2] = HWLOC_OBJ_CORE; idxv[2] = 2;
+ obj = hwloc_get_obj_below_array_by_type(topology, 3, typev, idxv);
+ assert(obj == hwloc_get_obj_by_depth(topology, 3, 26));
+
+ /* misc tests */
+
+ typev[0] = HWLOC_OBJ_SOCKET; idxv[0] = 2;
+ obj = hwloc_get_obj_below_array_by_type(topology, 1, typev, idxv);
+ assert(obj == hwloc_get_obj_by_depth(topology, 2, 2));
+
+ typev[0] = HWLOC_OBJ_NODE; idxv[0] = 2;
+ typev[1] = HWLOC_OBJ_CORE; idxv[1] = 2;
+ obj = hwloc_get_obj_below_array_by_type(topology, 2, typev, idxv);
+ assert(obj == hwloc_get_obj_by_depth(topology, 3, 20));
+ /* check that hwloc_get_obj_below_by_type works as well */
+ obj = hwloc_get_obj_below_by_type(topology, typev[0], idxv[0], typev[1], idxv[1]);
+ assert(obj == hwloc_get_obj_by_depth(topology, 3, 20));
+
+ typev[0] = HWLOC_OBJ_SOCKET; idxv[0] = 1;
+ typev[1] = HWLOC_OBJ_PU; idxv[1] = 1;
+ obj = hwloc_get_obj_below_array_by_type(topology, 2, typev, idxv);
+ assert(obj == hwloc_get_obj_by_depth(topology, 4, 10));
+ /* check that hwloc_get_obj_below_by_type works as well */
+ obj = hwloc_get_obj_below_by_type(topology, typev[0], idxv[0], typev[1], idxv[1]);
+ assert(obj == hwloc_get_obj_by_depth(topology, 4, 10));
+
+
+ hwloc_topology_destroy (topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_covering_cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_get_obj_covering_cpuset() */
+
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION "6 5 4 3 2" /* 736bits wide topology */
+
+#define GIVEN_CPUSET_STRING "0x0,0x0fff,0xf0000000"
+#define EXPECTED_CPUSET_STRING "0x0000ffff,0xff000000"
+#define GIVEN_LARGESPLIT_CPUSET_STRING "0x8000,,,,,,,,,,,,,,,,,,,,,,0x1" /* first and last(735th) bit set */
+#define GIVEN_TOOLARGE_CPUSET_STRING "0x10000,,,,,,,,,,,,,,,,,,,,,,0x0" /* 736th bit is too large for the 720-wide topology */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ char *string = NULL;
+ hwloc_obj_t obj;
+ hwloc_bitmap_t set;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
+ hwloc_topology_load(topology);
+ set = hwloc_bitmap_alloc();
+
+ hwloc_bitmap_sscanf(set, GIVEN_CPUSET_STRING);
+ obj = hwloc_get_obj_covering_cpuset(topology, set);
+
+ assert(obj);
+ fprintf(stderr, "found covering object type %s covering cpuset %s\n",
+ hwloc_obj_type_string(obj->type), GIVEN_CPUSET_STRING);
+ assert(hwloc_bitmap_isincluded(set, obj->cpuset));
+
+ hwloc_bitmap_asprintf(&string, obj->cpuset);
+ fprintf(stderr, "covering object of %s is %s, expected %s\n",
+ GIVEN_CPUSET_STRING, string, EXPECTED_CPUSET_STRING);
+ assert(!strcmp(EXPECTED_CPUSET_STRING, string));
+ free(string);
+
+ hwloc_bitmap_sscanf(set, GIVEN_LARGESPLIT_CPUSET_STRING);
+ obj = hwloc_get_obj_covering_cpuset(topology, set);
+ assert(obj == hwloc_get_root_obj(topology));
+ fprintf(stderr, "found system as covering object of first+last cpus cpuset %s\n",
+ GIVEN_LARGESPLIT_CPUSET_STRING);
+
+ hwloc_bitmap_sscanf(set, GIVEN_TOOLARGE_CPUSET_STRING);
+ obj = hwloc_get_obj_covering_cpuset(topology, set);
+ assert(!obj);
+ fprintf(stderr, "found no covering object for too-large cpuset %s\n",
+ GIVEN_TOOLARGE_CPUSET_STRING);
+
+ hwloc_bitmap_free(set);
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_obj_inside_cpuset.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,99 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/*
+ * check hwloc_get_obj_inside_cpuset*()
+ */
+
+int
+main (void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj, root;
+ int err, index;
+
+ err = hwloc_topology_init (&topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ hwloc_topology_set_synthetic (topology, "nodes:2 sockets:3 caches:4 cores:5 6");
+
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ /* there is no second system object */
+ root = hwloc_get_root_obj (topology);
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, 1);
+ assert(!obj);
+
+ /* first system object is the top-level object of the topology */
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_MACHINE, 0);
+ assert(obj == hwloc_get_root_obj(topology));
+
+ /* first next-object object is the top-level object of the topology */
+ obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_MACHINE, NULL);
+ assert(obj == hwloc_get_root_obj(topology));
+ /* there is no next object after the system object */
+ obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SYSTEM, obj);
+ assert(!obj);
+
+ /* check last PU */
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, 2*3*4*5*6-1);
+ assert(obj == hwloc_get_obj_by_depth(topology, 5, 2*3*4*5*6-1));
+ /* there is no next PU after the last one */
+ obj = hwloc_get_next_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, obj);
+ assert(!obj);
+
+
+ /* check there are 20 cores inside first socket */
+ root = hwloc_get_obj_by_depth(topology, 2, 0);
+ assert(hwloc_get_nbobjs_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_CORE) == 20);
+
+ /* check there are 12 caches inside last node */
+ root = hwloc_get_obj_by_depth(topology, 1, 1);
+ assert(hwloc_get_nbobjs_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_CACHE) == 12);
+
+
+ /* check first PU of second socket */
+ root = hwloc_get_obj_by_depth(topology, 2, 1);
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_PU, 0);
+ assert(obj == hwloc_get_obj_by_depth(topology, 5, 4*5*6));
+ index = hwloc_get_obj_index_inside_cpuset(topology, root->cpuset, obj);
+ assert(index == 0);
+
+ /* check third core of third socket */
+ root = hwloc_get_obj_by_depth(topology, 2, 2);
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_CORE, 2);
+ assert(obj == hwloc_get_obj_by_depth(topology, 4, 2*4*5+2));
+ index = hwloc_get_obj_index_inside_cpuset(topology, root->cpuset, obj);
+ assert(index == 2);
+
+ /* check first socket of second node */
+ root = hwloc_get_obj_by_depth(topology, 1, 1);
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_SOCKET, 0);
+ assert(obj == hwloc_get_obj_by_depth(topology, 2, 3));
+ index = hwloc_get_obj_index_inside_cpuset(topology, root->cpuset, obj);
+ assert(index == 0);
+
+ /* there is no node inside sockets */
+ root = hwloc_get_obj_by_depth(topology, 2, 0);
+ obj = hwloc_get_obj_inside_cpuset_by_type(topology, root->cpuset, HWLOC_OBJ_NODE, 0);
+ assert(!obj);
+
+ hwloc_topology_destroy (topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_get_shared_cache_covering_obj.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,78 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check hwloc_get_shared_cache_covering_obj() */
+
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION_SHARED "6 5 4 3 2" /* 736bits wide topology */
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION_NONSHARED "6 5 4 1 2" /* 736bits wide topology */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj, cache;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION_SHARED);
+ hwloc_topology_load(topology);
+
+ /* check the cache above a given cpu */
+#define CPUINDEX 180
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX);
+ assert(obj);
+ cache = hwloc_get_shared_cache_covering_obj(topology, obj);
+ assert(cache);
+ assert(cache->type == HWLOC_OBJ_CACHE);
+ assert(cache->logical_index == CPUINDEX/2/3);
+ assert(hwloc_obj_is_in_subtree(topology, obj, cache));
+
+ /* check no shared cache above the L2 cache */
+ obj = hwloc_get_obj_by_depth(topology, 3, 0);
+ assert(obj);
+ cache = hwloc_get_shared_cache_covering_obj(topology, obj);
+ assert(!cache);
+
+ /* check no shared cache above the node */
+ obj = hwloc_get_obj_by_depth(topology, 1, 0);
+ assert(obj);
+ cache = hwloc_get_shared_cache_covering_obj(topology, obj);
+ assert(!cache);
+
+ hwloc_topology_destroy(topology);
+
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION_NONSHARED);
+ hwloc_topology_load(topology);
+
+ /* check the cache above a given cpu */
+#define CPUINDEX 180
+ obj = hwloc_get_obj_by_depth(topology, 5, CPUINDEX);
+ assert(obj);
+ cache = hwloc_get_shared_cache_covering_obj(topology, obj);
+ assert(cache);
+ assert(cache->type == HWLOC_OBJ_CACHE);
+ assert(cache->logical_index == CPUINDEX/2/1);
+ assert(hwloc_obj_is_in_subtree(topology, obj, cache));
+
+ /* check no shared-cache above the core */
+ obj = hwloc_get_obj_by_depth(topology, 4, CPUINDEX/2);
+ assert(obj);
+ cache = hwloc_get_shared_cache_covering_obj(topology, obj);
+ assert(!cache);
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,100 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* intensive testing of two grouping cases (2+1 and 2+2+1) */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj;
+ unsigned indexes[5];
+ float distances[5*5];
+ unsigned depth;
+ unsigned width;
+
+ /* group 3 numa nodes as 1 group of 2 and 1 on the side */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "node:3 pu:1");
+ indexes[0] = 0; indexes[1] = 1; indexes[2] = 2;
+ distances[0] = 1; distances[1] = 4; distances[2] = 4;
+ distances[3] = 4; distances[4] = 1; distances[5] = 2;
+ distances[6] = 4; distances[7] = 2; distances[8] = 1;
+ hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_PU, 3, indexes, distances);
+ hwloc_topology_load(topology);
+ /* 2 groups at depth 1 */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_GROUP);
+ assert(depth == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, depth);
+ assert(width == 1);
+ /* 3 node at depth 2 */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
+ assert(depth == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, depth);
+ assert(width == 3);
+ /* find the root obj */
+ obj = hwloc_get_root_obj(topology);
+ assert(obj->arity == 2);
+ /* check its children */
+ assert(obj->children[0]->type == HWLOC_OBJ_NODE);
+ assert(obj->children[0]->depth == 2);
+ assert(obj->children[0]->arity == 1);
+ assert(obj->children[1]->type == HWLOC_OBJ_GROUP);
+ assert(obj->children[1]->depth == 1);
+ assert(obj->children[1]->arity == 2);
+ hwloc_topology_destroy(topology);
+
+ /* group 5 sockets as 2 group of 2 and 1 on the side, all of them below a common node object */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "node:1 socket:5 pu:1");
+ indexes[0] = 0; indexes[1] = 1; indexes[2] = 2; indexes[3] = 3; indexes[4] = 4;
+ distances[ 0] = 1; distances[ 1] = 2; distances[ 2] = 4; distances[ 3] = 4; distances[ 4] = 4;
+ distances[ 5] = 2; distances[ 6] = 1; distances[ 7] = 4; distances[ 8] = 4; distances[ 9] = 4;
+ distances[10] = 4; distances[11] = 4; distances[12] = 1; distances[13] = 4; distances[14] = 4;
+ distances[15] = 4; distances[16] = 4; distances[17] = 4; distances[18] = 1; distances[19] = 2;
+ distances[20] = 4; distances[21] = 4; distances[22] = 4; distances[23] = 2; distances[24] = 1;
+ hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_SOCKET, 5, indexes, distances);
+ hwloc_topology_load(topology);
+ /* 1 node at depth 1 */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
+ assert(depth == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, depth);
+ assert(width == 1);
+ /* 2 groups at depth 2 */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_GROUP);
+ assert(depth == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, depth);
+ assert(width == 2);
+ /* 5 sockets at depth 3 */
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET);
+ assert(depth == 3);
+ width = hwloc_get_nbobjs_by_depth(topology, depth);
+ assert(width == 5);
+ /* find the node obj */
+ obj = hwloc_get_root_obj(topology);
+ assert(obj->arity == 1);
+ obj = obj->children[0];
+ assert(obj->type == HWLOC_OBJ_NODE);
+ assert(obj->arity == 3);
+ /* check its children */
+ assert(obj->children[0]->type == HWLOC_OBJ_GROUP);
+ assert(obj->children[0]->depth == 2);
+ assert(obj->children[0]->arity == 2);
+ assert(obj->children[1]->type == HWLOC_OBJ_SOCKET);
+ assert(obj->children[1]->depth == 3);
+ assert(obj->children[1]->arity == 1);
+ assert(obj->children[2]->type == HWLOC_OBJ_GROUP);
+ assert(obj->children[2]->depth == 2);
+ assert(obj->children[2]->arity == 2);
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups2.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups2.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_groups2.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,198 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* testing of adding/replacing/removing distance matrices
+ with set_distance_matrix or the environment,
+ grouping with/without accuracy
+ */
+
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ unsigned indexes[16];
+ float distances[16*16];
+ unsigned i, j;
+ unsigned depth;
+ unsigned width;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "node:2 core:8 pu:1");
+
+ /* default 2*8*1 */
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 16);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 16);
+
+ /* 2*8*1 and group 8cores as 2*2*2 */
+ for(i=0; i<16; i++) {
+ indexes[i] = i;
+ for(j=0; j<16; j++)
+ if (i==j)
+ distances[i+16*j] = distances[j+16*i] = 3;
+ else if (i/2==j/2)
+ distances[i+16*j] = distances[j+16*i] = 5;
+ else if (i/4==j/4)
+ distances[i+16*j] = distances[j+16*i] = 7;
+ else
+ distances[i+16*j] = distances[j+16*i] = 9;
+ }
+ assert(!hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 16, indexes, distances));
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 6);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 4);
+ assert(width == 16);
+
+ /* play with accuracy */
+ distances[0] = 2.9; /* diagonal, instead of 3 (0.0333% error) */
+ distances[1] = 5.1; distances[16] = 5.2; /* smallest group, instead of 5 (0.02% error) */
+ assert(!hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 16, indexes, distances));
+ putenv("HWLOC_GROUPING_ACCURACY=0.1"); /* ok */
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 6);
+ putenv("HWLOC_GROUPING_ACCURACY=try"); /* ok */
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 6);
+ putenv("HWLOC_GROUPING_ACCURACY=0.01"); /* too small, cannot group */
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ putenv("HWLOC_GROUPING_ACCURACY=0"); /* full accuracy, cannot group */
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+
+ /* revert to default 2*8*1 */
+ assert(!hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 0, NULL, NULL));
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 16);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 16);
+
+ /* default 2*4*4 */
+ hwloc_topology_set_synthetic(topology, "node:2 core:4 pu:4");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 32);
+
+ /* 2*4*4 and group 4cores as 2*2 */
+ putenv("HWLOC_Core_DISTANCES=0,1,2,3,4,5,6,7:4*2");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 5);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 4);
+ assert(width == 32);
+
+ /* 2*4*4 and group 4cores as 2*2 and 4PUs as 2*2 */
+ putenv("HWLOC_PU_DISTANCES=0-31:16*2");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 6);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 4);
+ assert(width == 16);
+ width = hwloc_get_nbobjs_by_depth(topology, 5);
+ assert(width == 32);
+
+ /* replace previous core distances with useless ones (grouping as the existing numa nodes) */
+ /* 2*4*4 and group 4PUs as 2*2 */
+ putenv("HWLOC_Core_DISTANCES=0-7:2*4");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 5);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 16);
+ width = hwloc_get_nbobjs_by_depth(topology, 4);
+ assert(width == 32);
+
+ /* clear everything */
+ /* default 2*4*4 */
+ putenv("HWLOC_Core_DISTANCES=none");
+ putenv("HWLOC_PU_DISTANCES=none");
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ width = hwloc_get_nbobjs_by_depth(topology, 0);
+ assert(width == 1);
+ width = hwloc_get_nbobjs_by_depth(topology, 1);
+ assert(width == 2);
+ width = hwloc_get_nbobjs_by_depth(topology, 2);
+ assert(width == 8);
+ width = hwloc_get_nbobjs_by_depth(topology, 3);
+ assert(width == 32);
+
+ /* buggy tests */
+ assert(hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 16, NULL, NULL) < 0);
+ assert(hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 0, indexes, NULL) < 0);
+ indexes[1] = 0;
+ assert(hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 16, indexes, distances) < 0);
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_insert_misc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_insert_misc.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_insert_misc.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,34 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_bitmap_t cpuset;
+ hwloc_obj_t obj;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+ hwloc_topology_check(topology);
+ cpuset = hwloc_bitmap_alloc();
+ hwloc_bitmap_set(cpuset, 0);
+ obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "test");
+ hwloc_bitmap_free(cpuset);
+ hwloc_topology_insert_misc_object_by_parent(topology, obj, "test2");
+ hwloc_topology_check(topology);
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_iodevs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_iodevs.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_iodevs.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+
+#include <assert.h>
+
+/* check misc i/O device related stuff */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_IO);
+ assert(-1 == hwloc_topology_ignore_type(topology, HWLOC_OBJ_PCI_DEVICE));
+ assert(-1 == hwloc_topology_ignore_type_keep_structure(topology, HWLOC_OBJ_BRIDGE));
+ assert(-1 == hwloc_topology_ignore_type(topology, HWLOC_OBJ_OS_DEVICE));
+ hwloc_topology_load(topology);
+
+ printf("Found %d bridges\n", hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_BRIDGE));
+ obj = NULL;
+ while ((obj = hwloc_get_next_bridge(topology, obj)) != NULL) {
+ assert(obj->type == HWLOC_OBJ_BRIDGE);
+ /* only host->pci and pci->pci bridge supported so far */
+ if (obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST) {
+ assert(obj->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI);
+ printf(" Found host->PCI bridge for domain %04x bus %02x-%02x\n",
+ obj->attr->bridge.downstream.pci.domain,
+ obj->attr->bridge.downstream.pci.secondary_bus,
+ obj->attr->bridge.downstream.pci.subordinate_bus);
+ } else {
+ assert(obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_PCI);
+ assert(obj->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI);
+ printf(" Found PCI->PCI bridge [%04x:%04x] for domain %04x bus %02x-%02x\n",
+ obj->attr->bridge.upstream.pci.vendor_id,
+ obj->attr->bridge.upstream.pci.device_id,
+ obj->attr->bridge.downstream.pci.domain,
+ obj->attr->bridge.downstream.pci.secondary_bus,
+ obj->attr->bridge.downstream.pci.subordinate_bus);
+ }
+ }
+
+ printf("Found %d PCI devices\n", hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PCI_DEVICE));
+ obj = NULL;
+ while ((obj = hwloc_get_next_pcidev(topology, obj)) != NULL) {
+ assert(obj->type == HWLOC_OBJ_PCI_DEVICE);
+ printf(" Found PCI device class %04x vendor %04x model %04x\n",
+ obj->attr->pcidev.class_id, obj->attr->pcidev.vendor_id, obj->attr->pcidev.device_id);
+ }
+
+ printf("Found %d OS devices\n", hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_OS_DEVICE));
+ obj = NULL;
+ while ((obj = hwloc_get_next_osdev(topology, obj)) != NULL) {
+ assert(obj->type == HWLOC_OBJ_OS_DEVICE);
+ printf(" Found OS device %s subtype %d\n", obj->name, obj->attr->osdev.type);
+ }
+
+ assert(HWLOC_TYPE_DEPTH_BRIDGE == hwloc_get_type_depth(topology, HWLOC_OBJ_BRIDGE));
+ assert(HWLOC_TYPE_DEPTH_PCI_DEVICE == hwloc_get_type_depth(topology, HWLOC_OBJ_PCI_DEVICE));
+ assert(HWLOC_TYPE_DEPTH_OS_DEVICE == hwloc_get_type_depth(topology, HWLOC_OBJ_OS_DEVICE));
+ assert(hwloc_compare_types(HWLOC_OBJ_BRIDGE, HWLOC_OBJ_PCI_DEVICE) < 0);
+ assert(hwloc_compare_types(HWLOC_OBJ_BRIDGE, HWLOC_OBJ_OS_DEVICE) < 0);
+ assert(hwloc_compare_types(HWLOC_OBJ_PCI_DEVICE, HWLOC_OBJ_OS_DEVICE) < 0);
+
+ /* check that hwloc_get_hostbridge_by_pcibus() and hwloc_get_non_io_ancestor_obj work fine */
+ obj = NULL;
+ while ((obj = hwloc_get_next_pcidev(topology, obj)) != NULL) {
+ assert(hwloc_get_hostbridge_by_pcibus(topology,
+ obj->attr->pcidev.domain,
+ obj->attr->pcidev.bus)->parent
+ == hwloc_get_non_io_ancestor_obj(topology, obj));
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_is_thissystem.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_is_thissystem.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_is_thissystem.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,74 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <assert.h>
+
+/* Check the is_thissystem flag behavior */
+
+static void result(const char *msg, int err)
+{
+ const char *errmsg = strerror(errno);
+ if (err)
+ printf("%-30s: FAILED (%d, %s)\n", msg, errno, errmsg);
+ else
+ printf("%-30s: OK\n", msg);
+}
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_bitmap_t cpuset;
+ int err;
+
+ /* check the OS topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+ assert(hwloc_topology_is_thissystem(topology));
+
+ cpuset = hwloc_bitmap_dup(hwloc_topology_get_complete_cpuset(topology));
+ result("Binding with OS backend", hwloc_set_cpubind(topology, cpuset, 0));
+
+ hwloc_topology_destroy(topology);
+
+ /* We're assume there is a real processor numbered 0 */
+ hwloc_bitmap_zero(cpuset);
+ hwloc_bitmap_set(cpuset, 0);
+
+ /* check a synthetic topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "1");
+ hwloc_topology_load(topology);
+ assert(!hwloc_topology_is_thissystem(topology));
+
+ err = hwloc_set_cpubind(topology, cpuset, 0);
+ result("Binding with synthetic backend", err);
+ assert(!err);
+
+ hwloc_topology_destroy(topology);
+
+ /* check a synthetic topology but assuming it's the system topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM);
+ hwloc_topology_set_synthetic(topology, "1");
+ hwloc_topology_load(topology);
+ assert(hwloc_topology_is_thissystem(topology));
+
+ result("Binding with synthetic backend faking is_thissystem", hwloc_set_cpubind(topology, cpuset, 0));
+
+ hwloc_topology_destroy(topology);
+
+ hwloc_bitmap_free(cpuset);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_obj_infos.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_obj_infos.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_obj_infos.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,41 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <assert.h>
+
+/* check obj infos */
+
+#define NAME1 "foobar"
+#define VALUE1 "myvalue"
+#define NAME2 "foobaz"
+#define VALUE2 "myothervalue"
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_obj_t obj;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ obj = hwloc_get_root_obj(topology);
+
+ if (hwloc_obj_get_info_by_name(obj, NAME1)
+ || hwloc_obj_get_info_by_name(obj, NAME2))
+ return 0;
+
+ hwloc_obj_add_info(obj, NAME1, VALUE1);
+ assert(!hwloc_obj_get_info_by_name(obj, NAME2));
+ hwloc_obj_add_info(obj, NAME2, VALUE2);
+
+ assert(!strcmp(hwloc_obj_get_info_by_name(obj, NAME1), VALUE1));
+ assert(!strcmp(hwloc_obj_get_info_by_name(obj, NAME2), VALUE2));
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_object_userdata.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,48 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check that object userdata is properly initialized */
+
+static void check(hwloc_topology_t topology)
+{
+ unsigned depth;
+ unsigned i,j;
+
+ depth = hwloc_topology_get_depth(topology);
+ for(i=0; i<depth; i++) {
+ for(j=0; j<hwloc_get_nbobjs_by_depth(topology, i); j++) {
+ assert(hwloc_get_obj_by_depth(topology, i, j)->userdata == NULL);
+ }
+ }
+}
+
+int main(void)
+{
+ hwloc_topology_t topology;
+
+ /* check the real topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+ check(topology);
+ hwloc_topology_destroy(topology);
+
+ /* check a synthetic topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "6 5 4 3 2");
+ hwloc_topology_load(topology);
+ check(topology);
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_synthetic.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_synthetic.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_synthetic.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+/* check that object userdata is properly initialized */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ unsigned depth;
+ unsigned i,j, width;
+
+ /* check a synthetic topology */
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "2 3 4 5 6");
+ hwloc_topology_load(topology);
+
+ /* internal checks */
+
+ hwloc_topology_check(topology);
+
+ /* local checks */
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 6);
+
+ width = 1;
+ for(i=0; i<6; i++) {
+ /* check arities */
+ assert(hwloc_get_nbobjs_by_depth(topology, i) == width);
+ for(j=0; j<width; j++) {
+ hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, i, j);
+ assert(obj);
+ assert(obj->arity == (i<5 ? i+2 : 0));
+ }
+ width *= i+2;
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_topology_restrict.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_topology_restrict.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_topology_restrict.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,185 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * Copyright © 2011 Université Bordeaux 1. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+static hwloc_topology_t topology;
+
+static void check(unsigned nbnodes, unsigned nbcores, unsigned nbpus)
+{
+ unsigned depth;
+ unsigned nb;
+ unsigned long long total_memory;
+
+ /* sanity checks */
+ depth = hwloc_topology_get_depth(topology);
+ assert(depth == 4);
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NODE);
+ assert(depth == 1);
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_CORE);
+ assert(depth == 2);
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU);
+ assert(depth == 3);
+
+ /* actual checks */
+ nb = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE);
+ assert(nb == nbnodes);
+ nb = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
+ assert(nb == nbcores);
+ nb = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_PU);
+ assert(nb == nbpus);
+ total_memory = hwloc_get_root_obj(topology)->memory.total_memory;
+ assert(total_memory == nbnodes * 1024*1024*1024); /* synthetic topology puts 1GB per node */
+}
+
+static void check_distances(unsigned nbnodes, unsigned nbcores)
+{
+ const struct hwloc_distances_s *distance;
+
+ /* node distance */
+ distance = hwloc_get_whole_distance_matrix_by_type(topology, HWLOC_OBJ_NODE);
+ if (nbnodes >= 2) {
+ assert(distance);
+ assert(distance->nbobjs == nbnodes);
+ } else {
+ assert(!distance);
+ }
+
+ /* core distance */
+ distance = hwloc_get_whole_distance_matrix_by_type(topology, HWLOC_OBJ_CORE);
+ if (nbcores >= 2) {
+ assert(distance);
+ assert(distance->nbobjs == nbcores);
+ } else {
+ assert(!distance);
+ }
+}
+
+int main(void)
+{
+ hwloc_bitmap_t cpuset = hwloc_bitmap_alloc();
+ unsigned node_indexes[3], core_indexes[6];
+ float node_distances[9], core_distances[36];
+ unsigned i,j;
+ int err;
+
+ for(i=0; i<3; i++) {
+ node_indexes[i] = i;
+ for(j=0; j<3; j++)
+ node_distances[i*3+j] = (i == j ? 10.f : 20.f);
+ }
+ for(i=0; i<6; i++) {
+ core_indexes[i] = i;
+ for(j=0; j<6; j++)
+ core_distances[i*6+j] = (i == j ? 4.f : 8.f);
+ }
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "node:3 core:2 pu:4");
+ hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_NODE, 3, node_indexes, node_distances);
+ hwloc_topology_set_distance_matrix(topology, HWLOC_OBJ_CORE, 6, core_indexes, core_distances);
+ hwloc_topology_load(topology);
+
+ /* entire topology */
+ printf("starting from full topology\n");
+ check(3, 6, 24);
+ check_distances(3, 6);
+
+ /* restrict to nothing, impossible */
+ printf("restricting to nothing, must fail\n");
+ hwloc_bitmap_zero(cpuset);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(err < 0 && errno == EINVAL);
+ check(3, 6, 24);
+ check_distances(3, 6);
+
+ /* restrict to everything, will do nothing */
+ printf("restricting to nothing, does nothing\n");
+ hwloc_bitmap_fill(cpuset);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(!err);
+ check(3, 6, 24);
+ check_distances(3, 6);
+
+ /* remove a single pu (second PU of second core of second node) */
+ printf("removing one PU\n");
+ hwloc_bitmap_fill(cpuset);
+ hwloc_bitmap_clr(cpuset, 13);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(!err);
+ check(3, 6, 23);
+ check_distances(3, 6);
+
+ /* remove the entire second core of first node */
+ printf("removing one core\n");
+ hwloc_bitmap_fill(cpuset);
+ hwloc_bitmap_clr_range(cpuset, 4, 7);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(!err);
+ check(3, 5, 19);
+ check_distances(3, 5);
+
+ /* remove the entire third node */
+ printf("removing one node\n");
+ hwloc_bitmap_fill(cpuset);
+ hwloc_bitmap_clr_range(cpuset, 16, 23);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(!err);
+ check(2, 3, 11);
+ check_distances(2, 3);
+
+ /* restrict to the third node, impossible */
+ printf("restricting to only some already removed node, must fail\n");
+ hwloc_bitmap_zero(cpuset);
+ hwloc_bitmap_set_range(cpuset, 16, 23);
+ err = hwloc_topology_restrict(topology, cpuset, HWLOC_RESTRICT_FLAG_ADAPT_DISTANCES);
+ assert(err == -1 && errno == EINVAL);
+ check(2, 3, 11);
+ check_distances(2, 3);
+
+ /* only keep three PUs (first and last of first core, and last of last core of second node) */
+ printf("restricting to 3 PUs\n");
+ hwloc_bitmap_zero(cpuset);
+ hwloc_bitmap_set(cpuset, 0);
+ hwloc_bitmap_set(cpuset, 3);
+ hwloc_bitmap_set(cpuset, 15);
+ err = hwloc_topology_restrict(topology, cpuset, 0);
+ assert(!err);
+ check(2, 2, 3);
+ check_distances(0, 0);
+
+ /* only keep one PU (last of last core of second node) */
+ printf("restricting to a single PU\n");
+ hwloc_bitmap_zero(cpuset);
+ hwloc_bitmap_set(cpuset, 15);
+ err = hwloc_topology_restrict(topology, cpuset, 0);
+ assert(!err);
+ check(1, 1, 1);
+ check_distances(0, 0);
+
+ hwloc_topology_destroy(topology);
+
+ /* check that restricting exactly on a Misc object keeps things coherent */
+ printf("restricting to a Misc covering only the of the PU level\n");
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, "pu:4");
+ hwloc_topology_load(topology);
+ hwloc_bitmap_zero(cpuset);
+ hwloc_bitmap_set_range(cpuset, 1, 2);
+ hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, "toto");
+ hwloc_topology_restrict(topology, cpuset, 0);
+ hwloc_topology_check(topology);
+ hwloc_topology_destroy(topology);
+
+ hwloc_bitmap_free(cpuset);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_type_depth.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_type_depth.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/hwloc_type_depth.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,56 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdio.h>
+#include <assert.h>
+
+/* check topo_get_type{,_or_above,_or_below}_depth()
+ * and hwloc_get_depth_type()
+ */
+
+#define SYNTHETIC_TOPOLOGY_DESCRIPTION "machine:3 group:2 group:2 core:3 cache:2 cache:2 2"
+
+int main(void)
+{
+ hwloc_topology_t topology;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_synthetic(topology, SYNTHETIC_TOPOLOGY_DESCRIPTION);
+ hwloc_topology_load(topology);
+
+ assert(hwloc_topology_get_depth(topology) == 8);
+
+ assert(hwloc_get_depth_type(topology, 0) == HWLOC_OBJ_SYSTEM);
+ assert(hwloc_get_depth_type(topology, 1) == HWLOC_OBJ_MACHINE);
+ assert(hwloc_get_depth_type(topology, 2) == HWLOC_OBJ_GROUP);
+ assert(hwloc_get_depth_type(topology, 3) == HWLOC_OBJ_GROUP);
+ assert(hwloc_get_depth_type(topology, 4) == HWLOC_OBJ_CORE);
+ assert(hwloc_get_depth_type(topology, 5) == HWLOC_OBJ_CACHE);
+ assert(hwloc_get_depth_type(topology, 6) == HWLOC_OBJ_CACHE);
+ assert(hwloc_get_depth_type(topology, 7) == HWLOC_OBJ_PU);
+
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_MACHINE) == 1);
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_CORE) == 4);
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_PU) == 7);
+
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_NODE) == HWLOC_TYPE_DEPTH_UNKNOWN);
+ assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_NODE) == 3);
+ assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_NODE) == 4);
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_SOCKET) == HWLOC_TYPE_DEPTH_UNKNOWN);
+ assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_SOCKET) == 3);
+ assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_SOCKET) == 4);
+ assert(hwloc_get_type_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);
+ assert(hwloc_get_type_or_above_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);
+ assert(hwloc_get_type_or_below_depth(topology, HWLOC_OBJ_CACHE) == HWLOC_TYPE_DEPTH_MULTIPLE);
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,363 @@
+Machine (P#0 total=1609512816KB Backend=Linux)
+ NUMANode L#0 (P#0 local=100057088KB total=100057088KB)
+ Socket L#0 (P#0 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ Socket L#1 (P#1 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ Socket L#2 (P#256 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ Socket L#3 (P#257 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+ NUMANode L#1 (P#1 local=100073472KB total=100073472KB)
+ Socket L#4 (P#65536 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#8 (P#0)
+ PU L#8 (P#8)
+ Core L#9 (P#1)
+ PU L#9 (P#9)
+ Socket L#5 (P#65537 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#10 (P#0)
+ PU L#10 (P#10)
+ Core L#11 (P#1)
+ PU L#11 (P#11)
+ Socket L#6 (P#65792 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ Core L#13 (P#1)
+ PU L#13 (P#13)
+ Socket L#7 (P#65793 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#14 (P#0)
+ PU L#14 (P#14)
+ Core L#15 (P#1)
+ PU L#15 (P#15)
+ NUMANode L#2 (P#2 local=100597760KB total=100597760KB)
+ Socket L#8 (P#131072 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#16 (P#0)
+ PU L#16 (P#16)
+ Core L#17 (P#1)
+ PU L#17 (P#17)
+ Socket L#9 (P#131073 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#18 (P#0)
+ PU L#18 (P#18)
+ Core L#19 (P#1)
+ PU L#19 (P#19)
+ Socket L#10 (P#131328 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#20 (P#0)
+ PU L#20 (P#20)
+ Core L#21 (P#1)
+ PU L#21 (P#21)
+ Socket L#11 (P#131329 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#22 (P#0)
+ PU L#22 (P#22)
+ Core L#23 (P#1)
+ PU L#23 (P#23)
+ NUMANode L#3 (P#3 local=100597760KB total=100597760KB)
+ Socket L#12 (P#196608 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#24 (P#0)
+ PU L#24 (P#24)
+ Core L#25 (P#1)
+ PU L#25 (P#25)
+ Socket L#13 (P#196609 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#26 (P#0)
+ PU L#26 (P#26)
+ Core L#27 (P#1)
+ PU L#27 (P#27)
+ Socket L#14 (P#196864 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#28 (P#0)
+ PU L#28 (P#28)
+ Core L#29 (P#1)
+ PU L#29 (P#29)
+ Socket L#15 (P#196865 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#30 (P#0)
+ PU L#30 (P#30)
+ Core L#31 (P#1)
+ PU L#31 (P#31)
+ NUMANode L#4 (P#4 local=100597760KB total=100597760KB)
+ Socket L#16 (P#262144 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#32 (P#0)
+ PU L#32 (P#32)
+ Core L#33 (P#1)
+ PU L#33 (P#33)
+ Socket L#17 (P#262145 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#34 (P#0)
+ PU L#34 (P#34)
+ Core L#35 (P#1)
+ PU L#35 (P#35)
+ Socket L#18 (P#262400 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#36 (P#0)
+ PU L#36 (P#36)
+ Core L#37 (P#1)
+ PU L#37 (P#37)
+ Socket L#19 (P#262401 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#38 (P#0)
+ PU L#38 (P#38)
+ Core L#39 (P#1)
+ PU L#39 (P#39)
+ NUMANode L#5 (P#5 local=100597760KB total=100597760KB)
+ Socket L#20 (P#327680 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#40 (P#0)
+ PU L#40 (P#40)
+ Core L#41 (P#1)
+ PU L#41 (P#41)
+ Socket L#21 (P#327681 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#42 (P#0)
+ PU L#42 (P#42)
+ Core L#43 (P#1)
+ PU L#43 (P#43)
+ Socket L#22 (P#327936 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#44 (P#0)
+ PU L#44 (P#44)
+ Core L#45 (P#1)
+ PU L#45 (P#45)
+ Socket L#23 (P#327937 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#46 (P#0)
+ PU L#46 (P#46)
+ Core L#47 (P#1)
+ PU L#47 (P#47)
+ NUMANode L#6 (P#6 local=100597760KB total=100597760KB)
+ Socket L#24 (P#393216 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#48 (P#0)
+ PU L#48 (P#48)
+ Core L#49 (P#1)
+ PU L#49 (P#49)
+ Socket L#25 (P#393217 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#50 (P#0)
+ PU L#50 (P#50)
+ Core L#51 (P#1)
+ PU L#51 (P#51)
+ Socket L#26 (P#393472 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#52 (P#0)
+ PU L#52 (P#52)
+ Core L#53 (P#1)
+ PU L#53 (P#53)
+ Socket L#27 (P#393473 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#54 (P#0)
+ PU L#54 (P#54)
+ Core L#55 (P#1)
+ PU L#55 (P#55)
+ NUMANode L#7 (P#7 local=100597728KB total=100597728KB)
+ Socket L#28 (P#458752 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#56 (P#0)
+ PU L#56 (P#56)
+ Core L#57 (P#1)
+ PU L#57 (P#57)
+ Socket L#29 (P#458753 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#58 (P#0)
+ PU L#58 (P#58)
+ Core L#59 (P#1)
+ PU L#59 (P#59)
+ Socket L#30 (P#459008 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#60 (P#0)
+ PU L#60 (P#60)
+ Core L#61 (P#1)
+ PU L#61 (P#61)
+ Socket L#31 (P#459009 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#62 (P#0)
+ PU L#62 (P#62)
+ Core L#63 (P#1)
+ PU L#63 (P#63)
+ NUMANode L#8 (P#8 local=100597760KB total=100597760KB)
+ Socket L#32 (P#524288 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#64 (P#0)
+ PU L#64 (P#64)
+ Core L#65 (P#1)
+ PU L#65 (P#65)
+ Socket L#33 (P#524289 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#66 (P#0)
+ PU L#66 (P#66)
+ Core L#67 (P#1)
+ PU L#67 (P#67)
+ Socket L#34 (P#524544 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#68 (P#0)
+ PU L#68 (P#68)
+ Core L#69 (P#1)
+ PU L#69 (P#69)
+ Socket L#35 (P#524545 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#70 (P#0)
+ PU L#70 (P#70)
+ Core L#71 (P#1)
+ PU L#71 (P#71)
+ NUMANode L#9 (P#9 local=100597760KB total=100597760KB)
+ Socket L#36 (P#589824 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#72 (P#0)
+ PU L#72 (P#72)
+ Core L#73 (P#1)
+ PU L#73 (P#73)
+ Socket L#37 (P#589825 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#74 (P#0)
+ PU L#74 (P#74)
+ Core L#75 (P#1)
+ PU L#75 (P#75)
+ Socket L#38 (P#590080 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#76 (P#0)
+ PU L#76 (P#76)
+ Core L#77 (P#1)
+ PU L#77 (P#77)
+ Socket L#39 (P#590081 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#78 (P#0)
+ PU L#78 (P#78)
+ Core L#79 (P#1)
+ PU L#79 (P#79)
+ NUMANode L#10 (P#10 local=100597760KB total=100597760KB)
+ Socket L#40 (P#655360 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#80 (P#0)
+ PU L#80 (P#80)
+ Core L#81 (P#1)
+ PU L#81 (P#81)
+ Socket L#41 (P#655361 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#82 (P#0)
+ PU L#82 (P#82)
+ Core L#83 (P#1)
+ PU L#83 (P#83)
+ Socket L#42 (P#655616 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#84 (P#0)
+ PU L#84 (P#84)
+ Core L#85 (P#1)
+ PU L#85 (P#85)
+ Socket L#43 (P#655617 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#86 (P#0)
+ PU L#86 (P#86)
+ Core L#87 (P#1)
+ PU L#87 (P#87)
+ NUMANode L#11 (P#11 local=100597760KB total=100597760KB)
+ Socket L#44 (P#720896 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#88 (P#0)
+ PU L#88 (P#88)
+ Core L#89 (P#1)
+ PU L#89 (P#89)
+ Socket L#45 (P#720897 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#90 (P#0)
+ PU L#90 (P#90)
+ Core L#91 (P#1)
+ PU L#91 (P#91)
+ Socket L#46 (P#721152 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#92 (P#0)
+ PU L#92 (P#92)
+ Core L#93 (P#1)
+ PU L#93 (P#93)
+ Socket L#47 (P#721153 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#94 (P#0)
+ PU L#94 (P#94)
+ Core L#95 (P#1)
+ PU L#95 (P#95)
+ NUMANode L#12 (P#12 local=100597760KB total=100597760KB)
+ Socket L#48 (P#786432 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#96 (P#0)
+ PU L#96 (P#96)
+ Core L#97 (P#1)
+ PU L#97 (P#97)
+ Socket L#49 (P#786433 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#98 (P#0)
+ PU L#98 (P#98)
+ Core L#99 (P#1)
+ PU L#99 (P#99)
+ Socket L#50 (P#786688 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#100 (P#0)
+ PU L#100 (P#100)
+ Core L#101 (P#1)
+ PU L#101 (P#101)
+ Socket L#51 (P#786689 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#102 (P#0)
+ PU L#102 (P#102)
+ Core L#103 (P#1)
+ PU L#103 (P#103)
+ NUMANode L#13 (P#13 local=100597744KB total=100597744KB)
+ Socket L#52 (P#851968 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#104 (P#0)
+ PU L#104 (P#104)
+ Core L#105 (P#1)
+ PU L#105 (P#105)
+ Socket L#53 (P#851969 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#106 (P#0)
+ PU L#106 (P#106)
+ Core L#107 (P#1)
+ PU L#107 (P#107)
+ Socket L#54 (P#852224 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#108 (P#0)
+ PU L#108 (P#108)
+ Core L#109 (P#1)
+ PU L#109 (P#109)
+ Socket L#55 (P#852225 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#110 (P#0)
+ PU L#110 (P#110)
+ Core L#111 (P#1)
+ PU L#111 (P#111)
+ NUMANode L#14 (P#14 local=100597760KB total=100597760KB)
+ Socket L#56 (P#917504 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#112 (P#0)
+ PU L#112 (P#112)
+ Core L#113 (P#1)
+ PU L#113 (P#113)
+ Socket L#57 (P#917505 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#114 (P#0)
+ PU L#114 (P#114)
+ Core L#115 (P#1)
+ PU L#115 (P#115)
+ Socket L#58 (P#917760 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#116 (P#0)
+ PU L#116 (P#116)
+ Core L#117 (P#1)
+ PU L#117 (P#117)
+ Socket L#59 (P#917761 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#118 (P#0)
+ PU L#118 (P#118)
+ Core L#119 (P#1)
+ PU L#119 (P#119)
+ NUMANode L#15 (P#15 local=100591248KB total=100591248KB)
+ Socket L#60 (P#983040 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#120 (P#0)
+ PU L#120 (P#120)
+ Core L#121 (P#1)
+ PU L#121 (P#121)
+ Socket L#61 (P#983041 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#122 (P#0)
+ PU L#122 (P#122)
+ Core L#123 (P#1)
+ PU L#123 (P#123)
+ Socket L#62 (P#983296 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#124 (P#0)
+ PU L#124 (P#124)
+ Core L#125 (P#1)
+ PU L#125 (P#125)
+ Socket L#63 (P#983297 CPUModel="Dual-Core Intel(R) Itanium(R) Processor 9140N")
+ Core L#126 (P#0)
+ PU L#126 (P#126)
+ Core L#127 (P#1)
+ PU L#127 (P#127)
+ NUMANode L#16 (P#16 local=1020176KB total=1020176KB)
+depth 0: 1 Machine (type #1)
+ depth 1: 17 NUMANodes (type #2)
+ depth 2: 64 Sockets (type #3)
+ depth 3: 128 Cores (type #5)
+ depth 4: 128 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ 0 1.000 1.700 1.700 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 1 1.700 1.000 1.700 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 2 1.700 1.700 1.000 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 3 1.700 1.700 1.700 1.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 4 2.000 2.000 2.000 2.000 1.000 1.700 1.700 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 5 2.000 2.000 2.000 2.000 1.700 1.000 1.700 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 6 2.000 2.000 2.000 2.000 1.700 1.700 1.000 1.700 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 7 2.000 2.000 2.000 2.000 1.700 1.700 1.700 1.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.400
+ 8 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.000 1.700 1.700 1.700 2.000 2.000 2.000 2.000 1.400
+ 9 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.000 1.700 1.700 2.000 2.000 2.000 2.000 1.400
+ 10 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.700 1.000 1.700 2.000 2.000 2.000 2.000 1.400
+ 11 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.700 1.700 1.000 2.000 2.000 2.000 2.000 1.400
+ 12 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.000 1.700 1.700 1.700 1.400
+ 13 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.000 1.700 1.700 1.400
+ 14 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.700 1.000 1.700 1.400
+ 15 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.700 1.700 1.700 1.000 1.400
+ 16 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.400 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/128ia64-17n4s2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,158 @@
+BZh91AY&SY
+kþªïÿÿÿßüÿÿ÷=ï_ÿïÿòÔ8 ÔǸ`Þà ð À Ø dRT»e)(£
+`Ý0ÝÍsp^h¾[[d
]½Æ{í_Qð }$ / óâÛ ÎíàìÚØ6ÀÁÅÀÀ A*8c|hôÈø ù¹k/ ¡;2-äqàÇ»:d&Îìj 7s ª¤ <\çoë ú¾÷`Áw Ñ!@d:E;°z èx]È ±°ZÑ´ÖÔ×>
° ` ~¦=)T¦¨ÐÐÀ ha ÀL10#L1*Ô¿jªTÿILê ª~ ªDIMTÓ
+2@ @mM©TÓF¢§yI Ri14Òaj=OHõ@f õ¨Ú¦PÄ@IÔÚA A$ Jjê4zOH< Ð
+ ?d¯Ù+¤Åê+T°V©5?X®&©51?\¬+TªZÔÄ"¿ÎPèWi\)1R\)8Rj
&§ñrRrRbLöÊæV)1I¨¯Ã]kS_è®IÉ8Ep´'j`,á²û¤üó$"H$"H$"H$"H$"HÉD$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$ID$IEf1É2ªwQ^EÛTªX«QQ1óHóë§èè9D»(Tùî·ü
þE®ÏÞ0óÙ#îg%îg=Ï!³àö}Ñ÷7[æðW>Ì»<˹ä\÷3gÙÆÞæ{·vT«°í%6yM{sìb³Ù}xq"JF;¸o7HÄϸpc®÷"6ï|ÀXl=w:_B½hbF÷ hôpåÜ0ÃF¼Ã*AnáÄ8páÔûï¢|ôzv°Ã¼Àz=$zHÞú=ìaÃäz1#7#ZM.æÆGy¡¸HDZ8ö
=Çã^X¬L;òB¸ìjJÇÂ{óqÜrD®;Ë·Alu<wqcØ;'ǼØÔ2¶bØm×±=6²«ë»·vîIné5µ÷nìªåºîíݨ$S®îÝÉMË[»äÝ»·vîÃ{nîÝÙUËuÝÛ»wNÙí·wníÝm¶îíÝ»©;V·wnìªåºîíÝ»©«nîÝÛ»wníÜ÷[båVëÍÅË.뻤ÖÖªåºîíݨN»¹$ÝÛ»wníÜÝÛ»w[m¹UËuÝÛ»*¹nª:Éqn8ÇÓvIwníu½R[ql'Û»rK·vîÝÛ»[jI%ovîÜíÝ»·WnÝÛ»tî¶ÍÛwnìîÝÛ»wdLIÝ»·vIÝ»µÖL¶öîÝÛ]»·vîÝÛä»»»wníÝ»·và±d½;·:ÚJnÝÛa>IníÝ»·v¶É×T[u×níݹ%ÚëzÛm©-»·vîÝØíÉ··%»q3§j¦&nA]i3M4Ó6I-Í13M0¤ë¬ÓhÝM13M4ܤRéÓ´Û;TÙ-Í4ÄÍ4ÓLÙ-Í4ÓM0«4yܱæw^äÜmºgu\IÊ©¦bgj¦m²fiÍ×nÛgaµÄù¶j-¶°mÛv íÛdÛmHÛ
+³#»±7y¶Øml6l-ïH÷ÕÜ9Ú=õ׿Øm¨¶Ø]Ø]pgm»vÃm²KaÝÐîfGwbn'mÛ6ØmÝøwmlm³&mÔ¡;\4IØ+´lÎÃkól6Ô[l7a6Á¶&ìAÛ
+¶É-wB;¸mݸ¶lHÛa¶'m·l7v´Wn׿Øm¨¾Û
+÷Ñ6Á¶&ïH÷ß}ûîõ/}÷ß}Ô°Û2;»z{Ò}÷ßpÛ6Øm²´Wn׿Øm¨¶û;½ôO}ô3¶ÄÝ;Ü6Û$¶ÛjFØm½#mé7¶Øm½#ß}ô{ì _v6m´jâ2è$ëpmÍ©"pÃe½ØaoǰÛcÝÝÂØm¨½ ÎÜ3;
+®'ͰÛQm°ÝÛhرl6Û$¶ÛjFØmݻͶÃlHÛa°pt×îÔRò>¥Ï$FñÔE{´uB
+Lô=Ó£LÎFÐ^rTóì[±¥)löìM+wn×cáØm¨¶ØnÂm´KlMضm;mµ#l6ÌîÄÝæÛa¶$m°ÚÞgn×cáØm¨¶ØnÂm
´KlMضm[mµ#l6ÌîÄÝæÛa¶$m°Û·lºéº®Õíy·w_}öÏuÚÛskdäíÖm[ãswu~ûï_zûéÚÛm·ÝÖmfÕ¾w97YµJVÛÛ¬ÚͬÚì©÷uYµ{^mÝÖmfÕívMÖmfÖmx÷wuYµ^=ÍÇÜäÝfÖm[ãswuYµRmæßwYµYµYµT¥²Vøönî¢Ìç^mÝÖml¯[wuYµìe6÷u^mÆÝÝfÖmfÖm[nmfÖmx÷wuoÎMÖmfÕíy·wT¸mÒ &w yàxx at YTªZ
Êe0ÆYi¥i¦ÓM4²Í¥i¦YfZi¦iY¦Ye¥i¦i¥)Ri¦i¦Zi¦¦¥)M4ÔÒÓKM,³M6i¦m,ÓK,´ÓM4ÒÓK4ÓKM4³M-4¥4ÒÓM4ÓKM,ÓM-4ÒͲ)áðùàöH ÌRI$¯ØÑZíWnîî¶I%ºIu5hßUm¶Ù$m¦äi#Y$òÈLM´|Þ >;Á¯I%ÏFJ×j»wwu²I-ÒK©«Fú«m¶É#m7#IÉ'Dbm£æð;Á2oI%ÏF]ÝÝÝm¶Ù$ô2]"Zu¶Ûm²HÛMÈÒFyå²$j¢(xIðÄ«M¶Ão¤Ö#kkºw.ëm¶É$·¤X«ÕÛm¶Û$´Ü$k)$¹èÒI$mÒ'À@' Þ
+x¤I.z4b]Ý;u¶Ûd[ÒK©«Fú«m¶É#m7#IÉ'Dbm¢0ùÄÀ
â Ïäw>¼î©[R]o¸J
+Vµj2 )v5$Yù¥"Ûm¶ÚQ»t1æÒém¶ÛmFå¢X$mÖÖ¦IÃä|*DI¢E x7qI$\^(wwwu¶ÛdWÐÇK¥¶Ûm¶I8ÚIÉ9dI$ÅDp$WI"§STUd½Òä&>nXÛ·`ÈQ ÄrIfÚo£Jg7wwu¶Ûe¶Þ®ÍTs¶ÛkA#r8Ú$Ö{& L®GÂ
*=½½½½òW2ír$HHÕQQ$e45Nnµw²îîFÛâÚiR±'wtIS;±ªêR7%ªÉ×¹séÖIÜû»£IèÒkÚØÛ³Ý:÷n§Íé-·k;»ZßuîIÝkêøNæ¤-ZÃ#»+
+Ör«pmÛ&âU´rîIA{§rI4ºÙ©-§mµw% mÄëºÚM·wrJñëjJÛmUÔjØj¶Ù$ëÝÝÖ¾mñ<ºÛÝÝÝÏ¥ÍÛu¤Óîîîm½¶ÛfÛÛ±ÛfÛÛm¶1iÒ%Ýowu²N¶ÖèçxÚß[hV¥-mFìjI&m÷uµ)Ù¾ÛZZv-½ÐHûëÒ>Ø7g¯AsÛi¶Ûnîê$]]¹ºzMÛ±Ól÷,µ=ÛÍ"¡ÛnæºÝ+ÒµvE´y]¬KdõÛ«ìÒOt廿×[æÊíµH6í¹íNôW7פ[1 È ¨«æi¤d¶I4I-ÆâJ4Ûm¶
m·$©lQ¥c¤I)FÑ&ªÖÒ&¤«m $ðkÅ$IsÑ£îéÜ»¶Û$Þ]MZ7Õ[m¶Ii¹HÏI'Drm¢0ÃÉ$¬Í)ëm¶ÛjµFÕº%ÒÛm¶Û$¹I$¸Òç£I%J<# C¤J²^iH§[m¶ÛUª6Ô¬¹.Ûm¶Ù$eÈI$k'DJQF çx0¼RI$¸7R)ÖÛm¶Õj«{rmr]-¶Ûm²HË4HÖO,$¢$$æ$x)$\Ém-¨ÉªÔ¤RÛm¶ÛUªI-²KÕwrUÌßUºñçÜbu´¬¶Ûm¶É$¶ÚÝI§$ÛD¤¬Ë4ÛM¢I$-¦iIà$ø|áæî)$\Éy¥"m¶Ûm¶I%}y´º[m¶Ûd¹¤¬YI&&Ú#'Îð`¼CÅx¤Is%æu¶ÛmµZ£jÞ¥eÉt¶Ûm¶É#.@ÒI#±©$ÌÍ)ÖÛm¶ÛdW¡6Km¶Ûl7 q´5ËãîñÂóK½Ï~÷à;ÛÞâÿZ> °Øv äBG=AØ@à`Ôi ñ8DÔ7Kλ_ù²ß6ñy .Úëyµ»M|Ûæß;kÈ"/¡Úq"q0jI$)JM"ÐÄâq8 ©$¥ThÒRlx0x85!Û]¯:·io|ÛçZó':JM§'¤I
+RH4BHC/<!Ù$rÃpD¹"Ym<M¤N&
+HB0hbe66¼"ðy×[ã^tׯ¼^BB¤Ð-$L¦Ó`8©U$
+t
+¥&i"e6߯ ¼ó®×ƼҾ+Åäµv¼Öº÷ׯ¾-^SÃq¼âa¤´Æ¡$¡)4I)´øÖ¼ÀÂç]¯yÓ_ñy
+H42MjÄ©$jGII´ÒDÚcPHPD¤Ù|j¼<×kâ¼Ò¾+Åäts:C¦9næft4ëHLjB Ò
+$¦Çh DñÐ7v¾5çM|kÅäí®·[´×½¾5ñVòÀo6äÚi"m0jI$(JM(ÐÄÊm6ÚòÀo:ë|[Îø×ÈZíyÚݦ½õñ¯×D^yÅ&ÓIcRI!BRiSiñyEà7v¾5æË|kÅäí®×[´×¾¾-ñZó'#¡¤Úi"m0jI$)J Ò@Êl6¡©$$4M
+
+Au]^unÓ^úø×ÅkÈ"/:JK6é"m2bI$(JM Ô @
+îPΩHHÜ
¦Gc±ÉI
+ZH4"lv ï'½íÚù¯:ù×Î¼Þ ©Jªmr*ÓòÖ
l(#OäDÄÚ4àÔ
+:9Whlñç ÅTÆ:ª£eѪMÓSfÔULa@ÝÌ eJ©eR©ij%!Ôa̰ưÅUTµM©LebKm*f(c*LC
+QXÁU
VL2eXÂÆRÂ^wÝáÝá\&01v/'ù>1î!ýNZvc FBBýiÕÐnÞÿ½£ßª»ü§§Áçv`ãÀUmaU×*²|´©_û êµ~ û"ûúÔ}¢¾Áö¯CÐáÃн5èX=C
ÃÐô9Âô=pô/C
+z¡Âáèz8û·Ñµá¨öãZ×ëÆ·½x×®ýz®^ÞÀ õ½sÇn!¹¹¹¹¹ÔNNNNNNNN u:FÛm¶ÛÖm¶Ûm¶ÛÖm¶Û·nÞµnݾm»víëVíÛm¶Ûm½jÝ»víü¾_*ôôôôôôôôõë¨!!!!!!!!!=w»t$$$$'§!!!!!=uÐ éÈHDõ×BBBBBzr!!!!=uÐû:ª¯Á[ño¾ª¦Þд[ýê¹nUËr®[rÜ«å\·*å¹W-ʹnUËr®[Ü[qn
+Ÿ7àÜ[
ø@À ó=÷'Ï~TÎäÞ~ßi:êN·ÕN®NºÍìÞÞ³{zÞ¶oyÖÙ½¸ÍÆüá½ß«[ÜÞÍõöoiºÞÍóZÖµ| :vphØîÎ1ÙÛ³Ê 1}oòñÖ
+@ `yyîQåfñSZXëx,ÍMßFõ,È ýåUñãùµUxª«çÙ @ @ @ @ ~~÷9Î=à9ÎpóçÈP UT·º®º©ÎzõW}÷Ý «ç7×9Îs뮺ê÷]g_Ì «#ê]J¢ÏTªYû¬°î q÷ t´¯'ú@d¡ö { ~ß>ð¼ ÊÀ0 ÀjU0 ù·ßõþGëb¿oݼ\÷]^.s1üëw÷à÷|ÌåSÒ×§çÃ8+cÉ~ü]!{7±3p*ü0ú·¬o~ = Ýâ=| uðà<yPNî]yo?/nùïÀ8 (Týéóû7òüþ¿u'õþaù¾Sð /§ÞAîþ'Ç<?9û¿Ô¿ßé}:} /öïõñ?è}_ÇøØ?×ÅÛïàüé¡ {ÚÏÆÁÞù&ï[××<è<bǽ«ÕtÐ*û5Íîc×½c=jûÈduï]óÞ±Ú×f+®hüP <ó¾¼UIW7íç
Îó¿~^
+° #$$&9×w^]V±½_\ß«óß¿TØ_dO¼8úóòx >üî g=QaXÀXÎû£}gç½cN³=;ñ{}ΪQ½lðï3{Þg©À¾øX±}µÈSÍDEû^«æ®»§·ÏÇãò½¬Ì Å{õúó;úÖû >»ÆàIæþ{S5#þ¯ã?gòé÷öÝ=ß®ëóû·p"~è ûÖäÃZü¢";ôDDFtÔ½ZÖûZ÷xOs¿»ýßÉýÖþ¿Ïß¿×~Ϥ[üÌ~|À¾ÆâûG¡»0ñÏLë®k°wé¶9ºçÖÎo=ê¼=:·»|Þ·»üøäÆ/_ßã;wøéø«|ú'Ôïlù]÷å÷ø þQ?»~wíü;ÛeýOÛÞÚW~w¾üöùS¨ûË>ObWë÷á߯ÅÈ5WÌO·ÍMÝG}Ë£§×ÜdòT¨¶rã«Ñn»/U<©æ¯;µ[6²ÒÁ>}ß=`B÷údôü§á{¶mïwi>ûñ}|_ËêãAõb}ü_
+÷æqçòÆ_:{¥úíø×ç÷~1ûêñ~ë_ÏÊébýë1UßÚü\/ß}¿hÐ]÷ëïÏáú §÷ê½è~{uZ½òý¸Rªj_y1Ï~?;ç¼|üù{çÞûúkï¿®~Gà WÛö/ïÀ ÓÅÔË~÷·É¬î&4Ý:9µ=>ÍsjïçǦqáæä' åüý߯ïô?¨©±^ïöïüÞÐÇÏ`ì~oúÏvµkZÖw½ó×~ÜóçÏ3ØÞÁçÏ>G¥yìåöï/iowy½ï{ËÂ""":+
+÷XGzôDDD""""×xÞ©ñÒZíÞ÷v·®Õæ¿>"""?gíªïe·s;Y¥íù]ï²{é·¿Å}ß8¯Ï¯Ð {w»Ù$~}ï>/;ÝÛç|^ÿ ý ýÀ 8 >Bo¹R¥Ü9X⪮ãIãºxïgãÕÄösÂÝï×råá Ob"!^2i (Àg·^ÎÎ;¹xðØ£ºqàlÇ d#¢RhH#,¢AçpÍÞ\²Þ] xñÜ*´qUÜÀ~ØØ á{ }hXîÁ^>&y|¾lêÉåàTþª§yßÀ®ñÜ;Çpå>ýsÅä:A =óÙïÏ;ëÏp j¢²ü <@z@~ÑUÍ; p~EÌÊÌWP UôöJÅ&)11:xøøõööæ|}zõë×ݾX óçÈûï¾ÇG@ªªª«ª aè
+Pðü?Ëü÷ðk^<xññ5xñãÇÖ¼k^<kÇkZñxñ¯Áð|ïw»Ýñ7Uñ@ `UTUQl= h*
+®sn¨: tt u ¹ÎsVÃÐ ¨ ªç9É ê sëâÐ Ð Msç}÷7T UPtUUE°ô ª *¹Îqº è ` ªª¢ªª-
+PUÎs
+Ô
+ç9×9Å ë`UW ï¾ûï¾ø` 0¨ ¾syÎ @UW ï¾ûï¾ø` 0¨ ¾syÎ ë`UW ï¾ûï¾ø` 0¨ ¾syÎ ë`UW ï¾ûï¾ø` ` º\ç:ç8´ =lªªòÀ÷ß}÷ß ` 7P +ç\ç UU^X¾ûï¾ûá:: À
+ VùÎyç8 UU^X¾ûï¾ûá ê sëâÐ Ð Msç}÷7T0 ¨ Îs®s@ @ U6Îs÷Ý00 Ý@ ®ssZ ¶UUy`ûï¾ûïê¦ À u ¹ÎuÎqh h
+¦À9Îs¾ûª Ý@ ®sç°ô ªlç;ﹺ èÑÐ
+Ô
+ç9Îq[@
+ «çª À
+l
+ç9Îq[@
+ «ç& 0 ¨ Îs®s@ @ U6î÷D}}ôo{ Çwwwnffªªîîó33y¬ÌÀ tt
+ª¨
+ªº¢ Ð ÐU kƼxñã^<ùóäÀ?ÿxñãÆûëçùòï¾w×ϰ¢~÷ç}uçûÌï믰 £«ç7ºöÝ^Áå UUUWT@ÃР뮺ç9κ뮺뮺ü¯Ð}~
+´¢*ÜU¯Ï>{ï¾ýsç×]uÖ:®0 UU at UUÕy ¨ ªç9ÅP<°0ªªª¨È4 4@W9Î7T UPtUUDA ª *¹ÎqT,ß~|ùáà::UTU]Qh UÎsQëׯ@ÝPt 0 UUAÑUUy ¨ ÷hUþ
PULy/£©ÑWTÕfN)&}Ñ×Qr]$æbpEaÃlI·zTÛjsà¼KyÂ$+i¤QYxò%p-Ê%)̵ÃÃâ÷#æ ¯3ÇÃÄàÝÒQ°Ô']ÁSÄ5JâI%ù; lx¡Aö=ñu)!´8 ë$t8RÙÒlÙ³fÍ[6lÙ³fÍ0ÌÔÙ³VÍ2imhD 1i§F¶»]®×k¨ívº×WQÚê¸4GZívºÝ®32dÔàt&F%ÉYLÄÂcFȱ2,S#Äȱ1L&F%²S"Äı2,L&E#(ê (ªW©¯&xßï a ú
+ð-«àV ¯ekßÕé§L§v'LNܧf'#ìʧ»ÈD
+ç:,¼c, D<¹ 1\órÐÌcïç;®wh«¾ûÎéÖ9}p Ü@««¤UÑßxëmFF &&ì* óÁáWÖ½ôÖ=sßüoÞfúm!üùîùùêRßG¿>Ùé÷yöH$ I$H?ãßõì¿ÆIÿ´·úÿk¤¦QM¶¹rþîÁª·ûGÐ÷Z©pÈÈ§ÍÆSó¥õSh
+§QëknÃ$s-¾~ÿs3üx :ñîuwèï:»Î®ýDw«_è~w8üá鵦 a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a f Îm¶ói%:m¶ÛÌzÐ a fÐ a fÈÌÉ¡wj¨Ù^Ég(2mËRBf2+h ETLûܰ7ÛÓ>nJ$ë9ëw
+aUá
ç?~
+'§ß} uã× 6ìwc Ø-¨Á ª¢Vù3¾Iã&L2dÉfL2dÉ&L2dÉ&L2dÉ&L2dÉ&L2dÉ&L2dÉ3&L2dÉ&L2dÉ&L2dÉ&L2dÉ&L2dÉ&L&dÉfL2dÉ3&L2dÉ$Ìâ¶ÛæÁW@«UÞnoyÆfqfgÆfqÕ®Lf^u5¬çÎu5M@ª*ëÿõSõkíÙ2dÅ&L>óo½{okui¦¦i¦Ri¦Y¦i¦i¦¿AJN-
ü]DÁUØ8¬T.k
4ý&,Y2dDm?Íl´¤$H"DJRYfi¦Yf2rÓî¸8[2Ëï±GvRéc*Xd~_¥c*»Pî±Gv÷
e~¡ÁÔÙ«VÍ5jÕ³fϾâòÜ·75Êq6jÕ³M4Ù³fÍ6lÙ¦lÙ³fÍ6jÙ³f6jÙ³fÍ4Ù³g÷x>ÿÞs<ç9N¾r¹_¦¢ýK[6dÅM4ÓM)Ji¦i¦&LY2dÃ&L>ûLº¼Ö1#'yhè}ó&,`Ä-) ÁHM4¥4ÓM4ÒÍ4ÓKdɲpÃÅxõ¶jÙ³f[6lÕø_ÊöÜÜç)ÄÕ«fÍ4ÓfÍ6lÙ¦l٦ͶlÙ³VÍ[6lÙ³fÍ[6i³fÏïð{y3å8Zi·ù}ÿZ÷ÏÖ8\N'Ââq8\N
+¥¥¥¥ð|Êeý÷F#ÂXÚZZZZZZXXXZZZZZZZZZXZXXZXZXZZZXÚXÚZZZXÚXÚZZZZZXÚZZZZZZXZZZZñÈ~ù Òe2Gý_ñ¨üO<À`7÷?íÿ øÏÏñxÙMÙMÙMðêÈy»Øÿþ w^=¯¼{¯¼{Ð> ïO»ÒóÏ<²)³38ÌÎ33Í;@ m1dÆ,Æ,ŲcLF4ÅIIEH HH6ª HD HE2DRDRA")")")#¤Äi1&1dÄcIY1&1d³¨ªÔJ.ºmR©b¿Ú}áÞãüKãK¾µQTr4à2X ó c¥ÐÀC%d2V1 [B»C®
Îòo0Ü]ë
+{
+
+ Àzè!Æë]
õac&¤d£!
+Ígã¹N,^çzZ;¡Ï´óXº¬kzò¯ÍVS¬PÉ2XÎûÆôò9³»UG&ð&õÖkz;k
¬Z¡ªÑÆ\:5fÉ{c¬_±É%Èì¢Ü² eräÈyàöw×xµ°@h¡.¬Ê¬© ÂÈ*¢ðÐèÒù®l at NAÜWt°ÚuÖTDu^hØÕlä {¨â 8»ÇFkxßx³TC F&uAU³².Ç¡Ñ&ïQß0k ºr3¨¯ÃFa5ea0´ïÑÒcYÃ2
+ïXppc9«2fªÌç]wÍ_YàEäxiÚåØàÈjHB¡õO1MTÍÞw2 èÀûïDgØw·à#`gÕì]¾&h"Â/!h¤¬e5T9TK¾¬®²]Ö rèÁë'5Ñs}Q#Ôs íäâÑ2haÊ&ò"¶ó "¹ëTsªôoGKÛ¦\UFú¬kê¸tK¢)5Õ1Å ¾é
+|<â/ <ózõo\÷Ý<c Ç çhÔS»ß{©ç©¾¦
+Qè/«^Âó£»ÕBsZz>cÐá( ÷Òø+ÎCÓ?Xªº²Lr·K¹c¬nÌÅ{Cç§/ÏlzBG ÙêÁ#
+U;Ã<3
,ø¸wfÎQ:Ax¦AÃÚÚÛrð\QI,-¶Ù%A:ò©·%a7"L*cæ!ß'KĤròd|ÀCê2i
+Qò A³lÔÉt
+¨»ÀvG|Hâ9dHräH%<¬R*&tM « V#l4É(Ðä¡Ä|C¬â´â¬â¬âR»iÚWk¹¥n´èÑ$4HP@
+
+7#ºäEªqMÖîRºÝÊW[¹Jëw"ÃnµÜÒ»]ÊPÒ»kÅJm,Úii¦ÒͦZii¥¦ZiR)´³i¥¦m4ÚYRm4Ú[ÏM7üÛþ×&¤æº×~ý"©à ÕwàI% ¿>åù| düß=ùõ|?vöÑÄ·ðÔ1#çÏ|;üzï½K÷ܦ»ëëïçÇîËÞtóç¯Í÷åìð dô÷ýwÏÏÏÓëõõëìîúzõëÑLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀß·Yííííííí^ÛöÞ÷¾³ÛÛÛÛÛÛÚ½³ S03 S1°&àõ¯/µãzÞµ«¾f·yVCýQCùYûÕ@ßt÷Í?:/xùßÇ îæªI$O¾Ìó[0Ï÷ñ¥úCä¾Ãº;ïÔèçó&Ýã[Eûy1³a¼Eü«¶@Ñ£X5çãôø`9½uÖ4ù×&´jõp½þã¢Ï9¾`åÀ_±ÖºÒ-kg¯öWÓ¿ÀaõÑöÝ@Îì¯7ò¾yù¼ß¾ïxÍPëZ@ îîÝÀ$ùÞ± /éñ3ý@ZÇkÏ[½ýÈß3½uÅsíæzè¾wÚ¨ª1óÄ
+6N$½û3
+éЮj³øÚ-Ü94j³;·¿;¼Ê/âó¯óà}) ü5|¬µïUóç׿׽üwyµ{ß>>+îñò ÝÝ»§Óçéãá[{o_ññãÞñöùHÏ®s\λ°Z]¼Bá>¢j´ðÕcëÆg×y¬¢ÎCfò¤¨Cï¾g¿
+º=Ï÷þÿß×ìÔwÿÝýþòÏùGô=úÿÏ{_-¨q§=}ݵÅnö¾[PãNzû-»k·{_*PâÓ©f[\ýöm|º£Ñ^õO½ë=ͯTz+Ó^©÷½bç³ÙµòêEzkÕ>÷¬\ö{6¾]Qè¯Mz§ÞõÏf×˪=é¯TûÞ±sÙìÚùuG¢½5ê{Ö.{=_.¨ôW¦½SïzÅÏg³kåÕôת}ïX¹ìöm|º£Ñ^õO½ë=ͯTz+Ó^©÷½bæíÞ×Ê8§4êY×=ͯTz+Ó^©÷½bç³ÙµòêEzkÕ>÷¬\ö{6¾]Qè¯Mz§ÞõÏf×˪=é¯TûÞ±sÙìÚùuG¢½5ê{Ö.{=_.¨ôV£¯²Û¬\xókåÕ+Ó^©÷½bç³ÙµòêEzkÕ>÷¬\ö{6¾]Qè¯Mz§ÞõÏf×˪=é¯TûÞ±svïkåJSu,ËkÏf×˪=é¯TûÞ±sÙìÚùuG¢½5ê{Ö.{=_.¨ôW¦½SïzÅÏg³kåÕôת}ïX¹ìöm|º£Ñ^õO½ë=ͯTz+Ó^©÷½bç³ÙµòêEzkÕ>÷¬\ö{6¾]Qè¯Mz§Þõ·{_*PâÓ©f[\Ý»ÚùRæK2ÚæíÞ×Ê8§4êY×7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±q[½¯Ô8Ó¾ËnÚæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbâ·{_-¨q§=}ݵÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÅnö¾^Qè尿Sïzü¹»õí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.nÝí|º¡Å9§RÇbæíÞ×˪Su,v.+wµ
òòG}5ê{×åÍ߯kåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;»ÚùyG£¾õO½ëòæï×µòêæK·{_.¨qNiԱع»wµòêæK·{_.¨qNiԱع»wµòêæK·{_.¨qNiԱع»wµòêæK·{_.¨qNiԱع»wµòêæKÝí|¼£ÑßMz§ÞõùswëÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\VïkåÕ:æKymsvïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;7nö¾]PâÓ©c±svïkåÕ)Í:;»ÚùuC¹§RÞ[\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯T8§4êXì\Ý»ÚùuCsN¥ÅÍÛ½¯ø2_ä¯ÿü?©ÿîOò¤ûÓÿì:I$ÞM?½'ÿéù'äþô_õßÝ$Þü¹þ\?¾ìþÒwøáÿþ¯äÿý9?þQ[ ÿ)ÖZS0ÿ/çtGZÖ?Xw¯Óùò ÝݻŽÆýGuõñõo£ëy$!rßwVèØ}GzÕýyûQ[ÊßñbyåÝ~7ÃÏ[%~à éüýþôþ?ÖÃÊ{Âê'1I^û j¬õeEq×ß×ÇËÏ¿{^Þʯ»Ç îíÜ xï}¾|ÚÛ|ÖÖÒpª*ý Õ\Ãøÿ¬Î÷CáÙ×9B³v(æÎkÑåâ*Lód9çªU.ÞÓ?'+íeÎPÌ(vn©YVdËvÌDc*N-Í¡.ì
G^S²å@yßé@
ß+|Ë4}n«ØìÅ0Áv~+ÇuççÞNþ»àéÀ ÝÛ¸$Në¸
¬n7Sý5Ìp°ü¦o!Í\ûÌðùËE :î9g»ý±ÎüÕÌæh~àªÇ^
döQ=_7Èdº×áj00`×Wryæbò¾üÝùç|U|ûúÿwÏzª¾ÿ wvî ><~,ü'Çâ~áo·È#çëCÏè¼ý^9/Ïð÷ûåüKß}ø÷ÍîÙ{&1«°$Á~w¾|qç5Î xGdê;àó»°ÆèÔ²Í~.äëPæ!¨µá«åÎüÀ =þß~ÔmÅ«ÕQÔ
+kÏl¸ã¯7ùó|®p¼}c1÷ÙXÒ¨ª:ÄZ¼äÀK¥ÄÖwæàÙ|뮿¾UG_:&þýó ÷ί¥TÉý/ïÿ¸oî=Áåý¤þþ3^üåÖ=ê÷9£<¾cf?,ïY cíåmÕj}ÈBú,(=ÑöÇ7å½Í÷©<5ܫӯ×$UÞåÞmdE^xAããêÙJ¼1Þo'a}ÜÛd¶a¶Øm$ØA õ>0ÌHA$
+ >Ö@Øl\|.3dW"N¡$ Bjp#áäÉ#LSÇâ>£Éê ¨Zx-ÒEøM$o<HcÂY+z^TmÒVËzCÁé$±¶åVÁ
+ϯY9³M6lÙ¦ÍlÙÚR»kµÕÚêêi®Úí¸@#K@ #RÒãÄ4Ù¦4ÓflÚÜÊÒÓMZiO8àʲ`,Õ4ªY¶iTÒ©¦Ù¦³M³M³Ke5Û,Û4ªiTÓlÒ©e²Í5LDH1 Åcö÷°·%uÔë]óí×Ô³&îË.뺰 9> Ý^»ç~uÝu˾æ}AÍo¬¤=ûý¸.¿
+×ó¿=ÑǺÊ^·}èúo~-}u¿I$AA$y oêM©l4¿jÖ~½aøÖ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ ':m¶ÛÌi¤é¶Ûo1ë@ ´ k@ ´ 0X v'îü¾äA¯¾ÝÄEÇÛyfÖèÜý·öE_µ@A ²j±¨
+±MëëçÄû?OÞ@ ð®¤ôùJ¬²Å?8ðÔà$|÷¡è¾û,¼¦p:ÉPæóKô|ÑSq½.¯}IyC¿LãÈóÎtåøsï6ó̲³t¸ÐLïÎ`qóÿ1÷ë>ÿmúí#ò»8I$I$ =õç{ýo§»ÊQ¯¤0a£.eAD37òf6kl/aÐÎ%ÔÜBÂPiÖæÎ)nÀâá§ctÄÅq
ÈU0㤱¢ÔL[}o˾| B9"ãȲez^Ñ`fV>w_7®û;çÛ½ý¾¾=xëÈ Û}?«U}½ñm|ùׯ ]ZÔ[[ò@ªZÚj¬Úåh0Cý8ÔS#¥YªCäó %¿jò]wË̲¨æ#%H.¢ÇV¨^µöê¥ÃìóëÅïö¾_ß }5ÚñëÍíã+¼xõkçx]nzr4æÖªrÛiLjEREaë3`½ª®¹¼oÎcxË4e8pîCÁ¥Í²z>~¶OÙïïß\6ú}wÂI$I$I$ ö½þ|{yó_>ý]ÎÖ]ùt&j+
+T at s 1 .½.ù¼#
®HÔ^ð`¦Õs_ŦûÂ÷@ê* ßÏ6kêÿllÔ®©è!ú}°è`n,èx69¤2|;ûÝÉæ3:ï§¿{~~ ão_Oz[ÚŬMõ÷·¹¼sÜhÐ×éäË¡§5U|p5ÚUäÈRûÌEPƯE¦áKÔwnÝÍÒ±T©ÍÞëγ\á£O
+èd 6ZÑ"X÷ß:öñõú||½þÏnà $I$I40;Î
¾RlÞÖ°VawÊ?QBcZùÐ
+vk( MëIçëfSd¤95Q3å¨ÈÃ
QÐtYÜ(~PÂÒdi2Qº)p
ù¬O1ëY÷úx¾¾ÞÞ> I$I;,Ì1ìDJ&m`±1ªA@¼5`
Î &°<ï:ó?<
S°:^ú¥Ûæûïyáë÷ùkùèö^çgɺzÇãÌÉæ8òË7éTUzF¿¿¿7À] yçÏw¨_Áù9|Uýþ\:úüÌÔëáç.³¾
°ª*E¢¡yuÄÍ/¢OuT^%ÅA $ÙÌw|[ç\Ékw7ÜÞÊÑJ<L¶ÛI2ÚH#Pg-R ÓL PD¤IaMJ[MIæÕ&Æ
+¨×@Æò|^bä$| J-£ä ,:ðø$£½Ñò AtÖ8hì8¼¸`P ¦U`R¨¹ÆÛotÊIJýº÷øøÞ5Ü3v»Ý®áµÜ3v»Ýw)º®å7YÚnÝÊnÛ¹ rw
+ "îî7wuuÎuÌAĵwÝ®å+µÜ¥v»®×r6k]Ên×rÛ¹MÛ}UAí¤?Bk<ó©1Þ¹Ï}¥6¸g÷úûó¯{ïçß¿ýM· ëRã»ß¾õ
¥ø2~Yá}Að»~ß_sõµªíóíõóïãßçÇ<ßÁ ìÒµ©mø~Æ´À Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 ÃZ Ì5 Á9Óm¶ÞcM$§M¶ÛyZ Ì5 ÃZ Ì5¡ À Ã0|¾¾¨×Ð%ôBVYÃAC
D?qöæÏ±×'<ó[×CZ<ÌÜÌÀ*Áé`¢Ep_>ÚèúÝ}\?ÌÏð¶c|ÞÈ?µesïºÙý¾4%ñ¬Ãò4BäRr6³nYC°Uük¹Ïº,.À¯Ëw캿}ÖMä;þ(××ÀßÕټׯt`Pá 2^vJË @±L¾¶8TCê s<ÕO©]~éÀç0}ðåjHMbß`þp TCTìÙ Æ)MÀ»¯N|¬c¢á½Öû@C&JM@@cd!d¢
§²º ×ÞvFï¶wõÎV®
+t10ªóýüï¬y﻾'TP*ÀöQÈÏ9^UåÉ:ç «G ½Ó¬XÃÞuX÷¯5¢·X©ÜÜï<ýÝfá<aèÑë E6¸pCßsäëÇβuæùÔc}ÝÞÿø ÿ¯Ï¿
+Xé G8|ÂuȼÈRY# D!ó:ß
+÷óΰ¯Ü¾þËý÷绲üCßU#·óÚ;í_¼VÐ2[A°ÁzÎ*ßGóõ³ïßÙ^õzgç©úÿ~{×@úþ¸ÒAçÆjóZÁÅÉFrÞ
+ÔÊ`³: º8{*MùÖ=ÄðÀø)[ükÏ7}ïÁá óòÏy½ìðOCòz'w¿Aa®çn÷ó)^wr}ü¾¦¹¯o9óÙïÌ`|ÙêyNçÊì°A!uýïoéÉJ¿}ú
óÎ_-*
+øRw#SÃo8ú®õYß-b>uG¤$kÄRl&Ý)rKªc(a6Sm¤l Â(è$4 ¨ , vq F¡Ã˰¼dSÞeä!!ÇÅå~ ¡á@Ã0øA"sDP|àaárL¢SÍ|q=âðK\OI"J.Ü
+tQt' #
+°¶Æ¯oõË.¢Y³fÍ5lÙ«fÍZndÓVÍ6jÖíuvºÝUÂDsê¹ nî¸ FÜk¸in×kµÖívºÝ®Í[6jnf`ÜÌÁ³VÍ4PÒ} söÉ@8pÀYx©9õõïÍõß.ì¿ Z ÕKÄÅ㮼ïªëÎûªÌÉ GÏ¿x÷¼óϯëïê!WÃëüø}ë{á9Þ¿:@ï¼Ãù¾gùT÷½ô/·|õÞÑséëßçßèI!ñî÷ú/=Æ%Ip¼K©&.|pª* sÖùñÞoÞö÷Ïÿf{LÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀxÐ bJt ÙfffeÞkX3 S1°&àóãÃv`Øâ.¢x@ÊÞ3¤P?K~ÐóíßbYó³}Í©uÛÀ^߯STö äú
+±¡ µ¬}9Øv4»ihÅ8ë8Àç"ýýÌg
+¢¨ÖV¯ídÆgí¤ 2>ÃÎTñ¶¬æ3 P+gÈù®g£ïÌu\À.GY¡£j dÊfÓç1ÜÓGv6ÙUÉmÅüßBæ/]Y½ÅàØÖP63£Ð¢ûõr½årÁzÔÄOJÄ59Uó2f¬tî#ì´âÐÈ"R
+Óx³g»L9*©Ü: ÁÀéÅçH+júóSÏ=Üí4¨½óºÓ¡D%¤D4Ç*@)ÎU@ÈwªËD3ÏpCS`P´®°´ ]oÈèJCP ÔRNYeTU*
+©HfÝÕIßw«+x<ÉíÓáÑP.@!(IÁ@ c¾R:
Ëj³÷8\Éts E2~()É)A¬õ ÷3nÍÇBkFê)ZII¢@Îkz¬àØ6îI"ÒzV¨!ÕT¿«Ýò`¥Á¨à¥;Ù7N!zètkB«õê\ÐëS u
Æ!/ }©sÈÖô:Ñ¥:ÎGJ¼î½!õ×<¬!¶kn(]°´ì¬dA·ó8Ø/I¿U9'â°×)\8>|Â0YÌuå=Gqdk7½¹ME·w¨kAopDÑ_V&pDM¿Ê¨ïçöo=tü¿<ó »6¨¯9BCYVçfKʳ8Å;õÄärS¦J=835F@Ô
+õï8ðmT¯4.|îK³%<pգ üûýorñ÷Ó¯ô
çW缿ÛïÓcSËÇ·î¹øßwʶÿ¿\î#ï¯KÇ¿I¯OuîUëá*]æºÍ\ÿTU Þw2×°YP%8WÅ¡Å2G$
+Rø§nSI¤¹DÛìÒë3¶Æl Y%4SAÔ:P,ñÁ$§Dlë,Üh"JDpm ݬâV0øòy:2DÈ~b)¾ "¢ig ¹" k*N$@>Jp#áñÜí6ùy¯Ó1X w[lÚØ¬ìÆcÍ¢#J¢HƨSv»¥7kºº×t¥
+n×p¦í§Ä¦ê×)$ F(!¦Ý®èfí8¥vR»N)]iÉë8¦¥%H$¬ ãç
+h,¼ÔÝvÞ~k;q1313R¡fÞ¤®¬5ÔbûéçòÕ_Ç1]¯õ9üôO~ÈÓûê#».¶~OÏàôý|B Õ_â¢wÈH)$P¡%
+P¡$©¨xð{Z` fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ a fÐ `é¶Ûo1¦S¦Ûm¼Ç fÐ a fÐ Á` a
7yXØÈ¹6T1H
+¨åA|ÝMuçpÑß>tpOÒ d<ʧÏ(dZÒy U®f+9p
@ûûÂÃ`Z°ï®ø Áò80°\MÉ"|Ýüáß^w{Ð/O aô¿zËGUÏhçóWì¦wݵvw½amÙ²C»£²¯á{ÊÇñ"?ß~ïçÜ}Ï'£Þ?¾¿ ãÐÀî¯ÈýAIï˸_¯X
+ÆqµÜôóµè7êÁîhÀ(vyU'{Ê׳Ìêêáéf.ï8Å^
+æq×î»ø1a:¬õùìɵËä¬'#e²'¤qÔL!³êgæîkúÕP-q?¦ý}¾ü]ÞcçÀ?#kð-ïo#ÊÚì=X
+ÂÆ¬)9
+eh À÷×~ïÎkÌè4°¸ô«WºÇî×=ÍNéÇ),Ⱥzo¼(uò&§TJÝuzémä
+ÃÂHYX->G#j@æ'ºë{Öºó¬¿bG þTarÇ]ásäÒ\£åhQC=¬@@sÌv;: p3$êÖXLî728!ö»ÕçëÞ¥ä "nY÷μÀâ3I¤î)9Kaʵ©dn
+ðÔëEg³½æ{qæn#ïÑùè»Ûïê©wñ
+ûñ¿»Øj? >¥Gð|Br¾V~c^ùWÓXBóö®ü¬Býó$¼|êæq=ßíy×5Ðì:ç@äÍbâüuD~
+Y%Ùé³Ás
+Ta68OXǹ>`¤q¦
¦h%CÕ¶Û=#¶Ql1
+#¢j&Qæ¶HÃiATÚ£y at Q=id¼!'Â/5C¼Æ2¤]Àø7è(ÃÂBM% ÊñÐÈ68C#\|y#aÇa> $ÎÞÖØÕÁuéJÕ$hÙ¬nñ«»²ÍïFÆ m£iim¥¥-FÆÒ6¶ D`XZZXZÚZA`X`\ 51©¥
+Bä °±´¦ÂÒÂÛK
+m,,,mÛKKK{Uâ¾êYfi¥i¦i¦i¦i¥)JYfi¦ieRlÓi`ËcL
+?c
rõ«ß^uõu®u.É5*rï}[ôYxÁAw; Ts[é¬Ýßbï²o;jöWkòÇJF¸ódo9]æù÷ííãÏÒw¸@ ð¹$7*Ê&ñux1 Vu+õÏzïÁïæ{LÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀÌLÀß·Yíì ]I)Ð fµyfffeÞf ¦`
+f §ï^·ãÖ¼{Ù IÎá¾UI®¾y¿:äå#Èȸó "½cwæKn4SØ5H£fCuEøSÞ:á/)aqü`1Êήh{}ot³hG-íGlùU'ìù¾jg ½ø`sÑÇåaTUÞ>ûïó8gÀB>
,¹
+A¢@>ü :÷]àvêÉÕÑ;AW÷º÷®`!½þx'Ú1u WtQó y}eº³uü¼òõÉ·ÑsAÐ1Ñ«¬M곿¯<9ôÓ!Îý£½>ΰb~Xú¼NûûÖò¿Ï;çñ¡üæQìÐáÖ·'!.aûÀ rúùß1ÖgY÷Zöª*ÏwûëqªÅ~ìâÉ®0Cì¨*§H¥Ô1,
+DE
+·Á.Ü.«?/É÷ºM7ÃXIáÕG)¼:/¯¿>Ü¿kÎdÄêwõOÈoß}O.êη ¿zÆ;ß_#BCöY5ë¬VÊ!ðVï ZL19RáÒdÏ]õÖ~{Âë8ñ2w1x4
¸UGbl«°o~Ï0åàãñÜ
+È:u1«pcY= nj^§Z´¥Úu§dFTs gÜóÉu»ö±åàpY:ÌòHèîÆÔ©Y08RÍ£¯hu¡ÐpÈP2¹Ã9&(ÕÑAÒØsWÞ·7àì-yq±M=¤O·ïÝûïèîw1óô<Ið^TÅøøýõPå !Ìru1|s7÷!sQɹùï¹_±Gã8¾doWÆ>ýô2¨_²¶I0ôê{M L
+,]0L£J×36^äI¬ÂId¤ÄÈ q(
É%6Üày¶!"
+Æ`5Xñ$¿Ì8¡bGÃåî9<Y¡cÞqÄN´
+üÄS¼tT Ò xN`D4{±äW ,1ï0G
+òÌ
+ÆKPû
+J¶mjSNÉ$Ü<ÌøxÀq#c`U¤m,
+´%É#&öÓ´¦ÛNÒ»NÓM7ZtXe$ ³MÉÈá©ÚnÓ´®³´®·sJë8ØêÎÒ»$Hê-G:ϾÔ4d(£«çQo»³3óVRÔ©é,åèT½n©æfgØa
+ÀZ#Öï½ôz'ÞÀnÁøO[à?Íñn|û~ÑÁï¿)÷W§ªC³3qÈ
ÙÎÖò§»«qÔþ£Àaíik@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ ´ k@ m¶ÛÌoéÛm¼Ç fÐ a fÐ a f¯ª6;`1%§=|ùæsÖ<E¾cÙ`TÖ+He5¡Æ:ûÐ:»ëi
+,¬Eiµùf®ÁKuèjèî^3¡Æa"KºÝõæ:èÙZïEPÍWdFQ'Î^|çg>jÐ&CZï^Y(D¾ÂÊ,Õ·`æ ä9Ör,å%À9[WuÂ8»äÂ0@ÜÄÄo7º(aF®¥)`¸²j¤ïÞýçw¾¶¶÷£¨8ì²¥:÷&³F!!BC:îIup`½ûf ¼õî@öiB ¸
(@1:Z¤Sfî\©;êê0cQ:¯*Ô
^1$nUI×^×½wzÈ.Õ/Zô0#Ô*X](yå-JJðÎæ@03("J*Å#º-ð Ô^EI|æ«&êªdÈãS
aWu'½nûë¿Qpd@Ý¥ë
+ù®²Ju3dLác¡Î äz&A=÷N]_y°@ËC;Æ\Êâcç
ç4f«68³ËÂãã5&ùçG{æ·Í×z×Ï /2)y*£Ø}B@ÉY4YK»ò°ã%ØÙ}òëA®±°àoZÞWCGWöÞi(ð ë3¯¶Þé#jð¦jÖ3õ!J!
+ø8³Ó&X8Ù)yDɳ.]j5¶z=ÏÛï4QS ¼°QÂóB¬£%TV8òXÞ:ÏÍ®wH&g5HJÝ
+ÌwòîõIÄÓløPrÜÜCFeHCæ7Ô_ã?gñßãÏ7oßá¯ð_>ÅBCuùô!RÌÑÑE cX_ÎwÊß*Mü»õ}ÑXÜ×W2`îcõ¾Ì!}_Ý ?;úp<ûùoïÒ¾÷óÁ² Ãî9S&jµy®*£ûYÙs%÷ï7ç<ùX²&&f$3|
κó0ªìqdFM4ûïοcð1ðúò>üH?MùÕ|Â,Hç:züè7b×ÄÝÓ×ßw£oÍôü( >Þ8¡ùm
(Èà!ØþxãëççM»ñæ~ Á ` 0@ Á ` 0@ Á `ôÛm¶ñ¿´Ûm¶ñ ` 0ýMCËU$û{óÞkäù£Wn~÷ª.ÁU#lï÷üþßÄGóúEåý¿|S¨÷®Þübük÷èý'õß}¾
+ß(,ý-Ãæ^¯oö·êÏÅñþÝ_ìæÄýübGßÞ÷0<ó|üà ?>Úçèü4EÝù_Ì_àï~;óÏÛDÀ|ßÙIcóêÿ
+]¾z·ð¹ùÖ¾j½Åë ¿9³ø:0BÝB?¸{ÏÆ§Í'ÚÏÂJ¾Ä{N×">û_<Ü
+ÍðæôD¬L=1á¾¹Ï|ù5ÞÏÞõzªýGãóÍø¿w¾È>zý¤?/êDÿ¹ c¢ùÏô÷£ µfüýhÖù×ÂîþºÏª©3ÛÆ=ùïÍçOùÕ÷7Cûk|NzWô
+;Çïu×¢¨ç>,,¾÷ÞùÎÿ6·dLLÌM.ÀíÌ
+í\oãXdj»ù¯1þI³ü_Ò½øO}qÞ(L7
+:ϾõÓa£·W»Ö¹Íäw\»9$DDççñãc~l m¶ÛmüÛm¶Û ñ'Î{5ºÝùÇéçZ=ô¬þ2ëY÷¬fî`÷ÚóWÑê>ñþ}÷o©ÿ_~q½ýx<óоûØrø ³ÏkyÍùZç¥!V+YáçZÏP|Îϵ(;
+iEö#ïµ>uvNÅûqpû®çÆÌÃ}ïÔ[óï@zs¿ù½eÚc ÖJ
+ï®]oÊÇ»ï¯h ËÙî}êkÛö·Îβ1Z}Öw~ÕõxuîD}öÎi\$¾ú>ßÑùÑ?·ùHCõ"w~õùóüz08kSDÄÔku®÷ê¯l1K8/i
+ïÝùû>óÏ/=wòüúkùýߤx<×xïYë޽׺ùåLy<Õ"ªoZóÍ(;x3á!|r\9ì£3Ï{¼n~g§Pk_â>úù
+F/ÄÏÆãóý§ñ=üÑÆ5£²3îð| Ìÿ$ûõSõªÁ·¶ö´µoÚtðê©L;ûÞÕ%×vqÿ½ííÅ Eï½Ö<÷nÎYÓ Ð¸pþþÐÀÀ,×p âwo¬Å!£+ p&_ðÆXfX0bÁV¬ÈÊ@{
+®Ê¯þ þwía3)ßP5ÿ_¥¯¬¶éWª¯Wù?ý ?Ùc¯@reÏþhñ ÀOO. Ì~ n+2GÔÀC§
+þ2;dtþ 7éýÞ]pMçïójûþð ï´øvÖìfUê÷ÈÿªÍ*´¯¬RbWªüØeûÙý×n3
+×.]¸Ã àݸÍÜ:]»$Àà®Ü®Ýº¶ë·nº`Wn$áÛ·]30.+·ãuw30+·8Ý]tÌÈãvè!Ë·næfvàÃâ»q]¸3â»pfÆ»pfíÁ·`\WnÃuvãuµ®î»·I##M5#B}ÁW «W)[mÕæiei¦4³M4ÓJi¦SJSM,³M4ÓM4ÓM4Ò4ÒÕ¶Ý]M4²Í4ÓLÉ,³M4Ò³M4¦¦Yfi¦i¦i¥(i¥+ÛUí[mùx(À!?@«W@ÀUîEt+x^ª¥RÿR©xÑv$Uü¥U{¯B?Uè*¼
+«÷ʯç*²¥Ùø
W´Úó¤l¥ÀPUs"«Ö
+ÐúÅR©{À9\áÂ4=à<@|¢«´ªØt%Oz5ãªU."«ãN@w} >«À@½3U/Ê`x±Sî`^ ªõJr«W(À
+T8ó ùWW¿Y
f-ØØØØØØØØØØØØØØØØØØÙ+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶JØØØØ¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+b¶+dØØØØØØØØØ¾êÛe²|V]««ë°Æa
W^«J¯¡àV&èUaUÞU`òÀ*¾NrUȪí)̩䪥;W¨ª÷C«
+¯¤Û¥<@s<
+®eW:Iø¼90&2¦#; }eaUÄ4ªì*»
+®ÑU¤ªù@tÒ«°ªú=WÏ×ÖÓ-ÂÞUÙÁUå Á(¯KJó£è*¼À?ìÏØK«ë ðyUßB«Â©T¼ßTªÒ«ØUs*»@qðDª]òø1'"«8r*¸çT°hz¯hʯùùyUêøê¶ÅV SUq Èå*³xïªU,0ÅTª]WAT÷ äR=V¾uC at pUp*ëúÅSó*Kª{aUw^ØK´U}piUøÈòÃç*½«¸ðéUòU*
+¬*½ 6JNJ÷#Ìð£Î¬=ðúk j7´]¾(åè¨*¼@<à0*Iù¨øÅW´ªøÅWt3ãªU.â«©*{J¬
+¬%L*¹
+¦^«ÓxÃiJ= ;ÀzyeAYEü7ªà©î%Lϼ± 42Tè?KÀ Ur¤¢¸ççU*£è*¹
+¯´P²¼ªÂ¤:! 9M%w_0^eVrCËI?)r«ÊUaUȪæUx w#¼fèy@}j;Àa*z¯ Ç÷ÂÌ`1U%RU4ªiTÙT301á éTª_À¡J>"«ØRÒñÚ8ªóK°]
+Qæ
W2«åòvùJ«U
W¢PÒ«ÀªûIU|0ñ_AÊ®â«ÜOaUàU{J¯gDpUyÊ®à%Wªø«ÜR¥WB«½åWS³Ó@v;Â)hªÂ«R©háà`ªÈ}@
+¯)*u êJYUú#Èz)w æU^ ;ʯȪØu*°UxÈ>ØpUp%J«ãG«ÞUzÕ+À¬LÁUÅR©uÈfgóU,©}Ê¥RÅtÄÖ\X
+¯ÈêJ+³¼ªõ]
V¯@òªòåиªõ\¡ÊíªU.Øwö T½ÅWãá©rGIüܪø<!ôȸ̪í«Qä*¼%WQ*C¶Pó ð*¼åW»©à9£J®¾%W0¼éB%}ªú¼þ:à%NÐE°ÈGÉÙù
+¯!Uè*¼WÀ°ªýÚ¥Rù¯âªU/@@ªì«ÊFCÒJ¯PªçÂ?2ÁUÌ;ÿ,Ô)F£µ%RôV T½`= ÿmÿù
+É2Êâh WÜ?üZÂ÷ÿ( ÿÿ @ <à GøeÌÁ!Äô *åU?zªh 4 4~¨5O=AJFLi£LL !AMJ§íR Ð Ð Ð4z SõU 9¦FC&hÂ`4hÄ
+2d` TQ<òh Ú4SÛôAO¨þ§ï>c&ÒFÆL2Sá40`lSâHøÖªUZªµ@ä5 );)¾H(X²I!>?f$MÒLðö><kfÊPÊ.ßuÙªiz¬ZÓ»=ÔÒ¦d]2¡®±xdÕ
+SÌò õH67)¶Û)BMÈ&mµm«mµm©$×å
Ul#DUc c#EhÔ®îéÇN:wѶ&r)ÞpO8ÞÊêðL×r²{¦¸§OX'i»JE=Ó\S§¥7xS(×]÷ÎØcS5¡'$øJH+Í2?iã<=Ûm·xÛÊþºä_Ùz^ë×ÅU«nÄ´$ò4<ÂM0(dzÕï*pé£($§0ç7>³´á¯£¦£è ?ÈI½Ý ZXDDj$d%II¶ÛmÄØ6Îp 48páÃ9Îsç9ÎsçÞ éM:îóc®9k³@\R¬Ub¢$F|±2F$$G¬«*˹C1Ó|Oä¶ÛaQjICt-óÆ*²<6É$Ù$&ÚäU¼k¥)J2Ïl
Û Jª ¢©IFOTyKk$ǯÖgRC×EÆ
+Ms6¸Ú^X^Z4Ï-tÙ5ã__4ö`ðà "P ³ùõ}¯Ö½5[k.¨¶¨¨ÐaÑly2êj ´cC4[Lº¢Ú -ÐÍÇ.¨¶¨".2¢Àf RNàL½&¦ÄÁ¡à|&)'«ÉÏéç¾4¶ÛVÛj æ:IºI³ÔÅÁ/¼8d®7\,¶jÐbÑBZÖT©5Ø$ùBM·ÑÏ}paÃM÷µm«e°¶ØsåZ·/Råz³9
+Øí0rG<6Ê.pÛM³ÂÖÁ²$ð`[i&æÅÂIKBMA33rI
$¸0Fh³\ëbidÛ->¸92å¯+ôâÕ°lf )«ò#yÖd8lkÔiíÀr×1qtÙm·I¦ºìÂM^_XIÌ &¦ÜvÇ ´,ÓÙN=:µ`¸ÓIc]»&¶Ì¬ol»Ù&L´ÎKÔ$¯hÌhiûÃa'>PI¼Ih+` @úìRH¬Èª¡¡HºÛm¸1m·ü>ã@àh}çIôÃî9i÷þä?(}B? ÒxÐÐBOÈ;º{Ø6©$ÁÐ)A'ç)$r)ÔÐȧ¹¡MÈ`h`Á&ÃÐdèu)ÄyÆM às2=ÂD=fÁ'#RàÚS¸às 748øêMí")a'3Új5Èvñ&§PqÐð;ºxS¡(©±©Ôt:´ÔJÐvâr)¨q"OÌ{MJCrØÁ¹Ì¦OAâN¡%#ß={ã¼BzNòâ`Ø§Ìæy¥?AÌäyqMN¤àj)àh49RwJnv¢IJw&BO°$ÀIñCBR$ævæÁ&BNó$ï 8s©´ÔäR49Iöð58
+îxд£´vdr =Â"ü]ÉáBA!_D
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,77 @@
+Machine (P#0 total=41943040KB DMIBoardVendor="TYAN Computer Corp" DMIBoardName="S4881 " DMIBoardVersion=S4881 DMIBoardAssetTag= Backend=Linux LinuxCgroup=/dummy)
+ NUMANode L#0 (P#0)
+ Socket L#0 (P#0 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#0 (size=1024KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=1024KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ NUMANode L#1 (P#1 local=8388608KB total=8388608KB)
+ Socket L#1 (P#1 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#2 (size=1024KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ L2Cache L#3 (size=1024KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ NUMANode L#2 (P#2 local=8388608KB total=8388608KB)
+ Socket L#2 (P#2 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#4 (size=1024KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#1)
+ PU L#4 (P#5)
+ NUMANode L#3 (P#3 local=8388608KB total=8388608KB)
+ Socket L#3 (P#3 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#5 (size=1024KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#0)
+ PU L#5 (P#6)
+ NUMANode L#4 (P#4 local=8388608KB total=8388608KB)
+ NUMANode L#5 (P#5 local=8388608KB total=8388608KB)
+ NUMANode L#6 (P#6)
+ Socket L#4 (P#6 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#6 (size=1024KB linesize=64 ways=16)
+ L1Cache L#6 (size=64KB linesize=64 ways=2)
+ Core L#6 (P#0)
+ PU L#6 (P#12)
+ L2Cache L#7 (size=1024KB linesize=64 ways=16)
+ L1Cache L#7 (size=64KB linesize=64 ways=2)
+ Core L#7 (P#1)
+ PU L#7 (P#13)
+ NUMANode L#7 (P#7)
+ Socket L#5 (P#7 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#8 (size=1024KB linesize=64 ways=16)
+ L1Cache L#8 (size=64KB linesize=64 ways=2)
+ Core L#8 (P#0)
+ PU L#8 (P#14)
+ L2Cache L#9 (size=1024KB linesize=64 ways=16)
+ L1Cache L#9 (size=64KB linesize=64 ways=2)
+ Core L#9 (P#1)
+ PU L#9 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 8 NUMANodes (type #2)
+ depth 2: 6 Sockets (type #3)
+ depth 3: 10 Caches (type #4)
+ depth 4: 10 Caches (type #4)
+ depth 5: 10 Cores (type #5)
+ depth 6: 10 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 1 2.000 1.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 2 2.000 2.000 1.000 2.000 2.000 2.000 2.000 2.000
+ 3 2.000 2.000 2.000 1.000 2.000 2.000 2.000 2.000
+ 4 2.000 2.000 2.000 2.000 1.000 2.000 2.000 2.000
+ 5 2.000 2.000 2.000 2.000 2.000 1.000 2.000 2.000
+ 6 2.000 2.000 2.000 2.000 2.000 2.000 1.000 2.000
+ 7 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.000
+6 processors not represented in topology: 0x00000f90
+1 processors offline: 0x00000010
+5 processors online but not allowed: 0x00000f80
+1 processors allowed but not online: 0x00000010
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,68 @@
+BZh91AY&SYþíº {ÿ§ÿÿ¿çóïÿúýïÞ ÿïÿð% ! "/ø`,>Núú p ð¼ô=Ï[5¯C'Àè}åß`³ÈúÒð¼@<8 $Îõ½qS{»Ùî2·³¯Z.¹Û´g»Ús^ì $ þªªgÿúª¨50~¨2` É` À §QSÊ~¨Äi &Ðh CL@Ó& 4?TmD SÔò=DÈÂ0 `0 Ó
+ª)©ú¦
+HMO)&ýMzPzA¦£Ê<£ÔzS at zOP Ô
+ @#M4OM6=L¨ i¡¡µM¤=2á ¤ýÐä øøÄ%1%ù0t+c,'¤ }CaX@ù!:ßúá^ÀÐZn0-RÓõë~¿ì;hl¶Ûm¶þô?ôw§ü+¯ºûð=1aTôTÍyV*bÚ"*J* | sÈ©
+-@(Â(ýª¢!¿yùöôúuNÞ
+j´ ÉiAy¨®¨ÚµÝÚ5Fz£®f#âT*Që֡ɶq B« MA+Òb¤ Å)¼¡)1BJè¸33PJèohÔbYdnI$ÛnÉ$24ãPÚªt§l7dHÜ3Únḩ«·r+µnÃ0ÜîÛq7kÔÕ&Ö((a(¶(¢7m#Y,M& Âi2M&I¤ÒE0Ã1E´QET¸i³UwcnÉ$ÆÛnÉ$KK%nÙ$BqînÓìÛ[m´q§§w6±¥0¦¤/UÆpëgÖpígÖpÑ¥iDVQD
eÏG<F¹çÎwçTëB§"¦¥CEàs®zë[pm¦9ôcÈé-`̳
+ ¦NaÙ(N&Uâ¡Ð`EÄÌÄDRáE4ÕRµI&R#Ebbààbàâ¡)+M4+N)-8âàã.)b#Eb¡ÑI÷
+ñÉ]8.87fe têIVÆT¥9Xe'1EÎWffffQºQ ê(¢Í(sâ$ÑETJ§`1]66âÃÐ4¼EÆUu³33(èS\
+ETtÀî8)4QEDÈu£jy·-@
+åï" * *c¨+`C@A,ÀHA2Õ³
+EUH@«@T
@1
+ {*ÖDù¼>Að
+d{Ô6Ö.^áw캪ªªùÂô#31\»CR½PÄÅUUò
+hyüï_/u|hy8XøOjöZð~;ÔrЮðjò ù¾ïW5|úÖ³àÜ v]Ø s7êkv]Ø Ùwfeݳ¾&/{Í3(äp÷
+ ͤÎ[Re$ËÓ*ch{2±EQE6Ý^ÛÙø¶MuZÑs\¬QrÐi1ËÚlÙ2bVpi¹` ËàbÖ
²m½´KÍjص¢Z(¢d÷®QDÍ:QDäß%²-õ«ÌÉ!{ÉÑdddddd]
+{WGIËírà x;!ñ¸5UUUû ° C7ÞÏOãÓÓ¶÷È ZMñçÆfgùòøS®Ãm6ã3+m±µé}Cæ~ÒM¸Úï}øé¾Ûm¶ÛmµÛm¶Úm·>qÇqð2 J¢Bh *Bªà ¯ìðÄ{tÔJ¾Bý'üñßSÆïwù\ï¯
+ç>¿Ù½xø ç ØºF8SÜÖ¼=®2×¼ú*C2EáC[ݯFlV'ʯ©:ÛE¶,ë)ÙÉI -²GbLR#[å¿=3¾/ú]c®·{-ßF"Ûc®rRN+:ãÔɽ1[téý°Àv$ÜÚ#UsîÇ».9éÁ\¿¿¿Ãå¾o¿p£1]*åcg¯¸ 7` s<úúùõ5lvø ìïñý z>|ùóçÏp ;vÞÞܲ;m¶Ûm¶Ûmeº d ½í¶W$¶»e´æG-;%û@ ïeì½ý` NÇojͲÑ+²Úq·-¶Ûo° =à x r ðì@°õþ Ð;ÃQ-H×myN¡RqU.ª¥Àc3TEINj2¨JrÐ¥¹"¤n]fY¼^mW^ilæ³gã8prãõÔ¨}aüaâÃsÐ
+äPd:Á¸`50°à d'Ù$úCÔ.I;§¥HôOtõ,ù±1¢¥U >ɨl0m$Øv 0 }jIpUsiÍ61cµkcuqðäÝÍËпéß*
&&aUVaT UPU@U T UPU@U T UPU@U T UPU@U T UPU@U T UPU@U T UPU@U T UPeq¦@ ÆÊH9!T#ªÎUçB*oB*oB*u¡B:Ð©áÆºë¯q¶Ûm¶ÛmÏÇÆ=ßM!:õëׯ^½wO¹îø I:tª®v @Û Ø
+¶Ûm·wAR¤¤N¸wnË 5v
+¶Ø¡7½UMñË˺êõ 0 {JÖ\jõ< 0h 0 ± !m¶ÛbʪªªªÁ5ºr o¾þ=¼wÞ«
+ª *¨ ª ª
+ª *«·nݹ°à&)UUVeUT ¹Q¿ªR¤ÍSk8§^8£+pfÐ)Ùt@Ã&à@o7L¥¶üYÆåÍcÎü^¿*§[
+AÀªÛé¾µÒï¥YâÓï«x¹p&oë }>õUUUÜDÛú@ÍvﳩC$ÊECRÏ«yZ};ÆJB³n·ÑêɼØê~ñ»ø¿}
ôÆÖè[«bÝî7rE%Ú9¦zÝI'S$Ör` deD P ZªªªÀÕõBY°òU=o&¾cÀï'-eÎûæ¨UTv·råæåÊØðH©)ïïîî¸þ«õÅÅÅïîº:@éNó>@¾î"þ»îöên»{ç</ û§*Óªl¦È~)LÜâbLAýÔÀj9NN'õ;ýcüHÚGÛp|9Kqdät'gC¡ö¾«ø¹úOi?lm¾{Bl={Cwæy>jh|ôºPø~ÉéÚ>¿Åñ~{zvúþbyÑD>!)K(¨§û"
+"»Véz9Û·pLBIþd
+e.-¶qK]6gQq<c\´&.kÍ
+ Iä;C)2ªLD!F HæØ*m¾æhÊNúí®³ ÍmDqbÃ|eø´@ßæToZgËÓ9Îp õ%}¨ã<=©@3¤pyºbZ2&ø;ÝG< ï
/èòañÉB,ä='E9JTp!la²ÐE!ð¾Ê\'32m8 Ý»cÖDÑW~ßùKÒâDë?Åsé×:cCIÆßÆÙ²J<=Üw6 IH$̹$ì .I"øÛ$qøìN·¥?l9þÉнêÊ¥ý£ö}ÇÛ_A¶{vñîïI!/6úãÒïÃicLßv8ÏZbbÞG¤ìqâË~}ò¢DG/±\êHß\.f®±sV8®&4ëlL_W`u8qáËm'× Z
+»
+u®uîÇ:ÛÊi¾ö£¾u8gFøÞÒDEßrxôÓlô9os\ªðb£¡»¦üfP<7¾jªî¾1Ç "b7¸»× $n³'ÑhqU×ç9¢ãQÁ'¶Î
¶ÏZ|,d)ûâÇJÒûð"÷¤N¡|$ &suJë7Äå¯Çë-Wî×Úþ÷÷þ¤~]3%þý#A«*¬Åk~«$öÙíC»¤(nÜÊ
+õd9³¹«I!E
+Úõ¢}Y'Nlî`méÕ¨¡^´Po«$§6w06ôQAízÑA¾¬ÙÜÀÛÒB=EµëEú²JsgsoJDõ×êÉ)ÍÌ
+½1aê(FÞ´Po«$§6w06ô¥Î¢ÛYA¾¬ÙÜÁÕ¤ÕÌ
Þ
+eú²NÙÜÁÕ¤(nÜÊ
+õd9³¹«I &Pݸ5êÉ:sgsV@L¡»pk(7ÕtæÎæ$CvàÖPo«$éÍÌZI2íÁ¬ ßVIÓ;:´¹¡»pk(7ÕtæÎæ%ïµt=?X£íúÞ3ÿ-¼>׸ßY<ù¡s÷¶S:ZU¬-(½=?Hãù$5Ô¾Ã9SÍx¹Ôª·U"Q¦Ië.BJzзW]¡_^¿U¦~£¾¾;ðµ2K8ðªunñMÀD£9jÙh2·y÷ã3Ä«d;'@]k»&wã^yÇLµ#ïÝý·Æ1Ë7eGI°}ðß<ªªªª¨ «@H
+k 2ªª« ä·Ý]oWWc#zVåT*B¨¨PäoäQÉß÷wï϶-wÚ§uÌÖ»ãM¯8F1uP§4¡*ªº»©M,4Csx²¡Íê1vÖu¦º¦Úôfý¦ úGë1[w pÖÌQ¦¥
+i¸öç|íÀüuß[=³Æ8`Æ)·:
+VacPÖкҵ3§LAá¿.Ûí¿ôCxfÛøán¹ÚåAáÑ*¢FçtåIiÁ§f¸¼g\ZôEÍq×3,ñ¢IYÂÃ-k-r¢"è/{Î8ã5ÜûêQ³äyéªÄ»=>aÁ=Ã)ÝRfnÁvÐÝAÍons¶£x§\c¦½*&Ò)£Ôw~QèÛNþAÏ®ZW>|¶ÛïÆ*ªª¨ ª±s*ªª« âëÃìó{lpðÒýü¼¸âc¡[F5HkI$MlD¸Üë2/n/¦.¡TÄÄF)
®Ó:Mq²ÍöðÕ{è6÷ã+ËÂæ³÷Ø/¥QTÖÕ½¹ç®-ÅTâ_µczLLKk(Xµä¶fkðcQ§01ïÂ! Çc\TaÍ9ÛV»ríË8ã¢&1skÚ29 ÖôË-ö»ÒHkî®\q¼ÍÜåÎI×9bðôkmíßÃ]÷ÃjzBI¯qáVXJ«¹O]1Vk|ç<I_íkêå¨ã9diưÝÜDpÆAÍì͵¾¸¹9Û~hçiת kØ`!©RNHHýìÈõ*¤J÷¥À¾êèß3J»å+¦ûuà4ÞS·kc4þÏ©=º|O¯EUU UUU\½ü.<
PØ7ñß~¾§¬måÏ£¹.klLrg]smX>í:8oO§N{wÓ:Ó8α;÷ÐômNú5§3
+i'iÚòÎ ghÂxåxÃ.34æÚ õó
+d`ð
+"Baf:vçgÃWcúºNp
+ at Z© BU$
Q
Z2
+ú$K´AkôÌÛµÆüRëWK§Eë¢÷»©@4u®úðßk¼o¬î÷1×|àãZ]LOQ\¼¼é8ιvëmN¤4o× sükÕ,A¸6
+<îH¦3{U:sߣ;dwr.>E3Zqfn··DiÚ+7MtÓJ×$ÚüÈjÅG½7¾{wa$¼I#/wÃ/~É*s9 ]Uتª«`ñõ}3¬;'t
+¶5yÔÍh7±»âg1©dÀǼkx&s0ö#uùãÝo@®zÁ¾.ø³¬Æu·9Ò¸â9̱Qv^6 ßÑÈ;¯a:p!;¾ù#¯£Ng»ôERñÅÁõÛ×áW}H~F
+C2ækÎoÀY1óy¸]("FJy¤pìàôà9âû`¼q¯lg¼õÔA»tÅÝK¥1.O.RP½¶©k¿sr{úÉ6ÆNº!÷ÌMDAYÂíf«~EªsxÌáÙ
+ge{OnÜíÛ´nö³£ läí²¼T
ÒFúf¶ÅUïLLéØ'¶àÓû¹ËJ]AU½q}Éjz\'@usuïÚlRõÚñr¹ö«&ýû3YªTkµ®]âY5ÉÂk)2ˤÛG|gÎÞ«[KêQ¹_
+q×-Ì¥´ÝSVn×´ËXu
+ÁÁ)ÉÁ¼ Ýh$ë Z bõ^þ²z&®ýùò¬Loã¦]|¶ë§zê ó¯Ö`'ÝÒÀ:|,o
+ßü'47ZÒ0pú¯O/9H³KÜCuìej4$q`7¸éßqSw×T\wk£6ôsã¶ÑÞ<3£;Ý5{Fs¤[æËåÏ]¸åºr½{iÛÌð;¦ÛöÆ:v¼Þʱ×^ËëÓæ
+5vÍâîóuXTºÇYaÌG¸éÏ^ÿîïç]áã5sãÃÄÆVÍo×®ÜvÒ§JÓ{iÎM;5qË;W¯<íB±ðÛ:{ÐI}.z'>Ùå¿Z¾¸×
Ä,¶q¯uòø¾VV
+ùÕf¬®ë:ÞyÓM·ÚÍó¶÷ûÃÕ?|T?wý
¦rêM eÃJ«ª¸"((êùc
+cì8ä :?x=áù¨×ÈæDþ0|ábcþâÇçC, ¨PÔ=ÎùñÂUÒP)úuJ¨¡,?Lp°þСÔlÔxÃ!¸ÀÀØ9üÐn¿ô zý°ÿÀùl( Ø?ë }>ÀNAÀJaa9éÈ]¸ª¥UE5X|øÍnPÐ((¡
!,68&w ;ÏÔt¨h¿(øÁÀ¡<Áî Ü('u ð
+Ê0Ð5$öÁAó ?!ü á)Ý'X'XhÄÁ<Çø|øO #¸49þááàÃ@û¨$üõçI uäIA
ï
ؤ vØL ¾ðâNðä aA,4ïûÐAB* JA)¤JA)¤JA)¤JA(K4£õI¾`Ý>å*MµlÁ: à*!ÜHÀ}UV ¥#`¨nDHÜJ¨AõvOÈâJ%%%DR) 5|êwd%1¼#$Á¨`,> î
+èx(8Å)`R a<E~K.IÈ\7ÁaÀs @
+ÙÈ<íõ@Nt
a;®Q!#é¨x#`A®xÁÜÛíÃî»
+I°yw ûà~â ¦*d`Ä¢A;&RH{Ã }°NÁA> ôhXp0Û0{¨|âd #ôE(7 PLà>O zÁuÁ/!¸NHF`n
+ÃX(¢X¢(¢0ÄplÔM³0üxÞ¸;²Hä %A&G¥òÜ'}pÐ>౨ê=ÁðA¸Op8 a Èæ= äâ@¸DûÃÐ5
+dnŨè=áî °tnañA$xA¸&áïá÷
+>'p;<´HHÀ¡9c¿s *ÁÒBIyÒ»ú|pÀî
+ s<§/ ûÂvv©îA$TAAüÔEÊ;mÂÇaÈ' TÕ"ä<° mÈ;âÛ~ìúwiAA\¯Ðp(sx?=OaP>A.Þ!ú<â¥TEQPzÈÑÀn|{ÂLåïó:8xA¨|Á'@õð¼ "wö|¸~øÌv
+` ù >ðwÀ,n,(<Ôê ÈXu
+0<:Ð2 F¡¾£fLûTðÜæ
+¸* AIE$³ôu¢ #ÂÃ|Ä(0X]èXGÒAO¬24 ³°`<þ!ùµ¯vGê
0}ÜÄHèÐLüöÀO
+ü±ÙäÂÂ<Eh
+¿lT-,$b$G§mZÇ]Cí¸pha˸; 5©+M0À=À'k MÔ#¸?Ì;äÔ~* `Èï; 29u PÂDHà*$$tÔPϰàç6á cÔ(Õ
+Àl;»ÈI#¨$vl8
+0jèXMCÌ<BPs û¸IèyPî è ,ÃBXà'H6©"$A÷C@üâdA(PØðWèm: " "§¶ |ª">¹E1QTS*ÁèáâîßÎÊHHó
+h4 AÛPó P7px w
íÃÝAA8ð
+5°A)A4 Ð%õHÁ(>@=CÀö¤I?þ.äp¡!ýÛt
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+-p -v --of xml
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000f06f" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffef" allowed_cpuset="0x0000f07f" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x0000003e">
+ <info name="DMIBoardVendor" value="TYAN Computer Corp"/>
+ <info name="DMIBoardName" value="S4881 "/>
+ <info name="DMIBoardVersion" value="S4881"/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="Backend" value="Linux"/>
+ <info name="LinuxCgroup" value="/dummy"/>
+ <distances nbobjs="8" relative_depth="1" latency_base="10.000000">
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="8589934592">
+ <object type="Socket" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="8589934592">
+ <object type="Socket" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="8589934592">
+ <object type="Socket" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="4" cpuset="0x0" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="8589934592"/>
+ <object type="NUMANode" os_index="5" cpuset="0x0" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="8589934592"/>
+ <object type="NUMANode" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="Socket" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="Socket" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <info name="CPUModel" value="Dual Core AMD Opteron(tm) Processor 865"/>
+ <object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets.xml.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16amd64-8n2c-cpusets.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+- -v --whole-system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,102 @@
+Machine (P#0 total=67106960KB DMIBoardVendor="TYAN Computer Corp" DMIBoardName="S4881 " DMIBoardVersion=S4881 DMIBoardAssetTag= Backend=Linux LinuxCgroup=/dummy)
+ NUMANode L#0 (P#0 local=8386704KB total=8386704KB)
+ Socket L#0 (P#0 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#0 (size=1024KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=1024KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ NUMANode L#1 (P#1 local=8388608KB total=8388608KB)
+ Socket L#1 (P#1 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#2 (size=1024KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ L2Cache L#3 (size=1024KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ NUMANode L#2 (P#2 local=8388608KB total=8388608KB)
+ Socket L#2 (P#2 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#4 (size=1024KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ L2Cache L#5 (size=1024KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ NUMANode L#3 (P#3 local=8388608KB total=8388608KB)
+ Socket L#3 (P#3 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#6 (size=1024KB linesize=64 ways=16)
+ L1Cache L#6 (size=64KB linesize=64 ways=2)
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ L2Cache L#7 (size=1024KB linesize=64 ways=16)
+ L1Cache L#7 (size=64KB linesize=64 ways=2)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+ NUMANode L#4 (P#4 local=8388608KB total=8388608KB)
+ Socket L#4 (P#4 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#8 (size=1024KB linesize=64 ways=16)
+ L1Cache L#8 (size=64KB linesize=64 ways=2)
+ Core L#8 (P#0)
+ PU L#8 (P#8)
+ L2Cache L#9 (size=1024KB linesize=64 ways=16)
+ L1Cache L#9 (size=64KB linesize=64 ways=2)
+ Core L#9 (P#1)
+ PU L#9 (P#9)
+ NUMANode L#5 (P#5 local=8388608KB total=8388608KB)
+ Socket L#5 (P#5 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#10 (size=1024KB linesize=64 ways=16)
+ L1Cache L#10 (size=64KB linesize=64 ways=2)
+ Core L#10 (P#0)
+ PU L#10 (P#10)
+ L2Cache L#11 (size=1024KB linesize=64 ways=16)
+ L1Cache L#11 (size=64KB linesize=64 ways=2)
+ Core L#11 (P#1)
+ PU L#11 (P#11)
+ NUMANode L#6 (P#6 local=8388608KB total=8388608KB)
+ Socket L#6 (P#6 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#12 (size=1024KB linesize=64 ways=16)
+ L1Cache L#12 (size=64KB linesize=64 ways=2)
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ L2Cache L#13 (size=1024KB linesize=64 ways=16)
+ L1Cache L#13 (size=64KB linesize=64 ways=2)
+ Core L#13 (P#1)
+ PU L#13 (P#13)
+ NUMANode L#7 (P#7 local=8388608KB total=8388608KB)
+ Socket L#7 (P#7 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#14 (size=1024KB linesize=64 ways=16)
+ L1Cache L#14 (size=64KB linesize=64 ways=2)
+ Core L#14 (P#0)
+ PU L#14 (P#14)
+ L2Cache L#15 (size=1024KB linesize=64 ways=16)
+ L1Cache L#15 (size=64KB linesize=64 ways=2)
+ Core L#15 (P#1)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 8 NUMANodes (type #2)
+ depth 2: 8 Sockets (type #3)
+ depth 3: 16 Caches (type #4)
+ depth 4: 16 Caches (type #4)
+ depth 5: 16 Cores (type #5)
+ depth 6: 16 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 1 2.000 1.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 2 2.000 2.000 1.000 2.000 2.000 2.000 2.000 2.000
+ 3 2.000 2.000 2.000 1.000 2.000 2.000 2.000 2.000
+ 4 2.000 2.000 2.000 2.000 1.000 2.000 2.000 2.000
+ 5 2.000 2.000 2.000 2.000 2.000 1.000 2.000 2.000
+ 6 2.000 2.000 2.000 2.000 2.000 2.000 1.000 2.000
+ 7 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.000
+1 processors offline: 0x00000010
+5 processors online but not allowed: 0x00000f80
+1 processors allowed but not online: 0x00000010
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c-cpusets_noadmin.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16amd64-8n2c-cpusets.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,99 @@
+Machine (P#0 total=67106960KB DMIBoardVendor="TYAN Computer Corp" DMIBoardName="S4881 " DMIBoardVersion=S4881 DMIBoardAssetTag= Backend=Linux)
+ NUMANode L#0 (P#0 local=8386704KB total=8386704KB)
+ Socket L#0 (P#0 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#0 (size=1024KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=1024KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ NUMANode L#1 (P#1 local=8388608KB total=8388608KB)
+ Socket L#1 (P#1 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#2 (size=1024KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ L2Cache L#3 (size=1024KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ NUMANode L#2 (P#2 local=8388608KB total=8388608KB)
+ Socket L#2 (P#2 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#4 (size=1024KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ L2Cache L#5 (size=1024KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ NUMANode L#3 (P#3 local=8388608KB total=8388608KB)
+ Socket L#3 (P#3 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#6 (size=1024KB linesize=64 ways=16)
+ L1Cache L#6 (size=64KB linesize=64 ways=2)
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ L2Cache L#7 (size=1024KB linesize=64 ways=16)
+ L1Cache L#7 (size=64KB linesize=64 ways=2)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+ NUMANode L#4 (P#4 local=8388608KB total=8388608KB)
+ Socket L#4 (P#4 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#8 (size=1024KB linesize=64 ways=16)
+ L1Cache L#8 (size=64KB linesize=64 ways=2)
+ Core L#8 (P#0)
+ PU L#8 (P#8)
+ L2Cache L#9 (size=1024KB linesize=64 ways=16)
+ L1Cache L#9 (size=64KB linesize=64 ways=2)
+ Core L#9 (P#1)
+ PU L#9 (P#9)
+ NUMANode L#5 (P#5 local=8388608KB total=8388608KB)
+ Socket L#5 (P#5 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#10 (size=1024KB linesize=64 ways=16)
+ L1Cache L#10 (size=64KB linesize=64 ways=2)
+ Core L#10 (P#0)
+ PU L#10 (P#10)
+ L2Cache L#11 (size=1024KB linesize=64 ways=16)
+ L1Cache L#11 (size=64KB linesize=64 ways=2)
+ Core L#11 (P#1)
+ PU L#11 (P#11)
+ NUMANode L#6 (P#6 local=8388608KB total=8388608KB)
+ Socket L#6 (P#6 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#12 (size=1024KB linesize=64 ways=16)
+ L1Cache L#12 (size=64KB linesize=64 ways=2)
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ L2Cache L#13 (size=1024KB linesize=64 ways=16)
+ L1Cache L#13 (size=64KB linesize=64 ways=2)
+ Core L#13 (P#1)
+ PU L#13 (P#13)
+ NUMANode L#7 (P#7 local=8388608KB total=8388608KB)
+ Socket L#7 (P#7 CPUModel="Dual Core AMD Opteron(tm) Processor 865")
+ L2Cache L#14 (size=1024KB linesize=64 ways=16)
+ L1Cache L#14 (size=64KB linesize=64 ways=2)
+ Core L#14 (P#0)
+ PU L#14 (P#14)
+ L2Cache L#15 (size=1024KB linesize=64 ways=16)
+ L1Cache L#15 (size=64KB linesize=64 ways=2)
+ Core L#15 (P#1)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 8 NUMANodes (type #2)
+ depth 2: 8 Sockets (type #3)
+ depth 3: 16 Caches (type #4)
+ depth 4: 16 Caches (type #4)
+ depth 5: 16 Cores (type #5)
+ depth 6: 16 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 1 2.000 1.000 2.000 2.000 2.000 2.000 2.000 2.000
+ 2 2.000 2.000 1.000 2.000 2.000 2.000 2.000 2.000
+ 3 2.000 2.000 2.000 1.000 2.000 2.000 2.000 2.000
+ 4 2.000 2.000 2.000 2.000 1.000 2.000 2.000 2.000
+ 5 2.000 2.000 2.000 2.000 2.000 1.000 2.000 2.000
+ 6 2.000 2.000 2.000 2.000 2.000 2.000 1.000 2.000
+ 7 2.000 2.000 2.000 2.000 2.000 2.000 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16amd64-8n2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,82 @@
+BZh91AY&SY±ñX x¨ÿ¥ÿø½ç÷ÿüÿÞ ÿïÿð% !"/ø`+|À ÇÈ>÷Zè{Ï22ô8¾ oxßBò|ûMB^O<¯< ®ð·½Î1¼½áâ<ö^^^^÷²sÕÎ{½pzô @ PSLÿýUPÿÿUUM7¨ýPL À À F))5PÈõ=@ 42 h ú Æ¢ Rz L L ` dmA©"hM5
+ "<TýP! ÓC@ Í 4
+DÈH&©²SÔô¦jò¦é2
+MFÅ'ð¤HûÁ?ä¾ð!R+"þQ
+8 V ÿ ù?àÁX ~h' MQ=ØH+Èd,#q²}ïéýÿÙþ§àÒ#M4ÓM?«û_·øßÇý+¥ºÜy^ÁUôÅOë|$HÁT(ÍòQJ*)QU ï$"óïÎÞ~~{ùéi+A%´ju²
+ âPÈ/30¤QI"
+ êT âT*Që֡ɶq B« MA)¡® ÐWW«I]A+¡® Ñpff ѹF"ÒËcrI$¶ÛvI$§ÕmS¥;d»$FáÓpÌ7
+Ä
M]»]«tæà'unÛ¼c^¤N©6±DAC1E´QEQ»lIÉdÊi0L&IÒi4M&(aa-¢(¢¥mĬKM«»vI$&6ÛvI$:ZY+vÉ${½êÛ6ïzÛmɲf:ÆX°½WÃ;Yõ;YÃFm¥YDHQE
aD]¡÷ÛFúß~6E0"Q¨aAw Ûn HoJèp[I- jY$ªVÉÒLaTUTDBÙ&!
+P-¡fÌ,,¨IRhÕ*R+HFF@$VF©T(²5«FµhÖ¥P¨ÈITª *B£!"nëÁ5Å
+É8h¸^$75&-²@åÄ a$º$$M×§MiE&¨ E¤VÐMÐ
+âBÜ(oVQ#!!!!$"¦âá©*;¹ÀµyÛ
+%Mæ)$RP HµM·$Òs²NRï.KbC[´¼¢DêMÔT¨H¨T=è)Z¨$ÂÅ%!AAJ(T(T*Ðj¥± YËi
+EUH JÂCø¢|ÁÔ>!ìÈ÷¨i=ì--¨ZÞ൪ªª«äÈÁ{¢ÒÖBáy{¥ªW¸fªª °d t¯ÉëòÃ×áaàØ7¿¬ö¯yjºIÄþ
+ç1©mÝ&)$ô?Nô§Mk_¨ faé5ÛÃ3 3Ì6Ì30ò³Ì<iç9«¯âHJQµH¨Ö¤T]5S0êéJR®Ysoü·pÆ#'ºR5oM!ÎI¤#}æ¦eÄ#ÚB5 A¬æÓ4äÙDÍo·
+ØÄLÎN1ÖOé
AÓ¥AîMô,¢/0üÜOA7 vÒÒÒÒÒÒÒk´ètyÇAîèpÈ8Jªªªªªª¯ñT¾:çÆØÛ5ÓMwI¾zyéßOGÀpøÀ +¾o<fÜ©¯x > ö|¾sÊ{ç¯m¶ÛP [ni§.6Ûm¶ÛØ|ò$RBDµ!ñDH~è"½2"ØññéSʺv´é]Õ'^Ø×+åHc;kÀ,ĺΠ7ÕçYß[6õǪdPÏm\
+èm.<ÌÃ%5`Cn-~2äç¦Uoίmq{A½^Xay/I¦²o¯^´T½y [ìg!¢A¥i4-+0©&Õò
ËæEkKÖqû¡pé!&¦R«uü¹o·,¶+b5óëÚöð×ë°6Q±®*ôÉùò1¹_~|÷çZ[å¦×\ó×_ßöï¾ûï¾ü;vÞÞܲ;m¶Ûm¶Ûmeº ( ;{Û/l®ImvËiÌZw6Kõ ÞËÙ{ùà ÞÕe¢We´ãn[m¶ß èöCÐ:x(=C°zPÌ8rã^ÝÖÅb+QÝÔ»ºBª»Ñr®áT¬JäªJ§V;¢Jâ%X¡n踳¬]ùCæ
+Ì7åê¤:0úøÁÞpäÆÔa j
+Ä, òû1">õA:
$x§õÊ«"DYÂi%Õå·` $I$Û ·
+ÝøüøûñÛm¶Ý¾géð{sz\æ-C!ÅK,0Ã0ª¬0à *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ Æ1cm¶Û{ï7 @ m¶Ûg øª&|eB@¤$ÊUåB*kB*kB*s¡B9Щ×lóÏ=¶ÛM4ÓM4Ó½Í$$m¶Ûm¶Ûj;â$ßzªÞÀ A$ " ¾ûï¿,¤IƹréÇNÀs I$@VswwyÓ~ À r¤0¹\Îf@ D I$A0 mm[<v[%³$ï¾<xê«<xÀª ª
+ª *¨ ª ß}÷ß§N8½%ÉfK2Ø 2\À %ÿ6Û,²wuë˹§'=¯-â{3Fk
+ÝÉH·a`ÁtÊ[!Û\¤i<Éà£à `p0 ÑP8÷k.ª¬vlËÞvlå,ÍòòØ[}¿@ :Ë,Û]Y&k§]AÉEC
+G¼ñ&!¥C´RD$YFIsưw¨È¾ó§¿÷äß\mn
º¶-Þãw$RY]¡CµÏ6ÛʽÕo®O/^ jI5bI$I$ I$Ï</ Kd¶É1黲xÍÝÔîÙ8Ö®&(*L6nï7l:«E"ð¤Oú ùêU«T<ÿ¬@pÂéúßÑtâø_ ÏSK¡DØGeØ<ÝCÏ;àÈ
MÜÕ
¢8 Øu2(XT~=}cüHÒGl{o,Ybn8òþÏÜõîð}ù´J:ô¾w¥³ß³ã©ñð¸PùÞSÉ×P>ÿÝû7ñyyíÑq I¨§ºzäE=m+ÕyqäÅMFïX|ç KxÆ1¶)%Ñ"EA}×®ûLë9¥ ½BJÀT#¤
+ J Ô h
+çlÙI}`lPC" óªRc3}äËm¤U˺-ÊvNd4´D#Ъ2ê<̾ 9£$òG@ßx¾ýiÒF¿:6h;¹"8³7[C[ÅÄ">© fl6Öµí(³rT_±õ¾Ý{>p;uα Ä Ä;öÅïqï=þu$ jI5bI$ÖI$«jÞRÛÛ÷oÂs-áP¶Õ(GõÃçM2ç¡pPiÝ<ÁײHÛÊHUëÃ^ÜKNÂGèmµk¶ºÀHßµ
*üÒDF·dqV¦,-mo¶S*ÙUÇ@plÓ-vÊ`EúgÀ+zåÛ¦:N|üXl÷zÛ bc´Y9$Åí;T¯ÛõÏ©¤«uB£zbPÀògâï|aRÞ³
+ö
ëç·ç:éfê
+På¬#>[Ó-·ÅZe[ÔÎõUIïnÇ¢"äI,^ÞÙ¶í¶*&¹
+Grôæ÷<?)ùÇúô°þ'ïÏþïA]óé^
+
+ý5{l÷!ÝÒH 7n
+eú²NÙÜÁÕ¤Î"ízÑA¾¬§6w06ôêÃÔPͯZ(7ÕS;zHG¨ ö½h ßVINlî`mé!¢Úõ¢}Y%9³¹·¥"zkÖ
+õdæÎæÞ°õ#oZ(7ÕS;zRçQAíÁ¬ ßVINlî`êÒjæBo²}Y'Nlî`êÒH 7n
+eú²NÙÜÁÕ¤(nÜÊ
+õd9³¹«I &Pݸ5êÉ:sgsV@L¡»pk(7ÕtæÎæ$CvàÖPo«$éÍÌZK\ÄPݸ5êÉ:sgsV÷ܺΤQ÷}/3é[x}Ïq¾6³=ÙÍÔ=ÞÕs=ÐôÕϯùcì~ àø³Ë=®<ÃuuõÑ8ÔQR+1æíP3îe¿1zìö}ÇÂôõ!ûÃ!s5ç7àm9pMm5¼¥ÆÛÇcÛqè!Ü8«|ÚÞc^YòÅøÃ2>èiצºÖºí]µ´^×$ó¤Ý@ ÔjÄ"I5¬I3 $uíÞNÎþùÒ<ö[!iaGÃÉ'uõ²$âí_ok;+ºª éfÖ£,g¯N/ ¶´²Ï `\jl¨ÃLkÖhªÅ%¶Ò|hm¥YÅfl¡h,L&x@æ;£yw.Yã¾åLJk½ö³Þ:ËÁX¬îeHÙ`ß9¶ùÒòökÆ$íH9T¬ñ:mÇM ;QY^¸ÖÙzëzaÅÜns¶Äah"§ FBB±¢»W®£T¯H¦®wËéäCg}eæ-£@'yÎ+A^J}õàòþ1ÁÎpyð÷Ãaç¤È½0LlL×E5
+ÁÁ)ÉÁ¼&èÓA'r£M&-ç"4¨w9þ£É+¦]w}·¼ÝÛ¿ÏLãYåë@ e¹
+ªªß9üZ]{J®ñã7áÎyÏØ¦òsß®5çÅbªéÝN*b&ô4/]§K~*IcÈñ¶ëø¬éÈÒ2o4ß}VºßTËS@
+$÷{cqk]óxÖtv f0µ´a³4¨ÓS¼Û~1Ñ^ÓÝ7âôéuê$1Y&.Ðcô1s}=Yó<è ðúÂô¸·O©Zs1Dg@§eѼÞ
+2ZáJåÖD sp/ èA*@"hÔgÊ 7ÔFz¨ëÇSºø×ûr® Nv9.¯Úåç«À)ãã¤I$ [ o%¶IN½þIy÷ú²iá˱MWNúòÊØôóë2É)UkÓŪ¦É,ïlÔÞC`Îv·§¨È¨³Àí¸Ip"qȬXª*-Lå´Ô"rcË>y¦ÚíÊk|r¶Y®HZÖø¾1\Í=°V0Çq&¨1W[ÕÓ"MHÒs/(Åé1 F.÷ªYms
+cïþ4¼m!'³G©õ3Ô"ÎCèNr©àBØÃe5 Cá|¸NfdÓVwnÕÎÎgÂÕ=å¹oÝpµØ
+½·«[e¹äG¦´ [ ùÚwÎz¶Xá#x©zxÞÁÖ¬[b7ªß(¨Ü á1¼¦ÆÆü[Ç&vÝÚá©$)9@ÍUÔk7´iW¦uWw
+úG Ï4÷Î dqó4gm²
+Y
+Æ="§6ãÆÚÂÁ^5zèáÛ,5ÅxÎ"æ)ßs¦%Úwì\Ïz<óÐî'ÂÔÈ.tã©Ô
+»Å4jSB(åªZùç$CÆMCªh¯n-}óé|_Ç<ÈÜ5q²ü^Ö©jRøå-$ðÔ%/«æTäCãÂpÒW9%wÄÔB#Ô¹ÞË3u,¡-7¡E`Ó¥ ÅJ8óTéÛãÁÆÖ¯ \ÎÏ~lོñqܼ¼Ö
+L
C¼£m¶Ã:ÚµLï[+Rk¢Uô¬ÙÎg1¶{ìóËoÄ<w½eÜ
ï¥Yãw fdç;:ÊtíâxlqŸÁ¸pÔJ×n*äÝ£Q¹o1ê§iÒTè3V¢ç¨o¥MWTÖz.]³Å«jÝJ¤ÞöéøëÒtÙÓ~o(ÛïúáÅ89Áõ:³¥àß:~pO(§NàÌ;hAn ¤´î.uRùÐf=1ë'fë¾ÛÕå÷ïË&n~sËb=sICºc+J®ÎïD]½ÕÅ´¦3ÙçÓJvñóË6¨¥^;»¶âlæöô-æíݺ¦%¡âSÍÛ VLb£m$1iWÄnpäc#BSi6-Uç&bµa¾¼ÊKx¸Jy7Ú£9½£F2â3¤så¸çÇ-6ßTÞÙôËØîkÒ÷㥱l«z¿<ú-Ï.2ÍÓ½lZªê«óB<Î9meµøwÇw^UÔ;æn[vï/
yóÓnÜTâ²Ûr@ÆÛo+ׯþ
+t¡WöÓl¸ôD<Zy'.kÝËû/³äD àï©ç\ÉÜöÙÖ^ß7|I6;9S~4×KãMmøÇªÌT?Å7ã-LZÓ,¬Öå¹E'þe½~ªYbªRÉT¯È-ìð
+ ò=ôP7~`Ï'óäÿã¤x.&akÂÞà\??0,±aû XNôûµJ¨¡,tceÃóÆ¡aÐ`6Âd5_ÿÂÀ¿X ùö4P?îöÈ>ÀO&á°JA`²ÜZͪ©UQLàÁ¸OñZÌ2
+
+0º
+°
+⺰Áãê?8¨dÿ8ö
+qÂxÌ9P Ô'°P}¤H¼!f(Iîä0?9ÿ N¡)Ý'8&Ã8d;xòù
ÃPHÜ
+ A¿íà íöê¥RDHüö§ çÁ¸I%Â5 Ì(~Øa$$e @ÎÁ.ÝCi:á@°K°e×çÈ&BªU¸%ÄhøiõÒ¤Ë&¡æIÊ
+
+¢"EÃ騳(2 D#T¨$5)>ð/Ô?8OrQ))("Hû#)'̧vP_HEªH0¸X>îç0PkzRÀRp ];Å5
¤CPh
+
+ @È}°ýÀ>×1Ød ÊP¡È'@ Þ$$}sÐÌ&pop]°ZápÐ;;?X4XKX%Æ(4DÐ<Cpýpn/:T¥UEJÎÀÄ tI0à>p÷ Ð('ÀAñ
+ë
+
à {âpõÝ$n'¢$H°o°2
+ p¨ßQ00Ð.aÀ&ÁìÀjt"áp°'²HH¸5¡ªTªU*J¥, ûAÎ1päGx}ÁÐ;»#pI* 06è`POMBu jÖ,3=G{á¨O0lÁ ¸#Äy*À#¼
+Ð÷fÉ
+QÀô0Ü>#´hA Ð.c/` 9Px|HH¸¡9 a×r *ÀâDIxaplGjÁÜ û6@õtDÈP}ôHCñBüp`I*
+$ñÒ÷
+àà4Ü<"Ö<ïâ
+ø9È9
+
+¯ä(n$ìûCÜ´÷âÖwÞãE(¢*¢PÔàH#`Ô$ö è`?G_#r Ì>`ôì
+÷ ﻯGÄ;ãzpP|DHvu`°ÔX(;¨(%Ôq`æ và&Aö 2fæ7÷¨=Pj4^aPJ
+HB((Ñýàá$v°]`ï
+
Ä["ÁH<
Á>Ð`dG@¸xüõf1^yû!KHî
+^Dò®v ðÍ$Ph;
+È
+[Ý"$RZ$G-Y¾úÃßPØ((>¿xw"D°4ºà÷
+À, G¨~¸;Ç ë&`µ»ÔÀÀè(tDó 0ºDHØ*$$p¡PjrAÔ0¡\4ÝÒ"HØ*$
+Áäà ýkÌ<C¼% ¤5 <oæÁ;ÃP9+°Ø'mRDIÛõ L¡BN£pnÿÚ$HúÀàANHHÂHI!#P9=À!ÜC¼
+=Ã_ !#À3 È%Aà hAØ5¸(.@,Tðf Á8 `#¸%À¢BG v}I 'ÿÅÜN$,|V#À
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+System (P#0 total=2032544KB Backend=Linux) "Kerrighed"
+ Machine L#0 (P#2 local=1016272KB total=1016272KB)
+ Socket L#0 (P#1 CPUModel="Genuine Intel(R) CPU @ 0000 @ 2.93GHz")
+ Core L#0 (P#0)
+ PU L#0 (P#16)
+ PU L#1 (P#20)
+ Core L#1 (P#1)
+ PU L#2 (P#17)
+ PU L#3 (P#21)
+ Core L#2 (P#2)
+ PU L#4 (P#18)
+ PU L#5 (P#22)
+ Core L#3 (P#3)
+ PU L#6 (P#19)
+ PU L#7 (P#23)
+ Machine L#1 (P#3 local=1016272KB total=1016272KB)
+ Socket L#1 (P#1 CPUModel="Genuine Intel(R) CPU @ 0000 @ 2.93GHz")
+ Core L#4 (P#0)
+ PU L#8 (P#24)
+ PU L#9 (P#28)
+ Core L#5 (P#1)
+ PU L#10 (P#25)
+ PU L#11 (P#29)
+ Core L#6 (P#2)
+ PU L#12 (P#26)
+ PU L#13 (P#30)
+ Core L#7 (P#3)
+ PU L#14 (P#27)
+ PU L#15 (P#31)
+depth 0: 1 System (type #0)
+ depth 1: 2 Machines (type #1)
+ depth 2: 2 Sockets (type #3)
+ depth 3: 8 Cores (type #5)
+ depth 4: 16 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-2m4c2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+BZh91AY&SYåë· Cÿó@gÿôïÿïßð `? diA&LÐL48ÈÓ&&&L&! 440hq¦LMLM2C at h
+2h`Ðã#L0dÐdÐÀ 1ÆF142a4È
+ 4É¡@`© 4OI½CHhLSO&§£)Á÷¿í%¾ÿSÒºO|zá¤úSR¼OvïÁðÅñðù.ËHÖHÒ-¥¶oYÎÒú±kùYRª{Rp,¨JIBJH²¢*Ie!h¤ðê
+üÁC°P? 4àÈ4bè±bË,±bÏæ]bÅ,YbÅB
Pyùà 4õèóýK[ô^¤¤²IT©Q#ÐÒ\À.9D¥zÁì `À©@¼Ñv[5g,²Ë-a°(±©SCSbóP91:ÄÍ%Ô
+\Øqr{Z¹°ÕÍ«
+\uUÙl ô¤¤'z!üARK=ÃÎ`qHprpta9³Ù£FELÊv¥KLËIKÍ%¤&é*Dý`Ü{eé¥Jnæ±víå7v6¢dÚzæeç7ÎFwF
#Sd^lY ¡ÐF×FÒÄäYK8K4A¡g²i,ÉÀ²N0sn©ã0§#ÈQc¤øÂ6' 8©¹³ Á@©5âÜ ò:Ôæ ¸0à{Aö`v<A@ }`þ È:Àà
+Ыˬ:ºÌ^_LRº3u¦o.½*ÒË«¯uÞ
+c3Ò`?;̰`@È>ÐvåÁÜ æ äðdäàÐàôÔàÜ
+óPwÌÀúA@Õ&í$£xúé^Ö¶C1ûáæ
+m¥ézòÒ|óóÂà¼ØT¨à²CU¨ iA.ö`ĹRH?LþéñNMéS?q"GíàüI>Wù¿ü.üϧù
+>ä§©dvï20¤ÂKöE^d©
ÓÓ)¶5+Y¢Æ,S{\¼TÉèÒf`Á<Ýs4X¢,̶ÕgpÔT°
+ÍÌ2£3y1%Iró먴Äô¬Qg©iµCɽÁi:¤´NyE&µ#ß¶çJ8
+KÍ8$çmx]½ÛqÍÕìYøX~@\Ë
7ÿÝû¾û|?vVýÖpâÅsbçÑdhñò^¼AèÛ
+l#Dp-,£SCÇtÃczy±ëÎÔ`±¥9NöàÁ§«Ú¿&¶FË#9é5Ä=ºÍ¬4;Ùà¹ÚR5Pݬ²ê3G)Ü]\ÃBó\0ÔÕiÅQf¦Ëe0úòó$é«ÔXpá-%3,Qp<TjÌâÒi×,6-ïÕ¦`®®õË_6îgnÓæ
+0ËM§N´ýê4VVgÏÄÌÆ¹`P9¹Ô±cBÒTÞ5pß3poðz0iwFLLƦ%8´¹$¨oÏ=õ;#~jÝyW·V²ÎUÖ\4rQckÏ>ð=),ìI´W=#¸8I¢M-9UeÊ_lKí¤Áºgc3
+ÆZØÉ®¦M0Ô2¸-,ËE·ÈÐÊJQвl\s7¾ªP(i¢ÊÚVÓSàk5ào7%æÌ¶T¹ÂdÛ\Ü
+¹°ælI7msyy¼Ñs®ºávfÉ1\ó8*E)Fæò¦0jj`ÁWQbQRFNÍivû3¥©»ÐåÇ:M)'HñÝ-8\´ÔÞ_4~Q0X¦Y\©©ÎTÐè
+Fèho0p 2º,¦Ë78Üð³ É«V¨ÌÐñÃiÐ|NÍ'ÏTæm.àt6;KÎûK ìc3 :4c¬´Ò)Í8>¿Cö*ÏYT^wK®û½KÞ×~Õ*ªfRY¢ªLOí?|ÌúÜU_ÑÅ`$ò} ñ4úX#ë ©Ù?ÒMgôLÎùìÀi¬¨>°Zv g¶{Þé¢t©õ§ûÍÉ¿þÙ;gÕ5OÙ*^T5yá<'ì vÄîÝ=äÒq¤qîÜàÏ@<p0>¶f}³ y§âOX=SÀòI-8¤Àþ@à)XpwÀÈ=é÷à :yN`þSÍ,èpj
+ÙÖ <Á¨@`³è²X9¤IyÉ9(A@°(A :á2û&éºi>3p83(ϦQ.PP3uh.P}`wH2H,êàØ wÞ
+å÷N3ªvKËKNS8É8Ôtù)?æÑ34@qÁ`P?ROrq|Ðå7fÀêÀ@Ñ'Âj ~LN°àñUT@py ÷¼øg´°<ÒàÐ
+¤A¡=r
+±'´Ô0`´© ppÊâ <¨.
+Èj((E`rÁÔ`âÏã0Dª·vH5Aö§¬,é¨À^h û>gtÕÛY>@NàJPvÀ¼üÓÌTéÀd¤8&& zAp; üé9$Ĥ©ýpN ¼òã ÔO`4IdØ:ÀîÏ, j
+m iÄÙ9HAèI`l¼S²Ë?ù2
+ÁØ
+ s¸ÁÚØ©JMÁÔvPìIæ
+àN È3(wÜP>@d9lØæAÞíKBàðJ¸
+§¸°
+Á¨&A`\Ptª&'Ω%Q Ô
+æ
+ä@ T8$á8àÐàê
+Á 7ã8§Æâ
+Á÷'îÁ7wÎ<Á5iÐ vÀP(i(³*`È
+Ü÷;Ñ%åâ
+@À% óèÁPiã Ù'¦nÑ4ÐÊùÀ'Ì óNô°3=R* ðà¸=ħ00`ÖwÈÀ zA¨0Ï0o*pIÈùý$ *uÍgärO½&ðØP;7¸<@èà5Èù¸9ÒÀØp$õ?ü]ÉáBC®Ü
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,53 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#0 (size=4096KB linesize=64 ways=16)
+ L2Cache L#0 (size=1024KB linesize=64 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#8)
+ L2Cache L#1 (size=1024KB linesize=64 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#2 (P#4)
+ PU L#3 (P#12)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#1 (size=4096KB linesize=64 ways=16)
+ L2Cache L#2 (size=1024KB linesize=64 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=8)
+ Core L#2 (P#0)
+ PU L#4 (P#1)
+ PU L#5 (P#9)
+ Socket L#2 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#2 (size=4096KB linesize=64 ways=16)
+ L2Cache L#3 (size=1024KB linesize=64 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=8)
+ Core L#3 (P#0)
+ PU L#6 (P#3)
+ PU L#7 (P#11)
+ L2Cache L#4 (size=1024KB linesize=64 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=8)
+ Core L#4 (P#1)
+ PU L#8 (P#7)
+ PU L#9 (P#15)
+ Socket L#3 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#3 (size=4096KB linesize=64 ways=16)
+ L2Cache L#5 (size=1024KB linesize=64 ways=8)
+ L1Cache L#5 (size=16KB linesize=64 ways=8)
+ Core L#5 (P#1)
+ PU L#10 (P#6)
+ L2Cache L#6 (size=1024KB linesize=64 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=8)
+ Core L#6 (P#0)
+ PU L#11 (P#10)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 7 Caches (type #4)
+ depth 4: 7 Caches (type #4)
+ depth 5: 7 Cores (type #5)
+ depth 6: 12 PUs (type #6)
+4 processors not represented in topology: 0x00006024
+4 processors offline: 0x00006024
+4 processors allowed but not online: 0x00006024
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,39 @@
+BZh91AY&SYäÞÍN Taÿ¥ÿüï=ßÿô½ë^Àÿïßð @ ø`_Ü
+zÀQÐÜt2T%cw Ü@¥³R5«)¤É Õh!2 Èh4ÀCT£*~ª"jC@
+A È §úÕHÄÈÀ 211110 Ä12`I¤B*4 @È ¦Ò ÐÐ 8h 42h¦h Ð*H @i£SLÈMhê2É4ômA=MÉêOÿáÎCðü'ùä%¡ÐHÂÃü ¡/`þYz°.,(íÓ?-
+î±ü_søÿùV£]u×]þñû¼ÒºÓµ}Ðë$Hà ògÄH"Z$D)T ó$#½ÍJ)J~+¤HN»øq§
ÕU^¯Û=trÞ²£ÍÓCÍ)êg5wUaÕæ5£G7IÒ7wEkyºxÐ,Ùyµ§q¶Ø|ZmøÓnï6ØÆê¨Scuë·VÒÔ-Õ½NËÖxµ¶ÛÅÍ;¶¦Ûaª¥wwwTÛyUSªuOoOÌÌIº!
B³Smµ*ª7hÃ2אּ¼}UgTDákF«Ì±¬ÖËÊÝ̲ê̶˾ôk.=5á®Sw \HÔ"FA5
+tÙU{UwÞ2æõ¦fl $9¨¤Iª1EÕ°X*)!X0ÉÐBÛÅÖJáµÕ¸¡¾fîÒq(1b±F,IÞä$FÅ2+²r£,wË,
+òÈNÎ*¶¶ÝeÌÃ-¥¥JCI£F°$ÜpÅXª¢È¥ÈDb¨(¨II*( Á$I½ TDlHÒ$ ¤±¨bU æ =¡àÐüÁ¡5ôn~k=ð®²-pª
+Ö¹ß) d>@íñWW^=ª²©EhdWBºõ|? ý¿;ç[m¶Ûm¶Ûm¶Ûm¶Ü ÖbV¥jV¥jV¥jV¥jV¥jV§Êù6FÌ3D1Ð F"F4Hht9¡¦F´¸hu«¢´ÐêÜÓK«
+ÃaXÃWaX¬aÿóè'AúªLç, ÷Òü9ü:ç?=ó¨n]J¥)SÚTr
+nèþRNqmjÖYwÀ4Ï<禼ôÎõÓ®¸ñIH©"I=¢DOP+ß=ì}»¹¹t«÷1ÛNí³ñiëå$²9ÔôµRm¿_Ù¹¦t¼×¡ö òÞ¤ë]ñÃYg»s«ë 1hélT·vþþ6Ï_â1°~ Û¿
+¹wìöÎïÆqzÛu»¶ÞÐ^ÙÖÙk½}àÛõãfû\9cÀÎ1®÷·,ôÇyå×\ ` Ã]j±Oc/7ì VCÌ,¨5
é
+äxlì@üÁè0Ð=áËYU{Ýz«òa¸X6çç¬ýAÐ2´,ðÀyñ
+BÁñ°xø\>@üAøÃ`>âK"¤È$IÔï¤ {û¯ÊÛm¶¶¶¶¶´DDDS¸
!Dk hêÅ6eÃçïá$i»r'ݹóy$II$II$IQ>¡:NE$I$R at dE$I$R at dE$I$R at dE$I$RA©r at c]H¤É$HH¤É$HH¤É$HH¤É$H#qÉr at crE$I$R at dFê]]ÝÝÝÕÝ]ÕÝZÛm¶¿'Ä'¼ø
+ (@QE
+(@P¢ª!TB¨kv+$MËm¶µijÕ¶Õ/D¡
+h¢"*§¿½øìÞ-¶ÛKV-¶ÛWÐOѳfå«m¶ÚÕ¥ÚP¥h¢"*§$%è2yyyy) 2I'}»v·nÝ»vS©FI×QI§%ÉN¥I§Ô¹UUUÐUUUVÀª«BÕDEE >ß$0òèKßX>&Ýñ3[Ý·ÇT]áªky˺I.ö^¹Ñ' BI!Ø\£,,¿>x9 0å$ ÒiÊÓ*¦rçb5>Åiû)=\sªUUUUUUUUUUUUU\ " 1UUV=á '%ÐùÒ{>ÿßþªú>¼|)õgïRO(|²]du½]:ÜC£ë@ê}iú©îõI§15·n8}á9N\jüÀ´ÿÔ6
ÿ¬LNC=¦âÂÚ
ÖK
=='!È´ü?áçiwÇé?²OðþïÏÐ&°×ñ}^Nnäw%ÉUR¾ÔI)$DÃÞÛíÀý¤ð¢ú_×_D¦ÀÎì9â£Ë$$×]fNþι®ÇÈa`Keî%î¹.B¡
+%k $:0¤"SA30§%dz'Z fµ)ÙG·j[NéȱÜ(ɲJlDd ¬òh7ÝÑhºÕ§Zï_Oƹ;gyÃV¸ïyEáMj;Ù4Ƹb7¢hýªß~î
Ѫ'%*£]3U^JVf½5:7²{HC0úp8ÃνkÓá<ù?0&mUUUUUUUUUUUUUVÕUUZ|| \ ÄéÓmyQöÒÝÚNìbrú+9ØÍK~þü- ÍfÎÛã9Ö56ªwí§Úö¶ù¢êRh/d8ZÒOãç
á²@ÛÛ£oÀøkì
+VT7=¾¾ s¾õ¾ÎrgNüíÄ^¶×¯W
+q4ÙÐH®á}¹q¾ü³&¬AnÌC^[Ù</µ}lÛqäítò
+×H! ùÈ2 Étt£Ì`±,aB+&XȸEðhw÷.ÙÝvRG'_yrí×e$q"xEÝsC³rí×e$q"xEðhw÷.ÙÝvRG'XºªC³rí×e$q"xE 4;8÷.ÙÝvRG'_yrí×e$q"xE 4;8÷.ÙÝvRG'_yrí×e$q"xEðhw÷.ÙÝvRG'_yrí×e$q"xEòùÁÿh×sÿ{Ï]ç[ÀHÇÀöcI-§¯\aîÏzráÆ÷Z°Í«;òm.ºÝÖÃ{Ýôã×.:Sj¼NM«sûä:`$FR¡J¢äê®øæEª«;_{gß\ôæ½4ÿ nÐ|Dãz$±QIBo×:Nu]ËÛ-ÃâGïdß:[Y,n×ÏvwÝÔ½=Gða$Þ=³Ö<g]9Ù}hÕ
.ëuÅfÞ±rZ¥ß³kme¦qKQ:g7Z'ój°e¡
+¢i,³^Þ°$Þ ÷Ù¹cíNo at K©8àªI'~;ï{3Å5ëÎI%|©ãᨪÖ;sXzMfòqÜÏî!'ÔBNþcèéó~ñ.¸oÎx¦÷älÆêÜõõ^óÄÍë_6OÏp¯}y¾¾9×X ê,ç
+|.º2mý¦,°¢k©X¼Åkç«£s-U{,~:ñ¯=÷ÂèN·©®¶äð½rw¿YÞr²@ÐÖjSÂs^ Lä<Y
+µµ£
+kÖmGÖ¢÷ÝKÆ¿5¸X xà®ý(¨w±hWó#ÙÈUXðV-UùÙ¢¦ù³zä:ÞÇYÒs u§âl!9_0×ys^»ø|w¯ï¨H²u½sÒë¼UÇ ñË\kòPQ5_;ë N/sÃÖüo½|wvOsßÎ@ TÍ4È&¨
T!*$Î3Ì£Z¯Þ÷swIÆ-jÚÖA9e8ç±¼;;²I ï;ë® {¼öììÎuã$d
ìµÄï¬ÒUI6Öï¥ü~àæ$IÌHþ;rÛlºâØÆ´¹©àl=ã¡¡òèk,:³®ª+l 0$Òk
| ,ï <:¦aÇÎõ¯>r¡"É|®ó:À$$¹Éö¨j«ä¹m¾-k-¥õÇ(§~è¶mO®0ÖÑ.»+ÝNÀ£ªeS®¶è!<ØUbùmXíÙ®2 WÖÀ:õë³°ÙzÍß^¸^YëP
&Æ7Ýo (s¶fmÖë`ÐÞh»º«Ü\¹O7×ͳyiB"¨:¦ÔBoà[1[m¹_[ì
+¶PjCv¹µ¥±&¬ÕÓ> Ó¥wËÌ¡xÁ°5¥ ª},-_YZËßRñ!ÆG>Ä$c[þD.n®ì¹âËie¶,¥+M0E{kÎv&uÉDN¯o8ºÙ ÚUèåß¶_Iñçµ/£ÊróÛÅ/[6\×W\éw7Ò@Í:_:õë{ÎÏ]çI½']Âå:=/6ºÐä±TÃ%³¥)Bó0ºÈë6jï$ól6Zwa:7<JvnÙ¦%%G!«'NÕéËr3ÆÂD¯bÉZYÐË8Öì8Ã9£
+æZQJÇm-M^yñãE,¡Ë%¡` ØZgk4âÜù§Q2ζÅùg\ñlZ¯Ç \6\®èg>IÑ8í¶z«zé{O*UÄw¾y³æ0Öл 5ÌK|3Äî¥Ýï}ëfL@Å,µëÀ <+Î)A:·{À&(7¬æÄYе¯µ´ÏÞ¿éíyu×[ö~ÏëÇØ
+ #Îvh-z
+øoÓ\ñêù@?,= | 3ïUUUVªª&é
+ÿ¸H[_£ýCéÃõUÃ=ßHx¯ëư_@ý$=Ð{}pÿFa?|>6
+k®lBÄ,M|¿Ã·!±4 Z¨{(YÛÏ$}Oó'xyò'´0¿¨L
Ðx éPNzÂÁ¨w0TC |.$IùHt!¹
+0¸~¡ÿ7í!í¾Ä<Ä:Q¼ ܦ}"MàÈ}!AÑ4¾àbB$Ì¢Ä9â[¢á¸PpBÁa,L0ù2ÐI!,X at X°°±aaaQ°Y«?ïAÌ!!($4%PjB¤CiBªx`IP¢(P{rw
Á¤¬ä¤9CÚ øÉb^ıYpvýY®-Ì+}6'É
+%¢gâ·éñåçßäC¨Pn
+A$ýÑ"OêÔ,²°9áà tùÈYb¡2$IÀy× }½bDI××Z
àÉ<$'¼>o0¢à»êÜHÐO`HpuoØ((/ {äq"Màò$°eAbIÔ²Gªä(L%plØEÂ=²&¢h
+ÎØOp~÷¸:ºàHå 7
+·`ßuPx¶"jo?7³B¬ºCÈI<|¢x ìÁ`º$~ïj·ÙÖÞD4
+¸z wÁBDÈ\5^=¤@sðuäDIzÉná8D0«gÔýpÈW@Û`ì
+ð õPpa©bD5ëæ
vèCR ¨$¬?ü'väp÷;äGÖÕ dt5ÃÃë×ÁæòuYáöÂ@ñþ"O!"O@Ø{H{ &ÀàpÆ¡èI;ÆßAûþ¯?^ ÀvCÙùðyÌ(
ÌCK ï ÀnÜI4
+ná¼Ï¥Aä@ðPJ
+9DX9ê À^HP½}\d
~ËÂp°âDí{Q:PhëY¼ª¤"JDÄ$IS¿¨`
¸h°n/|¢DØ
¡ æX
ÈhÚ=íC°P+Ä
³Ä1Ç$"Nab"M4&T·¸y'ð h(2N¾ÊMð Uø!Ü'É¡öõ¸!ë¼7$xsêD<à Ô:a:L·"DGîP!Ô(:Tªm¥ô }@~ÙG:"¥Q* Oâ'°*B$³¸0BØh è ¼(((>߸Q¡ñKhC,CÌ©
+@B$ÿw '®ÿø»)Â&öjp
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+-p -v --of xml
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x00009fdb" complete_cpuset="0x0000ffff" online_cpuset="0x00009fdb" allowed_cpuset="0x0000ffff">
+ <info name="Backend" value="Linux"/>
+ <object type="Socket" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00000440" complete_cpuset="0x00000440" online_cpuset="0x00000440" allowed_cpuset="0x00000440">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00000440" complete_cpuset="0x00000440" online_cpuset="0x00000440" allowed_cpuset="0x00000440" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400">
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines.xml.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16em64t-4s2c2t-offlines.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+- -v --whole-system --cpuset
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,53 @@
+Machine (P#0 Backend=Linux) cpuset=0x00009fdb
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz") cpuset=0x00001111
+ L3Cache L#0 (size=4096KB linesize=64 ways=16) cpuset=0x00001111
+ L2Cache L#0 (size=1024KB linesize=64 ways=8) cpuset=0x00000101
+ L1Cache L#0 (size=16KB linesize=64 ways=8) cpuset=0x00000101
+ Core L#0 (P#0) cpuset=0x00000101
+ PU L#0 (P#0) cpuset=0x00000001
+ PU L#1 (P#8) cpuset=0x00000100
+ L2Cache L#1 (size=1024KB linesize=64 ways=8) cpuset=0x00001010
+ L1Cache L#1 (size=16KB linesize=64 ways=8) cpuset=0x00001010
+ Core L#1 (P#1) cpuset=0x00001010
+ PU L#2 (P#4) cpuset=0x00000010
+ PU L#3 (P#12) cpuset=0x00001000
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz") cpuset=0x00000202
+ L3Cache L#1 (size=4096KB linesize=64 ways=16) cpuset=0x00000202
+ L2Cache L#2 (size=1024KB linesize=64 ways=8) cpuset=0x00000202
+ L1Cache L#2 (size=16KB linesize=64 ways=8) cpuset=0x00000202
+ Core L#2 (P#0) cpuset=0x00000202
+ PU L#4 (P#1) cpuset=0x00000002
+ PU L#5 (P#9) cpuset=0x00000200
+ Socket L#2 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz") cpuset=0x00008888
+ L3Cache L#2 (size=4096KB linesize=64 ways=16) cpuset=0x00008888
+ L2Cache L#3 (size=1024KB linesize=64 ways=8) cpuset=0x00000808
+ L1Cache L#3 (size=16KB linesize=64 ways=8) cpuset=0x00000808
+ Core L#3 (P#0) cpuset=0x00000808
+ PU L#6 (P#3) cpuset=0x00000008
+ PU L#7 (P#11) cpuset=0x00000800
+ L2Cache L#4 (size=1024KB linesize=64 ways=8) cpuset=0x00008080
+ L1Cache L#4 (size=16KB linesize=64 ways=8) cpuset=0x00008080
+ Core L#4 (P#1) cpuset=0x00008080
+ PU L#8 (P#7) cpuset=0x00000080
+ PU L#9 (P#15) cpuset=0x00008000
+ Socket L#3 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz") cpuset=0x00000440
+ L3Cache L#3 (size=4096KB linesize=64 ways=16) cpuset=0x00000440
+ L2Cache L#5 (size=1024KB linesize=64 ways=8) cpuset=0x00000040
+ L1Cache L#5 (size=16KB linesize=64 ways=8) cpuset=0x00000040
+ Core L#5 (P#1) cpuset=0x00000040
+ PU L#10 (P#6) cpuset=0x00000040
+ L2Cache L#6 (size=1024KB linesize=64 ways=8) cpuset=0x00000400
+ L1Cache L#6 (size=16KB linesize=64 ways=8) cpuset=0x00000400
+ Core L#6 (P#0) cpuset=0x00000400
+ PU L#11 (P#10) cpuset=0x00000400
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 7 Caches (type #4)
+ depth 4: 7 Caches (type #4)
+ depth 5: 7 Cores (type #5)
+ depth 6: 12 PUs (type #6)
+4 processors not represented in topology: 0x00006024
+4 processors offline: 0x00006024
+4 processors allowed but not online: 0x00006024
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t-offlines_noadmin.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16em64t-4s2c2t-offlines.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,57 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#0 (size=4096KB linesize=64 ways=16)
+ L2Cache L#0 (size=1024KB linesize=64 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#8)
+ L2Cache L#1 (size=1024KB linesize=64 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#2 (P#4)
+ PU L#3 (P#12)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#1 (size=4096KB linesize=64 ways=16)
+ L2Cache L#2 (size=1024KB linesize=64 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=8)
+ Core L#2 (P#0)
+ PU L#4 (P#1)
+ PU L#5 (P#9)
+ L2Cache L#3 (size=1024KB linesize=64 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=8)
+ Core L#3 (P#1)
+ PU L#6 (P#5)
+ PU L#7 (P#13)
+ Socket L#2 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#2 (size=4096KB linesize=64 ways=16)
+ L2Cache L#4 (size=1024KB linesize=64 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=8)
+ Core L#4 (P#0)
+ PU L#8 (P#2)
+ PU L#9 (P#10)
+ L2Cache L#5 (size=1024KB linesize=64 ways=8)
+ L1Cache L#5 (size=16KB linesize=64 ways=8)
+ Core L#5 (P#1)
+ PU L#10 (P#6)
+ PU L#11 (P#14)
+ Socket L#3 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#3 (size=4096KB linesize=64 ways=16)
+ L2Cache L#6 (size=1024KB linesize=64 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=8)
+ Core L#6 (P#0)
+ PU L#12 (P#3)
+ PU L#13 (P#11)
+ L2Cache L#7 (size=1024KB linesize=64 ways=8)
+ L1Cache L#7 (size=16KB linesize=64 ways=8)
+ Core L#7 (P#1)
+ PU L#14 (P#7)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 8 Caches (type #4)
+ depth 4: 8 Caches (type #4)
+ depth 5: 8 Cores (type #5)
+ depth 6: 16 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,52 @@
+BZh91AY&SY"ÿ gx¥ÿ°þwÞïÿñ?ï~Àÿïßð @ ø`">8 WÀIÝ¢|¼p ×ÀzÚ\}÷Î ÕÀdåÉUÎcRÈtíÎuÖ- t :§ïÕ?ÉOÚªPÔÿT
+0TÔjc@É !10 ¦ j½UJz
+¨@ hh %?T¢M2¡¦CF@ P¦!< Aê ÄP bx£j4 êR@ÔÓM2Å2z4Ð 2ê zÊl§ê$ûD7@¯ê ó 2 (spBîH¬?À'pBàÀH¤0 t¨ µH÷`L@úN¯[Õõ®%ï{Þþ¿±ìñj ¶:éx;ÄQuXQÆ¿ $(-
HH¨${DDâ¤$HSÃÍÝu×]J]uÃ1ùw fúÿ?°ô2Ið|z´Mh©V7³íî³»·yfpá´È4 Å$> ²á©Èõ¶çVMa$uïs|ÃæÉ¬:Ó²W{^KÖí´\½ÁVíµ¼v
ÛjX»ÛhÛÄm\¸ëݽ)]¢âºw·k׸*ݶîæÈ·m¢åî
+·m¢ÒjI$MR[ºN¤é4M&èZÀ뻨ìÑÛ{TRËÜnÛdDRdAQ]LÞS©2oHѼ¤B[ñ$PïHð4|uÈ» £¾×cÀ£DGÀ3à5Z·cVm ÄÀ$6@Ð4 ;h%üXIE=(@`ÎT#AYP@#¶ AfrØDfIºµqqºH®«®ñÂq»uo6Åo½8éèçå HuÜÒÝÖf`aÀFfbFs¥Ó,ÅLÊñºEÆÎLfgÄVæå)!ÀOÂÁË3 ñI
+(c  $@I20 ¹²Ë¦XªÏà"""³u2ÜÌÊdDDDBE"TBB¢ºC"ÈÈ""$?ª YòÉÂÃ,A«$Ë*°«2Åëê¿> ô~×Ö¸7?E
XSæÀ`¶BÅ®A µnCoû
4 P;ýèÞyçÃѧA8â Ht
õ»Õ_zªý½=Ý 1I&V,V*ÅX«b¬U±V*Å-jÖjÖjíÞ;Ý'¥ÍÉÅÌå!(@b@ÁBXÈ@a 1'
+
R b"¡8PÄ(0`0D 2KV+=º×R`?Hq`æºåק϶søïÊêU)J ú¨7
+9èáØ6=d²æÛU.²ïk=sÛuÖu×mwÛà>BJI!ò
$Þ
+û°$Iñû2:ùyõtíWócË^{çë×ä`{±du¨%éj*¤ßu~_36ªÖ:+°r>ÊM±¾ªì^Ó½Zû[¥Ã¶6ßîãlvôÞ#àÿ oã
+úxÜ8òΫ31ãÆvïnóß3Azgke·ü¿9î$îã{LsxÆ6À^öéØéÇûÁ
×âõÎ×uçlgVc~>[ã
+h+!ìFÞÂõèpnP|AØ?@`;Ô4ptëéÞU^÷^ªý¨p
+ÁúAúCñ@d?(;C`ùÁà0Á ÀzÁ`Èz!ä>´\>ÿ0üáþ$¡H©!]!Ü,O¶IóÁÞI6[@)J Û[÷Ã|ýy¾¾x¯nsôÛ~ûþxðG^½:yùç9mã¡2XÚ@6 À¦Ò`XÚLKIHHfTGxB£)´I`Si0 ,
+m&%M¦ I:m&%M¤À$°)´6 ̨
á±Ói26 À¦Ò`XÞf$Àe6 À¦Ò`XÚLKIId)Pa±Ói0 ,
+m&%M¤À)Yjª¨R ¹$dM^!*Uª!TB¨YEeVQYEe¢D*x·!Y ·ZÀ´ c*aÑa0·3Û-´ ÛtÝݵ tI
+,Ç1Ìx Z(UªÃ@Kl¶Ð ·JÌË+µeÿdÈ
ã6ÇqÀ¦Ò`2dÈgÏIçÏ<mY
+UÀRR¬ÁÛÇ·mñíãÏn9Þ{xöñíÛ|@Ön h¶n FÙ=O· fÅG¤üæï¤DGË mO´iàA³C ^C7ÕSt·ld Ì
3ÎųÀ(®¶líi¦kÍ$fÚ²BH5I5ÖÓUM)ÏkuªõþÃÞûj¯]ßÈ ®,¥RUW Õ]ºùÙꬪÌÌðYUî¥à !$³êã@Hì
ãZ8Ç#ÃUUDDBmfÙ`äBÏ#Ù¨_hÄ1Bg`»WCQãØÍpâD0ï O(®Hj%ç1 n2$¸¡ H+Ëë×kÒª`íxOЯo§âgVèsÃÅÜçÏ%ê $"¨ ¡¿ä9u'¾´®®)Ïzµ+J
C<_wÜ6N¸Åö¤¾âôBU!"*H©
+
+½,LB&£Õdà*5© R ±%ZçFeEb4ÈpÔ# ¨
+½í`Ú«@lZºodƬc8bÅoËPÕ_øÛA0BÈ#Ý+
+ÑÜÍûH±7Ê£f «ç6xª:¨b6åäò]ûß
+« Ufè mTëE«ªGæ·líÒ_5úSÉ<ñÏæ®Ci"Þ<bÍRÒ^Ìxʯø±lݾc®aåÚÉVËݬæÚÍÙipí${ªYSÓFº²)HH)¦fcZÖ_ØÓQ¬)$ÊUà l&°ÂbvÆùmh«sÛxvűÛh«Õ1º±r½±ºÕÚÍ«Í!ÆwåÄ/¦Õ1R©§<Y$ëXFüÚ¶ÄBú¦¹µWPH^÷íAÍÖÇKÎüó~»j¤Þ VUtBîÍ%ÒemTÓ¿$º^yq18Àé<øÛÔ8·Õ*§^/uï{Ø`¢bXÄKÐPB9ÑÛ´Ó_Þëe3ºmÓW¿9ÜÞ0°hªK±*÷j}ÜçsxÂÁ¢©.īݩ÷sÍã ÑSbUîÔû¹Îæñ
ER]W»Sîç;Æ
+Iv%^íO»îoX4U%Ø{µ>îs¹¼a`ÑTbUîÔû¹Îæñ
ER]W»Sîç;Æ
+Iv%^íO»îoX4U%Ø{µ>îs¹¼a`ÑTbUîÔû¹Îæñ
ER]W»Sîç;Æ
+Iv%^íO»îoX4U%Ø{µ>îs¹¼a`ÑTbUîÔû¹Î½SD²§ý
+áÝÒðw÷à8wÞÊtf[X,C9e%!k¥Q³ÍfIm|vÆn}<1à¿3~m^Ò¨wFÞ;Æòò.":
+Rμ¶vhBãÏýÌ D©)©I%")QREÓÜÜc©ª¬ñ~-u×Ué¯ñµìj»ö Ú«7@j®¼wïovìlÛU%¬Ç/±7ú%m·ÛjnÕ±,g/¡iÖ,ç©2ÊÄÀÙizh hÊ T¡ÔEªn²ùôß5³XÛ-FRV$QLLN¸$ºòÉKÚÓyS§,o©®Ë`ï£fléñHh@`Làe
+:N[Ó®Ù¤B©#9½àç30ÚÓ;ÙÅÀÀàCK7"+eåV!C=³¥ËCXFy»bù¼ÕJÍ^þÈ åþþ×+Äm'ë½B}0ê¾gBà ¤JÙØU5¶Eõt2
+ÙËÖÀXhô¾mòó¸ë×§ 3¼Þmëã¹äË|Z3·2¬a¾/j2ͤÓj±;ªI73jSmth©ÅMéKËLX)/*JVT8ºûbÉ©1¶¥¯]r©D ¸ÊLFò"MÌÀ ½T¢Àðu{ÛÕfAc_yj1[Ü.ìæ×æqj¢ôw¦:¼1Èùá¯wH^n§R'ºêZÒg§Hï30 8y
&ÁÀZºA]v½¯»véZß-¾Õ@ æíKWêºùX¯BͳMµAA¶ôÍ©ªµNÔòZì©«ZÕ|ôãfÕ1»0îïi ¾ZlÖ¬
+eD¨ªAçHͤâñ'JLsj¦ßA/¥=6b³-³U2I:i(5m-Î:1|LÉ%µÆÖÒõIÔ¥nÛÅæÛR)Pß¶øã@H_Óq$³>]ïJ_N,®2¤9 êD®ÐPDý"è+"
+àÎÆt¹Ì¡»ÈD*ÑWw;qÅÕ×§¹çÍÛ ½ÏµÖt
+ÇDh·<Þ\3ZZ[«ã@(Of¡Ö¢9¨Z`Ãj½;äΰã8p ÁR¤à©qxÎYª3Òö¿ó³Yµ5°yc
+$äÙSm#IKÕÛ^ ¦ÐåLà¾Ûz)¾êÒC,J·LæÚÛ}¶ÂËU¯{¥)O!ÂïR¹°Ã·ë8D{[gµéRøHU#º^;ðc´tÖ3tßúõãp°oºbµìTÖûÜ¾ÛæýÃmT¦:Z¬^õ*nÅöÈZß\Lí{)âõ'Y¯pL¯j©\ÖõÜV?mL<íÛUºII0m[VuHm×ûÚtcYí{opÐIzwÏÃϾ`¼¹ñ!iï.iAMÖæé÷
+ o&fr/ÔFî <hÀWϾFíøuâüTä0èpÅÚIªRªªff"E2ÖÅ¡¦Ë8È.k5$¨Æo|ZÒjY0]mUKÆýl uNs»öá7Ûf/µªËÁnl±G6RÍ®BÃmk7âÝz§pd4µ¾/×;gbÕ~~ ¸n¹
+&Ü!ú§tçË|÷WÚöUª¾zc¾$Øf³B¹ÛkYë×Îu®g¦wÏã8æ·VÙ¶Üï~:Z÷ßZáÆüv¿=-ÅØ+fk-kïmgùüÿWÉëþë®·íý¿êÇå
+ #àòh?8Z¬+Õn·÷
Âßààô+øÕz W5]ÈU¢?0ì-¿ü3þûòýup×ÞÛöch/ ýA>È>À?ôÌÎ@0m¶µ¸K°nð[9ppа6@HPnæ/olIøòÛ |ðü!³ª@䪰>`Ø<0T°|î üìÂá÷è ãÙý>WÜ'°$;`=`à¾~PHqCù@! Ðzh+ø$C0r & Ð/».!(,!Ô> UD*¢Q
+¨eeeeeeeª!UªUD*\%Íÿî6P9@© ª
+ÈTo"D4%P}Á}á=䤤¢QEòð`µ\,@ûà d>Aè´,°X$K"./׿ݸÜ3`ä2Pgë·ëôàëã!:)Ð'p à,ýàH|çp÷l`°?(~Ðê¸>Ûñ²Á1@È$9`ü/¼íëZÁÄÜ»öèì¿säp±ÅÃ` ¼P}ÒA!¼ °eÁÂ<I=÷ @ÈtX'!ÈI¸lp
+ùH
+ Pd?yp|üÃ÷þÀîïH~ 8fÞAÆÝAèÜ
+øííìøè'ðá.õzz
Aè îy
èIûÞ¡°làöõ Ð8¨M¸X2|: y°y"H
ê|e¼Èt %XC>çï!]}ÃÈßAÈ{Á:BÒ ýC`¯.Á6 ¢$|ÿÀóà9
+¼Þ$GãÙ ÈrØWwä®`AìõÕ¨KYîþ¢G¨==àùÁÁ x8
+È#°P}pTÓÀ?fî´÷C¸z¨PJÜ «@ öà2Ö Ý®Àq3ò¨=Ch=ÁÒ AR
tA!ͨh=áî
+ä%úÃp Aì¶ð9HÜàÜ' òAÜ
+
+
+Âw¬
Þ¤
+D$*xî nZÃàÜ8
+
+§¨}!ÂX `{à p mõõÝò
+z øâ¨$1ÏDHP±$Cp¤H*
+\=CÐÀ
+jHI0"$*üóÓA=âàä'ÀÀuî¡= Ø;;l·@È$HîªUA7ÕéáôA$ëRTª%H0ï0>!R$BÏ0ÀJM! ÷°nx
+PP|ÃÇA;ÚmÀKö$w AõR$CöÌ!ð@ñw$S
/ð
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+-v --of xml
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff">
+ <info name="Backend" value="Linux"/>
+ <object type="Socket" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 2.60GHz"/>
+ <object type="Cache" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t.xml.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16em64t-4s2c2t.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+- -v --merge
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,34 @@
+Machine (P#0 Backend=Linux)
+ L3Cache L#0 (size=4096KB linesize=64 ways=16)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#8)
+ Core L#1 (P#1)
+ PU L#2 (P#4)
+ PU L#3 (P#12)
+ L3Cache L#1 (size=4096KB linesize=64 ways=16)
+ Core L#2 (P#0)
+ PU L#4 (P#1)
+ PU L#5 (P#9)
+ Core L#3 (P#1)
+ PU L#6 (P#5)
+ PU L#7 (P#13)
+ L3Cache L#2 (size=4096KB linesize=64 ways=16)
+ Core L#4 (P#0)
+ PU L#8 (P#2)
+ PU L#9 (P#10)
+ Core L#5 (P#1)
+ PU L#10 (P#6)
+ PU L#11 (P#14)
+ L3Cache L#3 (size=4096KB linesize=64 ways=16)
+ Core L#6 (P#0)
+ PU L#12 (P#3)
+ PU L#13 (P#11)
+ Core L#7 (P#1)
+ PU L#14 (P#7)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Caches (type #4)
+ depth 2: 8 Cores (type #5)
+ depth 3: 16 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_merge.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16em64t-4s2c2t.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+- -v --no-caches
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,34 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#8)
+ Core L#1 (P#1)
+ PU L#2 (P#4)
+ PU L#3 (P#12)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ Core L#2 (P#0)
+ PU L#4 (P#1)
+ PU L#5 (P#9)
+ Core L#3 (P#1)
+ PU L#6 (P#5)
+ PU L#7 (P#13)
+ Socket L#2 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ Core L#4 (P#0)
+ PU L#8 (P#2)
+ PU L#9 (P#10)
+ Core L#5 (P#1)
+ PU L#10 (P#6)
+ PU L#11 (P#14)
+ Socket L#3 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ Core L#6 (P#0)
+ PU L#12 (P#3)
+ PU L#13 (P#11)
+ Core L#7 (P#1)
+ PU L#14 (P#7)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 8 Cores (type #5)
+ depth 3: 16 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2c2t_ncaches.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+16em64t-4s2c2t.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,73 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#0 (size=4096KB linesize=64 ways=16)
+ L2Cache L#0 (size=1024KB linesize=64 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L1Cache L#1 (size=16KB linesize=64 ways=8)
+ Core L#1 (P#2)
+ PU L#1 (P#8)
+ L2Cache L#1 (size=1024KB linesize=64 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=8)
+ Core L#2 (P#1)
+ PU L#2 (P#4)
+ L1Cache L#3 (size=16KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#3 (P#12)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#1 (size=4096KB linesize=64 ways=16)
+ L2Cache L#2 (size=1024KB linesize=64 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=8)
+ Core L#4 (P#0)
+ PU L#4 (P#1)
+ L1Cache L#5 (size=16KB linesize=64 ways=8)
+ Core L#5 (P#2)
+ PU L#5 (P#9)
+ L2Cache L#3 (size=1024KB linesize=64 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=8)
+ Core L#6 (P#1)
+ PU L#6 (P#5)
+ L1Cache L#7 (size=16KB linesize=64 ways=8)
+ Core L#7 (P#3)
+ PU L#7 (P#13)
+ Socket L#2 (P#2 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#2 (size=4096KB linesize=64 ways=16)
+ L2Cache L#4 (size=1024KB linesize=64 ways=8)
+ L1Cache L#8 (size=16KB linesize=64 ways=8)
+ Core L#8 (P#0)
+ PU L#8 (P#2)
+ L1Cache L#9 (size=16KB linesize=64 ways=8)
+ Core L#9 (P#2)
+ PU L#9 (P#10)
+ L2Cache L#5 (size=1024KB linesize=64 ways=8)
+ L1Cache L#10 (size=16KB linesize=64 ways=8)
+ Core L#10 (P#1)
+ PU L#10 (P#6)
+ L1Cache L#11 (size=16KB linesize=64 ways=8)
+ Core L#11 (P#3)
+ PU L#11 (P#14)
+ Socket L#3 (P#3 CPUModel="Intel(R) Xeon(TM) CPU 2.60GHz")
+ L3Cache L#3 (size=4096KB linesize=64 ways=16)
+ L2Cache L#6 (size=1024KB linesize=64 ways=8)
+ L1Cache L#12 (size=16KB linesize=64 ways=8)
+ Core L#12 (P#0)
+ PU L#12 (P#3)
+ L1Cache L#13 (size=16KB linesize=64 ways=8)
+ Core L#13 (P#2)
+ PU L#13 (P#11)
+ L2Cache L#7 (size=1024KB linesize=64 ways=8)
+ L1Cache L#14 (size=16KB linesize=64 ways=8)
+ Core L#14 (P#1)
+ PU L#14 (P#7)
+ L1Cache L#15 (size=16KB linesize=64 ways=8)
+ Core L#15 (P#3)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 8 Caches (type #4)
+ depth 4: 16 Caches (type #4)
+ depth 5: 16 Cores (type #5)
+ depth 6: 16 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16em64t-4s2cu2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,48 @@
+BZh91AY&SY6¿Á| fö¥ÿ°þï}ÿÿò=ï^Àÿïßð @ ø`"ùN ÆR¢|qÀ |o[SsoL_ØuY `I@Õd4@eJU at 4 'ûU?òTÿj¥CÔA10 !` 4Â5Q%3Q¨Ñb
+ÀL 0=Aª§þõU£z OÕ)
+$Ôj4Èõ
+ &§©&ôSLa0MÈÀ66@Â T@54f¡0j4ôi ÔÐ2m@õ
+~©ê<î ÷ÿ @Æ!9D&Qÿ)H¤~t4JI1bQ¤±E¢mOÑHÞñ'òþ?æþökZÖ¤àais3¨h,à+p¥p ¢¸(BEA#ØA<Þo'0ÂÃ0ÃʹϹ»Y¥î{Mhªëh³ÝÛ{»wÑÀÑ¡Á6PѨh±îíËuÖÚJF:±ZK^÷7¬>lÃ;%wµä°-nÛEËÜnÛ[ÇhZݶ¥¸*ݶ¼Iâ¶Æ×b={·¥2Ëx³qÞÙ0nï9my{ÛnîlkvÚ.^à«vÚ-&¤DÑi5%»¤é:NI¤Òn
¬»ºÍ·µAE ̽ÁVí¶A $IE&AQEÕ¬>^&SÓ»\bDÍT@K{$PîÈ£AFuÈ» £¢4Íx at Q¢¦h`£Dä,ð3pHdI"IÀoÇ
+¬UcóTÖñ×§KzmVÕnYÚFUÆVT#¶ Nyã,ήÜöëÛ¯ Ì.ᬳ¤H 4MZB q
+ä¨óï\ÌÍ;tíÚéËv çsKwY1fa19ËÔË1S2»]"ãKfðÚTNU.RPǼqq6ÕÌÊï;µ³[5ÓxqŶí¶í¶ÚîÕJªo&sJÍULÙLÉ
+¢TÔà"""ÔËr·3) Uqe*ÎD4JJ¤THª%B$?»eYV2ÖEba at eY*¨HöØô?Hkç¸8?M,ùÂHW!ö/T°È_@È_õ
]ªºÕzJ«Ëì^kÐ=d8ói¾Cq :èÁlìh$wä{1Î I$ÏäÉb¬U±V*ÅX«b¬U±V*ÅX¢<z}ð ±BPÄ$pÀÁÂ\, at b. 3, at b0HKE!Â$áC
+ʲͲ¬çºË
+Í^=»®¤È~ ÕH>cnßW}¶û¸Ûpä6aJ¥)Sâ8UAnBùw
+ÃY'Fν]Ì-ÔÛ¶Ûwß¶¶×mõá¾Cà TI¤H|A!I$÷¾|ßF÷g^õ&|uåÆßc_±HAéGjbETsÓXê¼m3Szgª»AôRo5Xg<*ñ½õÀgkÓ½æ Úøúyß=ýÜDgÐ?0qç|ø|vÕm6<í·ð¾WåÇ0mAÛ{Ù¿5üáÇM¼§xÀuÏL@Û9ß!_]»ç¯><qXcWMðíÓ|í«g~ÞvÈÐVÁì¼7þÃAò¤8>`wÒáÈv
+Ò{{¼%V1*±Ô;!aÀ?P?P}àê
+öpØ7XXyCØ4pn¸:{}`>Aùód2Ë$HJ'PHxödPb ù¾ªÅÕÝÝÝÝ]ÕÝ $d.ØdÏm2Ý>Ë6ù¦-vËË Ï¶ÛϧÏKII`Si0 ,
+m&%M¤À$°)´ 6Û`XÚLKII`Si0 ,
+m&%M¤À$°)´6 À¦Ò`
+^hb ºm&@À¦Ò`XÚLKII`Si0 ,
+m&%M¤À$°)´B41]6 À¦Ò`Xrá8ã7 ¥( ]ÝÝ×<CÂ@Þ$*U¥eVQYEeVPB¨
Q
+¢D*x_KffLË3flh
+ÝÝÝ-æÌºeætº@Ùm -¶ÛlBе wwtïUÎwº]0 B mVÛ[e¶ ]2ÌË"Ç}¼|om³¼|||xã\óÍí¶s·<óÏpäÍYSi<²Ë m¶À$²«@(
*ÐB#AR!¦1cÆ0i4µXÆ0 æZ m U¢»ý±"Mú:_KÕ+~´ÓXÕçZºº¢ò
+ÔðBÄ÷P&FÓ 3 ÊF°Û}âl
+$áRÕ´®¬ÌÌÌL³ø6j´jk䪥ãçmeÍW¥äøÞ÷ÛUz^O8 ®,¥RUW Õ^ys¼²«33|¶k5ç0$¶û±=!HOôÝPûqP5Á 5ãu(X
+"
$cÂ2*BHk¡&»º;oAZhU¨&ÍlÊÀaZT¦ÓbÐ
ã-qZHtFÓ¼ÝKEÍÈÂZ`OoüÈ%ÍäbÀúß¶ÛÃÂO4<Y>Î;Q-GÎ z!0"¨>68 ¥¹ðUè'ÅÝN¯aæó]úu»©ÏdÏg{µ+W(¦ò³©G~s½àä8Î"ª"©*QÔ(*¤Ø NT¢s½J6åªÞζMa®oæI3VÛ¹¹ §EÜ0Ùëò4 ðüg>ïä°5Ågl³@âAÇñP¶³Æ+UlÝí|ã>t4mè<$&4¡X\¯Õj±?ªÏ&Ù~(sQ1¿lö®ÔíÑðª¸ê µVnÕOùÏ>}ùAoËOÝ|(åϦ÷¦LôíÐ7(.óR»ÛÃ&$$Æi½õÀòòªq¾;ç.}Üñ«çTBôï${ªZ¦ã69Æ0ütÙ0ﶬ»Eó¬8év»ïÛ¿ñÔÖ-Lª¬æW>9¨lÛ¥Ú×Ϋ£}â^ÕѾÅI&qeÕL$î־uÓ£"oÈnÅu|bøsÏWJì¹|uj5âó7ô§Ñ¼'FüÝYÓùüçÔ9ÜV½ý]ð×%OøÁìOóû6%ì{¾Äû¹Îæñ
ER]W»Sîç;Æ
+Iv%^íO»îoH滯v§ÝÎw7,*ìJ½Úw9ÜÞ0°hªK±*÷j}ÜçsxÂÁ¢©.īݩ÷sÍ㤻¯v§ÝÎw7,*ìJ½Úw9ÜÞ0°hªK±*÷j}ÜçsxÂÁ¢©.īݩ÷sÍ㤻¯v§ÝÎw7,*ìJ½Úw9ÜÞ0°hªK±*÷j}ÜçsxÂÁ¢©.īݩ÷sÍ㤻¯v§ÝÎw7,Yõs{=àöÉÁûc×áî§¾ÕT
+i£Õ¶Ú^½·Î_go]¡öya W£'Ô4Äéõz͢·ë8Fòt6¶C :ÿÆ9eXÌY&32Ye"©JUAòØÐxéÎ{uU·Lt½¾Uß]ئ¿Ê«Â«W³ªòx mU °x:sw]»<©æÅë§ÙûLF)Å6ªwgEhÊ\épjj£ÝãMrÛi©I5JÜurË0ÄÎÓjêtß+ÛåY3:1Ð]é¿õ7½fË^°òé'
©$J¤â"ªk.Êlçÿ»¤LI\7a©NîøÊ6»×q%Ú®9èÎLà0Äc(Æ#Êt<p¹mM¹ãd̹iw-Zââof*f®È9æg<Zxá¼`pM o§ºÝ4á(â¨(pmÎ)uÄÞ¥mXÇ $?Ò /®»töP§µéá4 ·u¹ºad'¸8U¶·¼j¶Ýc7[àÒõµ7ÛÚø ³Nå»óá¾>^9ç§@ :õ;z6/Wçîû4ýaµ7©áT©ÁÃzÞÛpÅísðÄãbabVXÄÙ"î\BíkÓÎÔÙYKE\´*;Þ15úÍFê4£D¨©eLDIL°`P ÝÁ:Iß33b#~)qª©UT¬kàm9¨k²KN}«eßv©u:bZ¢º[uJæítñëð ~ùIù;¾Ô2ñÊ%O´iàA³C ^A¡k9Ftx_[½9 Õ×X+·8¼g¶ýûÖ»ôð·¿ qyõÅÖ½jòxÕxÜç»ÒEÇ5)L1xßÐ((8Ú+M®åPÅ4º[ÍgvÙ²â·ß®c|8Ú°/$hk77ËR"ªH
+¤·#"§bsdjgÛ¨LÑ#®íÝ6´ÍÃßBBV8ÛtRo$bxTºo[V':ÁÚ¥$R¸oå¡RtçÞ5ÆCïC¨$1û éo#íù`¶BC×ä#zV£ºC/F¾ÁCÒ9qÎ!ÒZ ÌÊ33À7¥Ö7\bî©$í
+©!¶Í±/¼xtéäðã@ æíÕ׫2·}¸¨xp¾*ºíx¨I$ò¬Ö
+¦÷Åh3½1ÒªÖT&nå]ïUY©Ú3w xZð(½¯VùD¸éÎ̺]p$ðÎé÷¦°7Æ«Þ+X|0ÔSzÒ¤-)«yÚÛG|1Fúxå
+Ñ©îñè`í3-BËeͯÎÛÓØÆòÉU"#ºb; ÏhƳ¶o§qׯ<(7!|
+Õï¬è/jo¬wç4j®¹ª±8¬óÏUÖÂjæpãhÔ©
HUƫ5
jeO@N8n½3rG_È ½U¹³~kË
+P7Þ±,Äå;ð$¥c¹¸ó3<.^2PªûMy`Àzç¦Õé(z>!Õ}Î.0
AH³°«É2jÏ ²_GêõnØÝ×u©&q¦§MØp¹ÆÓel|Dñá
+ÎBj/ Ìgê8·{s+¯:qSQ*0©Æ÷³R6¡U4, ïæ¼
8qf1 ×q$鶦ô¥k[p¼ÚÖÙ9^¬+:boJÚ¶Øén:_nÃJxA¸nëã¾ÛíÖóu¿ÀpÁ
+=ôã×ÅÙ8ɯy+ðÅÏ:ÕMcn¹ñÌ;«jÐm¿9Ö¶ím¶µ×}ºíÆÜçç¥pö½úq{jóƵË9ïo!km¬+vÕÊxâõ·úÃùþ?Ãòá
þÿßþÜÿUùàÃèúë¶^ðÀ@n«|j¾ÅW£é ã`¯Úÿ Çìqý_¬?n_]`6òÿ{¿îÎðcAúÂ}}>ø~Ð?î PNA7ßZà%°à'Úÿ¶Û9 Àh
+ܨ$(8 _¶A$ûÖaíÔ>!ø}°Ø-Ù¸:½@wÀ,70ÈmA;ÕH~pÂrY`?Ü '³û|qÀO`Hwfá:úÁÈ0_áªD`Ø>°$ Ø#j
+»A_3"D6 $XN¡/»ÈPt Aa`° Ø;Ë`
TBª eeeeeeeeeeeeeVWÝ·íÏ$8p:À TÜ*6
+dHDª¤2¬'¼J"H¢>>`Ú¬È>°êÄ=àû!a ÑìÚº_W<Ö`o±¯ÜµÛÏ`TêÀ(9
+DH$>©àÜ,?xvCÐ>AßîµÍ`Ht`ûá1ÄïëZAÎDêàû!:
ú¹ñÈ9Ðç¸PPb>@Hq¨$,6A ° O~P6« Ð:á8 OÜÁ÷CÈêòí}àðÈ$>ÐH
m~!ÎAà ÷8pÈ}ëöö|Ú È|ÀL!=BïP¨=À ñ °Â¨n¹WÍá~¡4!óCæÐLÁðÏÄ#°:;$b§Í/ĨL¡*ÁØ6÷¼9
+»(<ÂßAÐ=p!Aî¨?w`Ü+ǸMÂD ¨ ý òä:þO9÷÷h6êÁÙôüÒ âÏYíPz»z~ ¢G¨=ÀðH|Cp'°FCÌ0çÐ|B;
Ð ãAø}Þ`ÿîCðCÚ üààõ
+ A÷jèP{Ð9
+Ã!ö45Èy3oAêAè` PRPè Aï@ ÈbBPO|8 öó°J`ýøÑ#uC0{²âÀ
+
+xVÁaAAA~¤
+D~ HTóð¾ðp
ËÔ>@Ï, `ö,&h%è?¸P+ÜæÍ`Hg§TH`²HH
+Ê
+Üà=CÜ
+µC¿µHI2DHV9 â«A=Ø'« OPy!vðxOl
+ÃÀ<AÜ;ìúð }êHl
+D#À(;
Tªq½îÚöB$íRTª%HI2@{HyBP<i
+ ; PBé>BxÐz Ø!àâ HìCá ÿñw$S
küÀ
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,127 @@
+Machine (P#0 total=48346688KB Backend=Linux)
+ Group0 L#0 (total=24182720KB)
+ NUMANode L#0 (P#0 local=6045632KB total=6045632KB)
+ Socket L#0 (P#0 CPUModel="Madison up to 9M cache")
+ L3Cache L#0 (size=9216KB linesize=128 ways=18)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=4)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Socket L#1 (P#0 CPUModel="Madison up to 9M cache")
+ L3Cache L#1 (size=9216KB linesize=128 ways=18)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=4)
+ Core L#1 (P#0)
+ PU L#1 (P#1)
+ NUMANode L#1 (P#1 local=6045696KB total=6045696KB)
+ Socket L#2 (P#512 CPUModel="Madison up to 9M cache")
+ L3Cache L#2 (size=9216KB linesize=128 ways=18)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=4)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ Socket L#3 (P#512 CPUModel="Madison up to 9M cache")
+ L3Cache L#3 (size=9216KB linesize=128 ways=18)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=4)
+ Core L#3 (P#0)
+ PU L#3 (P#3)
+ NUMANode L#2 (P#2 local=6045696KB total=6045696KB)
+ Socket L#4 (P#1024 CPUModel="Madison up to 9M cache")
+ L3Cache L#4 (size=9216KB linesize=128 ways=18)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=4)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ Socket L#5 (P#1024 CPUModel="Madison up to 9M cache")
+ L3Cache L#5 (size=9216KB linesize=128 ways=18)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=16KB linesize=64 ways=4)
+ Core L#5 (P#0)
+ PU L#5 (P#5)
+ NUMANode L#3 (P#3 local=6045696KB total=6045696KB)
+ Socket L#6 (P#1536 CPUModel="Madison up to 9M cache")
+ L3Cache L#6 (size=9216KB linesize=128 ways=18)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=4)
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ Socket L#7 (P#1536 CPUModel="Madison up to 9M cache")
+ L3Cache L#7 (size=9216KB linesize=128 ways=18)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=16KB linesize=64 ways=4)
+ Core L#7 (P#0)
+ PU L#7 (P#7)
+ Group0 L#1 (total=24163968KB)
+ NUMANode L#4 (P#4 local=6045696KB total=6045696KB)
+ Socket L#8 (P#2048 CPUModel="Madison up to 9M cache")
+ L3Cache L#8 (size=9216KB linesize=128 ways=18)
+ L2Cache L#8 (size=256KB linesize=128 ways=8)
+ L1Cache L#8 (size=16KB linesize=64 ways=4)
+ Core L#8 (P#0)
+ PU L#8 (P#8)
+ Socket L#9 (P#2048 CPUModel="Madison up to 9M cache")
+ L3Cache L#9 (size=9216KB linesize=128 ways=18)
+ L2Cache L#9 (size=256KB linesize=128 ways=8)
+ L1Cache L#9 (size=16KB linesize=64 ways=4)
+ Core L#9 (P#0)
+ PU L#9 (P#9)
+ NUMANode L#5 (P#5 local=6045632KB total=6045632KB)
+ Socket L#10 (P#2560 CPUModel="Madison up to 9M cache")
+ L3Cache L#10 (size=9216KB linesize=128 ways=18)
+ L2Cache L#10 (size=256KB linesize=128 ways=8)
+ L1Cache L#10 (size=16KB linesize=64 ways=4)
+ Core L#10 (P#0)
+ PU L#10 (P#10)
+ Socket L#11 (P#2560 CPUModel="Madison up to 9M cache")
+ L3Cache L#11 (size=9216KB linesize=128 ways=18)
+ L2Cache L#11 (size=256KB linesize=128 ways=8)
+ L1Cache L#11 (size=16KB linesize=64 ways=4)
+ Core L#11 (P#0)
+ PU L#11 (P#11)
+ NUMANode L#6 (P#6 local=6045696KB total=6045696KB)
+ Socket L#12 (P#3072 CPUModel="Madison up to 9M cache")
+ L3Cache L#12 (size=9216KB linesize=128 ways=18)
+ L2Cache L#12 (size=256KB linesize=128 ways=8)
+ L1Cache L#12 (size=16KB linesize=64 ways=4)
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ Socket L#13 (P#3072 CPUModel="Madison up to 9M cache")
+ L3Cache L#13 (size=9216KB linesize=128 ways=18)
+ L2Cache L#13 (size=256KB linesize=128 ways=8)
+ L1Cache L#13 (size=16KB linesize=64 ways=4)
+ Core L#13 (P#0)
+ PU L#13 (P#13)
+ NUMANode L#7 (P#7 local=6026944KB total=6026944KB)
+ Socket L#14 (P#3584 CPUModel="Madison up to 9M cache")
+ L3Cache L#14 (size=9216KB linesize=128 ways=18)
+ L2Cache L#14 (size=256KB linesize=128 ways=8)
+ L1Cache L#14 (size=16KB linesize=64 ways=4)
+ Core L#14 (P#0)
+ PU L#14 (P#14)
+ Socket L#15 (P#3584 CPUModel="Madison up to 9M cache")
+ L3Cache L#15 (size=9216KB linesize=128 ways=18)
+ L2Cache L#15 (size=256KB linesize=128 ways=8)
+ L1Cache L#15 (size=16KB linesize=64 ways=4)
+ Core L#15 (P#0)
+ PU L#15 (P#15)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Groups (type #7)
+ depth 2: 8 NUMANodes (type #2)
+ depth 3: 16 Sockets (type #3)
+ depth 4: 16 Caches (type #4)
+ depth 5: 16 Caches (type #4)
+ depth 6: 16 Caches (type #4)
+ depth 7: 16 Cores (type #5)
+ depth 8: 16 PUs (type #6)
+latency matrix between NUMANodes (depth 2) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.500 2.500 2.500 2.900 2.900 2.900 2.900
+ 1 2.500 1.000 2.500 2.500 2.900 2.900 2.900 2.900
+ 2 2.500 2.500 1.000 2.500 2.900 2.900 2.900 2.900
+ 3 2.500 2.500 2.500 1.000 2.900 2.900 2.900 2.900
+ 4 2.900 2.900 2.900 2.900 1.000 2.500 2.500 2.500
+ 5 2.900 2.900 2.900 2.900 2.500 1.000 2.500 2.500
+ 6 2.900 2.900 2.900 2.900 2.500 2.500 1.000 2.500
+ 7 2.900 2.900 2.900 2.900 2.500 2.500 2.500 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/16ia64-8n2s.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,48 @@
+BZh91AY&SYü+ËoÇÿÐÞóßÿö=ïÿÿïÿòÀ kø`&þù\ |ó Cnø ^óKóÎÉAOCËÄ À )w0 rË(º\èÈ"
$ýSOÿÕUÿõUH?T S0TTSôÕ?JhÓF i§êSÙR§§ª©é?J
+42
+ SõISM5&Ô4Ð h Ð "¤¦ Ð 4 TP 4£LÈL¡ê 2oTÑ=M 6i´`3@ Àpy `sÍ
J2#(ÂI'õÔ~a7B¤t¨JÀ'4GC ùÆDBO Ý0Fl_ªIUX*ªù<DÆ$ $!$©$80sp{89ÁÀ9ÎøP_«õ½}TZÉ(DW0%%I%mM§N&ézÓÝ4ͦ$©lkz°¥%.%iÃT)%Kæ%®Ó·Nt¤éÍQE°Ã
+ÁELc[0QDVÃ7ETÞq¢N`B(n(¤ÙR©¼¶
+mkm[hRÀd$¥°C£dµ$¥³2MÁ-µ(^m³waEf-vìÔÞ½²"nÝ»$9RF[&¤JU»^eYfES²æEÖeUUVeY:
+¶¤¶f[´##-$%-IjIKf7f`(B ·b+a¢)Òmµ$¬²<¤!z Q`Ë£Cê*s2Ap
+¤m i° ÚAÒ.B$ ¬IbîßøåHÌH&Iq$rFb),`©[PÄ©Vn0Èö¶Z¶SÅ$
+ÊÓ32dI0̵*·s2!2µ,Û@0©ÊÜ«m2,µ"ÌÝÌÈÌÉe`3R2ÍÜ̪M&éôÄMÆÃ-ìͶL&Lï[®Æó9Ýôⳤµ$èÛ9ÎKmÓDÊ22¸3&ªÛºÝ%Hq%²ÙP RÅX &ÓtØÙl¶[I-DC»2ºåѺ\ÌËÄNm»»¦nZFJ$F]ÙZ£!uÊÎfwC¾&ìæÛ»»wå]iD;²®¹tNn1lÄbªØÒbËV×D:ßÂvF1&1QGL&"FBT%c!ÂX©VÔ°©A`²-²*RÙ*TT¡d¶RD¶Ê,BY
+*Jh*D-ÈáÌ6NSò&v³øk˯}boùéΤý¡×ÿÃ_csWU^EU@UV àª@@@ ÄÅ!!!p÷ïx^-ò[%§e8gV0rÆÓ0ZZZZ`fì ÕÖ§²×·©ã-êxËz2Þ§·©ã-êxËÐÊxãÔñâxË¢2Ø
Ìz¹Äg}~M¸ [£G ¾w é Ym
SÆÄ¤÷å6&Å
1baLXS&ÅûâCóá¡ã|üwòÚìÆvÏr¶íõ=\scùé¿N`;É> èÖý5ÏNq×·=3@Õøâ@æÈö>ÀØ0Dö
+Ä,ûü!AÕªÆEB¥É È>a `<Wµq¿LãïÆpÍÖ8Îv¸ÕÛÐjÁ±
+ÞÕ͸¸ÅÅ«S[mH¨YJX)äIe#9#¥ÓLãëÁ°FáCä÷{~oÍì÷jrjrܲI[I~ ÎRÞ¶Ûd¶Ûz }u×Þ Ý `}uÕë×p´í©£-ºµ«nM®[¨í«mu×m»-SUrÉm¶ô ¾ à Û|··ÒÕ·)ÉZ)e+L2åÎfIsssa\%¹L93\Ê`d0ÌÍLfÉr.RÂÛ-³4Qj«[? {½Ä$$ÞsÖßݺÜÄ;`8H¡¸_KcÓ*ªª¨UU¨*ªªUUI;¹öÀí Ûëåïå¶Û[m»|ùýüÝóýØ>!Ë<¿, òYä³ 9eË###j«qÄ
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ª
+ª *¨ ª ªÃ0Ã0;v 9À Û|Âw$yHòã8ññññã8ã8ò&$Öµk\I5«nÒªªÅU¶ *¨Z¶ÕUBئµnßÇ,ñUg·nݼ] ÙÒÎp -¶Öb3\¹$¼xÛk6!³ªUjX¬H-ÅbB¶Ûm³ 9eË.ꬪÎúª«9UY98âU T UPU@U víÓ§N:víÛ·^
¬ç b8Ä¶Ô ,fh nnîî8>aÎpÁQõëxÙÝgzRrÌoS%¹Ä3%yIáeíu5·In#f""¢,*DïÂn§dÑ<ìã~
îk/'å` Õ]¼*º<<7Çéº Áø=g»»ôóؼ-ézN½Ö¦×¥üE¶q¨ÝHxYûy ü@Ú½Ä 7@ 6«ªJ¬ç ¶Ûp)&Éâ"X$"Iîî 7M<xÛ Ô!MÓ)¤ñõÀ5½;²@
5J'íµd,`ì?rGîÃpJ0Jc6,SB¦j5µ¶Û_oåö£öæòI~Úݼj}¯·m´#R4p
+ÇÓñ÷Çî÷qÕË(ð&£I¤v&ÃFFÒwL£rhÒMGbHÃ2ev¹v¸U [Ñ jBq'm}äÔï±£0~o»©÷ª%
J"TBB~¸#èúâBLhë<>[;ÀÆ:©²òd¸É²jrÙ$\Lb ¿;ã ÍÚBÑ$¶8D1YH#Z3dÃ}¸ÕòçÆ1&ÌÛ×8pàëRÌn1r8ݽÕßUÒñ¿
+¶c~8ñú³Ä3·;óuÅ.8+4ÖmÄIêî÷Ô
+½AêzAaÞ´+4E5Ö¹Q»s-¹£4Qní]o´ÆÆÛãm¿|3ûÉÓõ×Àü íߦUÕYyÕ^<þUn mW1TYÎ Õ^Oܽ?jÙ¬Ïà÷¯w1eë3ùàL7qÕé7¸¦4÷]x»ÖÅï1¬õêãÆ$rß8ç¯HZõÁ}{å||kuq1=ÙzNêéÛr»wþO/¨ÄyQÐ'|bqÎîz]òñé¿}®«vìLzôg¯HéNÞ³»Üû¾ÚNxéqå{ùxxc~1\a¬$õ'[å6t©éÃ5áÓG´HZ{{l6x¶ëßløoªºÄéØ=¼õòO;'^ݽ´èåásãwã¾¼8Û}é©O+«W.A¹éR9±<-Ü'·äßo,ºãsbg8íÙ` ©òÿßGùûÿ{ÿì߼ϡëíÿÞSì|µ[ts=h~[¦yͽô"%ªÛ êâHg<ÛßB)ÙòZº=°Ã<¹ò'{èE;>KU·G Vl3ÄÏ 2y·¾S³äµ[tzfÃ<@Éò'{èE;>KU·G Vl3ÄÏ 2y·¾S³äµ[tzfÃ<@Éò'{èE;>KU·G Vk9áºg<ÛßB)ÙòZº9Ï-Ó<ÉæÞúNÏÕmÐAÌõñ$3Èmï¡ìù-VÝÏPÏ2C<ÉæÞúNÏÕmÐAÌõñ$3Èmï¡ìù-VÝÏPÏ2C<ÉæÞúNÏÕmÐAÌõñ$3Èmï¡ìù-VÝÏPÏ2C<ÉæÞúNÏÕmÐAÌß{c¿ëϰÛoÿºúmÝKR>ÿcn¶Ûu¶Ø÷}/£öø>ýôwÇÍÂ>ªDïQqöm~ÎAúûnñúò×ÙÓëòëÇÄGÞç=ã±yÖü¥ÄsP]
+ÂF5¡©ÜŲ£d¨ê¼S^1Y¤T%IÃ'bnãKSp¼H[±$x9ïÚÐ
+ªæ*«9Ëm¶ÛmÀ<¼{ß*í5êØDõNÞÁ϶Øt©;½wí·
ãUáv¯ÚÐÖp"ÉF1ér#OO×N8«7ÇF}DOvü5-z\ bc #9g"X&rU77K]«k¤C>ÃmË*íxÌD&Kw
©ãÓáD[!íß fá×=ô½jÝ[$yÔ¶ZÔ['1RÅ$²JT±áp÷çE¦ª§Zy\*'lLH²v¸0ìÁ«"ŤéZå¼bÙ×q#*±5I<,Åñf3sâÄwâkZ$ ½ñbãoxÁ'cµ®1μ5½ü Mú]±×Á¾3yÓCs_«¡ÑiÛn3ÐAææM¢LÝZ¡ÂÔÃe¼¬@psäàù7ÍüUÝãÓã]â=áC¶Ûm¶Ð Ú®b©*³
+ª¶;WÏã~
+ómñ|~Õ¶õ¾&¸s[c ¯åøõ»ò|
íæ;õ{íõë6ztâã;33¬óXH[sÙ¹Øô7n'<ö¼ksjÛo~qíþ;Öt¼s`ÅÕëвBú#3uf÷É· Q¡{%pë7ZÅÀv
æÑ¤A@iNGKÖXA̯31è×Û¾XÛmµ±Æó{® !#1¤¢Ù%JJNäÓ¡&ÊCº
+4ð
+7¤tðã.Æq¥ü;²ÌªÏ7h ¹n¶ÛßVçéTí·GgªkÝ'üõá:ù^áwÞrºg
,»÷,Þ«eÆàxM)vëÆXÞO\±+:¸®«¾Æªç9é[kUæÄ*H"ïÒó[g±ÄG<íÇEqoc|ÚI°Ú«eÍcnºvÜïÓf¹]K3·<3m[,²·Á0nó@Ù¤¶ü6ô1ÌÕñü?9Îs¹àëàïrA¡n, ö
+!Ý!<¤$^2з#¹6cKÝÞÓÃO9ÎsÎs Ç« ¨¨RÆýöøWë®þâ#^g<À rÝ |ʯx'=åïMøÝ©6±È¥Ë'l0Z¸ÁlÖÖí[ËqÎv:R;¼]vÌæg3®T·õ¦|ÄOkëÀX÷=jmÒÆ
+]ëÝX¼\®XºÇ6o[nÆë,ÛKeÖȶXF±P¹HÊV+YÆlÞ¥»¼dM³+lLç½Ó,ÕD*JYÏ=4hÚN«ÆÓm\³IcÑ
%³Ìd1&s7«ß
+1í\ùW^ü~58#:
+ÅÞY.Ùåï æhX®f]ÞE·8Æøk|a¾±ï:VÙÐ=m¾9HøØÙÛ9ͺ¸béq¦û{$,Y6U±vßêæÜhо֥v±åG>S®Û&ØbU3³3&ÄÄÂL6¬Ívh&¦¹í÷Äcvõeã5½Ã5¡"dÁM²ÊÜÉ$8Î,ÊÜbawçls´sÓ<âjºÓÂÌ»bf·£19éy`{Ã|ÿÒ$ :ãq|ÒAïîºÚe«^
+wºëÆ8æl`Æüä2{N:ÜÖ4t uôZÝܾÈ~B'^$5YÀÃz 3ÝÎnJ0Ót+B(I2LÛÝË9%£
+ánØÖ,Öøß;½·ç·æÏOHod
'wg\xI¯+*²ìåÎ'زspYÝq)V[¶°oÄÆ&ÎJÚyÖ1âÀÓê®3ú`|ìåÃÌõë×0©ç}Ù)Ò\Ä8ðI7s±Åùæÿ+6²¦'0×V6LIµq¶uonÛû®îÀà=Ë{xnÎ;Ý®nXÆ®qYÂç8æ7Ûv*±=£MüyÛ;xí¿ \ºØ>/CpëÒÙ×£ZÞJ{Öý1Åfã>è'óg^9É'HÏ-]³oÇpÇ@í·^=/NqµÛ¦qßw£ÁÛ:s¾ye¿ã>üßîgòãV]a>Áεs¢D³1Ò®ræt5¶ô fg?Ú¯Û·E+¥ù¿?[Ê©ó
ab°¤3
+µônùi
+¦æþÿOñjÉÒA ÈdW¥þ*úè<(Û{áë7À´Uþ@ÀPÆ!Ô>=¿T6ñ
,-¢:<ÃÔY)&~Hwþ ýîÊ?ÀÚy÷ÃÝ´=Ð÷ùÆt:MuÅÑòüI9õøÇ[e¥õ ~ >
þ[%P r
+ëùÃôÄ<Äâ!þ¨zCô?Z }0ðÜ>±#o:8Î衡롨'Îü |@Üh@{Àü zÔC$ ¾¤Jõïõ½?áç3ð!CÚ
+ L¸; Ð`2P5âá'¨L@Áú¡¼>¸urôT0`uä@ôô!P©R¤"رJT|ãè×̬>PÀbP!PMü|E·`bNa|èÏÈn0Á6âÐÌ?¦ úû¨óûÈØ,õ=°ÿËîa@ r;D<°!è N<ê*[bظ
+â L 8:|Þ öGÎ(dæµ$Pâ$ °¡çØ'È <È<ùA!è6À2°>ϱР`(>QzuÔÀó üCèýùâ@ð!{a{ÃÈ>ÈyÐ`_¤2ä=ÈÜGH´#ÓÝ "zz?2Ó!ñ÷ñuù@ÐE¼~ÓÚ{Ô{ÃÄ<ä1ÿÕ; N¡åà8W`múÚ$ z
+_÷â@öaòï
+@è(Y7
+ý@Û=ÃÊ!?1²AÀä<ì9@ýd|CÐ=óäCâöÄ}4H²PH(= qýä$úûO¾÷°uáåÜ$û¡°t æ8ïÛâG¸z> >:0Ôöû@vPõIx
>¤'D7A#õ ÈO¸Xd¿!ñ
+ zØ>P?JÃ9
+Ãi$ ôCÞñ
+ R¨øD(08¾ÿîÑR@D ½7¤|îÜh'ÊÊlÐ(7pÀ×p4(ïÔ
+D{B± M@M¿c @¸£H`1X #ËÌl8Ê=á9 /]Â(Üd LÑü'~ ÞJ(|ø~DHúâ@=C×ÑQ>P¢A23Ü@P=ßx>0ø@í°`ÄÞ âîH§
+ey`
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,5 @@
+Machine (P#0 local=8299024KB total=8299024KB Backend=Linux)
+ PU L#0 (P#0)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 PU (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/1alpha.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,14 @@
+BZh91AY&SYæ%I µ¥ÿô Hgÿò?_ªÿïÿð P§½k=ÞõzJ!F4y&GPÈê4 204©íSÒi¦ji h I¢4=!ê4h¦ 4´¤)êz!µ4Ðѵ4 d Ð I4Ð54zG¦µ h Ð
+2mKÈ_1W&,&C"Ä"ME¥µ
+¨H<ÇäZbj`LM"WaÛND=ê®;·S^Àäqâ_eµÑTk½Ú2ýÔ+ª^¹¨,ß6Ýw»
+6¦§I#©ZV¬ %¦Ñ(H7(«¥(sÁ°I O¥S²
+,x4ãÎéÂó´Æ´Äâzk"-Ì@aí¢Br%d®CÒcjÚÙòRÔË
+Ó6hlfªªf¡¾C=Faß¡²Uú#v ÆZ"ßÊUlé{õêpá<2¸© ( °@ Jħj$ÅkFÒ·Æt|=ç7ÍôÚäÊ}Øj\0³9bÐÛj ,§°l7¦0^LeàÌøu©/{Õ«¸B&¸qE~}ýHteÔ|GxL0q.¬@ÆÔ2ÀÉÜÐÊ:Øm³ mÔMHz,®b£9a¤ÈNéµ`ȵDdªè3pç#Bn%!ο¶ô ÕÊXqr!ó!I=û»E2)GFÀ¼K°1fEpÂFÚ¸{ê&`!é
ùâñ`1 at dufפ!bÆÕË9ÔaÂA.
+Ú¦×fyZðåQÑDÐÙduBd/+"
+)eK!»sÂöWµªG?»úàï(×ÈjvÍ| TÔ¡º[ ,ë-ù_£¤iÓ ½f"ÃÅ
+Vפu¯ù0`XÖ<ÚR¯«±3Óó`¥ó
+sÅbY$¥ª9êF¶²89ruâ³ûY°ÅFGÿ¤ÛA¸Ìm¨g
+±DBùl¡àµ=ÉKÝË8õÅÏABv ŶVÂq4sðL-8K(> HÄMOmôB¢¢¤Õ85}
+ì;#G[}3ße0ïÚ Mq¼· l*ÅÆêÃrâÃ!IïzWg½;§
+rRØI5¹RIûå2ÅåíHFb+ÓôjzrÆ&a½ª¬µ´mÄ«¢ ¡Ä¦R-)é0²29Íòi*f®÷£ó¤*S\£¥½¬lÆÄC89bqF-vxH·È?K³½UDi!$Gª*F4|Ïy #óßy'µDá1Cë0Èî *¡1ÜÓ}Ò+ã::Qµä¥)Izغ³\8s«Ã.Ò0/âîH§
+Ä©
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,57 @@
+Machine (P#0 local=2053992KB total=2053992KB Backend=Linux)
+ Group0 L#0 (P#4)
+ Socket L#0
+ Core L#0 (P#1)
+ PU L#0 (P#0)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ Core L#2 (P#1)
+ PU L#2 (P#2)
+ Socket L#1
+ Core L#3 (P#2)
+ PU L#3 (P#3)
+ Core L#4 (P#2)
+ PU L#4 (P#4)
+ Core L#5 (P#2)
+ PU L#5 (P#5)
+ Core L#6 (P#2)
+ PU L#6 (P#6)
+ Socket L#2
+ Core L#7 (P#3)
+ PU L#7 (P#7)
+ Core L#8 (P#3)
+ PU L#8 (P#8)
+ Core L#9 (P#3)
+ PU L#9 (P#9)
+ Socket L#3
+ Core L#10 (P#4)
+ PU L#10 (P#10)
+ Core L#11 (P#4)
+ PU L#11 (P#11)
+ Core L#12 (P#4)
+ PU L#12 (P#12)
+ Socket L#4
+ Core L#13 (P#5)
+ PU L#13 (P#13)
+ Core L#14 (P#5)
+ PU L#14 (P#14)
+ Socket L#5
+ Core L#15 (P#6)
+ PU L#15 (P#15)
+ Group0 L#1 (P#3)
+ Socket L#6
+ Core L#16 (P#1)
+ PU L#16 (P#16)
+ Socket L#7
+ Core L#17 (P#2)
+ PU L#17 (P#17)
+ Core L#18 (P#2)
+ PU L#18 (P#18)
+ Core L#19 (P#2)
+ PU L#19 (P#19)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Groups (type #7)
+ depth 2: 8 Sockets (type #3)
+ depth 3: 20 Cores (type #5)
+ depth 4: 20 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/20s390-2g6s4c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+BZh91AY&SYN*% HzÿÿÿËïÿÿÿÿÿßÿïÿð ø`$=õçªê¢¥sÍÊûqð**{`û|ú7:Û³®s³ÝªY¶ÅÜç\,tÒÍÎÕÊ]ãÞQ D%ÓÿõQU?Þ©¤õ5 at i£Ô b i¤Ì§
+0SÔ5M4Ð 04 d PgªHLÔ õ h ¤£F¢)§£Ô2z4m h¥OHÐ ¢ HÓE='êD{$£Ô4
+¡µ2=OP¦§¡?l³Î%A&LÅßüÑúGèEÕÕÁFQªMäÀ 6k,|³i0m´ÑHÂ2YEI*?~¬µßìû/îÿ?óCú?¼Þ|ùóçÏ>|ùÍùðFd~w£½F²2QüYFQå¯uÎ?ypGGñþòõÂB~³1Åt¬Ù÷»!!7IæÄÏÉ ïF$E"ÄIàì@z=5÷ûýþý÷Ý»»»±Ëvpåà·¹²I7uí«9¦ ÙvI&îÈL%fa:$ Ýk&i ÓM53-4ÓM4Ò.U«FkSnÕËÍÌÕ^innÛf(-Vi§v[ãm¶m¶Ú»<tÔ¹·ÆñÄ.o6æÛ»ªÆÂÅæéXômÞkmÛmç8Óu"ì¹°iMU\eJ&¯14ÓM4Ó%4ÓM4Ó7wBW,¨Îæìõ®iQÍÙ[¸Tg3vIWo»NîbÀTg3v9,½*3¹»a,Ý*3¹»1àKw
+ænÇ0%¥Fw7f^M+YÜÝ`K/JînÇ0%¥Fw7cËÒ£;³·p¨Îfì³t¨ÎæìÇ-Ü*3»À^ÜÝ`K/JînÇ0%¥Fw7cËÒ£;±Ì eéQÍØFkß
+7Æ^$ý0¡!3PI$j[¬$&ÈH]·¶{`ç¾jì³[ wnÎ[¢bÅÂ+TeÂ0)¶Øµ¦qs Lìp´@µd-"ÁKm«VZ´H²XKb[ºÛ30Ì$ºK»YëY32ff!,Õ» J`¬¶âÉxÂDKVÛm±ÄK?*É$H`*I!¸P²Yl))%µ$Ya$°²"J²DKP´f$X¤xç^8ÈY!jÙ ²!d,%«']8òÌãB/v³ÇffffdµjúóÛ}yqkzñrÎ3¹ÔtÖqnf;¦Nlág%òÂÏdL &Ð@°xÁ,IÑ: sÍÒ8 É@"H <A$FºìH$!e¦Ù!+-7f+|17ØÄßc@_AVí-·©Û`Ylµ®ÒÍèÆÂLòá¶Ò5$D,¶É!ýQôX/£úÂ=Û|) NWOÕyxvöû{ÈgYdz){¹î|÷ 3WÇéoW¢È|è©Z¹´¾;â":z¦ÌèaÞÝÈ;¾Vyéêo¿yg<7bm_jÅ®erWsrþ^J=Èà PßNù¿;Éëñ Ðær× ¾
+7·F+Ò9Ðk¡=geD©ÆäÊ2
+
+¹¤fÎVÝÿ
ÐJþùîÂI ²>à°#ÿ<·oÒðéHçÙÕÚG¶Ùb>ý@ç»pDí#ЬfI)Ùïß[·Ìcqø#©5
¶â=¨HM3?vð#xHO½õ¢c\·KXê¹ ±ä]kÌ×müǽm5i¦i¦ q3{Þ÷½ï{ xÓ"cvUUUU@oÛ¯,²Ë,²Ë, ¾[wÛlkªªªªª /º"cÆ1c 1[+jVÛQ1UUUUT |èÚ÷½ï{Ü<xñìâGaE"HçyóçÏ>|À
ÄLZ"bH¤^ø@º!lBØ
±bÄ-[¶!lBØ
±bÄ-[¶!lHZbb-i¶ÛqZ"bUUUT qof<"@ºùg#Â&î½ÝÝÝÝÝ{»¸pÛmuÛ(vpp áÄLE²åêÒÜS3m_Öµ¹VÎÙçyç`Ñâ&-1cÆ1»»»»»¹Ôãòx AõgÁÏ'(¨$Ùn¢ Ù&vR;ȤR)÷¿¿¿¿¿víÀ Í6l dÏ3:âf"f-8¿sÛ½Ø7oÜcÝ2îYÁ/qG¨ÖE°ì0lÌ·±$´ÝéynÂ$Kd»%e T É$F$$"p¤Î9´¶ñáê#w¶9O¯ç;3ÎÇ;ÍÖöVµ¦øÆ]jc·²Î4nügÙêå?/3ÎxDbç@ Ù.òÝü#;ÞTKéásjqÛç_''&¾ûdÆI1r¦ UªJYÀz<æ¥!(¢" CH(HM!<zy
{e¢åëâG*Å,L@AÄ+ \QP@'zJ!b Ð\ðI ßòæ}H8bxľ }Ý¢Å:Y}.LIÉ0IÄÁË0 8ÍM¦R§³[[Ó?W<yÂk¼%a8ÕÐ
+P@\HÚ±ý"IR£ÉÉòHHL0ÆYXÃlÇÏòbM¡!+O
{qríû8m¢þ÷©x`bZZiZcÝa1ÃP3HXuË13¢a«$0(P8CÜ,#M #
+P.©RB²µv;)ÐDDÑÔ_æØç.CÁVúðX@ÛnFMÌÒVÕ0k8ª8£¸ât¤ïv¨
+ )B PPÿAvá<çkà8xöÓÊ{v®H£Ýz&K7ÑÕë4½²òì9p»²öܿԿ'Ã] °ª¡çg%ì2͵ÿ/]È YadXI,¤²XKid°Y ;ºõqÄNþÚóä³ÛõoI üNÀļ^!{MîSß>
+Ûµø;È'Á¡ººØR-´d¶Ò--lYõé|5ãàå½zð·0OjôúT(ÂI&$ ¤Ù;ÍÓ®¸µxpìÅÃϳå¯ðaH¯ÁÖ Gó¹ßw"g¼vÜQÑîG¯(Vwç9×òÀªëÐ -õQ«ffnüÓ~y
Ò3²[%^`Ns¦õu"§r0gp t 'ÌùÂL@&6gßQÕv:8¼ · qø¡!3mÆýXHqÒ®{û3¯lÇ@cNg®Äõî}ÈfAU·1áwmî4ñ^nlÙâ,½²ñ3·.i{eå¯×¡UA@(((/ÞÝ÷äñY<\ú2l¶g©À m¶Ûm¸ÑÛzc(HOÜêáþ>K=ó@M¤¸¦_'þ?ï²ÿ¯¢ÿý,j$I8ÉÿåQ|I>¹¡eÚ\ßÅÅ·ÃÕ"
+JFj nÙÊE¬Ç f^`(@´¥lî¸2óiB¥+guÀ+J-)[;® ̼ÁZPiJÙÝpeæ
+ÒJVÎë3/0Q6 UÜÞNc3/pQ6 UÜÞNc3/0T*êo'1À*M{+guÀ¸*M{#Nê¶vB-§Z½;H¡ÈÓ@
+Þ¤PIHÃ@
+Û9H¡¶rB%#5 7lå"
+JFj nÙÊE8Ô Ý³mm·Sww½óðÒé}Í3²£ÎÄZ(¶+|#
+}¼7٦ϺýÂIÁ-%Kfbå¶&馬±¶ )cuUY¢íAylb
Õj5$Ñæµ%TÎU±Eª ¢Bª¾Þ`ýKzn* 0ÐbâÈÅÆ1ñÐ9Ó$sÎs$u5g»ìnwíõ¡%²H&è(Ð/ìääÂBk0±`biXîÐfÀ:9ÞÎ
ưÛnñk´ÌeL*_£1ËÇ[¶Â©29Þ<\9¯;«|mtËë"1di4±cÎbÃÁ*¾]i¯Ë,mÇ×î¡!1÷yôpáÍ£Kr禲Ì\°®ÝÄ5ë;³V;%[ÜÁªBðéÜX3-nK-êÜ^Yyîêßî7ºÂõáxo¶nzlþ
+¥´ »çnÓS³8Õ):áÀOll°(UG®t´¸zôíxÊ7 at UWrÝ
+5$í@
+ (¥©¤AåP@Vxbv8 ùÚçòÍ $Tè6A$u2MVØe&(bC ìbJnsnÂê3 ôH@ :y¡ZQ´-¤²Âo¼Îü7fpÍöú¥¾Ã@$7¯"NelËdH1&RHPIÇ¢ûêó×9¼ü¹ª ÜÕU
+=zZ¿ ûg<áõô»1©H'.ÐgÒß7^·«v;½/]ásàÛ7³K$¥Nßu(7rÕYâ1""<»ÁÒºÄkrë#JÚ®9ã\﮳¦ºíéÞëþýw 58qç×§éïäûnçmç7w)Àt¢Iß¼suÄÁÇ.n+ZhC6Å©¶Ù ®æÒG1Z¦u²îð*¨ìYº©ÌµZois¥®Xá ÉÉ&Äo9wßr ¡ILBe½¤ÒÂök8Åm«
+ZÜ]|=|sµ´tãûèHJuߦOßßgðÛÝßõø÷yuIO ×NÍóÊòÖÏ!SÛB1MmÅ{k1,»³R[ÖÉ1-*kÀ¶ÖÈ
â´Å¹B¾@ THs!äd¹NÃxhÛ³f«,÷Ø ¯WLàî6Ô¶KIôͪD'Ú½¦õ-\°ÆZ¤$¹åõ=+d
+´HÃàù]Î]E
+ ÕA8I¿1èÝd0A¨ULÒ©
+ µÛSè2øj s{Lòæ¨h©ôM<HÏÁå`ÑòU@iµEeé¿+4CE
+P@RÔÎvT8©è;3Û¥Úbá]é
+Ë*%®^µ¤¬Ý÷52nl'w"ÌY»v]¥rÊð-µ¹=E xóWÜI&í|.sçÖqéݨۮfÝ8Ͳ%Ü rxqx8 ¿/Ø 1DÕP8¨ ;õ˹Àúº[Õ0AÍ hIllÑÅyoPêæO4!ª£ÌOKµÊÇ~£ÖM\P¸ <õ¡Ý#½áÐãM at MXüUUUUѬÝ:ß03ÒþA¡4ñMã8ýîÙ·V(
+ (²<Hò(ïãBBg½TtÎwÛ\jEÇ?óBBc¼Î}3¡/¸Lzî+XÞ5{¢ËÜGf Ä7bÛkNb¸àBÔQH^[°·]®ÛT$&~Sm»í:,BÕì×:é5qÀ ûfsÓÛk¶¯,Ô,F
k®asmY±^RQÓ-Z(¾íLA TÏ7lpÙìÍLé"'£àÑÁÒFÒ" l3®ejæðoxc]¹ p²ªÛq[g»Õ^ýØ»ìÂkz9}A
'¬a´N(ÔT$%Âk¢ç-±¦qixµ¤ßä#«ñ{À³Ç¤ï+Þ¼÷S{øGó}À ;t»ú¿"w¶éÓorXßùÁ¢2¨
+ *˼6EôÒï×/ÆcÍÐ-õÛúàku<'NZèáÏ:ôÀ I$îy}»ð.ÃæKßwwÁ§·ÇhP@W$o±ðnÝg¡ZNòLI~rñôçÐF^:[oªöLTªÊ DÕ)Y\¦»wmܶ\±zå»×n^yçyç^¢xÙë@j
+ÜÁûá¡S©"mwÒiYêÏ´«2|PPj¤«Ifzän¢[øûÏÏ õtÛ?ûùÕôí·=;ûü·ì×9_ß5¼dz,ÏCÊÛm¶Û%³ D" K`T Í«wýDjÐG3l¶#
¶Ûm¨B L̸T LÌ "2K2d©Aı$kµ ¯¿n\{Dweý?ó²Fi¨\èëa!?õÜ#RÍÀNñ§jÿwéúvBBz¿gÞ¡¼$&â9óðíw;á!?g³ó~¿ÁýÌöuàÉBIô}%Ýÿ7Ç·se«eJK`üRÜMÎB6q>5$ ²GNÔE»¸:¿UD ÛR¤-HZµ!jBÔ
©R¤-HZµ!jBÔ
©R¤-H[î¤Ýú¹-»i ''ó/³`ÜydG)ÏäuÖH =Øjáï¹#ZÁTòJF:øçâíÓãÝwcãÏ¿4l#Vì"HLÔF?Ë ðö¸4ýV>
òÓ|½{F¯v}Iä:}åxèèG|C§Ô×fݲü¬BBxhG;²¢ÔzºñÒ&m²,ùÓ¿SF«N0A;î7äzí/?Üçð}´> úduø\öe;~+|<½ïÎÎ O»±
+½~¾{¡$ÐFB³Ë tôÂGâûäw~w¢}~"=üÑ õñ@ÂIÓ¡B><ÈñàúÄzÚH$O×ãÔ¹>e¹zjI;©$´I><xHñqÇëÃá7Lë¦DoHö9üüÐY÷ %Dz¢<|ȨRÊ#Ý£Q
+üÞ¿{¼"êrì#kn$ö&â;'|ÓêìO7?%¶Ø@'KÔäÌÈ$OgkgZð5Åh~?/Ûöv{Lø¡!8i¢-ûgÇ·¡#BîHþLÊt±OMôD^/ÛùB8v´tÀG,º{eHªó]þÝB{>çÝø¯@)2##ñÈI:OXBt#åûÜâF]¾ó >ÝÄx½¼øõ×Ý"6éÕ¬ßÉðáæ#ftJË#jÝôãñ×ïw@ø¡!=}wc8ñiXÓ
+=â(z6Óín~'°Füè#¡Ò7Dmü¯>]tÎ^<wãÅ$DÓÕ¼3dÞÄL#ÑÂ0Ê2#$_?ÏqÜñÓ:viºhMa!+npÄ1"¢ ÁNÞA²½àAAÂR±ÜÃÅôÓ]õÛä#.$ȤmÉ ðÚ#Òæ±OW4$'c OW·}HBiIràEE"ÄkzâóüðBBc¡|x~×8"BjÝé@å9nFñôÙÉ$ ¨ä#ÙíöðNN
+ð#Õ 'ÜìûO¸BãGnweïÓÇGÀû± ê<¯z}¢6@kݳVa!,$'_NîBB`ò)H½B@(>ÁÐPCþ.äp¡ TK
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,799 @@
+Machine (P#0 total=516912176KB Backend=Linux)
+ Group1 L#0 (total=129224048KB)
+ Group0 L#0 (total=32296336KB)
+ NUMANode L#0 (P#0 local=8064400KB total=8064400KB)
+ Socket L#0 (P#0)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ Socket L#1 (P#3)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ NUMANode L#1 (P#1 local=8077312KB total=8077312KB)
+ Socket L#2 (P#512)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ Socket L#3 (P#515)
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+ NUMANode L#2 (P#2 local=8077312KB total=8077312KB)
+ Socket L#4 (P#1024)
+ Core L#8 (P#0)
+ PU L#8 (P#8)
+ Core L#9 (P#1)
+ PU L#9 (P#9)
+ Socket L#5 (P#1027)
+ Core L#10 (P#0)
+ PU L#10 (P#10)
+ Core L#11 (P#1)
+ PU L#11 (P#11)
+ NUMANode L#3 (P#3 local=8077312KB total=8077312KB)
+ Socket L#6 (P#1536)
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ Core L#13 (P#1)
+ PU L#13 (P#13)
+ Socket L#7 (P#1539)
+ Core L#14 (P#0)
+ PU L#14 (P#14)
+ Core L#15 (P#1)
+ PU L#15 (P#15)
+ Group0 L#1 (total=32309232KB)
+ NUMANode L#4 (P#4 local=8077312KB total=8077312KB)
+ Socket L#8 (P#2048)
+ Core L#16 (P#0)
+ PU L#16 (P#16)
+ Core L#17 (P#1)
+ PU L#17 (P#17)
+ Socket L#9 (P#2051)
+ Core L#18 (P#0)
+ PU L#18 (P#18)
+ Core L#19 (P#1)
+ PU L#19 (P#19)
+ NUMANode L#5 (P#5 local=8077312KB total=8077312KB)
+ Socket L#10 (P#2560)
+ Core L#20 (P#0)
+ PU L#20 (P#20)
+ Core L#21 (P#1)
+ PU L#21 (P#21)
+ Socket L#11 (P#2563)
+ Core L#22 (P#0)
+ PU L#22 (P#22)
+ Core L#23 (P#1)
+ PU L#23 (P#23)
+ NUMANode L#6 (P#6 local=8077296KB total=8077296KB)
+ Socket L#12 (P#3072)
+ Core L#24 (P#0)
+ PU L#24 (P#24)
+ Core L#25 (P#1)
+ PU L#25 (P#25)
+ Socket L#13 (P#3075)
+ Core L#26 (P#0)
+ PU L#26 (P#26)
+ Core L#27 (P#1)
+ PU L#27 (P#27)
+ NUMANode L#7 (P#7 local=8077312KB total=8077312KB)
+ Socket L#14 (P#3584)
+ Core L#28 (P#0)
+ PU L#28 (P#28)
+ Core L#29 (P#1)
+ PU L#29 (P#29)
+ Socket L#15 (P#3587)
+ Core L#30 (P#0)
+ PU L#30 (P#30)
+ Core L#31 (P#1)
+ PU L#31 (P#31)
+ Group0 L#2 (total=32309248KB)
+ NUMANode L#8 (P#8 local=8077312KB total=8077312KB)
+ Socket L#16 (P#4096)
+ Core L#32 (P#0)
+ PU L#32 (P#32)
+ Core L#33 (P#1)
+ PU L#33 (P#33)
+ Socket L#17 (P#4099)
+ Core L#34 (P#0)
+ PU L#34 (P#34)
+ Core L#35 (P#1)
+ PU L#35 (P#35)
+ NUMANode L#9 (P#9 local=8077312KB total=8077312KB)
+ Socket L#18 (P#4608)
+ Core L#36 (P#0)
+ PU L#36 (P#36)
+ Core L#37 (P#1)
+ PU L#37 (P#37)
+ Socket L#19 (P#4611)
+ Core L#38 (P#0)
+ PU L#38 (P#38)
+ Core L#39 (P#1)
+ PU L#39 (P#39)
+ NUMANode L#10 (P#10 local=8077312KB total=8077312KB)
+ Socket L#20 (P#5120)
+ Core L#40 (P#0)
+ PU L#40 (P#40)
+ Core L#41 (P#1)
+ PU L#41 (P#41)
+ Socket L#21 (P#5123)
+ Core L#42 (P#0)
+ PU L#42 (P#42)
+ Core L#43 (P#1)
+ PU L#43 (P#43)
+ NUMANode L#11 (P#11 local=8077312KB total=8077312KB)
+ Socket L#22 (P#5632)
+ Core L#44 (P#0)
+ PU L#44 (P#44)
+ Core L#45 (P#1)
+ PU L#45 (P#45)
+ Socket L#23 (P#5635)
+ Core L#46 (P#0)
+ PU L#46 (P#46)
+ Core L#47 (P#1)
+ PU L#47 (P#47)
+ Group0 L#3 (total=32309232KB)
+ NUMANode L#12 (P#12 local=8077312KB total=8077312KB)
+ Socket L#24 (P#6144)
+ Core L#48 (P#0)
+ PU L#48 (P#48)
+ Core L#49 (P#1)
+ PU L#49 (P#49)
+ Socket L#25 (P#6147)
+ Core L#50 (P#0)
+ PU L#50 (P#50)
+ Core L#51 (P#1)
+ PU L#51 (P#51)
+ NUMANode L#13 (P#13 local=8077312KB total=8077312KB)
+ Socket L#26 (P#6656)
+ Core L#52 (P#0)
+ PU L#52 (P#52)
+ Core L#53 (P#1)
+ PU L#53 (P#53)
+ Socket L#27 (P#6659)
+ Core L#54 (P#0)
+ PU L#54 (P#54)
+ Core L#55 (P#1)
+ PU L#55 (P#55)
+ NUMANode L#14 (P#14 local=8077296KB total=8077296KB)
+ Socket L#28 (P#7168)
+ Core L#56 (P#0)
+ PU L#56 (P#56)
+ Core L#57 (P#1)
+ PU L#57 (P#57)
+ Socket L#29 (P#7171)
+ Core L#58 (P#0)
+ PU L#58 (P#58)
+ Core L#59 (P#1)
+ PU L#59 (P#59)
+ NUMANode L#15 (P#15 local=8077312KB total=8077312KB)
+ Socket L#30 (P#7680)
+ Core L#60 (P#0)
+ PU L#60 (P#60)
+ Core L#61 (P#1)
+ PU L#61 (P#61)
+ Socket L#31 (P#7683)
+ Core L#62 (P#0)
+ PU L#62 (P#62)
+ Core L#63 (P#1)
+ PU L#63 (P#63)
+ Group1 L#1 (total=129236960KB)
+ Group0 L#4 (total=32309248KB)
+ NUMANode L#16 (P#16 local=8077312KB total=8077312KB)
+ Socket L#32 (P#8192)
+ Core L#64 (P#0)
+ PU L#64 (P#64)
+ Core L#65 (P#1)
+ PU L#65 (P#65)
+ Socket L#33 (P#8195)
+ Core L#66 (P#0)
+ PU L#66 (P#66)
+ Core L#67 (P#1)
+ PU L#67 (P#67)
+ NUMANode L#17 (P#17 local=8077312KB total=8077312KB)
+ Socket L#34 (P#8704)
+ Core L#68 (P#0)
+ PU L#68 (P#68)
+ Core L#69 (P#1)
+ PU L#69 (P#69)
+ Socket L#35 (P#8707)
+ Core L#70 (P#0)
+ PU L#70 (P#70)
+ Core L#71 (P#1)
+ PU L#71 (P#71)
+ NUMANode L#18 (P#18 local=8077312KB total=8077312KB)
+ Socket L#36 (P#9216)
+ Core L#72 (P#0)
+ PU L#72 (P#72)
+ Core L#73 (P#1)
+ PU L#73 (P#73)
+ Socket L#37 (P#9219)
+ Core L#74 (P#0)
+ PU L#74 (P#74)
+ Core L#75 (P#1)
+ PU L#75 (P#75)
+ NUMANode L#19 (P#19 local=8077312KB total=8077312KB)
+ Socket L#38 (P#9728)
+ Core L#76 (P#0)
+ PU L#76 (P#76)
+ Core L#77 (P#1)
+ PU L#77 (P#77)
+ Socket L#39 (P#9731)
+ Core L#78 (P#0)
+ PU L#78 (P#78)
+ Core L#79 (P#1)
+ PU L#79 (P#79)
+ Group0 L#5 (total=32309232KB)
+ NUMANode L#20 (P#20 local=8077312KB total=8077312KB)
+ Socket L#40 (P#10240)
+ Core L#80 (P#0)
+ PU L#80 (P#80)
+ Core L#81 (P#1)
+ PU L#81 (P#81)
+ Socket L#41 (P#10243)
+ Core L#82 (P#0)
+ PU L#82 (P#82)
+ Core L#83 (P#1)
+ PU L#83 (P#83)
+ NUMANode L#21 (P#21 local=8077312KB total=8077312KB)
+ Socket L#42 (P#10752)
+ Core L#84 (P#0)
+ PU L#84 (P#84)
+ Core L#85 (P#1)
+ PU L#85 (P#85)
+ Socket L#43 (P#10755)
+ Core L#86 (P#0)
+ PU L#86 (P#86)
+ Core L#87 (P#1)
+ PU L#87 (P#87)
+ NUMANode L#22 (P#22 local=8077296KB total=8077296KB)
+ Socket L#44 (P#11264)
+ Core L#88 (P#0)
+ PU L#88 (P#88)
+ Core L#89 (P#1)
+ PU L#89 (P#89)
+ Socket L#45 (P#11267)
+ Core L#90 (P#0)
+ PU L#90 (P#90)
+ Core L#91 (P#1)
+ PU L#91 (P#91)
+ NUMANode L#23 (P#23 local=8077312KB total=8077312KB)
+ Socket L#46 (P#11776)
+ Core L#92 (P#0)
+ PU L#92 (P#92)
+ Core L#93 (P#1)
+ PU L#93 (P#93)
+ Socket L#47 (P#11779)
+ Core L#94 (P#0)
+ PU L#94 (P#94)
+ Core L#95 (P#1)
+ PU L#95 (P#95)
+ Group0 L#6 (total=32309248KB)
+ NUMANode L#24 (P#24 local=8077312KB total=8077312KB)
+ Socket L#48 (P#12288)
+ Core L#96 (P#0)
+ PU L#96 (P#96)
+ Core L#97 (P#1)
+ PU L#97 (P#97)
+ Socket L#49 (P#12291)
+ Core L#98 (P#0)
+ PU L#98 (P#98)
+ Core L#99 (P#1)
+ PU L#99 (P#99)
+ NUMANode L#25 (P#25 local=8077312KB total=8077312KB)
+ Socket L#50 (P#12800)
+ Core L#100 (P#0)
+ PU L#100 (P#100)
+ Core L#101 (P#1)
+ PU L#101 (P#101)
+ Socket L#51 (P#12803)
+ Core L#102 (P#0)
+ PU L#102 (P#102)
+ Core L#103 (P#1)
+ PU L#103 (P#103)
+ NUMANode L#26 (P#26 local=8077312KB total=8077312KB)
+ Socket L#52 (P#13312)
+ Core L#104 (P#0)
+ PU L#104 (P#104)
+ Core L#105 (P#1)
+ PU L#105 (P#105)
+ Socket L#53 (P#13315)
+ Core L#106 (P#0)
+ PU L#106 (P#106)
+ Core L#107 (P#1)
+ PU L#107 (P#107)
+ NUMANode L#27 (P#27 local=8077312KB total=8077312KB)
+ Socket L#54 (P#13824)
+ Core L#108 (P#0)
+ PU L#108 (P#108)
+ Core L#109 (P#1)
+ PU L#109 (P#109)
+ Socket L#55 (P#13827)
+ Core L#110 (P#0)
+ PU L#110 (P#110)
+ Core L#111 (P#1)
+ PU L#111 (P#111)
+ Group0 L#7 (total=32309232KB)
+ NUMANode L#28 (P#28 local=8077312KB total=8077312KB)
+ Socket L#56 (P#14336)
+ Core L#112 (P#0)
+ PU L#112 (P#112)
+ Core L#113 (P#1)
+ PU L#113 (P#113)
+ Socket L#57 (P#14339)
+ Core L#114 (P#0)
+ PU L#114 (P#114)
+ Core L#115 (P#1)
+ PU L#115 (P#115)
+ NUMANode L#29 (P#29 local=8077296KB total=8077296KB)
+ Socket L#58 (P#14848)
+ Core L#116 (P#0)
+ PU L#116 (P#116)
+ Core L#117 (P#1)
+ PU L#117 (P#117)
+ Socket L#59 (P#14851)
+ Core L#118 (P#0)
+ PU L#118 (P#118)
+ Core L#119 (P#1)
+ PU L#119 (P#119)
+ NUMANode L#30 (P#30 local=8077312KB total=8077312KB)
+ Socket L#60 (P#15360)
+ Core L#120 (P#0)
+ PU L#120 (P#120)
+ Core L#121 (P#1)
+ PU L#121 (P#121)
+ Socket L#61 (P#15363)
+ Core L#122 (P#0)
+ PU L#122 (P#122)
+ Core L#123 (P#1)
+ PU L#123 (P#123)
+ NUMANode L#31 (P#31 local=8077312KB total=8077312KB)
+ Socket L#62 (P#15872)
+ Core L#124 (P#0)
+ PU L#124 (P#124)
+ Core L#125 (P#1)
+ PU L#125 (P#125)
+ Socket L#63 (P#15875)
+ Core L#126 (P#0)
+ PU L#126 (P#126)
+ Core L#127 (P#1)
+ PU L#127 (P#127)
+ Group1 L#2 (total=129236960KB)
+ Group0 L#8 (total=32309248KB)
+ NUMANode L#32 (P#32 local=8077312KB total=8077312KB)
+ Socket L#64 (P#16384)
+ Core L#128 (P#0)
+ PU L#128 (P#128)
+ Core L#129 (P#1)
+ PU L#129 (P#129)
+ Socket L#65 (P#16387)
+ Core L#130 (P#0)
+ PU L#130 (P#130)
+ Core L#131 (P#1)
+ PU L#131 (P#131)
+ NUMANode L#33 (P#33 local=8077312KB total=8077312KB)
+ Socket L#66 (P#16896)
+ Core L#132 (P#0)
+ PU L#132 (P#132)
+ Core L#133 (P#1)
+ PU L#133 (P#133)
+ Socket L#67 (P#16899)
+ Core L#134 (P#0)
+ PU L#134 (P#134)
+ Core L#135 (P#1)
+ PU L#135 (P#135)
+ NUMANode L#34 (P#34 local=8077312KB total=8077312KB)
+ Socket L#68 (P#17408)
+ Core L#136 (P#0)
+ PU L#136 (P#136)
+ Core L#137 (P#1)
+ PU L#137 (P#137)
+ Socket L#69 (P#17411)
+ Core L#138 (P#0)
+ PU L#138 (P#138)
+ Core L#139 (P#1)
+ PU L#139 (P#139)
+ NUMANode L#35 (P#35 local=8077312KB total=8077312KB)
+ Socket L#70 (P#17920)
+ Core L#140 (P#0)
+ PU L#140 (P#140)
+ Core L#141 (P#1)
+ PU L#141 (P#141)
+ Socket L#71 (P#17923)
+ Core L#142 (P#0)
+ PU L#142 (P#142)
+ Core L#143 (P#1)
+ PU L#143 (P#143)
+ Group0 L#9 (total=32309232KB)
+ NUMANode L#36 (P#36 local=8077312KB total=8077312KB)
+ Socket L#72 (P#18432)
+ Core L#144 (P#0)
+ PU L#144 (P#144)
+ Core L#145 (P#1)
+ PU L#145 (P#145)
+ Socket L#73 (P#18435)
+ Core L#146 (P#0)
+ PU L#146 (P#146)
+ Core L#147 (P#1)
+ PU L#147 (P#147)
+ NUMANode L#37 (P#37 local=8077296KB total=8077296KB)
+ Socket L#74 (P#18944)
+ Core L#148 (P#0)
+ PU L#148 (P#148)
+ Core L#149 (P#1)
+ PU L#149 (P#149)
+ Socket L#75 (P#18947)
+ Core L#150 (P#0)
+ PU L#150 (P#150)
+ Core L#151 (P#1)
+ PU L#151 (P#151)
+ NUMANode L#38 (P#38 local=8077312KB total=8077312KB)
+ Socket L#76 (P#19456)
+ Core L#152 (P#0)
+ PU L#152 (P#152)
+ Core L#153 (P#1)
+ PU L#153 (P#153)
+ Socket L#77 (P#19459)
+ Core L#154 (P#0)
+ PU L#154 (P#154)
+ Core L#155 (P#1)
+ PU L#155 (P#155)
+ NUMANode L#39 (P#39 local=8077312KB total=8077312KB)
+ Socket L#78 (P#19968)
+ Core L#156 (P#0)
+ PU L#156 (P#156)
+ Core L#157 (P#1)
+ PU L#157 (P#157)
+ Socket L#79 (P#19971)
+ Core L#158 (P#0)
+ PU L#158 (P#158)
+ Core L#159 (P#1)
+ PU L#159 (P#159)
+ Group0 L#10 (total=32309248KB)
+ NUMANode L#40 (P#40 local=8077312KB total=8077312KB)
+ Socket L#80 (P#20480)
+ Core L#160 (P#0)
+ PU L#160 (P#160)
+ Core L#161 (P#1)
+ PU L#161 (P#161)
+ Socket L#81 (P#20483)
+ Core L#162 (P#0)
+ PU L#162 (P#162)
+ Core L#163 (P#1)
+ PU L#163 (P#163)
+ NUMANode L#41 (P#41 local=8077312KB total=8077312KB)
+ Socket L#82 (P#20992)
+ Core L#164 (P#0)
+ PU L#164 (P#164)
+ Core L#165 (P#1)
+ PU L#165 (P#165)
+ Socket L#83 (P#20995)
+ Core L#166 (P#0)
+ PU L#166 (P#166)
+ Core L#167 (P#1)
+ PU L#167 (P#167)
+ NUMANode L#42 (P#42 local=8077312KB total=8077312KB)
+ Socket L#84 (P#21504)
+ Core L#168 (P#0)
+ PU L#168 (P#168)
+ Core L#169 (P#1)
+ PU L#169 (P#169)
+ Socket L#85 (P#21507)
+ Core L#170 (P#0)
+ PU L#170 (P#170)
+ Core L#171 (P#1)
+ PU L#171 (P#171)
+ NUMANode L#43 (P#43 local=8077312KB total=8077312KB)
+ Socket L#86 (P#22016)
+ Core L#172 (P#0)
+ PU L#172 (P#172)
+ Core L#173 (P#1)
+ PU L#173 (P#173)
+ Socket L#87 (P#22019)
+ Core L#174 (P#0)
+ PU L#174 (P#174)
+ Core L#175 (P#1)
+ PU L#175 (P#175)
+ Group0 L#11 (total=32309232KB)
+ NUMANode L#44 (P#44 local=8077312KB total=8077312KB)
+ Socket L#88 (P#22528)
+ Core L#176 (P#0)
+ PU L#176 (P#176)
+ Core L#177 (P#1)
+ PU L#177 (P#177)
+ Socket L#89 (P#22531)
+ Core L#178 (P#0)
+ PU L#178 (P#178)
+ Core L#179 (P#1)
+ PU L#179 (P#179)
+ NUMANode L#45 (P#45 local=8077296KB total=8077296KB)
+ Socket L#90 (P#23040)
+ Core L#180 (P#0)
+ PU L#180 (P#180)
+ Core L#181 (P#1)
+ PU L#181 (P#181)
+ Socket L#91 (P#23043)
+ Core L#182 (P#0)
+ PU L#182 (P#182)
+ Core L#183 (P#1)
+ PU L#183 (P#183)
+ NUMANode L#46 (P#46 local=8077312KB total=8077312KB)
+ Socket L#92 (P#23552)
+ Core L#184 (P#0)
+ PU L#184 (P#184)
+ Core L#185 (P#1)
+ PU L#185 (P#185)
+ Socket L#93 (P#23555)
+ Core L#186 (P#0)
+ PU L#186 (P#186)
+ Core L#187 (P#1)
+ PU L#187 (P#187)
+ NUMANode L#47 (P#47 local=8077312KB total=8077312KB)
+ Socket L#94 (P#24064)
+ Core L#188 (P#0)
+ PU L#188 (P#188)
+ Core L#189 (P#1)
+ PU L#189 (P#189)
+ Socket L#95 (P#24067)
+ Core L#190 (P#0)
+ PU L#190 (P#190)
+ Core L#191 (P#1)
+ PU L#191 (P#191)
+ Group1 L#3 (total=129214208KB)
+ Group0 L#12 (total=32309248KB)
+ NUMANode L#48 (P#48 local=8077312KB total=8077312KB)
+ Socket L#96 (P#24576)
+ Core L#192 (P#0)
+ PU L#192 (P#192)
+ Core L#193 (P#1)
+ PU L#193 (P#193)
+ Socket L#97 (P#24579)
+ Core L#194 (P#0)
+ PU L#194 (P#194)
+ Core L#195 (P#1)
+ PU L#195 (P#195)
+ NUMANode L#49 (P#49 local=8077312KB total=8077312KB)
+ Socket L#98 (P#25088)
+ Core L#196 (P#0)
+ PU L#196 (P#196)
+ Core L#197 (P#1)
+ PU L#197 (P#197)
+ Socket L#99 (P#25091)
+ Core L#198 (P#0)
+ PU L#198 (P#198)
+ Core L#199 (P#1)
+ PU L#199 (P#199)
+ NUMANode L#50 (P#50 local=8077312KB total=8077312KB)
+ Socket L#100 (P#25600)
+ Core L#200 (P#0)
+ PU L#200 (P#200)
+ Core L#201 (P#1)
+ PU L#201 (P#201)
+ Socket L#101 (P#25603)
+ Core L#202 (P#0)
+ PU L#202 (P#202)
+ Core L#203 (P#1)
+ PU L#203 (P#203)
+ NUMANode L#51 (P#51 local=8077312KB total=8077312KB)
+ Socket L#102 (P#26112)
+ Core L#204 (P#0)
+ PU L#204 (P#204)
+ Core L#205 (P#1)
+ PU L#205 (P#205)
+ Socket L#103 (P#26115)
+ Core L#206 (P#0)
+ PU L#206 (P#206)
+ Core L#207 (P#1)
+ PU L#207 (P#207)
+ Group0 L#13 (total=32309232KB)
+ NUMANode L#52 (P#52 local=8077312KB total=8077312KB)
+ Socket L#104 (P#26624)
+ Core L#208 (P#0)
+ PU L#208 (P#208)
+ Core L#209 (P#1)
+ PU L#209 (P#209)
+ Socket L#105 (P#26627)
+ Core L#210 (P#0)
+ PU L#210 (P#210)
+ Core L#211 (P#1)
+ PU L#211 (P#211)
+ NUMANode L#53 (P#53 local=8077296KB total=8077296KB)
+ Socket L#106 (P#27136)
+ Core L#212 (P#0)
+ PU L#212 (P#212)
+ Core L#213 (P#1)
+ PU L#213 (P#213)
+ Socket L#107 (P#27139)
+ Core L#214 (P#0)
+ PU L#214 (P#214)
+ Core L#215 (P#1)
+ PU L#215 (P#215)
+ NUMANode L#54 (P#54 local=8077312KB total=8077312KB)
+ Socket L#108 (P#27648)
+ Core L#216 (P#0)
+ PU L#216 (P#216)
+ Core L#217 (P#1)
+ PU L#217 (P#217)
+ Socket L#109 (P#27651)
+ Core L#218 (P#0)
+ PU L#218 (P#218)
+ Core L#219 (P#1)
+ PU L#219 (P#219)
+ NUMANode L#55 (P#55 local=8077312KB total=8077312KB)
+ Socket L#110 (P#28160)
+ Core L#220 (P#0)
+ PU L#220 (P#220)
+ Core L#221 (P#1)
+ PU L#221 (P#221)
+ Socket L#111 (P#28163)
+ Core L#222 (P#0)
+ PU L#222 (P#222)
+ Core L#223 (P#1)
+ PU L#223 (P#223)
+ Group0 L#14 (total=32309248KB)
+ NUMANode L#56 (P#56 local=8077312KB total=8077312KB)
+ Socket L#112 (P#28672)
+ Core L#224 (P#0)
+ PU L#224 (P#224)
+ Core L#225 (P#1)
+ PU L#225 (P#225)
+ Socket L#113 (P#28675)
+ Core L#226 (P#0)
+ PU L#226 (P#226)
+ Core L#227 (P#1)
+ PU L#227 (P#227)
+ NUMANode L#57 (P#57 local=8077312KB total=8077312KB)
+ Socket L#114 (P#29184)
+ Core L#228 (P#0)
+ PU L#228 (P#228)
+ Core L#229 (P#1)
+ PU L#229 (P#229)
+ Socket L#115 (P#29187)
+ Core L#230 (P#0)
+ PU L#230 (P#230)
+ Core L#231 (P#1)
+ PU L#231 (P#231)
+ NUMANode L#58 (P#58 local=8077312KB total=8077312KB)
+ Socket L#116 (P#29696)
+ Core L#232 (P#0)
+ PU L#232 (P#232)
+ Core L#233 (P#1)
+ PU L#233 (P#233)
+ Socket L#117 (P#29699)
+ Core L#234 (P#0)
+ PU L#234 (P#234)
+ Core L#235 (P#1)
+ PU L#235 (P#235)
+ NUMANode L#59 (P#59 local=8077312KB total=8077312KB)
+ Socket L#118 (P#30208)
+ Core L#236 (P#0)
+ PU L#236 (P#236)
+ Core L#237 (P#1)
+ PU L#237 (P#237)
+ Socket L#119 (P#30211)
+ Core L#238 (P#0)
+ PU L#238 (P#238)
+ Core L#239 (P#1)
+ PU L#239 (P#239)
+ Group0 L#15 (total=32286480KB)
+ NUMANode L#60 (P#60 local=8077312KB total=8077312KB)
+ Socket L#120 (P#30720)
+ Core L#240 (P#0)
+ PU L#240 (P#240)
+ Core L#241 (P#1)
+ PU L#241 (P#241)
+ Socket L#121 (P#30723)
+ Core L#242 (P#0)
+ PU L#242 (P#242)
+ Core L#243 (P#1)
+ PU L#243 (P#243)
+ NUMANode L#61 (P#61 local=8077296KB total=8077296KB)
+ Socket L#122 (P#31232)
+ Core L#244 (P#0)
+ PU L#244 (P#244)
+ Core L#245 (P#1)
+ PU L#245 (P#245)
+ Socket L#123 (P#31235)
+ Core L#246 (P#0)
+ PU L#246 (P#246)
+ Core L#247 (P#1)
+ PU L#247 (P#247)
+ NUMANode L#62 (P#62 local=8077312KB total=8077312KB)
+ Socket L#124 (P#31744)
+ Core L#248 (P#0)
+ PU L#248 (P#248)
+ Core L#249 (P#1)
+ PU L#249 (P#249)
+ Socket L#125 (P#31747)
+ Core L#250 (P#0)
+ PU L#250 (P#250)
+ Core L#251 (P#1)
+ PU L#251 (P#251)
+ NUMANode L#63 (P#63 local=8054560KB total=8054560KB)
+ Socket L#126 (P#32256)
+ Core L#252 (P#0)
+ PU L#252 (P#252)
+ Core L#253 (P#1)
+ PU L#253 (P#253)
+ Socket L#127 (P#32259)
+ Core L#254 (P#0)
+ PU L#254 (P#254)
+ Core L#255 (P#1)
+ PU L#255 (P#255)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Groups (type #7)
+ depth 2: 16 Groups (type #7)
+ depth 3: 64 NUMANodes (type #2)
+ depth 4: 128 Sockets (type #3)
+ depth 5: 256 Cores (type #5)
+ depth 6: 256 PUs (type #6)
+latency matrix between NUMANodes (depth 3) by logical indexes:
+ index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
+ 0 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 1 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 2 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 3 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 4 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 5 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 6 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 7 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 8 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 9 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 10 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 11 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 12 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 13 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 14 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 15 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 16 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 17 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 18 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 19 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 20 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 21 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 22 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 23 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 24 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 25 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 26 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 27 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 28 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 29 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 30 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 31 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 32 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 33 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 34 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 35 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 36 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 37 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 38 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 39 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 40 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 41 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 42 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 43 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400
+ 44 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 45 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 46 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 47 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000
+ 48 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000
+ 49 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000
+ 50 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000
+ 51 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000
+ 52 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600
+ 53 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600
+ 54 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600
+ 55 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600
+ 56 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 1.000 2.200 2.200 2.200 2.600 2.600 2.600 2.600
+ 57 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 1.000 2.200 2.200 2.600 2.600 2.600 2.600
+ 58 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 1.000 2.200 2.600 2.600 2.600 2.600
+ 59 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 2.600 2.600 2.600 2.600 3.000 3.000 3.000 3.000 2.200 2.200 2.200 1.000 2.600 2.600 2.600 2.600
+ 60 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 1.000 2.200 2.200 2.200
+ 61 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 1.000 2.200 2.200
+ 62 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 1.000 2.200
+ 63 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.400 3.400 3.400 3.400 3.000 3.000 3.000 3.000 3.000 3.000 3.000 3.000 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.600 2.200 2.200 2.200 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ia64-64n2s2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,112 @@
+BZh91AY&SY@оQöçÿüß\?ÿò=ï_ÿïß°÷À p 0è`l}' ]¸§lUKx/ç§ß@zv¶e/>AUÙî @ºe(I áåîÝ¢ßsé0À¢d±AÕh {Üõ A³2 ó'½Ö
+¦IWÀ ÛÞùw¡L¶§y#ÕRY wÀ ^Ø^õ {
+£AïPÀz£AëÙ] PnC Ô<IKXb *chÚT© ¤Ñ@ ªÒ©MGªA ¦C Ñ Ð Jª÷ú$*z 4iµ§¤BH @ ¤M"P h(Aµª A
+¢ ¤5215'êÒ=C@zCÔêzM=GêOã"Oß ÿ`ùðþäü ðAPþAGBhM¦þQG¤Ø°}è@~Y
&{»B%$,I"T ¨¢©ò¯Q]J¢BA_6¿ùOÇ9ùß}÷ß}÷ÝTI$ºO[w.`X
»KädR)II2I2)&I&dw2<K32¤"É$Ȥ$æI7s#Ȥ$$-¬MlªBlU,©QHERê(¢(£¨¢Å.ES\R©eH¢J¤(¦´!¢mE[R)T ÄU!(TV¢´µjÝhC¡ZöûËÕKË|§¼½¨¢¢/ÊÔ^¿yyy{È^QJm3Qyx(`»BeR)uªQÔR©LQE%ÅåêT¼¼½¯yyy{kËÕJJ~Ååê&·)¯/).бJ¨¢nbŪªS*(¢
j)WJÔR]«QJ¢T:U,*mE[*QK»QE71b]D(¡QJ¥©E¸ñHLLRIII2I1I&I0YâÌÌRIII2I1I\o$Ìk$2I1I&I&)$Â]7£&d2òBH¡!$HîI¢IIr8I%¹ ë<«Þ=$·¬»$¢GA²îE4 ¢BB"IIrC«mÉ»º÷tÝÜÅ3$o×a.ýAf,ÜÌ7tÝÙ»·wMûÄ!URWä%z9'¤÷¤÷¤ô·$$nnívkÛw·-mî¢ÌEQÌZ' ¦F¶½3~ðê³!Jª¢"!Jª¢!BUU!Bª¨!BUD!Bªª!B%UQB! B5ë*ªB! UUB! UTB!Jª¢!BUU!Bª¨!BUD!ERI%UQB! B½p!*ªB! UTB!Jª¢!BUU!Bª¨!B
Ê¡¸I>I$OI$)$IòI$|]ßI$¾4qD
+LñpqÊ)¦Ìp&$`Hd!Ye ¥
+µH¬@Xèt«¨
+KX9f8f:Ìp&ÒêaY !B e``¥ÃAlt8áTQfQSM
+âdÑLE11ÌA0LÁ2LA30A33ÍU44àãÐSYc32L±
+ãAAÉ,2@K,0É344àãÐSYcL,CB¸äÐDC²@K!Ë0LÌM
+88åÓNf8DÌCHAL0K$2ÈC,²ÃL4ºØ
+?@~Õçzxy^¢Ìihh)*
!³4µT;.ÍUåêf8ÆI.õæn¬°æ²;PÎC$DÖü*¦Ñ.Fb#A A fI Ø*éÚôÔAD1I×zAX`=bRà¦` $!.ø 0XB$È$ID1EK*Qd(²@(%@¢* DU
¢T$Q@($AJQ%RI)bR(H¡,B¢C¿¿¿[ÝT¤U"©HÝHªER*×ñ|ÌT¤U#Þ¤U%>æ×ÂT¤U"©P['ú3oM,K\ÓýÆ¥RQ¡ôòëÝÏâþ¤ÿÏäåÍu®£Æ~´êwfq}âÓ]eµ·e;I$µön^vÅÙè¦x¤û×
+ÏgEK;=îÍ»<]g±Øzõ^üî2¼êß"ɾËõ«9<¹îcÏvÓºOág;/ÌZú½DUïqÙ{UwÝÙÂ"ªóõ®÷Æt]q ¹u{}«³Ø>êøÑUUUR*ªª+¨EQUUQUUVH¨ªªªªª¨ªSUUUUEUTUUT*ª¢ªªªªª¨ªª¨ªªªªª¨ªª¨ì$é%[Qj~ª1S2Èr!È 2ÈbJ* D¨¢J* D¨¢J* D¨¢J* D¨¢ 2Èr!È 2Q%D"T@Q#@d9äC@D¨¢J* D¨È 2Èr!È 2Èr!È 2ÈbJ* D¨¢J©Oöj£n9ïÙ×<óÏ<ñÍç@ `t À´ ÀØ 4 qp: ÀØ 4 ÖÀ ° UT Àè
+ +ZÖµkékZÖµ§ 5ÅgLò¼gi¾s)M|ÖÖmf½SêouÚøIÉ$YÑmò½]ö̯uxï.½ÙzUtÐUÉîÅI$MÓ\kZÖ¨vKdÙÜï<Õß*½g/KíU1¯j÷Oc÷ßVI=çL=exíõûÜ^*íOGîÌ&n7ÊçM½Ï]×zÕiïnI嵬ìÕ½î8Ó\7Ûôßw ôI' \EUTUUTUUEUUEUTUUTUUEUUEUTªª©ªªªªª¨ªTUUEUUUUUQUUQUUUUUQUw½ï[ÇÞÛïL3 3½
+ì ;ÐÀ 7°ÞÀ ;ÐÀ Ìï@ 3333 Îô 9çyçyçÈ'®Y HüðIdHCûRþðÆú $Oа" í ±?8Hò z u£° ²HP
+ Pèi $ü`CÝõüÞéf$ÌHÔ
+y'R_¹RÈTH Éþæ^$¹r«Ç¹ãç8xØÁ¢]ÚÀKËnãwwcV¨[H ÊrIeäremà[RÒ\KIE¸þh Ó¡ P d½eÀ%Ü(·KEª¹eÁ"T YhÇ( ("Élh@m±É¥nîßÔ]*å¦qt®e¦qeuUUU*ªªª¢(¢"
+(¢(ìTm:b(ZµÓ hŨT4\Ù:àb
+Á0L ÀÓM6NII-µI¸pØ®0ut È`w2#*ä
+/NÊ" ðë@ÀãM2!è0T`ÀÁEÀ°,0ªM`ÔÛ|C!FlÆ Ãa1DH@¨p.Øp1ÄVl qæ!bPÎ0
(Zâ0 °pÆ ´1!hS³°Zq1ÚH!
K«°Yv ´ÆìH/3 $2`R@ y
+yQ¸*]ÓhH ˬ·E¹rd·$ Q¹ca2eÇ &J/$¶ ËhKb«a
+#É«´ºg-1°p
+Öµ¯>oæú_
+|ËãJþn|¼ùtݪÔó½ë6rÖí÷Ol+:¨ÕítíuÓ^f7º¥|ooº÷:»Ùy³v»Ëè¼zê° o¡w{Ô¹Jê¯x{Þ¬Ì÷å[ys®søÒÖµj«{ªs$ Àè
+ ( @ Ì˽îì 08 Ð @ P :w|Ýn¨ x0 yfffcÀáÐ
+ì X @ »»;»¤I$Yµ[è½P{ÉO£Õï©wªë¬;ÇÆßkU»4úËÓé\мVðõ;UïjÙ}¦g«Û3:¬O´6wº½¨yxô÷Û`Ì}máM·X6Öu×]uÌÌÿ¨ ûP ^OSwμw¼òôáK×øyºU{§.ÎÙ'{}ï^Vgù\j?Þõ;UïjÙ}¦g«Û3:¬O´ºÁtOyIXí¶ ,ÇÖÞÛu`måUQxØuw[âÎôÝÖw:^âì=¾åRé¾~ù9z[t¶òM¬*¦GÐåíÚðýÒã£8V{Üß½'³Þà%ªôªÕ}lßWwUUÇÖ:|áX¸ßxqÇ;ñÎyÆ7õx Pp¼ :~rYÞÅq¦8©FîñfDò¥Ã/%¼ÌÜrc29LÉhÛ.Öâ^IxÁ´nÆãâY-]æHÂárÒ.îXIJ2ïæLÂÉqÇȹ$¹m nHy28Ü[3òE.Õ̶òIä»rî]ÄÆÛ¹!Ö7pZÄYänî¢^FfUä%EQAÆî4·ÙpfKB³%Ë Ìs#n
+^\b¥£2êÛ2±G%˶I
+-áwpbãÉ#¶²c%Á°L¨!il£Xȳ¦A[kb0¼ämÁ¸Ýå²ífL°¶ÖK
¶.7s!æ8¢2fKbcqc%ä¼¶Ù&K¸µnFî5&SdL»ÂäËÌ&8ÚdKÁ«É1É&$d¤y$¾@@Ü$ä úa ÷:½ ÀúÇÖ>ÁÔöÙk1t¬]iµDwë½ï×{ÈaÐêI¥Y;ØkcjÚ¶
a°Ôj5 ï×{ß®÷¿n$æ»ÙÕYÞ¢!ß®÷¿]îâp:C© ìmt³M±¥[6¨!ß®÷¿]ïr9@5«F;âk¶»hï×{ß®÷a9aÜt¥iuº÷Æh!ß®÷¿]îât;㸺f÷Ó÷ Há íD`æ ú8õ_V1êÎsÆi¦Ú뮺ï°íÀÙ @»¹wPI;«®û3:ª¨I$]ÝÝ6Ûm
+¶ÛôI ¶ÞîÝ×uUußfgnîù¶ß NIîIÀs01æÞ]wwwwIRîfLÉ3;ÛÙuÝ]wÙÜÛ| pÀ
+¶÷ws2î»»»»»¿mûOö|½-ò f M >^WËyg9¸ûîeçÝægÝv÷`}Ø»ª®©BI$îüi|I|_>]×ÕßÕf}]æý;mý @ÐË»½ÕV÷Ísmãm¶hÙÎ2ºURªEUVwuU]ïwÇlæ»] ü^kZÖ¼×Ý$ø ç»ÖLN}ª&½
¯´[s¯ÞËîç<s[ówkuÇë¿óäà!xÈÏI%®¥ßÛ3>Û»¿fÛ@öI'àÛm·ð m¶ÛÌÌÌË»»´ï{Îl+®û3=»»Í¶ø àtOtN <ÛÙºn<ÛË®îîîé*]ÌÉ3&w³³.뺺ï»wy¶ß pÀm½ª®÷¼æÀ ÐsáÒªªª»»»»³3Ûm¶Ûm¶Ûo3.îîîîÒªªÌ»\»®îû;www|ßm·Á:@~é:FÞûwÛvö«wwwtR]ܹrægg¯®írî»»ìíÞo¶Ûààm¶øªªª®óæ Ñ£9ÞìªîÊ¥ªàØSÎUódô½é=î¬Å¶Þ¶Vf»Í«®êëµÙ³6½ºÝç0Üæ{Gá¹âæ³iX»»»»¤¥-TªRª.òëT»©u®¼¯v·yÌ79ç0®î»Io½oÞ
6s{Òª¨I$]ÝÝ6Ûm
+¶Ûy
+·uÝ]wÙíÝÞm·À ¤{¤pæÞÍÓqæÞ]wwwwIRùîw¹ÞçGÓ½ç69Àª*¨ª¢ªª*«½ï9°ÙÃ8pæÀ Ñ£9ÞìÝÊíÖ¶ù°§«æÉé{Ò{Ý/Y'l#½l¬Í«Êºî®»]½µÛÞs
+Îa¹8ç¸ôyÎ.7FÓZ±wwwwIJZ©U*¢¼ºÕ.ê]kÝ]ºÝç0ÜæÃsnkuªRîîîîîýÊøAG4¤kÆO±^ü»EMéNo$^g3i¡DËÞ
+24áºZææÚñ£SFÁÊÞÑ8ÔwÆÕuvªºÝݪëYwj«»oê«ëZª®Y¥W´EèU^Ì2 %DTë·íô¸`ꨮ$;êvÿH ;óZ5]»pþ@ð ÔßÂí¶üi£Fi¦km4ÛI$YxþÿÁnYñG»Îï u¬ÜßμïÎûç}ÎûîIßxAAA¢¨e(B
óçÊÍ>£f
fæ°ÖØ é¶Ä6ÙXØ3Fô2Ø10uY´c`ìòåWòkòñþ³þ$ëùScµUNôáÎw<ç;Nxxs¿Üès·¹°Ç.ìË®ëÝ¿lÏ3wªqNeµæÞûwCw[nÜ$w-½{»»Ï83nûùù穽3
+íÙ¹»774ñZ£|nöÜós®;Ýïmððïðë»¶Û`ÖÛïmº·yp÷s32îfÓÝÝÌ7ow6¿Ûð©ùjû|I~EBT%R¡*)P Bø¨J%+ä%BQñ%!*¢IJS3>2îîîþtú óÒIIÌ ÝÝÝÚI+µÛWwï+Ï}m¶ýI$öI$6Ûq$I$FÛn$É$HÛmÄ@9$Im¸H'ÒzòööC#Y Ð" G>®FÚôßÉo~ bùwÔVå¼ps3]]?¢}BT%D¨J£âR¡*$¥BT% )U P>$2Qñ)%UUUU¥TTÎõwÎîü k÷}õwιC(C(C(C(C(C(C(C(C(C(C(\ë9×.uËë:åÏÀîA ?cà'ÀQÏR1£l
+1óüà|êóó¢&ݨí6#µ@ØíQØìø| ø
+'ÃNt(LÉï ªC÷!Hþáõ{ÇÁ"~ÿ¿áø¢G»Ð|ѬÖDÕ Öj¬}[&ÒDÕ5ÀkÍßèêýkµÛ]¨C(C(C(C(C(C(%ûªI|ùéêôõxe e e e e e e¢$¾% PPÊPÊPÊPÊPÊç:åιsrç\¹ØT ?Z%¥¡bZZZ%¥¡bZZZ%¥¡bZZZ%¥¡bZ!¡ b!¡ b!¡ b!¡ bJJ$¤¡"JJJ$¤¡"JJJ$¤¡"JJJ$¤¡"J
+
+ U---KKERÒÒÑT´´U---KKEP¦hbi¦&i¡¦&hbi¡¢("(¢"EPDQAEPDUQQUUUQ¢*ª"ª"Bª"ª"¥QQUUUQQPDQAEPDQEEQAEi¡¦&hbi¡¦hbi¦&²ÒÒÑT´´U---KKERÒÒÑT´´U-
+
+ "
+JJ$¤¡"JJJ$¤¡"JJJ$¤¡"JJJ$¤¡"J!¡ b!¡ b!¡ b!¡ bZZ%¥¡bZZZ%¥¡bZZZ%¥¡bZZZ%¥¡bZ AÅ@ó"$À1þPêu$Ço¯1B$©F &ÖK`Èd0¯ÃA ÎÙ5
+÷Ìê©gëÓVÛF5` ß+¤® J¯<ïÃVªªÛCäbIͺiYñÈ*µïÖVÌ+Zã Õh7æúåð8ÇÖѸult$EïïϦ뻡é_+rªª©|
+ zäQC®AãÇb =KÍ'RmØê©!-kM¯ïÅÁV3Á ÚC¨¿C\à áva]Í÷*ÃH¾¸øô]U^¼^ híUUWè ô³RA¦f;vèչ#Qò`RyrÊ©xG]Þªªç]÷«çNúÜ©ÙUª-ా˧5h²Jª«*«qû ðʪÛ@i
+°h;ï¾ÇWªêQ3e×g;CIµ°®ë,qÒªª®ÍuÀ °ÐvR¬Í¦«ËV{GTÞN·Q·Uä¹üJ|ßé¾Y¬Ö*ªªÝóW;µzë¼Ø-ðÖôvUå,K1óß]ùúAu-¤&UUuoUU@ÑÖî»îê¬Ø` s
+ÀÔ&dddÔÅf2xdÉ4×5Uy]k½Í/c$úß4w¾±íRUÝeØÞ¢ªª¬¼Õà½Îèï¿
+Ñw;vïYUUUëW4sqƺ4××n7ßvàìoNÐP£Ðx¥´÷Þë¤Xyv¢äfmæ÷_/w»Õ±Enî÷¤N\-E]VøÔ·\ÅÙ¾IUR5¬hæèà媮]ݪ®Iío.íUuÉyË»Uå&ÿÃäß¹ÉÉ.c-nþ þð kZ½¸faxáºÎáë]tæ«5æ±lóZÖµ¯>%×Ì `psÎöÅÌ33X^ë` ÆÛØ
+ÆÆVf¶nîô
+ÌÖʶim+øyær±awwv{ôÀàJHþ {wwwiU+¾ªJïÞöîóß[m¿RI ýI$¶ÜI$I$¶Û$rI$6Ûq$I$FÛn$Çå¾yG]yG÷ß^Ç}J¯¶ªÕWÖµîÂîäI&1töw²h± ©¬}ýWÁ¤á;gØ.vi$»'¯¿G>¬²ë5Û,´gUUævSè*îâfWüá_¿=ôõëÎìÕ³
+k´UáWð±¯yóó\+äïv^æ»åxW³GdI÷y ?W~X]ÜI$uF¡OøßÓ{+Ì8Îl¯êùAAEV~çèìDúÖ_F¦Éâz
+ôO>Éþ*h§oiekÙb'Þ½ÞÊkø}|í½5ëaùCØx{ð¨$鮯×HÄÜ«G¬uÌÖ°ÈG rCãß>X]ÜI$fÃ}oÞ)8SúGêvo.©t¯%UuÑSǨB$Ö1£&òh¯AEUòMº)´æL+Ô:Ð~!{÷8RyÞT0¯ÍºÑVsÌ׿[²ÀCuc碥WS:Ú÷wå
ÝÉ$I&%u»²þÆÊk¯Ç
+ýý"{>ûõSõ}úýw¼nsÜáOézû³~ý]}d²óñWsìDHöïÛ˪ùF&½¿[Õï¬@?W~¬.îI$I1+W¾~¬áM%|Á,¦ùSèDH¾è((ªïØzÖËùÏ¿EkáÃ>;+ë¿ßzÑ_Äýµ°ú)ØúòSø'!
+òh¯Ñ>*Ðð®×DH;Úû»êÂîäI$õ¨Wx'¶Ã¯\áOQG{ïMÚë
l´&ö=vF3}w»qâÊ«frÌõùåºs1²¿×÷²ð§0çÜ4Ri:|³_¿ =w
·zÞ zRçÝu.øYmÞG4 ?\׫»I$O£úëÍ×
+ôVXöýµÓÓçWÑY´7ÇEN¶WýkçÙ5ÛÒ¾àcÛ×Hè}æºè^º>Ý
+¥Ù3!Í!âqã·Lî7î¬Êe
+§<s]üwÒsÎLæäI$½B¬5Am¯¿®5×{Ù]L¿sEwQ
+0²§Zú4d!â8» zû°FNë¡Ø©¹=óéê^í=Îöö7vùî×C®ý"{ç¯^§<@>îýØ]ÜI$bW3aVkë0¯P
~½}{=y'
+ûû6"çËÙ[çðåSçÉûøE|Ùüyù©eO¿³O=aðUýsv~îû°»¹$I$Ä©
zþ3°×^cãÑ_sÍóEoÏÎûþ?_öSø'¸C_EMÕüç{ôð«ö_ïÏ®g
+ϼã~·²µë¼Â³áb&¨ëĶÄÝ{Wåü#2I½s{Ôn÷weÜÆ^ÝÝÒ%ȱºà¯HìÔ®r µ#6ÚliÞä
+Ø-mÎeݪ®®îÕw5nZêîÕÖ:j®ùwk*oö où5ÑçG£Úd¼.Æ29R^fbÌÉ3.ÏËÕÞ sÖeï«ïÜ7Þú} nåhllwü×yæ¹Xªñ*Ts@Á 6ØSmz c 0aÇ0À`æ±iºÛ-gÎÚtÔBÛt
,Òd«q*î
+£wq»!mÄÂ&H)¹b&$KL˨#!Ø5h]Á¸ßª«Ý÷Îÿ\ÌÌÉðm¶ýI$ùÀíÝÝݤÝí%w~ó·wúÛmúHìI$m¶âI I$¶ÜI$I$¶Û$rI$6Ûq$?/ÍyëSZð×Õ{ÎÖI'Ìê}vgnz2Û/º¯ëÕ
ÝÉ$I'ñïײ«EÕ|*=DocKêíÂi¤3R&'p!3cñÀôI/º=×8= =5ßR»Ù^pþF»vVýL¯e÷Ê!è« ¯h<Uäà>«çzóôÌ)ø"'ùE
+vòwÖí ýÝ÷awrI$I°Ô*Ãn¾Æõ°è'
+øp½PáV}^Yë¼óEN½f¬+~eWM§*§
+öaµÌûÄàÐêõòùbös<oFøÝ4b£ª6²å¢qµ5¡½{ö`Hánüf¥ôU J¯X]ÜI$zªÔ+ª
+ád* ´a_W¢²g>øTç
+3è뿬£¯?;ð¯ÏËàw?:{:+Î[\9¢±9 Z»Ñ^çf÷æl®óÙ=ëEwÄ;Ì*Â}o[× T
+wGÏ¥Ù$r÷Wä@?.ýØ]ÜI1ckÒ:¼¼ª¼{è¼iÂup7öðnSp"ÕÖÇ@&÷¼M6Ù;ï¾ÙÕ0îʬÒ!tNr¦þ-|5Õ.× ×\(V wß¡ÂHHÍgê{àuÑmälºlG0\¿,.îI$I0/©êöW£b5
+ðÍ:ßM¶Lr!Væ&7Ûl£]SËËDHáuÕ0D2ã×ÓeV|qºxy»9Üm²¥yMW´
+¨Õ¾h¯«Þð§Ã_ÍïÏ[p+¸vPs9nà æg«»I$Ö§¯]@mcüÜ*ÎÃ
+uO,p!ýÍ ÷ö|ü¾ùµÌôѽ"QT^Ï/&¬a
W[e$HlÓÙ«õmòþaþ?Ã$É2L$É2BBBBBBL$$É 9âåÂBBLåË.\É2Lʤ$É 2L$$É2BL$¹rá&Id&HHId!&HHId!&Id&HHHHHHHIÒL¤!!!&Id!!&Id&I\¹p$É 2BL$É 2L$É 2BL$É 2L$É :It$$É2BL$$$$É2L$$$É2BL$$é'I:HHHHHHHHHId!&HHId&HHHId!&HHHHHHHHHId!&HHHIdçõçºó÷÷Ûn¶ó¶Ûoñ·þÝûmÝ·»m·¶ÞnÛu¶Ý¶ÛmäÝÛvÝûm¶Ûm¶ÛoA¶Ým·m¶ëmºÛm·vðÛ¶ðÛní¶Ûm¶Û¶Ûm¶Û¿m»m¸ñ¼½wmÛm¼mÖîÛ¶ïÛ¶Ûm¶Ûþí·¶Þ]»÷ÞM¶îÞM¶Ûm¶îÛn¶Ûm¶Ûm¶ª¯
URªuuY_ûTëÚ«¯þªºöªWΪªUUö]õÿÒÓîúgݯÛûwbîüÈ»öÆößmâI>)iihD
+i¦Qü=ïèh5dI$/Ô æÜ'0~õïAùÐ}6|ó7|6}÷÷ðø#P¯aðõ׬ë³Ãû5¾ºÀ&n¤ds>¤õ@~]þX]ÜI$|ïáϬ(ß¿fÄMpúZú;îÑûù¯>üW¾ÌW×ÎÒ¾}OGÇç¡s½vÛÛp÷Ô-=÷8"¯»n¾wݳIp/»³&_æ¹ùawrI$I«£^{°ïó~¾ÄDö|×ßß¿Öõ¯³ß;ú¿®ø| =ö'[ùýíø'ï</ ?w»»I$LõtNëáKýòõ<¿÷5>ù|»¾ì³¿g}û3ÝûH õAiæ»ñ÷æÙñYe1µùyÁ\˽Z+,qzdÅE©wvvÓ)u³uÇKLÔµÓW8ì!Rä[æ³-UrîíW5w|w½*®®îÝâ³Wvª»åÝè¥)
+£t~}½÷ß .eÜÙóY}ºÖµiÖ¾ý{õ»õà g9ßSPäèÇy[ç4Îæ0 fÉ'yÉueâß*ó 6 6zf÷@ͶÛ0Öy Þî=fëc>Ëç]¼¿fffOm·ðI$ù@Û»»»K·wt©+¿k·wúÛmúHìI$m¶âI I$¶ÜI$I$¶Û$rI$6Ûq$)¬æ³]í<ü§¸Ï®ô
+!ïi¡Ah¢(¢@Zªªª
+_Z×»»I$O ¯ä Á÷¨Ií ¨AùC¿¯Ë´81a_fO×èóTu÷wß{õóU4uø2åýýØg}/=áÝýëZ}$!ç^ü÷]ÄÆl wg]ßTêïõawrI$IÊ?¢þk
+èvV[TWú=ÌÝ<1&ëêù¼öMì®téUçvÚô©#}ln½í$ 3k@dÖ¤|ÂIjÿ±úë«»I$Në÷{Ù¸ôH÷É#ñÈtJ=È{gÞaÅàô×}ô ¿[U^òù33õogÖÊîaÆ¡óίºòïòÂîäI$ 4tÝ ~ýüÏÎ|úïSsëª>¡Ôöèï´÷ÐrÛº£T4O
+ÄÚ$£a;lÓ¶yÓMd :µjÕQHUUUTÀ@ýïîÂîäI$ü
+wÛåþýuÜúÐ|É÷n÷Ï;½.Ûåç§k¿]ú×>Ývðº&±SÕ'{ C}»6hds7Ézù@~]þX]ÜI$v[÷7~½pKu?_=k[ë¢úl²ïR«e5W`}%<¨ ³ÑزI·: 7jy $wÌjÉeýkVw$I$·FÞ5×ë¾µç¬ïîøÞá»ô\¾ûyõ³[ï]ªÝR(;J}Twäõ@}ÝýØ]ÜI$sßêf«Ë=üòöo7òþüÜ>¾¸ï½sêü >®þ¬.îI$I9zä¡«Êöú7÷! ß¿Y¾¾Ï]VÝwÅвI;ïçªåßË»I$Ou×¾wÝþgÀúúêþ®½Ã×}noï÷Öúó¢w>yº¯
+º#AªÐô·v-Ütz´MÈ^"³L7vK¸Ë³aÁ¬/NÉF×FZ¼nÔ³{Lk*Ë»µUË»µ\ÌË»µUË»×7«UË»ºªÞfÇ]¨¨X`«×ô²µùÍúîeNõ¼.
+ã1nK¼ÌÅÌÊÌÌÌÅÌö z÷Ï'6÷:Ü®¥QËgÓÍRÆÓ¶À 6ìZ_Ï>-×uxÝ[Öê÷5¶Ûm½ÖÛÆÛÜo/uºÍzÛm»ÍÆë5ë§m½ÌÆö¦µ«çNê6L¸]ÌÌ1».äL̲K»5îÂ
+ÈÞÞ.]N#kndIî¯ÕV¨((ªêúç¾îîï=¶ßÁ$ç¤I$x^ÕZ¿}õ¶Ûõ$Ù$HÛmÄ@9$Im¸H$I#m·I äI$m¶âI yy½kWæµ{×î
+éxjíשõ@>îçv6Û»î«çYêÂîäI$õ}õݺªý%ôüëäûëyßß5Sùþ[³»úêzÀý7Ýyßiìôlªî
+aÍK=÷×wû°»¹$I$ëݾÂåíý;ýzûüúãÙ¡Ãħ}¸ãwÎ9öøiÒj5Ô½´»=>¨»¿»»I$Oë®þ{ógïÓåUI"ZI0Õ2ÛW§³zöòã¶\qàW·=*¯>yÐwvw$I$¥Î{¼ÉÍÃ^¯[
+K?WXðwÛdÒkXsJ»_Ûxm'C¼!},$CO®PO;âã¤KÄúyõawrI$IàZ~ ]õ®ýf_hÌï)ÊWÉïäM@Od¯Ý±Á%=<è×'õfUz=ºîú»ú°»¹$I$ì9¥Öª»¾2×V¹$ïdÒ÷£Ûç<çÓ5|5ÎóË>ÆÝ3áÁ×éfù8×Ͼ{AùwùawrI$I»íþß0Ã×ÄÝe÷ɯwóÍýï9îr®W´ÒjkÎþËîUê´W¾Iy¹{{îû»û°»¹$I$Nºú÷Þò³Ü³Û=kú
+xw·¾R¾ V\ª 骩ä®5zªWÉ%æ½PÌLáõÍ}X]ÜI$jk×ñëÍ_[Öoøü®ß¡tþ}ß«:Msßο¶yµêü»ü°»¹$I$ëÎüïÚrþBƾç=¼ç|5Ó©ëDH!¢xå)¯xÝûVnI-[±Þ,àÉ©c.äËnÄæøÖë6VÔ&f6^´¡U^nîÕWRE»[Ë»UYnã»»µU¹ eUAÊ(
+
+ÕOæ¬ç7}zòfI!áÔn[ÅÊyfff.^yηޯ農_w/ÛÖÜ7kZÖµÍᦠ°ï½ìJònnë«{¯k7[m¶ÛzÛo[o5Ö½mfãyºÛ¦ñµ¼¶ÚyÛzÛI$æûUòwv¶Û~¤ü©$I$«´·ÛWï¹ûww`ß²I$¶Û$rI$6Ûq$I$fffIww`ÜI$ÌÌÌîîÁ¹3žfk}¯<ª
+*¹çoèw~¬.îI$I;÷ïÀ S=ß4 J ;À·o]îì
ÓEV;w¾^èï[y¿¾h/zÙë¦^½OCd{ïºêïêÂîäI$Ëõ>²é£ÝýûölDúÀèk\õéÀÐg®cH]{}u3ïçgJ\÷ð³¥D¥|¿Y3ÇÎùÞ|IjêUo/õ@v_$¨H;D
³îoîÂîäI$º´Q]ÃhåQaêb(´£õóêð¤TZS_¨µóï_Ë+JÒ×ràÑwÕãCWvBõªIð>@®k£~^wù@~]þX]ÜI$j½gVh=d³ãÏ&g2þ%ÈP´·üó¨å_~û(j«~m¾ºîú»ú°»¹$I$ëö½÷(ñÎU[=uí\ÕγYV?Ç|ÂôWGÛATP_©*s;êú»ú°»¹$I$á<<ëùf^«¾¿z>´½ëç6ßçæPç³W
xEVt/pêC^qõôÚè:-øï³×Áæ)5Y×Ù$zÎè
+{MÈ®ö}óî«oaÁÃmær£û
+bN5a*vÎí;:ïb»6uß{xàezök }Í}å5^º³øåhôúù¯ÖÿSËë³2ìíU5U»ìÕû ?SõEU^¼Ã¼0òkÜ;¿¯ÎkäfÍÕ§Ø`÷ô_s{<½ïËûùÖhëÀïU3à÷@}ϸ*ªç8{ÑÏ#åløTùϤú÷
+ô¬3ÿ{Ï
+¯²HÉ=õÕ÷>àHªª¹Ã¿;>púú×Ï9ùÂ~wâûP1OmÝl0ñ'ݪºÅæ ¼.Iw¬6`Ë.ÅeÞl9¹Hk[Ù*¢ÓDÊžjeÖu|¨·7zË»U\ÕݪÉ4·j·v¬·rqZºÖµªu°CrO@8½yÞMûïñòfLÁ¹r83eæf.fc»U»ò»;
+fÛî²,°×çÄÞî9òrIzÖ¼óÏ<Ä»[í%Í®Òç*I&Ûm¶Ûo6Þ»ÖÛ¶Þ¼ÝÝzÞk¶ÞµÕæW[w½ÈC¶íÖdå¸0²e¸dËlat5$«[ºÇ`ÚLÅËÃ/%¬f0.Ú ÔÅòK»»ff{Hþ@ÔI$UÔ·V¯ßs33ßRHýI$ÌÌÉHäI&ffH@7$I332D¹$I$
+Êò¼Íù«Öµ½yá§
\ÖðY$¯têæ
+ÝÙ+ M±æOzÃ{ÞÉögËóõË_sëaÏF½èóÔËÛÇ÷Ô¿³¯âûó¢êÒ¶æ»´ÏTäü"ª«Ï]:ÌÍü/N¿nË3Pxׯk
+_<çñëë¬Ïw¬ëùg}ï}ÑïØ{CÕRçZïÜû"ª«¾éO~Qµ¯=KþO\á:
+øÿ$õæh¯ª®ÜªÂ¶8I$wîúP$UUÙÛÉûÖQâQëÖ7Äp*± -ª¯¿:»àpCC¼p®hÕUgWú Ãï]y aÃþÐA¿}UUz+¾Úë¿Kï¯oRf]7Èõ ݦGõÛ1ªYÀμ²W7fþ¨((ª÷EÙOfèÖ«ª(ÒtüUU^MùÙóæ>Y©×Ëö¸u5ü÷Ö;öxåai<֩骪ºFöW»%W¼Û§¹Ê«k®1%ët ê39,î¶f«Ðªç^õ9ó¯ªªÚæz¹¥:¸¦±ô卯2Ʀ3»Gtý+;²
+§]̹߾ìámúÙ/-öªª²s]§o\o{É»/5ÌI¾úè36j_ ÅUUïöõç'¾Ù¿=aì/|7ã°ï´Eô¯Ziôì<yÊ®YwJ¢ÍÌÍ,åË"1ÖcLÝÉ.Iø$KÓLÞÝWQ£tdÆåÍñ«9Wwj«»µuríuª¹«»e«¾]Úªêîì,PUQÃlë/Dz=LÁË&[\¼ÌÅÌÃ33wj·yn¬§Ûàc¦ðy³+ÇGLÎNI.^-ó´·]IWWRI$m¶Ûoi½w¹¼Ì×»m»Ëm¼Ì×y»J«-.$¹]í}îîÃ33=õ$oâ =I$I.$õ%wï¹ï©$~É$ffd$rI$33$I I$"I ÜI$ÌÌÉHåkOÍhUf&ü=½*ª¯¿»Æ«ÒW^y¾¼6Vdªöûß
è<ßÎl9Àá|ï®<ºº7F+ú6*ÉSÇÚªª½=è¿ÃGy <ùëæµ8|Ì?D3Ïã¿ZësïùãîUw%wº÷ÆI#:ò[ªÒÊD½Ò8oíUUvÇèÚUùï¯Xt§|ì{ïÁÖ¤£¤%rÃ¾í¦«³Jf»wt9t¶ÐͧjÛ¹íöªªºðûõ`QmPÕ/»13Gx^zùÞ{uó¿$8t;ßôO[òíþ<ÓU¿@Z4<wÇíUU_{º«AXÝ÷¼°úw¾¬æ× ùvw×WUé½WG~ykIÞk·Òªªõ*ª® ;¿IuÏXQàzo¬õçZæ ![2ÂÊ®Ï=u´øAõØí_¯ÄÅoaß·0ß²Ë5]U«ÌQSç\øèÐÉyLÂí/éUUx*¬óç£Ï9AÀ©Ý`5MS{
]îõ¦®o(Â;¹+7=úÝ8aÛ®í;ó#6(ðÍ»ùÛôªª»©É¿p~¯]êâE\ªñéÓ~¯0îÃêygsyïyÏ=ñúÓÍóN?UWÎ_ÖCâyïZ0<õòó¯;Öº;NÑOëÑÑßEü{ëUçWç«8üUU\é=g~¦WØq¿{¬ìÂë7¸¾¼/-UqÚü{à¯ráýU5øÕ·y°\n^L3332ñÃ3]Md:ên÷Ï\²¸qÝU®oæwqe¸T 9Îv¥â«mî½n¯1¶Ûm¶Ûm¶òÞ7Þ·[îÛ×zÛÍ{ºí
Ûomãoë®®±U÷±ÊÓ,ËËZl¹mØÅ2ãæ\Å#d·.IcvÌæ÷Í÷^ùå§GÐ.îíûà@7ò ¤I$R^ª«¿}ÌÌÏ}I öI$33$I I$"I ÜI$ÌÌÉHäI&ffH@7>jõ½ï~ïëÝûu¢ÛMÎUo¥UUþ:£R«øíªè¼ynçÖñºUðßÏsËv<×yqªëƼjU_®SÞçZ9ï¸~UW~½þw·CÂYå±ïï¨IÏ:þf9Ö»ç¹éä=ªª¬òö>§GÏ¥ câxÞûã,õ»ß®Ç\Å]õáéUU|ó\²uòúÝëN¿o=xG¤ï¿á$oú÷ç:á®±E\ÈÕßÅUUßÔßïª/RQ¼õ5ï½Ýo½o¾¼ù×0øªª·ÑÎèÖòrjõào}ï|9nìíUU|4lׯ^4Ï[ÏÐÇaÚ ï'
I'ÎýõÙñVÛmóeãß,¹nqxìñË®ý¶ÆÓl~`×£3¿¿;óÓÍÅ^sæôeo¤!,î8a¯µUUÖoVw¯ê_ç'µóæL÷Û¿ºõ¼³âªªìûá×~]òc|½l°´/Ê>}êi÷èçi\ï~§©;×SÌc-»ËÌ\É&dÃ3hßë+×Lâu&çWêÎÅaR ç8RS9¾u.ªê[ç{I6Û¶Û{ºÛN÷[ÖÛYn6Ý<mff·Û×½yÄI+0?kÀé$©$êI$¤·Ê¤½åUß¾æfg¾¤
+û$I$
+É$LÌÌ$nI$ffd$rI$33$I Õç;ð÷Y½ï{Þ÷½ü¨çÆëßÁfwkitëåßOÖw¾øf§~`ÿ/5ç*¿#÷Ùöªª»ù¬ùμTÍ|rrwíå¯ÎÅWÜ;nbyXBòñÃÚªªà{ÞWüÎU¼0õïaÏ/áù5Üõ÷rÝM÷Ö¼ëÑÞz>ÕUW½þ~îóÜÎAÃéä½ô_5ç3xôûÃÚªªë¾n°éOF¶öwG§ÒöïÑÂ'×}oÃb¯Zåÿ@ úUU_]ÿC÷¿ZàöFý.Ô¾}Ùz¿®|½óKèd8åúÌûè"MáI,×Òªªï{w¼²üòf´Y×ÏWvÇ®÷yðÔÍ®õ¿|=ªª¯¾zvï\óÏ£²Ë>tßrsÙ¿7äæk¬ù¾ºä
÷¼ÎNÓ⪪¹éözëÚ@ßò
Ózߪöt{$O|ìøªª¿9ê/@ÎËyë×sA{õÒ:Qçõÿþ¨- 4%öY4REõ0þ;j5BÖ¤¦Bè İ øT5
+T4U3PT©Tµ@U`E!þ©U»bY½a¨çEHåT¦Hd л@¥ bWùü2 %> ȱJ±J©J§]±¥,R¥)RhL ``` P X!H!H!JT¥-E¨ªKGÀ,R¤.@,`H!H!H!$¥V@> iú@?ûù4DÔæb ÿµþýo5É^ ÕúÝÙUUUUUUUTªªªªªªªªªªªªµUUUUUUUUUU_Ø5 Úh(ù@ Àà^Í4Ð!ÿ$°-í 0 käÙâ@xÿôq6±$µP÷÷ù"ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªþPú.óZ÷|òöêÒÒŲY¢"¢¦b* iHj)¡¤@ ³OîiH¤**
¢b
Ø¢P H@ò /ÖA"NÀ~¿Ôú`=@è@ïM=` (Ôþ æ='Ѥ!z 4 z w=Ð@l!gÚ5 ýÀ
+ 0åöÕ?~0ìxOÜ
+§
+ïD ö x´ À #Ôÿ '×d
+À {?M ¹ æ ${ÀúCØÜý=v °JX
+À?ò@È`ç úÀæíûm¦É"s´A
+ÜÈ'É| : ÿذ 7´!xtê 7D6D ÈI@>Câ>#â>"|GÄßöþdØb@|`b ò@|¡@=!P ô d=`ÄzØ 0 wÄûpIð
+ øD >Ð üÈ 6 þO!{@2¸ v üð jÒÔ
+>¨{{ =<á!& <'åä¾(Òz§ ò ü@¢ {@þû 6 äXûZ» f0àæ"L@~Ô G FuØPûà8 Ô
+À:úP6ÜøÐ<@=³Ù PÖÞP¤¡QBÄ¡d¡T-
+P±BÐX¡R
PªAhZPZBUBЪAe¡h*
¡hU
+ ´- Z¡T(QB¨R{ 5"Oæ Ø>°ú >ÇhÀ>@ òó$¬óÈ ÎP@6Ä÷é$M :@&°IàGÒ@'Ò ýqê È
+ 9 ü 9Â@*!|Ðñ"M 0 ÐÜþ´AY$þ¬!RIµxB$÷ ;n èn at 0 (B'¨
+dðôDT© 8$ Xâ¤P5 >d 0åë$OÞ@ì P#ÓÀð"Oç"O`tp<4 æûçÖð 9"Nà D0׿@EÿÅÜN$4/
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.exclude
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.exclude (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.exclude 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+*/sys/devices/system/cpu/cpu*/cache
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,609 @@
+Machine (P#0 total=516423680KB Backend=Linux)
+ Group0 L#0 (total=124780544KB)
+ NUMANode L#0 (P#0 local=58458112KB total=58458112KB)
+ Socket L#0 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#0 (size=4096KB linesize=128)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=32KB linesize=128 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+ Socket L#1 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#1 (size=4096KB linesize=128)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=32KB linesize=128 ways=8)
+ Core L#1 (P#4)
+ PU L#4 (P#4)
+ PU L#5 (P#5)
+ PU L#6 (P#6)
+ PU L#7 (P#7)
+ Socket L#2 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#2 (size=4096KB linesize=128)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=32KB linesize=128 ways=8)
+ Core L#2 (P#8)
+ PU L#8 (P#8)
+ PU L#9 (P#9)
+ PU L#10 (P#10)
+ PU L#11 (P#11)
+ Socket L#3 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#3 (size=4096KB linesize=128)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=32KB linesize=128 ways=8)
+ Core L#3 (P#12)
+ PU L#12 (P#12)
+ PU L#13 (P#13)
+ PU L#14 (P#14)
+ PU L#15 (P#15)
+ Socket L#4 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#4 (size=4096KB linesize=128)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=32KB linesize=128 ways=8)
+ Core L#4 (P#16)
+ PU L#16 (P#16)
+ PU L#17 (P#17)
+ PU L#18 (P#18)
+ PU L#19 (P#19)
+ Socket L#5 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#5 (size=4096KB linesize=128)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=32KB linesize=128 ways=8)
+ Core L#5 (P#20)
+ PU L#20 (P#20)
+ PU L#21 (P#21)
+ PU L#22 (P#22)
+ PU L#23 (P#23)
+ Socket L#6 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#6 (size=4096KB linesize=128)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=32KB linesize=128 ways=8)
+ Core L#6 (P#24)
+ PU L#24 (P#24)
+ PU L#25 (P#25)
+ PU L#26 (P#26)
+ PU L#27 (P#27)
+ Socket L#7 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#7 (size=4096KB linesize=128)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=32KB linesize=128 ways=8)
+ Core L#7 (P#28)
+ PU L#28 (P#28)
+ PU L#29 (P#29)
+ PU L#30 (P#30)
+ PU L#31 (P#31)
+ NUMANode L#1 (P#1 local=66322432KB total=66322432KB)
+ Socket L#8 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#8 (size=4096KB linesize=128)
+ L2Cache L#8 (size=256KB linesize=128 ways=8)
+ L1Cache L#8 (size=32KB linesize=128 ways=8)
+ Core L#8 (P#32)
+ PU L#32 (P#32)
+ PU L#33 (P#33)
+ PU L#34 (P#34)
+ PU L#35 (P#35)
+ Socket L#9 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#9 (size=4096KB linesize=128)
+ L2Cache L#9 (size=256KB linesize=128 ways=8)
+ L1Cache L#9 (size=32KB linesize=128 ways=8)
+ Core L#9 (P#36)
+ PU L#36 (P#36)
+ PU L#37 (P#37)
+ PU L#38 (P#38)
+ PU L#39 (P#39)
+ Socket L#10 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#10 (size=4096KB linesize=128)
+ L2Cache L#10 (size=256KB linesize=128 ways=8)
+ L1Cache L#10 (size=32KB linesize=128 ways=8)
+ Core L#10 (P#40)
+ PU L#40 (P#40)
+ PU L#41 (P#41)
+ PU L#42 (P#42)
+ PU L#43 (P#43)
+ Socket L#11 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#11 (size=4096KB linesize=128)
+ L2Cache L#11 (size=256KB linesize=128 ways=8)
+ L1Cache L#11 (size=32KB linesize=128 ways=8)
+ Core L#11 (P#44)
+ PU L#44 (P#44)
+ PU L#45 (P#45)
+ PU L#46 (P#46)
+ PU L#47 (P#47)
+ Socket L#12 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#12 (size=4096KB linesize=128)
+ L2Cache L#12 (size=256KB linesize=128 ways=8)
+ L1Cache L#12 (size=32KB linesize=128 ways=8)
+ Core L#12 (P#48)
+ PU L#48 (P#48)
+ PU L#49 (P#49)
+ PU L#50 (P#50)
+ PU L#51 (P#51)
+ Socket L#13 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#13 (size=4096KB linesize=128)
+ L2Cache L#13 (size=256KB linesize=128 ways=8)
+ L1Cache L#13 (size=32KB linesize=128 ways=8)
+ Core L#13 (P#52)
+ PU L#52 (P#52)
+ PU L#53 (P#53)
+ PU L#54 (P#54)
+ PU L#55 (P#55)
+ Socket L#14 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#14 (size=4096KB linesize=128)
+ L2Cache L#14 (size=256KB linesize=128 ways=8)
+ L1Cache L#14 (size=32KB linesize=128 ways=8)
+ Core L#14 (P#56)
+ PU L#56 (P#56)
+ PU L#57 (P#57)
+ PU L#58 (P#58)
+ PU L#59 (P#59)
+ Socket L#15 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#15 (size=4096KB linesize=128)
+ L2Cache L#15 (size=256KB linesize=128 ways=8)
+ L1Cache L#15 (size=32KB linesize=128 ways=8)
+ Core L#15 (P#60)
+ PU L#60 (P#60)
+ PU L#61 (P#61)
+ PU L#62 (P#62)
+ PU L#63 (P#63)
+ Group0 L#1 (total=133955584KB)
+ NUMANode L#2 (P#4 local=66846720KB total=66846720KB)
+ Socket L#16 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#16 (size=4096KB linesize=128)
+ L2Cache L#16 (size=256KB linesize=128 ways=8)
+ L1Cache L#16 (size=32KB linesize=128 ways=8)
+ Core L#16 (P#64)
+ PU L#64 (P#64)
+ PU L#65 (P#65)
+ PU L#66 (P#66)
+ PU L#67 (P#67)
+ Socket L#17 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#17 (size=4096KB linesize=128)
+ L2Cache L#17 (size=256KB linesize=128 ways=8)
+ L1Cache L#17 (size=32KB linesize=128 ways=8)
+ Core L#17 (P#68)
+ PU L#68 (P#68)
+ PU L#69 (P#69)
+ PU L#70 (P#70)
+ PU L#71 (P#71)
+ Socket L#18 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#18 (size=4096KB linesize=128)
+ L2Cache L#18 (size=256KB linesize=128 ways=8)
+ L1Cache L#18 (size=32KB linesize=128 ways=8)
+ Core L#18 (P#72)
+ PU L#72 (P#72)
+ PU L#73 (P#73)
+ PU L#74 (P#74)
+ PU L#75 (P#75)
+ Socket L#19 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#19 (size=4096KB linesize=128)
+ L2Cache L#19 (size=256KB linesize=128 ways=8)
+ L1Cache L#19 (size=32KB linesize=128 ways=8)
+ Core L#19 (P#76)
+ PU L#76 (P#76)
+ PU L#77 (P#77)
+ PU L#78 (P#78)
+ PU L#79 (P#79)
+ Socket L#20 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#20 (size=4096KB linesize=128)
+ L2Cache L#20 (size=256KB linesize=128 ways=8)
+ L1Cache L#20 (size=32KB linesize=128 ways=8)
+ Core L#20 (P#80)
+ PU L#80 (P#80)
+ PU L#81 (P#81)
+ PU L#82 (P#82)
+ PU L#83 (P#83)
+ Socket L#21 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#21 (size=4096KB linesize=128)
+ L2Cache L#21 (size=256KB linesize=128 ways=8)
+ L1Cache L#21 (size=32KB linesize=128 ways=8)
+ Core L#21 (P#84)
+ PU L#84 (P#84)
+ PU L#85 (P#85)
+ PU L#86 (P#86)
+ PU L#87 (P#87)
+ Socket L#22 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#22 (size=4096KB linesize=128)
+ L2Cache L#22 (size=256KB linesize=128 ways=8)
+ L1Cache L#22 (size=32KB linesize=128 ways=8)
+ Core L#22 (P#88)
+ PU L#88 (P#88)
+ PU L#89 (P#89)
+ PU L#90 (P#90)
+ PU L#91 (P#91)
+ Socket L#23 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#23 (size=4096KB linesize=128)
+ L2Cache L#23 (size=256KB linesize=128 ways=8)
+ L1Cache L#23 (size=32KB linesize=128 ways=8)
+ Core L#23 (P#92)
+ PU L#92 (P#92)
+ PU L#93 (P#93)
+ PU L#94 (P#94)
+ PU L#95 (P#95)
+ NUMANode L#3 (P#5 local=67108864KB total=67108864KB)
+ Socket L#24 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#24 (size=4096KB linesize=128)
+ L2Cache L#24 (size=256KB linesize=128 ways=8)
+ L1Cache L#24 (size=32KB linesize=128 ways=8)
+ Core L#24 (P#96)
+ PU L#96 (P#96)
+ PU L#97 (P#97)
+ PU L#98 (P#98)
+ PU L#99 (P#99)
+ Socket L#25 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#25 (size=4096KB linesize=128)
+ L2Cache L#25 (size=256KB linesize=128 ways=8)
+ L1Cache L#25 (size=32KB linesize=128 ways=8)
+ Core L#25 (P#100)
+ PU L#100 (P#100)
+ PU L#101 (P#101)
+ PU L#102 (P#102)
+ PU L#103 (P#103)
+ Socket L#26 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#26 (size=4096KB linesize=128)
+ L2Cache L#26 (size=256KB linesize=128 ways=8)
+ L1Cache L#26 (size=32KB linesize=128 ways=8)
+ Core L#26 (P#104)
+ PU L#104 (P#104)
+ PU L#105 (P#105)
+ PU L#106 (P#106)
+ PU L#107 (P#107)
+ Socket L#27 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#27 (size=4096KB linesize=128)
+ L2Cache L#27 (size=256KB linesize=128 ways=8)
+ L1Cache L#27 (size=32KB linesize=128 ways=8)
+ Core L#27 (P#108)
+ PU L#108 (P#108)
+ PU L#109 (P#109)
+ PU L#110 (P#110)
+ PU L#111 (P#111)
+ Socket L#28 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#28 (size=4096KB linesize=128)
+ L2Cache L#28 (size=256KB linesize=128 ways=8)
+ L1Cache L#28 (size=32KB linesize=128 ways=8)
+ Core L#28 (P#112)
+ PU L#112 (P#112)
+ PU L#113 (P#113)
+ PU L#114 (P#114)
+ PU L#115 (P#115)
+ Socket L#29 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#29 (size=4096KB linesize=128)
+ L2Cache L#29 (size=256KB linesize=128 ways=8)
+ L1Cache L#29 (size=32KB linesize=128 ways=8)
+ Core L#29 (P#116)
+ PU L#116 (P#116)
+ PU L#117 (P#117)
+ PU L#118 (P#118)
+ PU L#119 (P#119)
+ Socket L#30 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#30 (size=4096KB linesize=128)
+ L2Cache L#30 (size=256KB linesize=128 ways=8)
+ L1Cache L#30 (size=32KB linesize=128 ways=8)
+ Core L#30 (P#120)
+ PU L#120 (P#120)
+ PU L#121 (P#121)
+ PU L#122 (P#122)
+ PU L#123 (P#123)
+ Socket L#31 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#31 (size=4096KB linesize=128)
+ L2Cache L#31 (size=256KB linesize=128 ways=8)
+ L1Cache L#31 (size=32KB linesize=128 ways=8)
+ Core L#31 (P#124)
+ PU L#124 (P#124)
+ PU L#125 (P#125)
+ PU L#126 (P#126)
+ PU L#127 (P#127)
+ Group0 L#2 (total=133955584KB)
+ NUMANode L#4 (P#8 local=66846720KB total=66846720KB)
+ Socket L#32 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#32 (size=4096KB linesize=128)
+ L2Cache L#32 (size=256KB linesize=128 ways=8)
+ L1Cache L#32 (size=32KB linesize=128 ways=8)
+ Core L#32 (P#128)
+ PU L#128 (P#128)
+ PU L#129 (P#129)
+ PU L#130 (P#130)
+ PU L#131 (P#131)
+ Socket L#33 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#33 (size=4096KB linesize=128)
+ L2Cache L#33 (size=256KB linesize=128 ways=8)
+ L1Cache L#33 (size=32KB linesize=128 ways=8)
+ Core L#33 (P#132)
+ PU L#132 (P#132)
+ PU L#133 (P#133)
+ PU L#134 (P#134)
+ PU L#135 (P#135)
+ Socket L#34 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#34 (size=4096KB linesize=128)
+ L2Cache L#34 (size=256KB linesize=128 ways=8)
+ L1Cache L#34 (size=32KB linesize=128 ways=8)
+ Core L#34 (P#136)
+ PU L#136 (P#136)
+ PU L#137 (P#137)
+ PU L#138 (P#138)
+ PU L#139 (P#139)
+ Socket L#35 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#35 (size=4096KB linesize=128)
+ L2Cache L#35 (size=256KB linesize=128 ways=8)
+ L1Cache L#35 (size=32KB linesize=128 ways=8)
+ Core L#35 (P#140)
+ PU L#140 (P#140)
+ PU L#141 (P#141)
+ PU L#142 (P#142)
+ PU L#143 (P#143)
+ Socket L#36 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#36 (size=4096KB linesize=128)
+ L2Cache L#36 (size=256KB linesize=128 ways=8)
+ L1Cache L#36 (size=32KB linesize=128 ways=8)
+ Core L#36 (P#144)
+ PU L#144 (P#144)
+ PU L#145 (P#145)
+ PU L#146 (P#146)
+ PU L#147 (P#147)
+ Socket L#37 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#37 (size=4096KB linesize=128)
+ L2Cache L#37 (size=256KB linesize=128 ways=8)
+ L1Cache L#37 (size=32KB linesize=128 ways=8)
+ Core L#37 (P#148)
+ PU L#148 (P#148)
+ PU L#149 (P#149)
+ PU L#150 (P#150)
+ PU L#151 (P#151)
+ Socket L#38 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#38 (size=4096KB linesize=128)
+ L2Cache L#38 (size=256KB linesize=128 ways=8)
+ L1Cache L#38 (size=32KB linesize=128 ways=8)
+ Core L#38 (P#152)
+ PU L#152 (P#152)
+ PU L#153 (P#153)
+ PU L#154 (P#154)
+ PU L#155 (P#155)
+ Socket L#39 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#39 (size=4096KB linesize=128)
+ L2Cache L#39 (size=256KB linesize=128 ways=8)
+ L1Cache L#39 (size=32KB linesize=128 ways=8)
+ Core L#39 (P#156)
+ PU L#156 (P#156)
+ PU L#157 (P#157)
+ PU L#158 (P#158)
+ PU L#159 (P#159)
+ NUMANode L#5 (P#9 local=67108864KB total=67108864KB)
+ Socket L#40 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#40 (size=4096KB linesize=128)
+ L2Cache L#40 (size=256KB linesize=128 ways=8)
+ L1Cache L#40 (size=32KB linesize=128 ways=8)
+ Core L#40 (P#160)
+ PU L#160 (P#160)
+ PU L#161 (P#161)
+ PU L#162 (P#162)
+ PU L#163 (P#163)
+ Socket L#41 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#41 (size=4096KB linesize=128)
+ L2Cache L#41 (size=256KB linesize=128 ways=8)
+ L1Cache L#41 (size=32KB linesize=128 ways=8)
+ Core L#41 (P#164)
+ PU L#164 (P#164)
+ PU L#165 (P#165)
+ PU L#166 (P#166)
+ PU L#167 (P#167)
+ Socket L#42 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#42 (size=4096KB linesize=128)
+ L2Cache L#42 (size=256KB linesize=128 ways=8)
+ L1Cache L#42 (size=32KB linesize=128 ways=8)
+ Core L#42 (P#168)
+ PU L#168 (P#168)
+ PU L#169 (P#169)
+ PU L#170 (P#170)
+ PU L#171 (P#171)
+ Socket L#43 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#43 (size=4096KB linesize=128)
+ L2Cache L#43 (size=256KB linesize=128 ways=8)
+ L1Cache L#43 (size=32KB linesize=128 ways=8)
+ Core L#43 (P#172)
+ PU L#172 (P#172)
+ PU L#173 (P#173)
+ PU L#174 (P#174)
+ PU L#175 (P#175)
+ Socket L#44 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#44 (size=4096KB linesize=128)
+ L2Cache L#44 (size=256KB linesize=128 ways=8)
+ L1Cache L#44 (size=32KB linesize=128 ways=8)
+ Core L#44 (P#176)
+ PU L#176 (P#176)
+ PU L#177 (P#177)
+ PU L#178 (P#178)
+ PU L#179 (P#179)
+ Socket L#45 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#45 (size=4096KB linesize=128)
+ L2Cache L#45 (size=256KB linesize=128 ways=8)
+ L1Cache L#45 (size=32KB linesize=128 ways=8)
+ Core L#45 (P#180)
+ PU L#180 (P#180)
+ PU L#181 (P#181)
+ PU L#182 (P#182)
+ PU L#183 (P#183)
+ Socket L#46 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#46 (size=4096KB linesize=128)
+ L2Cache L#46 (size=256KB linesize=128 ways=8)
+ L1Cache L#46 (size=32KB linesize=128 ways=8)
+ Core L#46 (P#184)
+ PU L#184 (P#184)
+ PU L#185 (P#185)
+ PU L#186 (P#186)
+ PU L#187 (P#187)
+ Socket L#47 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#47 (size=4096KB linesize=128)
+ L2Cache L#47 (size=256KB linesize=128 ways=8)
+ L1Cache L#47 (size=32KB linesize=128 ways=8)
+ Core L#47 (P#188)
+ PU L#188 (P#188)
+ PU L#189 (P#189)
+ PU L#190 (P#190)
+ PU L#191 (P#191)
+ Group0 L#3 (total=123731968KB)
+ NUMANode L#6 (P#12 local=66846720KB total=66846720KB)
+ Socket L#48 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#48 (size=4096KB linesize=128)
+ L2Cache L#48 (size=256KB linesize=128 ways=8)
+ L1Cache L#48 (size=32KB linesize=128 ways=8)
+ Core L#48 (P#192)
+ PU L#192 (P#192)
+ PU L#193 (P#193)
+ PU L#194 (P#194)
+ PU L#195 (P#195)
+ Socket L#49 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#49 (size=4096KB linesize=128)
+ L2Cache L#49 (size=256KB linesize=128 ways=8)
+ L1Cache L#49 (size=32KB linesize=128 ways=8)
+ Core L#49 (P#196)
+ PU L#196 (P#196)
+ PU L#197 (P#197)
+ PU L#198 (P#198)
+ PU L#199 (P#199)
+ Socket L#50 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#50 (size=4096KB linesize=128)
+ L2Cache L#50 (size=256KB linesize=128 ways=8)
+ L1Cache L#50 (size=32KB linesize=128 ways=8)
+ Core L#50 (P#200)
+ PU L#200 (P#200)
+ PU L#201 (P#201)
+ PU L#202 (P#202)
+ PU L#203 (P#203)
+ Socket L#51 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#51 (size=4096KB linesize=128)
+ L2Cache L#51 (size=256KB linesize=128 ways=8)
+ L1Cache L#51 (size=32KB linesize=128 ways=8)
+ Core L#51 (P#204)
+ PU L#204 (P#204)
+ PU L#205 (P#205)
+ PU L#206 (P#206)
+ PU L#207 (P#207)
+ Socket L#52 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#52 (size=4096KB linesize=128)
+ L2Cache L#52 (size=256KB linesize=128 ways=8)
+ L1Cache L#52 (size=32KB linesize=128 ways=8)
+ Core L#52 (P#208)
+ PU L#208 (P#208)
+ PU L#209 (P#209)
+ PU L#210 (P#210)
+ PU L#211 (P#211)
+ Socket L#53 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#53 (size=4096KB linesize=128)
+ L2Cache L#53 (size=256KB linesize=128 ways=8)
+ L1Cache L#53 (size=32KB linesize=128 ways=8)
+ Core L#53 (P#212)
+ PU L#212 (P#212)
+ PU L#213 (P#213)
+ PU L#214 (P#214)
+ PU L#215 (P#215)
+ Socket L#54 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#54 (size=4096KB linesize=128)
+ L2Cache L#54 (size=256KB linesize=128 ways=8)
+ L1Cache L#54 (size=32KB linesize=128 ways=8)
+ Core L#54 (P#216)
+ PU L#216 (P#216)
+ PU L#217 (P#217)
+ PU L#218 (P#218)
+ PU L#219 (P#219)
+ Socket L#55 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#55 (size=4096KB linesize=128)
+ L2Cache L#55 (size=256KB linesize=128 ways=8)
+ L1Cache L#55 (size=32KB linesize=128 ways=8)
+ Core L#55 (P#220)
+ PU L#220 (P#220)
+ PU L#221 (P#221)
+ PU L#222 (P#222)
+ PU L#223 (P#223)
+ NUMANode L#7 (P#13 local=56885248KB total=56885248KB)
+ Socket L#56 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#56 (size=4096KB linesize=128)
+ L2Cache L#56 (size=256KB linesize=128 ways=8)
+ L1Cache L#56 (size=32KB linesize=128 ways=8)
+ Core L#56 (P#224)
+ PU L#224 (P#224)
+ PU L#225 (P#225)
+ PU L#226 (P#226)
+ PU L#227 (P#227)
+ Socket L#57 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#57 (size=4096KB linesize=128)
+ L2Cache L#57 (size=256KB linesize=128 ways=8)
+ L1Cache L#57 (size=32KB linesize=128 ways=8)
+ Core L#57 (P#228)
+ PU L#228 (P#228)
+ PU L#229 (P#229)
+ PU L#230 (P#230)
+ PU L#231 (P#231)
+ Socket L#58 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#58 (size=4096KB linesize=128)
+ L2Cache L#58 (size=256KB linesize=128 ways=8)
+ L1Cache L#58 (size=32KB linesize=128 ways=8)
+ Core L#58 (P#232)
+ PU L#232 (P#232)
+ PU L#233 (P#233)
+ PU L#234 (P#234)
+ PU L#235 (P#235)
+ Socket L#59 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#59 (size=4096KB linesize=128)
+ L2Cache L#59 (size=256KB linesize=128 ways=8)
+ L1Cache L#59 (size=32KB linesize=128 ways=8)
+ Core L#59 (P#236)
+ PU L#236 (P#236)
+ PU L#237 (P#237)
+ PU L#238 (P#238)
+ PU L#239 (P#239)
+ Socket L#60 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#60 (size=4096KB linesize=128)
+ L2Cache L#60 (size=256KB linesize=128 ways=8)
+ L1Cache L#60 (size=32KB linesize=128 ways=8)
+ Core L#60 (P#240)
+ PU L#240 (P#240)
+ PU L#241 (P#241)
+ PU L#242 (P#242)
+ PU L#243 (P#243)
+ Socket L#61 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#61 (size=4096KB linesize=128)
+ L2Cache L#61 (size=256KB linesize=128 ways=8)
+ L1Cache L#61 (size=32KB linesize=128 ways=8)
+ Core L#61 (P#244)
+ PU L#244 (P#244)
+ PU L#245 (P#245)
+ PU L#246 (P#246)
+ PU L#247 (P#247)
+ Socket L#62 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#62 (size=4096KB linesize=128)
+ L2Cache L#62 (size=256KB linesize=128 ways=8)
+ L1Cache L#62 (size=32KB linesize=128 ways=8)
+ Core L#62 (P#248)
+ PU L#248 (P#248)
+ PU L#249 (P#249)
+ PU L#250 (P#250)
+ PU L#251 (P#251)
+ Socket L#63 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#63 (size=4096KB linesize=128)
+ L2Cache L#63 (size=256KB linesize=128 ways=8)
+ L1Cache L#63 (size=32KB linesize=128 ways=8)
+ Core L#63 (P#252)
+ PU L#252 (P#252)
+ PU L#253 (P#253)
+ PU L#254 (P#254)
+ PU L#255 (P#255)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Groups (type #7)
+ depth 2: 8 NUMANodes (type #2)
+ depth 3: 64 Sockets (type #3)
+ depth 4: 64 Caches (type #4)
+ depth 5: 64 Caches (type #4)
+ depth 6: 64 Caches (type #4)
+ depth 7: 64 Cores (type #5)
+ depth 8: 256 PUs (type #6)
+latency matrix between NUMANodes (depth 2) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 4.000 4.000 4.000 4.000 4.000 4.000
+ 1 2.000 1.000 4.000 4.000 4.000 4.000 4.000 4.000
+ 2 4.000 4.000 1.000 2.000 4.000 4.000 4.000 4.000
+ 3 4.000 4.000 2.000 1.000 4.000 4.000 4.000 4.000
+ 4 4.000 4.000 4.000 4.000 1.000 2.000 4.000 4.000
+ 5 4.000 4.000 4.000 4.000 2.000 1.000 4.000 4.000
+ 6 4.000 4.000 4.000 4.000 4.000 4.000 1.000 2.000
+ 7 4.000 4.000 4.000 4.000 4.000 4.000 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nocache.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+256ppc-8n8s4t.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.exclude
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.exclude (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.exclude 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+*/sys
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,520 @@
+Machine (P#0 local=514318208KB total=514318208KB Backend=Linux)
+ L3Cache L#0 (size=4096KB linesize=128)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=32KB linesize=128 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+ L3Cache L#1 (size=4096KB linesize=128)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=32KB linesize=128 ways=8)
+ Core L#1 (P#4)
+ PU L#4 (P#4)
+ PU L#5 (P#5)
+ PU L#6 (P#6)
+ PU L#7 (P#7)
+ L3Cache L#2 (size=4096KB linesize=128)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=32KB linesize=128 ways=8)
+ Core L#2 (P#8)
+ PU L#8 (P#8)
+ PU L#9 (P#9)
+ PU L#10 (P#10)
+ PU L#11 (P#11)
+ L3Cache L#3 (size=4096KB linesize=128)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=32KB linesize=128 ways=8)
+ Core L#3 (P#12)
+ PU L#12 (P#12)
+ PU L#13 (P#13)
+ PU L#14 (P#14)
+ PU L#15 (P#15)
+ L3Cache L#4 (size=4096KB linesize=128)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=32KB linesize=128 ways=8)
+ Core L#4 (P#16)
+ PU L#16 (P#16)
+ PU L#17 (P#17)
+ PU L#18 (P#18)
+ PU L#19 (P#19)
+ L3Cache L#5 (size=4096KB linesize=128)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=32KB linesize=128 ways=8)
+ Core L#5 (P#20)
+ PU L#20 (P#20)
+ PU L#21 (P#21)
+ PU L#22 (P#22)
+ PU L#23 (P#23)
+ L3Cache L#6 (size=4096KB linesize=128)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=32KB linesize=128 ways=8)
+ Core L#6 (P#24)
+ PU L#24 (P#24)
+ PU L#25 (P#25)
+ PU L#26 (P#26)
+ PU L#27 (P#27)
+ L3Cache L#7 (size=4096KB linesize=128)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=32KB linesize=128 ways=8)
+ Core L#7 (P#28)
+ PU L#28 (P#28)
+ PU L#29 (P#29)
+ PU L#30 (P#30)
+ PU L#31 (P#31)
+ L3Cache L#8 (size=4096KB linesize=128)
+ L2Cache L#8 (size=256KB linesize=128 ways=8)
+ L1Cache L#8 (size=32KB linesize=128 ways=8)
+ Core L#8 (P#32)
+ PU L#32 (P#32)
+ PU L#33 (P#33)
+ PU L#34 (P#34)
+ PU L#35 (P#35)
+ L3Cache L#9 (size=4096KB linesize=128)
+ L2Cache L#9 (size=256KB linesize=128 ways=8)
+ L1Cache L#9 (size=32KB linesize=128 ways=8)
+ Core L#9 (P#36)
+ PU L#36 (P#36)
+ PU L#37 (P#37)
+ PU L#38 (P#38)
+ PU L#39 (P#39)
+ L3Cache L#10 (size=4096KB linesize=128)
+ L2Cache L#10 (size=256KB linesize=128 ways=8)
+ L1Cache L#10 (size=32KB linesize=128 ways=8)
+ Core L#10 (P#40)
+ PU L#40 (P#40)
+ PU L#41 (P#41)
+ PU L#42 (P#42)
+ PU L#43 (P#43)
+ L3Cache L#11 (size=4096KB linesize=128)
+ L2Cache L#11 (size=256KB linesize=128 ways=8)
+ L1Cache L#11 (size=32KB linesize=128 ways=8)
+ Core L#11 (P#44)
+ PU L#44 (P#44)
+ PU L#45 (P#45)
+ PU L#46 (P#46)
+ PU L#47 (P#47)
+ L3Cache L#12 (size=4096KB linesize=128)
+ L2Cache L#12 (size=256KB linesize=128 ways=8)
+ L1Cache L#12 (size=32KB linesize=128 ways=8)
+ Core L#12 (P#48)
+ PU L#48 (P#48)
+ PU L#49 (P#49)
+ PU L#50 (P#50)
+ PU L#51 (P#51)
+ L3Cache L#13 (size=4096KB linesize=128)
+ L2Cache L#13 (size=256KB linesize=128 ways=8)
+ L1Cache L#13 (size=32KB linesize=128 ways=8)
+ Core L#13 (P#52)
+ PU L#52 (P#52)
+ PU L#53 (P#53)
+ PU L#54 (P#54)
+ PU L#55 (P#55)
+ L3Cache L#14 (size=4096KB linesize=128)
+ L2Cache L#14 (size=256KB linesize=128 ways=8)
+ L1Cache L#14 (size=32KB linesize=128 ways=8)
+ Core L#14 (P#56)
+ PU L#56 (P#56)
+ PU L#57 (P#57)
+ PU L#58 (P#58)
+ PU L#59 (P#59)
+ L3Cache L#15 (size=4096KB linesize=128)
+ L2Cache L#15 (size=256KB linesize=128 ways=8)
+ L1Cache L#15 (size=32KB linesize=128 ways=8)
+ Core L#15 (P#60)
+ PU L#60 (P#60)
+ PU L#61 (P#61)
+ PU L#62 (P#62)
+ PU L#63 (P#63)
+ L3Cache L#16 (size=4096KB linesize=128)
+ L2Cache L#16 (size=256KB linesize=128 ways=8)
+ L1Cache L#16 (size=32KB linesize=128 ways=8)
+ Core L#16 (P#64)
+ PU L#64 (P#64)
+ PU L#65 (P#65)
+ PU L#66 (P#66)
+ PU L#67 (P#67)
+ L3Cache L#17 (size=4096KB linesize=128)
+ L2Cache L#17 (size=256KB linesize=128 ways=8)
+ L1Cache L#17 (size=32KB linesize=128 ways=8)
+ Core L#17 (P#68)
+ PU L#68 (P#68)
+ PU L#69 (P#69)
+ PU L#70 (P#70)
+ PU L#71 (P#71)
+ L3Cache L#18 (size=4096KB linesize=128)
+ L2Cache L#18 (size=256KB linesize=128 ways=8)
+ L1Cache L#18 (size=32KB linesize=128 ways=8)
+ Core L#18 (P#72)
+ PU L#72 (P#72)
+ PU L#73 (P#73)
+ PU L#74 (P#74)
+ PU L#75 (P#75)
+ L3Cache L#19 (size=4096KB linesize=128)
+ L2Cache L#19 (size=256KB linesize=128 ways=8)
+ L1Cache L#19 (size=32KB linesize=128 ways=8)
+ Core L#19 (P#76)
+ PU L#76 (P#76)
+ PU L#77 (P#77)
+ PU L#78 (P#78)
+ PU L#79 (P#79)
+ L3Cache L#20 (size=4096KB linesize=128)
+ L2Cache L#20 (size=256KB linesize=128 ways=8)
+ L1Cache L#20 (size=32KB linesize=128 ways=8)
+ Core L#20 (P#80)
+ PU L#80 (P#80)
+ PU L#81 (P#81)
+ PU L#82 (P#82)
+ PU L#83 (P#83)
+ L3Cache L#21 (size=4096KB linesize=128)
+ L2Cache L#21 (size=256KB linesize=128 ways=8)
+ L1Cache L#21 (size=32KB linesize=128 ways=8)
+ Core L#21 (P#84)
+ PU L#84 (P#84)
+ PU L#85 (P#85)
+ PU L#86 (P#86)
+ PU L#87 (P#87)
+ L3Cache L#22 (size=4096KB linesize=128)
+ L2Cache L#22 (size=256KB linesize=128 ways=8)
+ L1Cache L#22 (size=32KB linesize=128 ways=8)
+ Core L#22 (P#88)
+ PU L#88 (P#88)
+ PU L#89 (P#89)
+ PU L#90 (P#90)
+ PU L#91 (P#91)
+ L3Cache L#23 (size=4096KB linesize=128)
+ L2Cache L#23 (size=256KB linesize=128 ways=8)
+ L1Cache L#23 (size=32KB linesize=128 ways=8)
+ Core L#23 (P#92)
+ PU L#92 (P#92)
+ PU L#93 (P#93)
+ PU L#94 (P#94)
+ PU L#95 (P#95)
+ L3Cache L#24 (size=4096KB linesize=128)
+ L2Cache L#24 (size=256KB linesize=128 ways=8)
+ L1Cache L#24 (size=32KB linesize=128 ways=8)
+ Core L#24 (P#96)
+ PU L#96 (P#96)
+ PU L#97 (P#97)
+ PU L#98 (P#98)
+ PU L#99 (P#99)
+ L3Cache L#25 (size=4096KB linesize=128)
+ L2Cache L#25 (size=256KB linesize=128 ways=8)
+ L1Cache L#25 (size=32KB linesize=128 ways=8)
+ Core L#25 (P#100)
+ PU L#100 (P#100)
+ PU L#101 (P#101)
+ PU L#102 (P#102)
+ PU L#103 (P#103)
+ L3Cache L#26 (size=4096KB linesize=128)
+ L2Cache L#26 (size=256KB linesize=128 ways=8)
+ L1Cache L#26 (size=32KB linesize=128 ways=8)
+ Core L#26 (P#104)
+ PU L#104 (P#104)
+ PU L#105 (P#105)
+ PU L#106 (P#106)
+ PU L#107 (P#107)
+ L3Cache L#27 (size=4096KB linesize=128)
+ L2Cache L#27 (size=256KB linesize=128 ways=8)
+ L1Cache L#27 (size=32KB linesize=128 ways=8)
+ Core L#27 (P#108)
+ PU L#108 (P#108)
+ PU L#109 (P#109)
+ PU L#110 (P#110)
+ PU L#111 (P#111)
+ L3Cache L#28 (size=4096KB linesize=128)
+ L2Cache L#28 (size=256KB linesize=128 ways=8)
+ L1Cache L#28 (size=32KB linesize=128 ways=8)
+ Core L#28 (P#112)
+ PU L#112 (P#112)
+ PU L#113 (P#113)
+ PU L#114 (P#114)
+ PU L#115 (P#115)
+ L3Cache L#29 (size=4096KB linesize=128)
+ L2Cache L#29 (size=256KB linesize=128 ways=8)
+ L1Cache L#29 (size=32KB linesize=128 ways=8)
+ Core L#29 (P#116)
+ PU L#116 (P#116)
+ PU L#117 (P#117)
+ PU L#118 (P#118)
+ PU L#119 (P#119)
+ L3Cache L#30 (size=4096KB linesize=128)
+ L2Cache L#30 (size=256KB linesize=128 ways=8)
+ L1Cache L#30 (size=32KB linesize=128 ways=8)
+ Core L#30 (P#120)
+ PU L#120 (P#120)
+ PU L#121 (P#121)
+ PU L#122 (P#122)
+ PU L#123 (P#123)
+ L3Cache L#31 (size=4096KB linesize=128)
+ L2Cache L#31 (size=256KB linesize=128 ways=8)
+ L1Cache L#31 (size=32KB linesize=128 ways=8)
+ Core L#31 (P#124)
+ PU L#124 (P#124)
+ PU L#125 (P#125)
+ PU L#126 (P#126)
+ PU L#127 (P#127)
+ L3Cache L#32 (size=4096KB linesize=128)
+ L2Cache L#32 (size=256KB linesize=128 ways=8)
+ L1Cache L#32 (size=32KB linesize=128 ways=8)
+ Core L#32 (P#128)
+ PU L#128 (P#128)
+ PU L#129 (P#129)
+ PU L#130 (P#130)
+ PU L#131 (P#131)
+ L3Cache L#33 (size=4096KB linesize=128)
+ L2Cache L#33 (size=256KB linesize=128 ways=8)
+ L1Cache L#33 (size=32KB linesize=128 ways=8)
+ Core L#33 (P#132)
+ PU L#132 (P#132)
+ PU L#133 (P#133)
+ PU L#134 (P#134)
+ PU L#135 (P#135)
+ L3Cache L#34 (size=4096KB linesize=128)
+ L2Cache L#34 (size=256KB linesize=128 ways=8)
+ L1Cache L#34 (size=32KB linesize=128 ways=8)
+ Core L#34 (P#136)
+ PU L#136 (P#136)
+ PU L#137 (P#137)
+ PU L#138 (P#138)
+ PU L#139 (P#139)
+ L3Cache L#35 (size=4096KB linesize=128)
+ L2Cache L#35 (size=256KB linesize=128 ways=8)
+ L1Cache L#35 (size=32KB linesize=128 ways=8)
+ Core L#35 (P#140)
+ PU L#140 (P#140)
+ PU L#141 (P#141)
+ PU L#142 (P#142)
+ PU L#143 (P#143)
+ L3Cache L#36 (size=4096KB linesize=128)
+ L2Cache L#36 (size=256KB linesize=128 ways=8)
+ L1Cache L#36 (size=32KB linesize=128 ways=8)
+ Core L#36 (P#144)
+ PU L#144 (P#144)
+ PU L#145 (P#145)
+ PU L#146 (P#146)
+ PU L#147 (P#147)
+ L3Cache L#37 (size=4096KB linesize=128)
+ L2Cache L#37 (size=256KB linesize=128 ways=8)
+ L1Cache L#37 (size=32KB linesize=128 ways=8)
+ Core L#37 (P#148)
+ PU L#148 (P#148)
+ PU L#149 (P#149)
+ PU L#150 (P#150)
+ PU L#151 (P#151)
+ L3Cache L#38 (size=4096KB linesize=128)
+ L2Cache L#38 (size=256KB linesize=128 ways=8)
+ L1Cache L#38 (size=32KB linesize=128 ways=8)
+ Core L#38 (P#152)
+ PU L#152 (P#152)
+ PU L#153 (P#153)
+ PU L#154 (P#154)
+ PU L#155 (P#155)
+ L3Cache L#39 (size=4096KB linesize=128)
+ L2Cache L#39 (size=256KB linesize=128 ways=8)
+ L1Cache L#39 (size=32KB linesize=128 ways=8)
+ Core L#39 (P#156)
+ PU L#156 (P#156)
+ PU L#157 (P#157)
+ PU L#158 (P#158)
+ PU L#159 (P#159)
+ L3Cache L#40 (size=4096KB linesize=128)
+ L2Cache L#40 (size=256KB linesize=128 ways=8)
+ L1Cache L#40 (size=32KB linesize=128 ways=8)
+ Core L#40 (P#160)
+ PU L#160 (P#160)
+ PU L#161 (P#161)
+ PU L#162 (P#162)
+ PU L#163 (P#163)
+ L3Cache L#41 (size=4096KB linesize=128)
+ L2Cache L#41 (size=256KB linesize=128 ways=8)
+ L1Cache L#41 (size=32KB linesize=128 ways=8)
+ Core L#41 (P#164)
+ PU L#164 (P#164)
+ PU L#165 (P#165)
+ PU L#166 (P#166)
+ PU L#167 (P#167)
+ L3Cache L#42 (size=4096KB linesize=128)
+ L2Cache L#42 (size=256KB linesize=128 ways=8)
+ L1Cache L#42 (size=32KB linesize=128 ways=8)
+ Core L#42 (P#168)
+ PU L#168 (P#168)
+ PU L#169 (P#169)
+ PU L#170 (P#170)
+ PU L#171 (P#171)
+ L3Cache L#43 (size=4096KB linesize=128)
+ L2Cache L#43 (size=256KB linesize=128 ways=8)
+ L1Cache L#43 (size=32KB linesize=128 ways=8)
+ Core L#43 (P#172)
+ PU L#172 (P#172)
+ PU L#173 (P#173)
+ PU L#174 (P#174)
+ PU L#175 (P#175)
+ L3Cache L#44 (size=4096KB linesize=128)
+ L2Cache L#44 (size=256KB linesize=128 ways=8)
+ L1Cache L#44 (size=32KB linesize=128 ways=8)
+ Core L#44 (P#176)
+ PU L#176 (P#176)
+ PU L#177 (P#177)
+ PU L#178 (P#178)
+ PU L#179 (P#179)
+ L3Cache L#45 (size=4096KB linesize=128)
+ L2Cache L#45 (size=256KB linesize=128 ways=8)
+ L1Cache L#45 (size=32KB linesize=128 ways=8)
+ Core L#45 (P#180)
+ PU L#180 (P#180)
+ PU L#181 (P#181)
+ PU L#182 (P#182)
+ PU L#183 (P#183)
+ L3Cache L#46 (size=4096KB linesize=128)
+ L2Cache L#46 (size=256KB linesize=128 ways=8)
+ L1Cache L#46 (size=32KB linesize=128 ways=8)
+ Core L#46 (P#184)
+ PU L#184 (P#184)
+ PU L#185 (P#185)
+ PU L#186 (P#186)
+ PU L#187 (P#187)
+ L3Cache L#47 (size=4096KB linesize=128)
+ L2Cache L#47 (size=256KB linesize=128 ways=8)
+ L1Cache L#47 (size=32KB linesize=128 ways=8)
+ Core L#47 (P#188)
+ PU L#188 (P#188)
+ PU L#189 (P#189)
+ PU L#190 (P#190)
+ PU L#191 (P#191)
+ L3Cache L#48 (size=4096KB linesize=128)
+ L2Cache L#48 (size=256KB linesize=128 ways=8)
+ L1Cache L#48 (size=32KB linesize=128 ways=8)
+ Core L#48 (P#192)
+ PU L#192 (P#192)
+ PU L#193 (P#193)
+ PU L#194 (P#194)
+ PU L#195 (P#195)
+ L3Cache L#49 (size=4096KB linesize=128)
+ L2Cache L#49 (size=256KB linesize=128 ways=8)
+ L1Cache L#49 (size=32KB linesize=128 ways=8)
+ Core L#49 (P#196)
+ PU L#196 (P#196)
+ PU L#197 (P#197)
+ PU L#198 (P#198)
+ PU L#199 (P#199)
+ L3Cache L#50 (size=4096KB linesize=128)
+ L2Cache L#50 (size=256KB linesize=128 ways=8)
+ L1Cache L#50 (size=32KB linesize=128 ways=8)
+ Core L#50 (P#200)
+ PU L#200 (P#200)
+ PU L#201 (P#201)
+ PU L#202 (P#202)
+ PU L#203 (P#203)
+ L3Cache L#51 (size=4096KB linesize=128)
+ L2Cache L#51 (size=256KB linesize=128 ways=8)
+ L1Cache L#51 (size=32KB linesize=128 ways=8)
+ Core L#51 (P#204)
+ PU L#204 (P#204)
+ PU L#205 (P#205)
+ PU L#206 (P#206)
+ PU L#207 (P#207)
+ L3Cache L#52 (size=4096KB linesize=128)
+ L2Cache L#52 (size=256KB linesize=128 ways=8)
+ L1Cache L#52 (size=32KB linesize=128 ways=8)
+ Core L#52 (P#208)
+ PU L#208 (P#208)
+ PU L#209 (P#209)
+ PU L#210 (P#210)
+ PU L#211 (P#211)
+ L3Cache L#53 (size=4096KB linesize=128)
+ L2Cache L#53 (size=256KB linesize=128 ways=8)
+ L1Cache L#53 (size=32KB linesize=128 ways=8)
+ Core L#53 (P#212)
+ PU L#212 (P#212)
+ PU L#213 (P#213)
+ PU L#214 (P#214)
+ PU L#215 (P#215)
+ L3Cache L#54 (size=4096KB linesize=128)
+ L2Cache L#54 (size=256KB linesize=128 ways=8)
+ L1Cache L#54 (size=32KB linesize=128 ways=8)
+ Core L#54 (P#216)
+ PU L#216 (P#216)
+ PU L#217 (P#217)
+ PU L#218 (P#218)
+ PU L#219 (P#219)
+ L3Cache L#55 (size=4096KB linesize=128)
+ L2Cache L#55 (size=256KB linesize=128 ways=8)
+ L1Cache L#55 (size=32KB linesize=128 ways=8)
+ Core L#55 (P#220)
+ PU L#220 (P#220)
+ PU L#221 (P#221)
+ PU L#222 (P#222)
+ PU L#223 (P#223)
+ L3Cache L#56 (size=4096KB linesize=128)
+ L2Cache L#56 (size=256KB linesize=128 ways=8)
+ L1Cache L#56 (size=32KB linesize=128 ways=8)
+ Core L#56 (P#224)
+ PU L#224 (P#224)
+ PU L#225 (P#225)
+ PU L#226 (P#226)
+ PU L#227 (P#227)
+ L3Cache L#57 (size=4096KB linesize=128)
+ L2Cache L#57 (size=256KB linesize=128 ways=8)
+ L1Cache L#57 (size=32KB linesize=128 ways=8)
+ Core L#57 (P#228)
+ PU L#228 (P#228)
+ PU L#229 (P#229)
+ PU L#230 (P#230)
+ PU L#231 (P#231)
+ L3Cache L#58 (size=4096KB linesize=128)
+ L2Cache L#58 (size=256KB linesize=128 ways=8)
+ L1Cache L#58 (size=32KB linesize=128 ways=8)
+ Core L#58 (P#232)
+ PU L#232 (P#232)
+ PU L#233 (P#233)
+ PU L#234 (P#234)
+ PU L#235 (P#235)
+ L3Cache L#59 (size=4096KB linesize=128)
+ L2Cache L#59 (size=256KB linesize=128 ways=8)
+ L1Cache L#59 (size=32KB linesize=128 ways=8)
+ Core L#59 (P#236)
+ PU L#236 (P#236)
+ PU L#237 (P#237)
+ PU L#238 (P#238)
+ PU L#239 (P#239)
+ L3Cache L#60 (size=4096KB linesize=128)
+ L2Cache L#60 (size=256KB linesize=128 ways=8)
+ L1Cache L#60 (size=32KB linesize=128 ways=8)
+ Core L#60 (P#240)
+ PU L#240 (P#240)
+ PU L#241 (P#241)
+ PU L#242 (P#242)
+ PU L#243 (P#243)
+ L3Cache L#61 (size=4096KB linesize=128)
+ L2Cache L#61 (size=256KB linesize=128 ways=8)
+ L1Cache L#61 (size=32KB linesize=128 ways=8)
+ Core L#61 (P#244)
+ PU L#244 (P#244)
+ PU L#245 (P#245)
+ PU L#246 (P#246)
+ PU L#247 (P#247)
+ L3Cache L#62 (size=4096KB linesize=128)
+ L2Cache L#62 (size=256KB linesize=128 ways=8)
+ L1Cache L#62 (size=32KB linesize=128 ways=8)
+ Core L#62 (P#248)
+ PU L#248 (P#248)
+ PU L#249 (P#249)
+ PU L#250 (P#250)
+ PU L#251 (P#251)
+ L3Cache L#63 (size=4096KB linesize=128)
+ L2Cache L#63 (size=256KB linesize=128 ways=8)
+ L1Cache L#63 (size=32KB linesize=128 ways=8)
+ Core L#63 (P#252)
+ PU L#252 (P#252)
+ PU L#253 (P#253)
+ PU L#254 (P#254)
+ PU L#255 (P#255)
+depth 0: 1 Machine (type #1)
+ depth 1: 64 Caches (type #4)
+ depth 2: 64 Caches (type #4)
+ depth 3: 64 Caches (type #4)
+ depth 4: 64 Cores (type #5)
+ depth 5: 256 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t-nosys.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+256ppc-8n8s4t.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,609 @@
+Machine (P#0 total=516423680KB Backend=Linux)
+ Group0 L#0 (total=124780544KB)
+ NUMANode L#0 (P#0 local=58458112KB total=58458112KB)
+ Socket L#0 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#0 (size=4096KB linesize=128)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=32KB linesize=128 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+ Socket L#1 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#1 (size=4096KB linesize=128)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=32KB linesize=128 ways=8)
+ Core L#1 (P#4)
+ PU L#4 (P#4)
+ PU L#5 (P#5)
+ PU L#6 (P#6)
+ PU L#7 (P#7)
+ Socket L#2 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#2 (size=4096KB linesize=128)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=32KB linesize=128 ways=8)
+ Core L#2 (P#8)
+ PU L#8 (P#8)
+ PU L#9 (P#9)
+ PU L#10 (P#10)
+ PU L#11 (P#11)
+ Socket L#3 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#3 (size=4096KB linesize=128)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=32KB linesize=128 ways=8)
+ Core L#3 (P#12)
+ PU L#12 (P#12)
+ PU L#13 (P#13)
+ PU L#14 (P#14)
+ PU L#15 (P#15)
+ Socket L#4 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#4 (size=4096KB linesize=128)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=32KB linesize=128 ways=8)
+ Core L#4 (P#16)
+ PU L#16 (P#16)
+ PU L#17 (P#17)
+ PU L#18 (P#18)
+ PU L#19 (P#19)
+ Socket L#5 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#5 (size=4096KB linesize=128)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=32KB linesize=128 ways=8)
+ Core L#5 (P#20)
+ PU L#20 (P#20)
+ PU L#21 (P#21)
+ PU L#22 (P#22)
+ PU L#23 (P#23)
+ Socket L#6 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#6 (size=4096KB linesize=128)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=32KB linesize=128 ways=8)
+ Core L#6 (P#24)
+ PU L#24 (P#24)
+ PU L#25 (P#25)
+ PU L#26 (P#26)
+ PU L#27 (P#27)
+ Socket L#7 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#7 (size=4096KB linesize=128)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=32KB linesize=128 ways=8)
+ Core L#7 (P#28)
+ PU L#28 (P#28)
+ PU L#29 (P#29)
+ PU L#30 (P#30)
+ PU L#31 (P#31)
+ NUMANode L#1 (P#1 local=66322432KB total=66322432KB)
+ Socket L#8 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#8 (size=4096KB linesize=128)
+ L2Cache L#8 (size=256KB linesize=128 ways=8)
+ L1Cache L#8 (size=32KB linesize=128 ways=8)
+ Core L#8 (P#32)
+ PU L#32 (P#32)
+ PU L#33 (P#33)
+ PU L#34 (P#34)
+ PU L#35 (P#35)
+ Socket L#9 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#9 (size=4096KB linesize=128)
+ L2Cache L#9 (size=256KB linesize=128 ways=8)
+ L1Cache L#9 (size=32KB linesize=128 ways=8)
+ Core L#9 (P#36)
+ PU L#36 (P#36)
+ PU L#37 (P#37)
+ PU L#38 (P#38)
+ PU L#39 (P#39)
+ Socket L#10 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#10 (size=4096KB linesize=128)
+ L2Cache L#10 (size=256KB linesize=128 ways=8)
+ L1Cache L#10 (size=32KB linesize=128 ways=8)
+ Core L#10 (P#40)
+ PU L#40 (P#40)
+ PU L#41 (P#41)
+ PU L#42 (P#42)
+ PU L#43 (P#43)
+ Socket L#11 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#11 (size=4096KB linesize=128)
+ L2Cache L#11 (size=256KB linesize=128 ways=8)
+ L1Cache L#11 (size=32KB linesize=128 ways=8)
+ Core L#11 (P#44)
+ PU L#44 (P#44)
+ PU L#45 (P#45)
+ PU L#46 (P#46)
+ PU L#47 (P#47)
+ Socket L#12 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#12 (size=4096KB linesize=128)
+ L2Cache L#12 (size=256KB linesize=128 ways=8)
+ L1Cache L#12 (size=32KB linesize=128 ways=8)
+ Core L#12 (P#48)
+ PU L#48 (P#48)
+ PU L#49 (P#49)
+ PU L#50 (P#50)
+ PU L#51 (P#51)
+ Socket L#13 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#13 (size=4096KB linesize=128)
+ L2Cache L#13 (size=256KB linesize=128 ways=8)
+ L1Cache L#13 (size=32KB linesize=128 ways=8)
+ Core L#13 (P#52)
+ PU L#52 (P#52)
+ PU L#53 (P#53)
+ PU L#54 (P#54)
+ PU L#55 (P#55)
+ Socket L#14 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#14 (size=4096KB linesize=128)
+ L2Cache L#14 (size=256KB linesize=128 ways=8)
+ L1Cache L#14 (size=32KB linesize=128 ways=8)
+ Core L#14 (P#56)
+ PU L#56 (P#56)
+ PU L#57 (P#57)
+ PU L#58 (P#58)
+ PU L#59 (P#59)
+ Socket L#15 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#15 (size=4096KB linesize=128)
+ L2Cache L#15 (size=256KB linesize=128 ways=8)
+ L1Cache L#15 (size=32KB linesize=128 ways=8)
+ Core L#15 (P#60)
+ PU L#60 (P#60)
+ PU L#61 (P#61)
+ PU L#62 (P#62)
+ PU L#63 (P#63)
+ Group0 L#1 (total=133955584KB)
+ NUMANode L#2 (P#4 local=66846720KB total=66846720KB)
+ Socket L#16 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#16 (size=4096KB linesize=128)
+ L2Cache L#16 (size=256KB linesize=128 ways=8)
+ L1Cache L#16 (size=32KB linesize=128 ways=8)
+ Core L#16 (P#64)
+ PU L#64 (P#64)
+ PU L#65 (P#65)
+ PU L#66 (P#66)
+ PU L#67 (P#67)
+ Socket L#17 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#17 (size=4096KB linesize=128)
+ L2Cache L#17 (size=256KB linesize=128 ways=8)
+ L1Cache L#17 (size=32KB linesize=128 ways=8)
+ Core L#17 (P#68)
+ PU L#68 (P#68)
+ PU L#69 (P#69)
+ PU L#70 (P#70)
+ PU L#71 (P#71)
+ Socket L#18 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#18 (size=4096KB linesize=128)
+ L2Cache L#18 (size=256KB linesize=128 ways=8)
+ L1Cache L#18 (size=32KB linesize=128 ways=8)
+ Core L#18 (P#72)
+ PU L#72 (P#72)
+ PU L#73 (P#73)
+ PU L#74 (P#74)
+ PU L#75 (P#75)
+ Socket L#19 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#19 (size=4096KB linesize=128)
+ L2Cache L#19 (size=256KB linesize=128 ways=8)
+ L1Cache L#19 (size=32KB linesize=128 ways=8)
+ Core L#19 (P#76)
+ PU L#76 (P#76)
+ PU L#77 (P#77)
+ PU L#78 (P#78)
+ PU L#79 (P#79)
+ Socket L#20 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#20 (size=4096KB linesize=128)
+ L2Cache L#20 (size=256KB linesize=128 ways=8)
+ L1Cache L#20 (size=32KB linesize=128 ways=8)
+ Core L#20 (P#80)
+ PU L#80 (P#80)
+ PU L#81 (P#81)
+ PU L#82 (P#82)
+ PU L#83 (P#83)
+ Socket L#21 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#21 (size=4096KB linesize=128)
+ L2Cache L#21 (size=256KB linesize=128 ways=8)
+ L1Cache L#21 (size=32KB linesize=128 ways=8)
+ Core L#21 (P#84)
+ PU L#84 (P#84)
+ PU L#85 (P#85)
+ PU L#86 (P#86)
+ PU L#87 (P#87)
+ Socket L#22 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#22 (size=4096KB linesize=128)
+ L2Cache L#22 (size=256KB linesize=128 ways=8)
+ L1Cache L#22 (size=32KB linesize=128 ways=8)
+ Core L#22 (P#88)
+ PU L#88 (P#88)
+ PU L#89 (P#89)
+ PU L#90 (P#90)
+ PU L#91 (P#91)
+ Socket L#23 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#23 (size=4096KB linesize=128)
+ L2Cache L#23 (size=256KB linesize=128 ways=8)
+ L1Cache L#23 (size=32KB linesize=128 ways=8)
+ Core L#23 (P#92)
+ PU L#92 (P#92)
+ PU L#93 (P#93)
+ PU L#94 (P#94)
+ PU L#95 (P#95)
+ NUMANode L#3 (P#5 local=67108864KB total=67108864KB)
+ Socket L#24 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#24 (size=4096KB linesize=128)
+ L2Cache L#24 (size=256KB linesize=128 ways=8)
+ L1Cache L#24 (size=32KB linesize=128 ways=8)
+ Core L#24 (P#96)
+ PU L#96 (P#96)
+ PU L#97 (P#97)
+ PU L#98 (P#98)
+ PU L#99 (P#99)
+ Socket L#25 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#25 (size=4096KB linesize=128)
+ L2Cache L#25 (size=256KB linesize=128 ways=8)
+ L1Cache L#25 (size=32KB linesize=128 ways=8)
+ Core L#25 (P#100)
+ PU L#100 (P#100)
+ PU L#101 (P#101)
+ PU L#102 (P#102)
+ PU L#103 (P#103)
+ Socket L#26 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#26 (size=4096KB linesize=128)
+ L2Cache L#26 (size=256KB linesize=128 ways=8)
+ L1Cache L#26 (size=32KB linesize=128 ways=8)
+ Core L#26 (P#104)
+ PU L#104 (P#104)
+ PU L#105 (P#105)
+ PU L#106 (P#106)
+ PU L#107 (P#107)
+ Socket L#27 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#27 (size=4096KB linesize=128)
+ L2Cache L#27 (size=256KB linesize=128 ways=8)
+ L1Cache L#27 (size=32KB linesize=128 ways=8)
+ Core L#27 (P#108)
+ PU L#108 (P#108)
+ PU L#109 (P#109)
+ PU L#110 (P#110)
+ PU L#111 (P#111)
+ Socket L#28 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#28 (size=4096KB linesize=128)
+ L2Cache L#28 (size=256KB linesize=128 ways=8)
+ L1Cache L#28 (size=32KB linesize=128 ways=8)
+ Core L#28 (P#112)
+ PU L#112 (P#112)
+ PU L#113 (P#113)
+ PU L#114 (P#114)
+ PU L#115 (P#115)
+ Socket L#29 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#29 (size=4096KB linesize=128)
+ L2Cache L#29 (size=256KB linesize=128 ways=8)
+ L1Cache L#29 (size=32KB linesize=128 ways=8)
+ Core L#29 (P#116)
+ PU L#116 (P#116)
+ PU L#117 (P#117)
+ PU L#118 (P#118)
+ PU L#119 (P#119)
+ Socket L#30 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#30 (size=4096KB linesize=128)
+ L2Cache L#30 (size=256KB linesize=128 ways=8)
+ L1Cache L#30 (size=32KB linesize=128 ways=8)
+ Core L#30 (P#120)
+ PU L#120 (P#120)
+ PU L#121 (P#121)
+ PU L#122 (P#122)
+ PU L#123 (P#123)
+ Socket L#31 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#31 (size=4096KB linesize=128)
+ L2Cache L#31 (size=256KB linesize=128 ways=8)
+ L1Cache L#31 (size=32KB linesize=128 ways=8)
+ Core L#31 (P#124)
+ PU L#124 (P#124)
+ PU L#125 (P#125)
+ PU L#126 (P#126)
+ PU L#127 (P#127)
+ Group0 L#2 (total=133955584KB)
+ NUMANode L#4 (P#8 local=66846720KB total=66846720KB)
+ Socket L#32 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#32 (size=4096KB linesize=128)
+ L2Cache L#32 (size=256KB linesize=128 ways=8)
+ L1Cache L#32 (size=32KB linesize=128 ways=8)
+ Core L#32 (P#128)
+ PU L#128 (P#128)
+ PU L#129 (P#129)
+ PU L#130 (P#130)
+ PU L#131 (P#131)
+ Socket L#33 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#33 (size=4096KB linesize=128)
+ L2Cache L#33 (size=256KB linesize=128 ways=8)
+ L1Cache L#33 (size=32KB linesize=128 ways=8)
+ Core L#33 (P#132)
+ PU L#132 (P#132)
+ PU L#133 (P#133)
+ PU L#134 (P#134)
+ PU L#135 (P#135)
+ Socket L#34 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#34 (size=4096KB linesize=128)
+ L2Cache L#34 (size=256KB linesize=128 ways=8)
+ L1Cache L#34 (size=32KB linesize=128 ways=8)
+ Core L#34 (P#136)
+ PU L#136 (P#136)
+ PU L#137 (P#137)
+ PU L#138 (P#138)
+ PU L#139 (P#139)
+ Socket L#35 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#35 (size=4096KB linesize=128)
+ L2Cache L#35 (size=256KB linesize=128 ways=8)
+ L1Cache L#35 (size=32KB linesize=128 ways=8)
+ Core L#35 (P#140)
+ PU L#140 (P#140)
+ PU L#141 (P#141)
+ PU L#142 (P#142)
+ PU L#143 (P#143)
+ Socket L#36 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#36 (size=4096KB linesize=128)
+ L2Cache L#36 (size=256KB linesize=128 ways=8)
+ L1Cache L#36 (size=32KB linesize=128 ways=8)
+ Core L#36 (P#144)
+ PU L#144 (P#144)
+ PU L#145 (P#145)
+ PU L#146 (P#146)
+ PU L#147 (P#147)
+ Socket L#37 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#37 (size=4096KB linesize=128)
+ L2Cache L#37 (size=256KB linesize=128 ways=8)
+ L1Cache L#37 (size=32KB linesize=128 ways=8)
+ Core L#37 (P#148)
+ PU L#148 (P#148)
+ PU L#149 (P#149)
+ PU L#150 (P#150)
+ PU L#151 (P#151)
+ Socket L#38 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#38 (size=4096KB linesize=128)
+ L2Cache L#38 (size=256KB linesize=128 ways=8)
+ L1Cache L#38 (size=32KB linesize=128 ways=8)
+ Core L#38 (P#152)
+ PU L#152 (P#152)
+ PU L#153 (P#153)
+ PU L#154 (P#154)
+ PU L#155 (P#155)
+ Socket L#39 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#39 (size=4096KB linesize=128)
+ L2Cache L#39 (size=256KB linesize=128 ways=8)
+ L1Cache L#39 (size=32KB linesize=128 ways=8)
+ Core L#39 (P#156)
+ PU L#156 (P#156)
+ PU L#157 (P#157)
+ PU L#158 (P#158)
+ PU L#159 (P#159)
+ NUMANode L#5 (P#9 local=67108864KB total=67108864KB)
+ Socket L#40 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#40 (size=4096KB linesize=128)
+ L2Cache L#40 (size=256KB linesize=128 ways=8)
+ L1Cache L#40 (size=32KB linesize=128 ways=8)
+ Core L#40 (P#160)
+ PU L#160 (P#160)
+ PU L#161 (P#161)
+ PU L#162 (P#162)
+ PU L#163 (P#163)
+ Socket L#41 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#41 (size=4096KB linesize=128)
+ L2Cache L#41 (size=256KB linesize=128 ways=8)
+ L1Cache L#41 (size=32KB linesize=128 ways=8)
+ Core L#41 (P#164)
+ PU L#164 (P#164)
+ PU L#165 (P#165)
+ PU L#166 (P#166)
+ PU L#167 (P#167)
+ Socket L#42 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#42 (size=4096KB linesize=128)
+ L2Cache L#42 (size=256KB linesize=128 ways=8)
+ L1Cache L#42 (size=32KB linesize=128 ways=8)
+ Core L#42 (P#168)
+ PU L#168 (P#168)
+ PU L#169 (P#169)
+ PU L#170 (P#170)
+ PU L#171 (P#171)
+ Socket L#43 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#43 (size=4096KB linesize=128)
+ L2Cache L#43 (size=256KB linesize=128 ways=8)
+ L1Cache L#43 (size=32KB linesize=128 ways=8)
+ Core L#43 (P#172)
+ PU L#172 (P#172)
+ PU L#173 (P#173)
+ PU L#174 (P#174)
+ PU L#175 (P#175)
+ Socket L#44 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#44 (size=4096KB linesize=128)
+ L2Cache L#44 (size=256KB linesize=128 ways=8)
+ L1Cache L#44 (size=32KB linesize=128 ways=8)
+ Core L#44 (P#176)
+ PU L#176 (P#176)
+ PU L#177 (P#177)
+ PU L#178 (P#178)
+ PU L#179 (P#179)
+ Socket L#45 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#45 (size=4096KB linesize=128)
+ L2Cache L#45 (size=256KB linesize=128 ways=8)
+ L1Cache L#45 (size=32KB linesize=128 ways=8)
+ Core L#45 (P#180)
+ PU L#180 (P#180)
+ PU L#181 (P#181)
+ PU L#182 (P#182)
+ PU L#183 (P#183)
+ Socket L#46 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#46 (size=4096KB linesize=128)
+ L2Cache L#46 (size=256KB linesize=128 ways=8)
+ L1Cache L#46 (size=32KB linesize=128 ways=8)
+ Core L#46 (P#184)
+ PU L#184 (P#184)
+ PU L#185 (P#185)
+ PU L#186 (P#186)
+ PU L#187 (P#187)
+ Socket L#47 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#47 (size=4096KB linesize=128)
+ L2Cache L#47 (size=256KB linesize=128 ways=8)
+ L1Cache L#47 (size=32KB linesize=128 ways=8)
+ Core L#47 (P#188)
+ PU L#188 (P#188)
+ PU L#189 (P#189)
+ PU L#190 (P#190)
+ PU L#191 (P#191)
+ Group0 L#3 (total=123731968KB)
+ NUMANode L#6 (P#12 local=66846720KB total=66846720KB)
+ Socket L#48 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#48 (size=4096KB linesize=128)
+ L2Cache L#48 (size=256KB linesize=128 ways=8)
+ L1Cache L#48 (size=32KB linesize=128 ways=8)
+ Core L#48 (P#192)
+ PU L#192 (P#192)
+ PU L#193 (P#193)
+ PU L#194 (P#194)
+ PU L#195 (P#195)
+ Socket L#49 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#49 (size=4096KB linesize=128)
+ L2Cache L#49 (size=256KB linesize=128 ways=8)
+ L1Cache L#49 (size=32KB linesize=128 ways=8)
+ Core L#49 (P#196)
+ PU L#196 (P#196)
+ PU L#197 (P#197)
+ PU L#198 (P#198)
+ PU L#199 (P#199)
+ Socket L#50 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#50 (size=4096KB linesize=128)
+ L2Cache L#50 (size=256KB linesize=128 ways=8)
+ L1Cache L#50 (size=32KB linesize=128 ways=8)
+ Core L#50 (P#200)
+ PU L#200 (P#200)
+ PU L#201 (P#201)
+ PU L#202 (P#202)
+ PU L#203 (P#203)
+ Socket L#51 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#51 (size=4096KB linesize=128)
+ L2Cache L#51 (size=256KB linesize=128 ways=8)
+ L1Cache L#51 (size=32KB linesize=128 ways=8)
+ Core L#51 (P#204)
+ PU L#204 (P#204)
+ PU L#205 (P#205)
+ PU L#206 (P#206)
+ PU L#207 (P#207)
+ Socket L#52 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#52 (size=4096KB linesize=128)
+ L2Cache L#52 (size=256KB linesize=128 ways=8)
+ L1Cache L#52 (size=32KB linesize=128 ways=8)
+ Core L#52 (P#208)
+ PU L#208 (P#208)
+ PU L#209 (P#209)
+ PU L#210 (P#210)
+ PU L#211 (P#211)
+ Socket L#53 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#53 (size=4096KB linesize=128)
+ L2Cache L#53 (size=256KB linesize=128 ways=8)
+ L1Cache L#53 (size=32KB linesize=128 ways=8)
+ Core L#53 (P#212)
+ PU L#212 (P#212)
+ PU L#213 (P#213)
+ PU L#214 (P#214)
+ PU L#215 (P#215)
+ Socket L#54 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#54 (size=4096KB linesize=128)
+ L2Cache L#54 (size=256KB linesize=128 ways=8)
+ L1Cache L#54 (size=32KB linesize=128 ways=8)
+ Core L#54 (P#216)
+ PU L#216 (P#216)
+ PU L#217 (P#217)
+ PU L#218 (P#218)
+ PU L#219 (P#219)
+ Socket L#55 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#55 (size=4096KB linesize=128)
+ L2Cache L#55 (size=256KB linesize=128 ways=8)
+ L1Cache L#55 (size=32KB linesize=128 ways=8)
+ Core L#55 (P#220)
+ PU L#220 (P#220)
+ PU L#221 (P#221)
+ PU L#222 (P#222)
+ PU L#223 (P#223)
+ NUMANode L#7 (P#13 local=56885248KB total=56885248KB)
+ Socket L#56 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#56 (size=4096KB linesize=128)
+ L2Cache L#56 (size=256KB linesize=128 ways=8)
+ L1Cache L#56 (size=32KB linesize=128 ways=8)
+ Core L#56 (P#224)
+ PU L#224 (P#224)
+ PU L#225 (P#225)
+ PU L#226 (P#226)
+ PU L#227 (P#227)
+ Socket L#57 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#57 (size=4096KB linesize=128)
+ L2Cache L#57 (size=256KB linesize=128 ways=8)
+ L1Cache L#57 (size=32KB linesize=128 ways=8)
+ Core L#57 (P#228)
+ PU L#228 (P#228)
+ PU L#229 (P#229)
+ PU L#230 (P#230)
+ PU L#231 (P#231)
+ Socket L#58 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#58 (size=4096KB linesize=128)
+ L2Cache L#58 (size=256KB linesize=128 ways=8)
+ L1Cache L#58 (size=32KB linesize=128 ways=8)
+ Core L#58 (P#232)
+ PU L#232 (P#232)
+ PU L#233 (P#233)
+ PU L#234 (P#234)
+ PU L#235 (P#235)
+ Socket L#59 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#59 (size=4096KB linesize=128)
+ L2Cache L#59 (size=256KB linesize=128 ways=8)
+ L1Cache L#59 (size=32KB linesize=128 ways=8)
+ Core L#59 (P#236)
+ PU L#236 (P#236)
+ PU L#237 (P#237)
+ PU L#238 (P#238)
+ PU L#239 (P#239)
+ Socket L#60 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#60 (size=4096KB linesize=128)
+ L2Cache L#60 (size=256KB linesize=128 ways=8)
+ L1Cache L#60 (size=32KB linesize=128 ways=8)
+ Core L#60 (P#240)
+ PU L#240 (P#240)
+ PU L#241 (P#241)
+ PU L#242 (P#242)
+ PU L#243 (P#243)
+ Socket L#61 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#61 (size=4096KB linesize=128)
+ L2Cache L#61 (size=256KB linesize=128 ways=8)
+ L1Cache L#61 (size=32KB linesize=128 ways=8)
+ Core L#61 (P#244)
+ PU L#244 (P#244)
+ PU L#245 (P#245)
+ PU L#246 (P#246)
+ PU L#247 (P#247)
+ Socket L#62 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#62 (size=4096KB linesize=128)
+ L2Cache L#62 (size=256KB linesize=128 ways=8)
+ L1Cache L#62 (size=32KB linesize=128 ways=8)
+ Core L#62 (P#248)
+ PU L#248 (P#248)
+ PU L#249 (P#249)
+ PU L#250 (P#250)
+ PU L#251 (P#251)
+ Socket L#63 (CPUModel="POWER7 (architected), altivec supported")
+ L3Cache L#63 (size=4096KB linesize=128)
+ L2Cache L#63 (size=256KB linesize=128 ways=8)
+ L1Cache L#63 (size=32KB linesize=128 ways=8)
+ Core L#63 (P#252)
+ PU L#252 (P#252)
+ PU L#253 (P#253)
+ PU L#254 (P#254)
+ PU L#255 (P#255)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Groups (type #7)
+ depth 2: 8 NUMANodes (type #2)
+ depth 3: 64 Sockets (type #3)
+ depth 4: 64 Caches (type #4)
+ depth 5: 64 Caches (type #4)
+ depth 6: 64 Caches (type #4)
+ depth 7: 64 Cores (type #5)
+ depth 8: 256 PUs (type #6)
+latency matrix between NUMANodes (depth 2) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 4.000 4.000 4.000 4.000 4.000 4.000
+ 1 2.000 1.000 4.000 4.000 4.000 4.000 4.000 4.000
+ 2 4.000 4.000 1.000 2.000 4.000 4.000 4.000 4.000
+ 3 4.000 4.000 2.000 1.000 4.000 4.000 4.000 4.000
+ 4 4.000 4.000 4.000 4.000 1.000 2.000 4.000 4.000
+ 5 4.000 4.000 4.000 4.000 2.000 1.000 4.000 4.000
+ 6 4.000 4.000 4.000 4.000 4.000 4.000 1.000 2.000
+ 7 4.000 4.000 4.000 4.000 4.000 4.000 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/256ppc-8n8s4t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,469 @@
+BZh91AY&SYùAAæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï×ÿÿ×ÿÿÿÿ÷ÿÿà£^z>À GÀ'x àê Ñ>âÁj
+ø;à @ íà ú ;½>gË}o ¶2&U8 "\ìÄ@ ° M ½! 'º.ÆÛE¶°° é§ìh^½ÛÛÛÓ £°d]ر£cä©!*DI©J ÐT>[ì!õ¸ ìnywlÛ3ØÝÛ:Æ =ö àÑB %IP*
+ÂA@¢ ¦úÒ))EÄ ±èsâD³aÍ 9Cß0`È `el`©²Mý5*TÚG¨4ÆÊyMè h @¨Ñ ÚOQÔ dÓ 4Ð4
+ hÉê=@ hAÿú¥S@úª@ ÔðI&òSÞªf)ýTÿÕIÍ&ÓLL#MÔõDÄÀ Ó hÐ40@ÀLF@@hdi¦0L 42&ýJ©O)ê56ÒÞ¦¦¦z= 44Âiè&SÄ4CS¦A Ú4Ðhhhi¦Sjb4ÓõC@Ð
+
+
+
+
+
+ @@ =RTÒOE§¨Éêi h ¥( ¡24jbiz'¨Ñ£jmOÔÔ=@É hm'M© hÐhSFÔå6¦ÔÓ&É ê hÓCi©êä$!ýF¦êzG©ùSM¨ô¦&jôÔôµÔÓÒyCõOSÔ~4å õ =@@Ò¨
+OSFGÐõ©ê õ0W¸ùñX+j+z\Ⲭ
+î
+ýcQ°WÖÁ&C}UiZZm¥¿úíØ®°Êý9-
+
+[ {²YIabh*X{ÂX{ê¬Sµ¶+2)úekF at I
+*AºPpDóJe#)JS)J16ØÆ))e33)4ÅJئµFÆ,cF£X¯¢imÒÚYk1¤¦R2¥2¤£Ò£ÉLÓ)I¤¤Å* iÙÈEôÛ]ÂÚÜÑb2Ee
+~ómmÕUåIiVYl©Yil´ÚVZ[-+,¶Y´¥¦ZKKo4\®sræÝ7,nMåÓdºî©]%¥.ºæjS®Ü(IJuuæÝ¥rÝæÅR×,\¹rérìº].Ë¥ÒìéÓ§]$DÝQî6û×·ð[kësZî#&dÙ*fɲT,ZíRkäëåîßë¡"]PË¡¨ÊXã%(\tXa²RÓ
+Õ-¯ÅÕJÃV)XÕÃ5{ÆíÅ$=ÄQEQEQEQE%QEQEQEQEQEQEQEQAEQE 333upUI2+UX+ Y%âaòñT#ê2&Úü_áU·jÛðêÛß?Í@ ïÅ~aø¯Ìøßáþ/ñßsó/Ãý|ßwíÿñ¼Ôp\'¼o|V»_Åñ;ä9KÞ¹§æ·Ý÷Q¿ùÿAÍó
à´<o½øÖãÂsy4ƤäM³8y4Ç}<ÑÌxç
+ÜÝ!ºñÏ ÁÒ)Ó9µ:Ãßyv'djvghv§lvçp~U;ùØî±xlcõ á+¬cºÖÝÝÝÝ H%
+/꾿õ¿2\×ë{üïæüõóu}ÖW½ÂçñîcçÏøÍíâ-üµ©59±KmøßÆoohϾµ&¤N~G}ÅüföÄZ3Y¥kF~FÛg8¾<^ÖGµ&¹ý%y¾Áä½³ä-Iªü%¼ßd³|¶bÐ|©5^úËâ÷Ù,ß%í´'jMUd÷³°x¿ÞÞ"ѵ&§ÑY~O}Íò^ÙAó6¤Õ}%Êo²Y¾KÛ1h>rÔ¯çY|Vû%ä½³ÛZUõ\ï°Nþ3{xFsjMcØ®}l/ã7·´g{Rkulþ{}³ß5Þ|E£>òÔUcã÷Ø3|¶bÐ{¤ÕIíí°x¿ÞÞ"ÑÖZSÖ²ù}öK7É{f-ëIª>c}ÅüföÄZ3óö¤Ôø{/Ço²Y¾KÛ1çy^ãzM]%{loོE£>öÔÒËæ·Ù,ß%í´²µ&©Ù|Þû%ä½³ÞÚUîl¾K}Íò^ÙAó¤Õ{6_;¾Éfù/lÅ ù«Rj½/Ño²Y¾KÛ1h?mjMW³eö#Æþ3{xF~.Ôì±ÆûïÛÄZ3;Esñ1FÙÎ'"oEjMr¸ï°fù/lÅ ú;Rj½/}¾Éfù/lÅ ö¶¤ÕIöËl/ã7·´gø¤ÔúõÍï²Y¾KÛ1h?jMWØ,¿/¾Éfù/lÅ ÷ö¤Õ{/ßd³|¶bÐ|Rj½ÅÎï²Y¾KÛ1h?jMW¸²üæû%ä½³×µ&ª²}ÊvñÛÄZ3ýKRj}nËô{ìoöÌ~y_ÙÞWÕËo³eò¯lÅ û½©5^Å÷Ø<_ÆolÅ£ojMI¦~ÛøÍíâ-þí©5>2Ëç·Ù,ß%í´àµ&«Ù²ùýöK7É{f-ÔZUðV_3¾Éfù/lÅ õIªãm°x¿ÞÞ"ÑíI©ìÙ|öû%ä½³êmIª?g¾Áâþ3{b-ÿU©5>µeî÷Ù,ß%í·¹ñô¦8ÿÖ½ÇMuîÛï¶ùêöÌZúZUM¾Éfù/lÅ úí©5Uã§`ñ½¼E£?øµ&§º²úöK7É{f-þIªû¥î÷Ù,ß%í´¸µ&«ìV_«ßd³|¶bXæ-JÒ±u{¢Mʯ»¤äjô)45~'/Wàjj÷T½]½_I³«ï 7ʽ:M^&ίNq«ð 6UugWW'-W&ʯ
"M^D^D¾')W«Ñ$ë*ôi9
+½N>¯Fv«Ñ¤æ*êÎ:¯"O)W&¯"M
^Dj¼6yqµvqz4]^è_W&¾¯"Mµ^Dê¾&m^'««8ª¼äÚ¼äM^rN&¯9'W«ÎIæ*ôé8z»5zTʽ*M]_{I««Ò¤ÕUéRy*½*JÑpÕ"¯¥'ñ¸eþîaúr}¾§'Ûaø$ù¸eý¡?
Ãúðv?ÒÁéû|þ?í ôþ²ÿÚü\ÿ'ÝáòÉðáòÉðáòÉðáòÉðáòÉû\2þÔÿwóÁêüðGüX?ÿxóÁñ@ù«óÁêÁýÿVåk÷°¿&#ýÊÿ@?þ(#ý þPGúü ôùAèò?Ðåõ!~X1þvÿ@?þ(#ý üAèò?Ðå·ùà÷<þîç?ÝüðGû¨?ÿtóÁéðáïáÃ/åáÃ/åáÃ/åáÃ/åáÃ/í ë_ÙáÃ/øB|2þ×ï~ÏóØTüóZÏ¿ÑRL˲IlKmIÉ$$KmIm°I-¶ %¶Á$É$Û`[lKmIm°I-¿¨&FÁ$¶Ø$ÛÛ`rI$¶Ø$ÛÛ`[lKmIH &I $Û$KoÿD#`[lNI $ýè=ïz{ÞÞ÷ ÷½è=ïz m°I2I$¶Ø$$[ªdlKmIm°I<É$$KmIH &I $Û<õæû"äTTQh¢(±å(¯öÖå^»jýËVߨü¥ô$¯Ê½áRj> ¢¹{ܰ¿Bûkj ^Ö,ýbä¨è¾Ç~ nƾ`ï*«æWÍ{rùU-~±uäÕÝ£¨»@_ / ¾¥ã
+ãÛRY»@ú-4¨ºÂ¾]j'£¦IG£¦½4ªp®*Ò
+ì
+Ø¢sîÑDôtÒôtÐ<YÜ×Z¤n©qê
+ö{vÀ@yîÝ¢\ò®À¿v7ò®À_¦+òÀZú¼¯´Wv"·öwwöwn1XÄÕIQ[ÓS|5øûãï¾UV1¼Nø+ÊÔ5¨¾ý½²çÁ¸®¼ºÊëçʺ¯G'¾e|'+}
åü7?}
çÞ®þ%ü[èoã_cz*«Æ*¯ÌÆyW©:3=©åó<¯Xgîø»ùÌ_'&ý}ü«ùwÉße2öô/èßMJû;èïéßÔ¾ôÕU}Wi}Eýío©¿µnúæï¶½ýËû·íoï_¢½µö÷÷ï«¿Ã}Äþê~Þ×?ÄöOÆ?Û?e?q?8
+"?÷U¨øuUTWü4ÐWütÒ+î4Òÿ-4~>Flü=>6Z¨þæ¿u-ü*ÿÞ~Tü9¡A?ø¯þe¿B¿ú?6ªÿtÐ+àé «ítÒPGÿ´Ð¢òð©4¤þ¶3??`+l)ü1_d+J+úµ,(5b³$Â`f0UUTLeT³%ÌK/}ì4Ø¥²ÉUJË2TË%[2¦Ze£LÔÍfY3kk[S52Ó5)fYe³,Ë2Ûe,¥fYe³,Ë2Ùd¢dPÌ¥J2Ä«,ÙÖÂU³,ͪÙ2µªm]«¶ÛmJRm¶ÕÚ´Û÷¿à|ïýÿñ¼}7Ó}/Ñúzzzzzzzzzzzzz}?§§§§§§Óúzzzz|O§§§§§§§§§§§§«íÞÿ/öÿ«êú_¤õ}Ðz¾3ü^¯W«Õ÷¯W«Õêûï«Õêï¾ûï¾ûï¿wîûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï¾ûï½¶¥6¦Û÷À,EþúOÅûÿÅûû¿ÀÞÿï9Ë»çIÇhµ·-mÛ©[E$Ѻío30ZíÛ̶ítn¶íKÝ22˳8æÒYÌsMÜEÂöEKÊeÙsiK,ÁKÊeÙÅtÝ.éY¼¦]Ç6²Ì¼¦]L¥í22˳8æÒYÌsMQ¶Ä¹¸Ý¹q±·7ÙºØÛÇtmÂF[«r sqm¹¸ØÕpe» ÙËkvêU»uºo3RÚ-vê$ÜKv·©[u«ynÑ«wÖöÄ
+Ð^/tÁÂÐe0t( 4`ºh)¤A
+`é`9AÒ áh3¬ÁpA ëÐA4ÁÒ Í0tAÒ Ì0iVlÝÝ»²I6ÛwuÙ#¶±»»¹mÛwww.èÝ»$¹ÑE¶ÜÌÌËmÛ$îèÝÝ©(ntËýWsz^ôÎìÎ9½)e)yLÇ4Ýq\ubQl
+¹º3
+¥tÜY,âÝÀµ
píÖ0*tIa¦æn«¦sF@ÁB¤ít)¼Úˤëxròsa£ ÀÆmJ+FºftÊ,Ê^S.ÌãJYf
+^S.̦n=ÜÝÑ»»$m·w][tnîîfffÛE¶ÝÝÝ˺7nÉ.e¶m¹Ú-¶I%ÝÑ»»máwL¢Ì¥å2ìÎ9´¥`¥å3ÓB·rîÝÙ$m»ºìÛ£wws336Ú-¶îîî]Ñ»vIs-´[mÌÌ̶Ñm²I.îÝÛEáwL¢Ì¥å2ìÎ9´¥`¥å3ÓMnîÝ»wfBrîݺª¶Ý»víÛ·vdʵ[nÝ»vîÂreÝ»v'e»víÛ·nvíÛ·vdË»wfL»¤Ý»³&§³nÝ»víۤݻvíØíÛ·nݺMÛ·nª·nÝÙ);·nݺðè-9né×-.ãÒÆfæÓs(Ì2fSî4åË4L9rSF]ÝÊ3)w.îé×.êº&K§-Ý:ÄÌØòÒÆȩ)»wwnÝ»³!9wnÝU[nÝ»víÛ»2eZ·nÝ»wa92îÝ»²Ý»víÛ·I»víÛ#w%ÌÂ÷%Ìˬe»¹ºÆTÝß4>åÜ̺ÆvîæfëÙÝÖ2¤N±îëÃ&ÍÝc;wuàu%¹ºÆ^îæfë]c-ÝÌÍ×I{É.Jeʲ%FnãrIµÝËr3n7%9r:si¹V¬Ù÷.ër幡$;rSd̬ÍÉ.JeÌys.D¸ÜS+¸î;ëÚ¶=ÄÜw׵ͻã¸î;ã¹s¸¬wåÇ,Úî;ã¸î;'qî;ãOl¯qÜwÆuæ×q$î;ã¸îZU¼OeoS¤Ë±\êvVõ-S¤Ù¶6¤N˱Rr·©Ù[ÔÅlêÖíÙ±±pŶn¶6æãcqÝpF[«r sqmî¶6æãcrèÛ3cnÝÙ.é7nìÉ©ìÛ·nÝ»vé7nݺîâ]Û·nÝ»t·nÝU[nÝ»³&RwnÝ»wsayL¢Ì¥å2ìÎ9´¥`¥å2ìÊaÁ-lcäW+r,',O%nE[Y²,$[RH³,O ¹enIfȳ+rW·éyL»09´¥e/)fS2黥íÄôçKÞôvgKïnvÍã¥,³/)fS*M¥Ý22˳8æÒYÌsM.Ñ_2Kºee/)fqÍ¥,³/)fS-u
å22˳f^·³KÎve3&¥îEKÊeÙsiK,ÁKÊeÙÈ
+øÓ,Îc0ÖÎB3
+pã£\8Æa¢H0eað°è¼0eÃÃ(¼<0eå(¼<0bÑ(lÉeÃfLZ\/tËË2˳8æÒYÌsMÈ2áº]¦PlÊ\¦]Ç6²Ì¼¦chR;5ÌhÖ2fQ¬Éh®ôlд!FZÑf4e¡
+2а
4$
t!FZ£-SBHWB)e¡2àI
+z£-Q
)¡$+¡
+2Ð
hXBÑ7B3hXBBº©p)ÂÐÐ
hF¸Ñ³B2а
4$
t!FZ.סI×èÞô!Ñ
)¡$+¡
+2Ð
hXB,!M !]Q(ËBÂÐÛvíÛ»2víÕU¶íÛ·nÝ»³&UªÛvíÛ·v.íÛ±;-Û·nÝ»t·nÝ»³&]Û»2eÝ&íÝ5=víÛ·nÝ&íÛ·nÄì·nÝ»víÒnÝ»uUm»vîÌIÝ»víÝÌH½É£[#2Y£[æa³%5Ìi{fa³!(È]Ó(³)yL»3m)e)yL»2ÝÓawL¢Ì¥å2ìÎ9´¥`¥å2ìÊdÌÓ!{¦QfRòvgÚRË0Ròve1íy
ÒóL¢Ì¥å2ìÎ9´¥`¥å2ìÊgx88\X^ÚgEAyL»3m)e)yL»2»tnîÉ$ÛmÝ×dÝ»»¶Ñm·wwrîÛ²Km¢Ûnffe¶mIwtnî×Ð ç9Î ppr7Òâ¬ÁXI1Ã\8P(hÙÚoR¤^NR
+AY"Ö4Y4dFÛëU&d¤ÌníUÍok,dZÍZ¾ª×î+M$ÌRDD´DDE]xDdHF*F£RZed¤É"bÛ±µ´kFµ]/ªîºdÒY6ÆÉ³*f³e*eI¬[V¾mkz·$Ic]Ýn»µÓ1c[¨ÛE¼Ým-f¦É²jKIµE´6ÒÊ£L³6YeM5*lÔ©©SfYEbµb£bÆÅE¶«kmF4dFLÄ"±£E%3&I#
+«k¸Õªô;á$$Ì'.w].s'7LM$I®Þ
äbIIÌÌW
ªék¥)R¥)J»¥º«Ì$$Äλ»»¸ºÏuÝ×wDFÖò2S)))µ(Å*µì¥Y·»«»»»6×fIwN]ÝÝwuÊ ;&dLKºîîîVYhÔQ¬bHeik_VM´Ú¹¥Öëk´²Ú첬ËiV[×G65Ý[»®î»q×]ݶ¥Q1 Åc!%Oïôo±¤!¨"SB
+R
+|õWϧ§ôþs$I$Ã$H¤RI$1$2G$Ù³cfÍÀPñEd^vu*YB}Î$Sí`Pºøp¯@\yRcF2¥zW"¥Ò7}ú¸áNµ-¸®¹2¥¦Ecã6ð,Þ+§vfc 7üÞÑ\Xn+W
+©»ð£^ -ßR>ÐEµÈ²cÀF1QäÿÔDaÎ p¸$ÜqÃV¶Ø¥b®ÆEiPyú۹ܣoî·øìyY8<h_ø@ {ßsõ`¾L+ÜaGòÀ2ØKD»í}ßòñ\Ö³ ×jtÙ§Ä|µ)JR¤úô¯? ëߨöÿùÅqcÆ8Æ#Æ1_ÄãÆ1¾1[Æ1lcÆøÆ18Æ1_ÄcÆ11ãÆ1scÆ1cbcÆ1Î+cÆ1Æ1Æ1bøÆ'Æ1ñbØÆ1cÆ7Æ1ãcÆ7Æ1cÆ-c߯'Æ1ãcÆ1Æ1\cÆ;ï®Îûï¾ûï¾û¾ <þã÷¯OòUõßÏ ï릫óhr¥ÐÀ$¹ ¢-¶Ð µGÓ*6 »¿ìþÌêÿkÚ|i«Ê+Ðç
+ÐW7F¢µª[YO·ûm®>×i><\|uú¥~»¯wuµº÷7]M×QuÓÝow^ÓWñºé®½×²éUýn½
×®ºõ¾]ϪWîºèîº+¯Ouéºw7\ý×=uÎÝo×Zû®ë·¼÷ZÛ'ëãWªý.ùÀ¶öV©µu[m¤Vå¶Ùh£¬q°TE
+i¡G=ÊÇAG%·ûxzý¿ælâPNúá`"SM".wY"
+[k'Óì¶Z4´´j£¡¸b¢þ±O÷aPDõ«~E|,©÷ú¸¾ÌÑÖ½íÈfe3L³&YÆ1_n §ÓBJ2CîT}F~h°
+âªwö_¥ý_é¿¿ÕýÆÏ3,Þê³p càÛ½z2¼ifï¹
+wÁ>xÕÙÔÏË¢tgª´<96`»£Ç ]SÇy»5«¹|Ï$[ÝÊúhÇçN±
+ª°;Ol=Ìíîçv$ cÌ=òfµºF½V÷0© sóÒQqÔ Cºë3ó+²ûÞñ<»Ê±ÏE·Îø\9{åo¾°<Ñ È6vyàÎîn¾¥¾WËÞÓß;Ù:ݪÇ⻢xf7åö½ð<xù¾xò>ùã]j#wjÏ2±6oãÞèuwʨÏwÉ1x°½ó§µÏ-y3°±9gú´å>.^¼ÃáÏ3Îãeobðõùfí=ñÁå()
ï§;æÀ|CWVêxðftà-:r²· ]XókíU<Æâó«ñæy;:.xzâèÞÁ
b<ÌÚûäïE:Øó«ÃÇâ ¡sÃÄ@ðæíB]ë BÞ¸ÕÈÅ ³VöøÄW£bðÒå=H> LòtÀÏ4$ÇÂO+t
+C L²»â>gúÛLvøÇwgoWW¹; dwXò+äÔ5 ÈP½Õd;©ºÝqÜs¡Pw5:
dÍ7éoݧ4Rê | Ûõ?Û¿
=4äåù?3êýU¸g±¬¾ÍCâpÏkã«áôtÂ(ó<ñÂÎßLyÓíOø_tþ¸Ñ;á(z./³#¤|vìÓ1 "A|¬ïXÒcܸä¨T*I~¼ó Hu2ùÕù.¡¸Ô;
MÏ3^Ö½<IßÄ wA4z3ËðÏe
+QnC¸¬T/½Ñ£~uÐfîP_qgkyFwsÍî÷!*_;<½*öØÒc0|¾6<S>ùLX:Bò{ÛJ+ºWSÎù;{i^ÜÜ><Yäìïrl;|Ííð¢F¹äêÅ|o õðIçâk@ÀHÚ#ÙáôÓ#râHwU\7.eQéóYâDÈ)ÕP'*=xïÓU é*yUSÕÐêýjj«¸$Âíäʰ ¾±<·ÎNùEî©^h[÷Dn5&©*pÈ%À;ªD:ÊÔ¨dê]ÉMFãÈq<Ï xxÝÔGÄç¾ §£×[póNèÔIGÙ7²Cpó!È>¹¸/é%ÄzªêÉW(+«±¨ú9~kåz0>ÁàGþÊÁÜ}¹=xÞ"»ñ~8½g~g}¥a_)ûòÍ8Vz
+=%_äÌ_È\óÛwëªnCÒëÒyöWBí" Ë ñÏoe^^T¨(ßÕ {ÿx+¨çµ
G>-ËHW¶
¢¥>GmRò5xºÝjÔ+[[DêYm -4Òñ¾~àüþøqE{øç c 5Ë
£ <P
+TÍ]>¶
+'PÇ[Ûeüà ½<~B¢ÛģѱJÅ+1·q\VtW(ñ]êB¥
·ßշʶµøÊÛu¿³Ab4ÔF@DTÐÒ± ÓQ ASCHCTl!` P X
+ER¨²i,¡K2Æ¥AdFËDD$E¥B£`Ù 2L Àl*EIe
+Y4U,Ab4ÔF DTÐÒÕÈX À` À`ÑTª,K(RÌY05QKQò¶
+î|:Ñùõ.,%XaîEoÈ+J+Í©t(+<a\rÔ¹j[
j+ð*[·öµ-·Tµmý®ÛYmjQ$%²l¤ÔlXªUJÖû6¬¥}åµnÛhØÆÑEb¢ÅU[ b¦Ê)0±hh´±meµ©h¤Éif)²T©6KJªê¶íµkåVß=µ¾vûÔF#MDdb¦
1 FÈB>5¢Qõ/QRéí;VWdðjª¿/ü¢¼ónîànßyã»»ÆÛtê_§m û.fÏØwtnîîÝïìÛZ¶lMÑHHþõìþdØý4LÌ3333óú5aw+ãV|_|ø½õ×Èü@÷¤}Þîànß_Ü=Üq÷½ïW{»¸·¼wpóe½ï{åZÕ«AOæKó6Å úlÌwFîîèÝß?5¶ßÍmØ$£3 $üßü̦ $I$üØ32 #l¯ =H>$$.k%$O9Æ[Þ÷½^ îîànÞñÝÃÎq÷½ëå[V¶¯ø ñÝÜ
+ÛãÇw9Æ[Þ÷½^ îîànÍ$²'q¶ßÑúKé¶6H'á3ëwFîîèÝÞý[mú¶lMÑHHý}gé6? A$O¬¶WÐÉ$HO5$²'q¶ßÑúKé¶6H'á3ëwFîîèÝÞý[mú¶lMÑHHý}gé6>¤II>°fdFÙ_@{$|I"I<\ÖJHÒ%Â8Ûoèý%ôÛ$ðÌÁõ»£wwtnï~¶ý[E¶ &èÌÈ$I$~¾³ôRA$I$X32 #l¯ =H>$$.oîs·½ïz¼ÝÝÀݽã»ã-ï{ÖÚµµz¼ÜDÅÆÂHÐEAm·ôOÒ /¥²EøÌÆQs>·1¸ñõîïÓL}niÜäH QGëèû#é¦ú#MH¾`aFO»¯¸ëÝÜ
+Ûçã»ã-ï{Þ¯÷wp7oxîáç8Ë{Þ÷«Á=ÝÜ
+ÛÞ;¸yÎ2Þ÷½êðOwwv÷îs·½ï{î¾ïwÝm øf`ÌúÝÑ»»º7w¿VÛ~¢Ûtfd$?_GÙúM© A$O¬¶WÐÉ$HO5$²'q¶ßÑúKé¶6H'á3ëwFîîèÝÞý[mú¶lMÑHHý}gé6>¤
II>°fdFÙ_@{$|I"I<\ÖJHÊ(ÆÛGé/¦ØÙ fÏÝ»»£w{õm·êÚ-°I7FfA"I#õô}¤Øú $I$úÁIe}ì^îànß?Ü=Üq÷½ïW{»¸·¼wpóe½ï{½¡¸FíÞw\=Üq÷½ïW{»¸·¼wp÷qÆ[Þ÷¾ú¾+à'Çwp7oÜ=Üq÷½ïW{»¸·¼wp÷qÆ[Þ÷½^ îîànÞñÝÃÝÇo{Þõx'»»»{Çw9Æ[Þ÷½^ îîànÞñÝÃÎq÷½ïW{»¸·¼wpóe½ï{ÕàîîíïÜ=Üq÷½ïW{»¸·¼wp÷qÆ[Þ÷½^ îîànÞñÝÃÝÇo{Þõx'»»»$´Dð6Ûû?i}¶ÆÉúÌÁ÷»£wwtnï~í¶ýÛE¶ &èÌÈ$I$~þϳörA$I$x32 #l¯¿°>B}½ÝÀݾ;¸yÎ2Þ÷½êðOwwv÷îs·½ïz¼ÝÝÀݽã»ã-ï{Þ¯÷wp7oxîáç8Ë{Þ÷«Á=ÝÜ
+ÛÞ;¸{¸ã-ï{Þ¯÷wp7oxîáîã·½ïz¼ÝÝÀݽã»ã-ï{Þ¯÷wp7oxîáîã·½ïz¼ÝÝÀݽã»ã-ï{Þ¯÷wp7oxîáîã·½ïz¼ÝÝÀݽ㻻2Þ÷½êðOwwv÷îs·½ïz¼ÝÝÀݽ㻻2Þ÷½êðOwwv÷îî8Ë{Þ÷«Á=ÝÜ
+ÛÞ;¸{¸ã-ï{Þ¯÷wp7oxRD(ÆÛgí/¶ÞÉ>¤rFß~äûÏßÙö~ÓrFÚ_hýs`|H>HO+%$Iiám·ö~Òm³ªH~Öfaû[»ºîîtýÛjûVÛ¨äxfäF Gïìû#í6~Ô$HûÈ6WÜûçÉ$é $.6JHÊ(ÆÛgí/¶ØÙ Y3>÷tnîîÝïݶ߻h¶Á$Ý$ßÙö~ÓcîH$I$ïfA$m÷öÉ$é$$ño§îî8Ë{Þ÷àjµ«â¾D$ÅÈÉIYEÂ8Ûoñ?_llO¼ÌîÝÝÑ»½üm¶þ6ÑmIº32 IÇñ>ÏâI I'ã3 ãÞó¾í}À^îànß?Ü=Üq÷½ïW{»¸·¼wpóe½ï{ïß
ð㻸·¼wpóe¼Ûgí/¶ØÙ Y3>÷tnîîÝïݶ߻h¶Á$Ý$ßÙö~ÓcîH$I$ïfA$mô²IÄ$ÅÍd¥ÃÝÇo{Þõx'»»»{Çw9Æ[Þ÷½^ îîànÞñÝĹR¤`ÝÝßÄUA÷þ|?ÑçÒü?¢øø|_çáàú/OÖGÚÂáõ ÓáýASIHÝêRɰ§ 7,ÀÕÁ¤k Jh!ÄI$q$?'¥ Id#³n úZ¹I ZnÌKI$-q6 I"Ø Â¡B ¡Ù0MI$mîæLÂÈÀ41yL(4,ÆjââBiÃJG7ÄÓrk9ªÛné<5HÁ
+¸³B2¦î@éÍbS3lº·r·»&
+m-Û7L[¹ Â^Å¢ºÔFQnh&RmRIVÃmdCAt-ïzhYzV)ܪCTIÆLã©$ÅE
+s Dâ±R ÁÁ ¸"Ó@$#´LI%îé&]×#sVàÔ$'uÒÓµÆÑn]ÜÍW[µÈI¤M*¿'ç>·ºç^<}Æï®ç}÷U]÷ß~ *zÑÝNº£ÎUË×^|]ãqPqÃA+iãAÎä½ëÅÍ$=õú¾@P}Ð H<ÙK!sqj#! Bà!Ȩõ㪴¨÷ªÈháß]w¾úî²¹;È)@@_§bcó¾ìM~ÇÇãû{î¦Û.5=>5ðß ðßò]$¦fb!$I %33 $I S31I$ILÌÄBI$I%33 $I ILÌÚfRI$ ILÌÄBI$I%33 $I$ÌÌD$I$ $ÌÌD$I$ IDBI$I(S1 $ILÌÄFI$ S31I$ $ÌÌD$I$ ÅRLÌFÛDP§ÁÍDI¤IÈ{ø%±¢8 ÛZÛçòúgËå}Ëç lhJ¤vÕÚ{º}å
î,È^¿ü_ûûò{ÿLj·ð7þfbRJÆ"IÖYoá7äñªßêWêlʯ¾=ïT®kûv`_ÝùWølÀ¸®&a.+2-ñìÈ_+ç³!n·3!vnÍu¬À·ÛìÀ¹.`]ï¥ÚÉ>>R~ÆéfIÓ#É¥¿ß~+_#»HI$j° 3$2RI%¤ÙKLÖe²Â©dRÌZUm¦Ó5£j-µ Tj+U¯õØQ¡bµú6UfSJYfÊT¦ÆÉ¨±±¶6K&ifY44m6·áXÖÂÜ1FfdÙ,ÊeIS6Js¨²RP`ÝÉ2DÒDQcb£k4RfI"*hÄI$"Íÿ©&fÉRZe¤¬[nîÚå¢ÑbÅ®®
+ë\¨µµøoÀÜÛLªüJ06¦å¹©(
+-¥oÄ¢w\rª[Öø dQEmLÆ¥Ù¾úÌ
Û¼2Á³!z~+ï®ÅaJîkkfÓf¯b=fY®M£dÙ&Òb·r#IfY4f"`ׯu¬À¿¿û^êÝ»öd/Gü^WÜ*òá%ff ù¯ÉúJWY¬¥E´ù2ëWwm¦À
+ð~Ǹ&I$I$I(I&°*Ïð ºI$I$I$ájå4¯]ecÑã+æhÍÒºÍC
+:WN::WXcç)D:5}g5KV=k(!I$#(XyÁ
+Íæ&´É$I2I$I4¸sjø ìti\ÅÂÕ°DVÀ²wÍ+¥EÀ4Mb¸ ¢f!®"(Ø0ÅqAVжյt=»µ[KA^hÃÈI$LHjqhd]WÏåñó»ß[íp |VÙ4R¬BR°Z%+¢¬tZ´ÊW©B
+] Ez7YuU˸i6q½UI$RQµ«spOà\/5 I$I ;çZù+ÞÝm4ÛæÚë&¢"%Å)cDBP<áKibàA`¢4$F½À^ëÊ
Áyzg)wrs\ÙÙ¥lÔ½nFîA¶Ú¹]ûõS0˹BQR¥=º+Zª®XÙIÙuAnÌgzÍKËs5ÖÆãÒI$I$IôùôÖ³svÚRY,mä®DÂãA2éÃnÑ©TÈ/(àRïCï4ô¡Y4|!ñÈaXBì*
+éDB¹,Ä ¨;m¾oww×çö_?§Ïãè ?ô½|»Ï|¾]|þ@ öw *I$$H¯Ìôiù¿oa߯PñÊ©=3Î÷W-nDèL´XRf¡ºN,qÓ,W@È/XxBI$q%Úi²AE°ØÆe½N¢yIHAª£$ç0u ÔV6ÛhA#A$Al CÇNÔI$:3Èué
+Ë»SljA$Ã'á¹é¥KäMÉh»[m°Ûa;ZnLuiqB®èLâº4µnäÄ^KjܵîÍÄkS{9¯bÒ`ÌonÒ3Ò]77î"P¶;dgRI*Ûm$ÃmAʶ°f°æÚõHp)±æâH¤#RD¤s[¹ëzk^TwÃ:ñ×ý|xðxñ⪼xñãÇWÚ ôó}øeåy=+ru~^§}_¡zñáöLº
+Ñ\
ÝØ0ð(ò¸kaú>yBÎ">~ÛÔ~ÇRøï¬;óàjO_ÛÇ¿¸&¹Ýî7=Dx ùêîï$¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶i¶Ûm¶Ûm¶Ûns¾"HðøÀä?A`|ÌÆØ§âøß]Õzú^xÛûÿQUAUUUTÀª V0*ª`¡]Vnï÷Ë]Y¨`·òÅõfeY.è^ =tjXW,êåöv<¬6×>{ê°ñ ¯_:2
+/@NÛ =¢yÂëÏpº:óãI$I$BI$¹ß]à½EÔÖ¨Zr®
hÓJi¢¹á%뢴°f+Q.
¢¨Z
+¡yÕxõós½Hkâ-æt]o8ÆÀ\æhD(7z½á{9ëåôù }-òùu·×âíô_+T.\(È^P´'U²Ý[ææn
ÐëEèÕ½¦ÍÞÅÐéÖµ4.J» DðõÏÇU7SÆÍì×h½ïC^
)¢H/K4nôI$dHI$I£G{å¡Ei½j`¹Þ¶ÙwÍy6l»Ñ½Y²h»Ö
ë6hÎq×4-ê!CLÞ[fnlÖ¨³F¶-ܱeP¾äO.·×kÆ~MkË`& ¹Åè8J<æg7y¿zø}ÝnyY@
+ cª©vI âKxG|cÃÈ `0ßÝp8ð4Í (ß¿5IÉTE¦Yá 3:²îê£=k]ù£Á8<d¹ÍnáP¬(®'à¿Rùø @>»çúm[|¯ç>W˳ÇJ5ZÕ(ã
f´iÑaf´hÀ<Ýó¶ÍAÔºþ7ny<a#
ï(cp)F§£3Ôéõ'|ü<ÂI$I$H$Kèèw°@Ãaù'Ùþ@ç ëgÖàpûçßLyÏÉ0ÆÌbrâc5,I2 Ì9ÁÌõC¥ßÇ<#ãÔçª@ ËîWÇ|ý½Ý»½íz÷«îõx½j´¡¤39ãzCF°ªêЯß1oxl_|ÇÞ $Iq$ ¬`UU.ÁC~Vlª¼¶UÈÛq³ÂÒ% ãã>6©S<Ïáø£Ir ô$bA$
+ÁÀ=ÒI$ Û BI$Ûtw¨sÅëδOCdÊÖ³¢Hµp¢K[[O%CkÌx
]t@^ëÆI©¤Ñå'ANE0Ë¥KI$K¤#RDµLÚKR
+¶AHÔZÔA!¹ ÅÁ buµ6ÞI¸QmñÂ$ÍGM5)s[m°Ü£I5â;nWCÚiF3LѸlYB³ue¹6ó%¸ÅBªé#xDi×´tãÝ©§c#{FèÊI$6Ûm¶l#¹HÌÃé¸uaÒ63pN¤Cp sH¹o¿ÃÎø<óÏ߯^½-ivo]éÞ·ofÒBùóÁÊ<ñKÊ©%éC¯"«.0):!ÔÄ¿IG==Ùé磢x}zÎè(ëòzU"=vYEJÝò/Ú <s½]ÝݶÛm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛM´Ûm¶Ûm¶Ûm¶}YÁël1.>zd#oß1¬Vfnm;²fn{~Z
P¨KU@%UUTÕSåMrÕÈ+qOÅa¾ m@çZÄqÌÄñ ÒÖ¹°²µµ+»áÍ »\w»Ûµ$6³{½ÈU\öÑZɽCG&_`&ùKÂýèY|EO#òXI$I$II|Ámç93cW83Snà¬&·iµBca®+9ÊCh,3{®³â¥Å®¸r¯{¤¸hªÃãuÕU'UçGïl`hηáfÐ Óáòz¾Ïï¯À }>ÇÙö}>z¶sDѬ xEID×Ú0¤ÙwlØ,"02;7ëC
Ùbsfµ1PËÌD@A F at F÷QPæÇ¢Æ<+ì`ç
¨R¾Âü×å8I$I$Þ¾¿gÓì¾7ÑImRÖÐb" º7½î°6¨Æ `¤# (sÖÎuÅ@È ªó9ÖиkW: n÷½õ{ Y e êï\³B`"Æ"Æ`¤b ¯7½ìd3*©µïgKtð½arC¨LÊ~¤åò %ñS£~}u $K XÀªª]7
+Ã73.ª±YU)[»Ì33W¨!£ZÓ
+H H¢ã{w¤@Ö´kY¥V4ëZ>æ {Ý-À<sÂÝ*ÉR"'Âýu%'Þø¯ºI$I$I$IÂös¼
+ûð·s+B!A ¼ÀOѧd½á½, Ðïnæ¶#´ÚÖôh4&»½W·V*±®ÝvkY^m¶ëokÍ^Vºm_ÍeÊê¶Û¿àÛöìÌfæ ÜÙÓýôÆðíôÉdÈÂÿÇwßPÁëSÒ@Õ§Ù÷Ü`oÒ½öÉdÌåOïÅóÔ(øÔÀô5iù?=Æü«ßlA<À~UBæ)Å3xSÄE+Ä^ª«æº9&µÒµÛzUEBæ)Å3xSÄE+Ä^ª«æ½+~35¬O >Ô÷>:½õ
+=j`zH´û>û
+oÃ%O >Ô÷>:½õ
+=j`zH´û>û¨ãkY+]·¥TYXÄ.bS7¥<DR¼Eꪻ
+ùW¾Ù,yü©ó=ø¾z
«ÕUs¼ÒQÇ$Ö³ZV»oJ¨²±\Å8¦oJx¥xÕUs¼ÒQÇ$Ö³ZV»oJ¨²±\Å8¦oIVóÜ`h;~,yö§¹ñÕï¨QëSÒ@Õ§Ù÷Ü`oʽöÉdÌåOïÅóÔ(øÔÀô5iù?=Æü«ßlA<À~UBæ)Å3xSÄE+Ä^ª«æº9&µÒµÛzUEBæ)Å3xSÄE+Ä^ª«æº9&µÒµÛzUEBæ)Å3xSÄE+Ä^ª«æº9&µÒµÛzUEºæ)½3xSÄE+Ä^ª«æÝFü2YòíOsã«ßP£Ö¦¤«O³ï¸Àß{íÈ'Ê3ßç¨Qñ©é j½UW;Í)urMk5¥k¶ôª+
ÌSfñ4§@Õ§äü÷FßK @}©î|u{êzÔÀô5iö}÷ßK @}©î|u{êzÔÀô5iö}÷ò¯}²YóùSæ{ñ|õ
+>50=$
+Z~OÏq¿*÷Û%O0ec¹qLÞ&ñJñªªçy¥.£If´vÞQec¹qLÞ&ñJñªªçy¥.£If´vÞQec¹qLÞ&ñJñªªçy¥.£If´vÞQec¹qLÞ&ñJñªªçy¥4¿A<ûSÜøê÷Ô(õ©é jÓìûî04¿A<ûSÜøê÷Ô(õ©é j½Jï4¥ÔqÉ5¬Ö®ÛÒª,¬b1N)ÄÒ!VóÜ`h;~,yö§¹ñÕï¨QëTÒ")^"õ*s¼ÒQÇ$Ö³ZV»oJ¨²\Å7¦oJx¥xÕUs¼ÒQÇ$Ö³ZV»oJ¨²±
óÔ(øÔÀô5iù?=Æü«ßlA<À~Tùü_=BLIVóÜ`h;~,yö§¹ñÕï¨QëSÒ@Õ§Ù÷Ü`oʽöÉu¥k¶ôª+
ÌSfñ4§W½UW;Í)urMk5¥k¶ôª+
ÌSfñ4§W½UW;Í)urMk5¥k¶ôª+
ÌSfñ4§W½UWq¿*÷Û%O0>g¿ÏP£ãSÒ@Õ§äü÷FßK @}©î|u{êzÔÀô¢â/R§;Í)urMk5¥k¶ôª+
ÌSfñ4§W½UW;Í)urMk5¥k¶ôª+
ÌRLIVóÜ`h;~,yö§¹ñÕï¨QëSÒ@Õ§Ù÷Ü`oʽöÉdÌåOïÅóÔ(øÔÀô5iù?=Æ·áÈ'j{^ú
µ0=$
+Z}}Æü«ßlZV»oJ¨²\Å7¦oJx¥xÕUs¼ÒQÇ$Ö³ZV»oJ¨²±\Å8¦oJx¥xÕUs¼ÒQÇ$Ö³ZV»oJ¨²±\Å8¦oJx¥xÕUwò¯}²YóùSæ{ñ|õ
+>50=$
+Wªªçy¥.£
á-ç§4
+ÒkÍBÓzï|Mk5¥O >õ=u|õ
+>u0=$
+Z}}Æ·áÈ'j{^ú
µ0=$
+Z}}Æü®9&µÒµÛzUEBæ)Å3xSÄE+Ä^ª«ä
+oÃ%O >Ô÷>:½õ
+=j`zH´û>û
+oÃ%O >Ô÷>:½õ
+=j`zH"õ*s¼ÒQÇ$Ö³ZV»oJ¨²±\Å8¦oJzH´üã~xH!ÿ©]5ãÄȰN<@LãÄȰN61¨' &EqâdX'.A`m cPN61¨' &EqâdX' &Eq´A8ñ2,"Á8ñ2, j Ç `m cPN<@LãÄȰN<@LãÄȰN61¨' &Eq´A8Ú Æ x ÆÐ5ãÄȰN4r('@Ô j ÇdX' &EqâdX'@Ô"Á8Ú Æ x Ç `x Ç `m cPN<@LãhqâdX'@Ô"Á8ñrãÄȰN<@LãhqâdX' &EqâdX'@ù`!EÁ
j.Ô(¸#P¢à@B5j.Ô,\¨QpF !EÁ
5
+.Ô(¸#P±pF !bà@B5
+.Ô(¸#P±pF !EÁi.Ô(¸#P¢à@B5
+.Ô,\¨Dq¤Á
+.Ô,\¨QpF !EÁ
jIXB².°
e&]a
+uVB²
5j\¨QpF !EÁ
j\¨X¸#P¿Ö®Ô,\¨QpF !EÁGLµpF !EÁ
j\¨QpF !bà@BÅÁ
0¬×ÅÁA𤠯ÆoóPͦZ¹f
+LAðÏÈݽÖÿ<Z<ÂI$LI!$Jv
+
+U ÄëL )ïB !Ml§x$B0 BÍ h¢¦B!! "ÒX¾&¯fÓnµmmæUÊÃ"ÃM<êoÃ}¬Þò°Èc#â9
+;1$F Ø_Í/»ÀsÏ {DpðóI&ËçC÷ñóù|¯§Ïì ¾V»ã·Öø¾oã0H at BDfiá§wN×l8Y¾¨À4ÕðÓf:X^^«@h0a #%¸±Ä°F'Ôåß{Ùkñõ9 Pƨ#åo¿;éòöõ÷;ßgww½ö{âøÓî| ãâdÈDo§ÇÀ õî뻫»»¨XÀªª]° H¯ê~ãÙîôíè/Óû*j¯x^¸dÊäÍiHÃ$Ûi<¦eØIÔ{1Dbö ܽ\êxÉMGw¡ÃÈHn opµL(¹I$iaffIÔHmT²MI,l6ØiA8H´[D5 Ya A³+E#
+\ÖQ²A!°Ûaóu\ÆV8¦ +Äm¤¬¢Ó,ks;
+´ã97 Ö£jÕ¬:®kÆÞånd¹U¹H9r2®,u±»
+Õ³a.ÌZ5R³- N¤XÛmÉXbÔãMàÖRÓ·4ÂN;¸I$u$0|v®ý($g»|ïß_<>xý·ëׯ^Ï8Õ7Kûó¼3¸ÒóãCÒô×K@õ bÓCC§â¨|Ö4ú92^\ð¦ ÷³ËÕ§ÙÏÄ/êà s®¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Óm6Ûm¶Ûm¶ÛmàôCd`ç¬ÁØãÛ¢Á< RXª súëùVá¢Üs*@
+ÆURíUTUSUNmðbõE
+SZAb6[b!ce
+¹^"D¢îÛ»ÌDnæåòQF³ç4$è¹Jx@ ÈöÞû~>.ë»åõ_?¨ @>+ß'WÛlÙl²ÙRٲ٪[,
+ËFÍ+U`ÅbÅ`Ådb²1X1Yª¸ô¶ØµVLVÙKd¶+jlU±[TùzP\»±WsqëmnNë
+fÝcÎ1.ñ¬ Ã2Ú=&ÉP`¿¹ 6û~@ ÷jiô\Ñ@Fè=,»@aÕ½â¨`Ef5`ý4c[:»8qÙÎi(¬C|Ìâ çâK¼Ïr0ósëÀ ñïô¯mjÖÔF6YKMss(Ö
+
+ô8´Äp1i¤¤;«aÔ0èÆÆ(°rÊHÙÆ41£W`r>y¡ÎÞÇêf@øòpÏXHI%ÄU +UK°PÀÆÝXͪ¬¶g)0<GWÀ°,§X¥&! ZQ«Õ´4hÍ
+ M8!¡E6ù'L4ôn4:×
áÌ03¹áÄÅWÎó¥ücÁ|Öùz½ð }eô«ª57T\15Ýc¤Õ`Ù*ð!D-0x B¡nxh.Ô «ÁÛ
Zd¡+!N0£Z
+®·Òîvè,Ùi³aEjµY¸K':éªfRÛõã´th|C®±´ÉBÓpÂÄ\·H· wøYn´Be4
+QE õëz:= o´Hhl7`EÕI¸Â¡üþÞî÷u¢ú¾>sìû=ö>¿0 ¼¢O«/&ErËïÌ5£ZÁ0Þcò!¬i= e¥*yÝuÌÎkÅV/3rÌÍÐîQB¨T ¬5TRUUQUMU;3¹ #&y»>¿oË}ª¾fùß{öý ñ|.wßõø|¾@ Üî뻫»»»»·wWp
+ÆURì00]ÝÝÝÝÝÝ UT ÀüÓ{zúüo~#ëóøûï|
+4#8Ña8äÄÞ<3é¶*ÜZD½` ¨2#jdk"\I>ÔÍï&Fc:IIZÃI'R\bnRI%¶ÒL6ØDpÛaÈëa6ÌÆP¯bÜÈxárQ AÔ¸ÛaéKÒ·+OCÀI$l£UBPlsfÝZ!¡J1J´S®¥ÌÓão3BØd¸³pèY$ DônY»§ÅEwk(lnîÉ Òm«Vó%tAHI$I&FjhÁ 178q¦^I$q% ªÓ®
+³ª&5Û¿n¼ñÏbøÆ#*|xñàãíX½3Í8¥kHÍwÍ<^Õæø>yÕÏïW!çRïSÖÔ'
+4¼ðgÀhá_ãèQ¤øõa¿{ÑcÚÜ¿ïÅî¾é1»:TààÏ]˽ûÏï?øÿöu×S31×]u×]u×]tÛm¶ÛitÛÛm¶ÚI$I$I$I$I$M·33
+¶Ûm¶ÛÛm·×]u×]LÌÄG]u×]u×M¤I$I$I$nÌDCm¶Ûm$I$I$I$I$I&ÛÛm¶ÛmÌÌÄCm¶Ûm¶æfb!¶Ûmõ×M¶Ûm¶m¶Ûm±¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm´I$I$I$I$I$m¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ú뮦fb#®ºë®ºë¦ÒI$I$I$I$I$I$I.m¶Ûm¶Ûm¶Ûm¤I$M¶Ûm¶ÛI$I$m¶Ûm¶Ûm¶Ûm´I$I¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûo®ºê":뮺뮺뮺ë¨êf"#®ºë®ºë¦Ûnff"m¶ß]tÛm¶ÛitÛÛm·×]6Ûm¶ÚI$I$M¹m¶Û}uÓm¶Ûm¤I$I/ÍÐFý¾ÐlÀ°Ë
+7¶ÍìºÎU]'>s¯{5ïk^þÍŸ×xú´YÕ
¶Q=*ËiT)|-HY.ѲÊ!Le¶tjBýX½\
¸n9Í4oyY}]gʦ3a5ïRL6ÀOÆÞw:Ô¸Ðb,Ê:èÇf)¸u¢iÓËÈaeÞÍIZLÔI(Ül`OYIÎvw1^h 3ʤ0»h6l§
f³<JÌ:ΰH¡ßOüAÃÎsóO"ãÂ$ËÈjømÜzܽ£5«°Ó m³Z½d·{ÝîlØFA#NÍîöm6 at d !7Ù ÒiI! M$fùÈÊÂ'nÕJ8èÐ ®éMIÆN>ËË©x¶à\7ÇuPñ§5
+ìÚol+[!fÝöCA)Û{vl7 ÛB/i³w¨n vlp5C¨2)¨FCM®Í¡@ju³Ü D.
+¥ð-I8V "wubh5
+Ä( pE
+* Nu4¥3ÆýD_'4½Îº,öC
íy66V % j.¦h$QPËMª¡uëV8V at In¼S¢á¡5<å+¢¡¦ÁÔë,¼áÜî¸Äu$
+PÜäo mnk¬i;ÔÇøg]j¡kSVAæaËav5d»Ða½ºM"Ö6Ùd!0ÃLÜäækFÞ?9Ä@ÐO5vgpK îãeI¨¡ËËcæOYÀ2!.p`÷12Cfá!B88ª'>C`äÇ=0ÚÜ04FwÉ+|<¬ê7rì/[JuDÖªÛÕBg5Õ~pKÍnS@»,4A¢ØËlîgZi·¡7ZÓ§HÑd,.
·¨ÈËÜ512ÑN]ÕubTNºóÞ»ÛÙ790î¨a +wU\»ïÜ&¸k§©$!`÷[y~Á'½·ì¨fõ¬ôÝ_®U©ºÑi"^I¥GµbA8î
+¼\>Ô6wo]0÷ ,-©77¤IêI$(¬äI$êIÐÒA$J6Ûm¶l#ÈDÂölâ=m¶Ñ,Âcu63AR ìì|h âÝèT*kÖhÂ$&-6¼³&WqAJ9¸K2ÂÂ{3.4ÜWÌÖÆã$Ý:°Ì;«1n
+ÚàÝg {[VÔTJîh3ÊJÜ[^j+tf¶A $b£¢ ôæìMêeÕ]]å]å]æ$$UÁ9>Q3nýÉ ã<ß/¾¼úó<óĽzõë=txqú;}n¿ÌF÷Ï8dëmïj=GǪZ;4«o0yçsð ¡ ãYÓ§*û_e¢I $H$I A$II A$I\Ò
+QÝ Ai<m <r¦rf*qßZ[/¼L³rû»Îõî¾íñ$0$ZÃv¦¡Ö®Êª5j)uyÆ5¿^:wࢼ$y;Ťtc°ÛA"ÁDÑsÍO;¡Ö#àbÌRA eѤ~#½¦Ë@½àåoX9wð@cG(ÑÉÏ\
+HÌCvÛÍae^Qo+þ Ö»ÃçZOnûºO°
+¡¡Õ\² \SÉA]ucÎGÐp4m¹¥°á Lq
+½:ôÀB_¥q ^#LIÀë0Bò¤Nì¨yµÌZhU°xo¤k@Cà âX2C[(¢0²ùÃ
+×Pì¿:4î³Ú"øé
+@S¦í½RPe®a\44ÔXéeå®Ûº
+J²ôððoF7vxTqÙ£ÈUu*;^Êá Ro½()¾uªk6FwAÓ\·.k:0§EjÌ·amfã3
+f´FÍ*cÍè3d²èç
+HP7
+@`dNHÖÌ\Ä0mA=7zé!ùÄQèEàYE]néÃ@æhÓ×[G2C
«W´*÷
+ÏrÄ9âm³
vÌØaØ<êHMÉ&êÌ9mÕQ!áÕ|'«ÓÞÁó)f&h¦®À.ªV
Ú5ïakEôÏOÅ61ÑïäpsêcàÕéìø/:Xá x89ÃÉøú;ÙòðA}Dà^ñKK<+
+ÆÜÌÏ«Vm*ã0 NÙÍmï]MÎI ïPew7cî$BI$KIµ¦öI©ÐáA %6Ûl6"mɹ6h&m°/J
+ÔfPT+¸vr>.$AÙêU±(¡Ç&VèÒ
+ á¡e¦W6LÇq)EKµÁL×K$5k¹*ØÝS1ëq
+Á"³½VÕ¦¤FäwsÜ0b«jÝÙ¶Ú H¨ Ka ·.µ]×6f¤¤5ÖöäIJ pÀs{½îwðùòyç/<÷ë× V[JfzzóÄ=tÎ.ÂégÈÆyÂ#ÅFãμÄ"BÜ`稳ׯÍñÏIïÜóÀ½Ê·~'Hî?Q¶m´m¤A$$ $H$6Úm´m$Ûi&ÛôÁ>(I¶9ÚY±w2¤ÜI&äÙ'A¶!¬¼ç K£páG<_ÑãØ"èÑÞ¥¥¥64
+-ÒÀôÑ-mÐPܪÃÔ¢yª»»êg\¤r8IÔ@>Q¼A
+M»I$Á&èçRfï×,îpßi$(umXImÚwÆÂ¨!*¨$î!
+
+T9-
÷Uwi|µÈpÂN(5ÅÔ4 FðRgZ®ïFoÏ_{zæ F8P4
+HYcm4Â%+DMÚHHÒ]|䬳2¦UVèkËÐ6@#E%êÍäÊÝI ©±â½¡|=Ì¡°@| ]Bp@¹F`
̳¢a
»ÆêÁÎG3£BBÂ'%#¼ñK`M9
ÍÈéËÍt<ë
+x³Ä;ÍÕ}:£öÀ/ =¢/¯ ºÑÅÃ2`p´nuUB˲¨×TÌ
+3×YrË«ª¨Ì5=É%¢^˹+fI!¥ áð?¦etÂÃÞ !3®¼Ì00ÂQWF°ÆÖaAvR¶ËhQmv
+ÖT¬ª°ê ØÁ
Ò©{õEæI±.ãC®´ì¼w|hÐg{!e¢Í&$.ÃE¸6
àà%An'4¬(
+!P
'$³Ux|á ì|çV¬ê¼cDBëï(×|²½^fYRVXÈ7 $aBXBîÊô³®íåÏQíõéëâäòT¼ëÄÞ¼ó»DPö}z£Þoàö¿£ Ø>N¯gIÎ5½ØÔIdfawÕV)Is0mFÐg+N$¬mèd¼
£Eά]êO)$I$Å's9 K¢¨@h I$I41
+G²MÒu$£a¶JQÃ+YR¥¡ ª41
Ây«Bâ#XQI¶(¸£bN¬6USÅ%Jq´ÜÚÌ8ÙË$9DÂòæÙ%u·»UÍãMÔÚE3V¦h6)¬ºyiCMUná3×5ªH6ØIA#R *5Vj¬e7DX"a-ÌÌKI$ÎpsèÙlîw{wçÏxóÏ>=zö àÎÅuøç¯5ßÄpÖóG|ðOÃ×SÁçMðázXaç©åÓÆÛí\9å²²`sÌÅ>ú
+8U´r $H$I A$HÒM¶I¶ÒI¶ÒM¶m¾ÎÂ/
+GÅqÝ£5%Ns
+a²)çxÑ^s!¸Î Ò ºü©kôÚêenÔìSå[¤ðF¯Á$»ä4°H¬s<3;vPxý&I^NÉm¥)Gv¥êÛ[»luÕf»-ÑvYß4ÇnbÎ÷nʼN\ ÄpqkE
+÷pù;ñ/©ã\ 8¨x;x*¹º "VH87ENðtàÝôN¤}zwNúç¯NN!è7§s0CPú]5£×6l6hÜ5Zt:4d&¦3P>Ðl]Á°K '%3;Í3LÜzùà¿7רàç ÃqÏPk{
+*ë4 ñ4jæhEÐ^hÌÏN¦h»*ÔMhÖ3qÔI${ÇÉEÅ¥`ݪ9]øÍçvò«@DPúN×NcÕØAa ;÷D¡K,Ô´O°àR²I$DÎ&úáZ¦1DC:á¦ü÷¡¾KE4ÕV«Õ®«¬E¬Zª¡%
+JB(¥½\³2ËtPÁ¢ Ï$bI$JéròW¯@_RtãsBÂDzÚ]
+`]¤²×w
+`BìP[jÙ7úöõwwÞz¯hgÞç;ÏL+»½ÝA÷o;{Ï?^)ÇÞþÏøÝéJmµéçêÛÇ®½§ëqðXccx1f½tÕDõhÇêb_`#.~GBή<Î¥æ Fð´ïW|2EåÙkÞÎÎgíxwÅsÉÜy{ñù¾£9ßâø!ñ¿>7æþ¿¶öÞǯõv
1I$ ¦"I$ "!LD$I$¦"I$HS $I DBI$H
1I$DBI$I"!LD$I$ $D)I$ HªI$©
+"!$I$
1I$ ¦"I$
1I$ ®ÊSÌõMí®)µ6ÛÖ½5¿Yâµñ3âºó_Zö¿° }<;0ô±;xçP£D%¾=?:'£FÄìÊè õ72:~=ær=« 6x=%|ßà89ÏÏðO½÷=ßc½úMøîü¿L ¡÷"vûWëß³íjÖÖÜ¿<>V1Æ1Æ1L_iiRü×x[¤.ø'o.³¾v O!âi~wW¢ãçGa²ùõëÑpvzyÙë´9n«¾y,ÌóãNçG®êñ¶m´m¤lI A$I $HI¶ÒM¶mªè¿Áô89Ïj÷«ÂfP¹þÜeܨz9ìå%ï+ÞÙÜ»ñ¯.òx
Ü?¢þ»0Å,ê?ú½£§&á}p×µîë8íÀª[Òu/
+½ÇòwõïÀ"ýg£ÇÝ>çò~/òRÈ>ê}Þ³îéù«»+äÏ×uËÕõßë ×ÚûZüìú6Ym´{ÖÛm4×ã}x§Ôß<üã2¿w~®ûßmá
+¶º3¤*)`%%5d©Fk{ï`i¶týK~æëÞÒ(»ZT¿"«üýÁdDatþJ*0?é×·¯¨Óüä}gû7_©?_ìJ öçÆù¦5G¶B|ïá4õï`½ÇnRãðþº©~so6{ÿ§ù#ôyôÜ?%ï©^
+K¶»:ÿòÎÍKèIq»¾Vû)//Øùè}÷çhþtý?×uôÝü÷;ú¿û¿ª¾}¼×½³L?)D=oÖ~Gø¾öîüZÉ p:Õ~ìÜL¤Ûêó>ËÙü϶ô77I%'v¢wE{OÇ~î¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm´ÛM¶ÛmÝÝÝÝÝÝÝþ~ ßèªÿB/Ô*ªûɽý}þ¹ôâºÊY³Å¶¥¾¥Äkzp
+jA_ÊU'ªnúë*^Ç$£`<W©¯^Þ¥ËÌ+ù¢´ÔW¤-Òæùj^¢RwõÆ1XÎÒiÒA$I $ZDH$I @´$K»ª«»üÐ"þ«ÑE¡ÑQíCìZ[V*^«¢)½NáZ
+Ýy¼@$£ª+,¹¹¾é~Íú_7áy?åû^×ÚëS3?UçÏ>|ùóçÏ>[m¶Ûm·çε33ZëZÖµkZÖm¶Ûm·ç®ºë®ºë®ºë®ºm¶Ûm¶ß:ÔÌÍkkZÖµkZÖµ©×ZÖµkZÖµkS35®µkZÖµi¶Ûm¶Û~v¦ÛRSm©Nºë®ºë®ºë®ºëÏjffµÖµkZÖµ6Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛÖµ©×ZÖµkZÖµkS35®µkZÖµkZÖ¦fk]kZÖµkZÓm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛoZÖ¦fk]kZÖµkZÓm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛÖµª×ZÖµkZÖµj53b<ùóçÏ>|ùóçÏ:ÔÌÍkkZÖµkZm¶Ûm¶ÞµLÌÖºÖµkZÖµ¦Ûm¶Ûmù뮺뮺뮺뮼ùÖ¦fk]kZÖµkZÓm¶Ûm¶Ûm¶Ûm·¶ÛmM©ço¥½Rªå+$¶%y¼D£2RkºªW*]
+qÉRµ±£Á Ú+¥ÇRÔ4©haD£
Ks7 oöfþ:©l©^ÎÌh¦EGUª]-.ïw»ÝÐA$I $H$I A$H$I A¢¬Roô4JçÊÔãJªxº¢´U'\V§?`W+ŤOSRÂâÊ¢Ã÷$´ffQ²-OÆí®²¶õzÖײY© Ò¥yj)°ªa¥#EÕJòh¶%bU±½JV9¸yûzMíêÑ\b´JOW(h®$¤Òj&ÙB(P¢üÁð]Ýüwx
+¡wm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûi¶m¶Ûm¶Ûm¶ÿSÁÁÁÇÖßÏZqñªIrM%'*\î¤Và4®ÄWÎm ð®M =. v²¥ÓÎííÙÅ*ª¡]üèçóÝüÅT¸ºõ-YÇU.²¥é(¸ê\â½gÅâTº!%-MEq
+íÊPEQ^׳¿³Ñ7ÌëÕJñmª¨êí ÐWhWhW\ýsæÀ ?9ü¿$ËiÓ-¦[L¶m9wW.êåÝ\W.]Õ˺¹w__
^
ét©^{¬îõÅuÅyB¸ê¥õâNA]Ñ\^4¤ëÚq
+ò*¥Ðgn¥¦|$£xWfQ.Q[ªYRóÿÉésä}¿·ØÙÔU' T²äúí*ªU,
+íÔ·
+Ò)UeK;»jVvԮάpE}Æ
+ò!%MK²+T¤îlÛÅÃz¥é÷Õ'T¦äWãzº <¿
+¥Êêº 9Åk¸Wª4ƪóýerÕJáëÐÓ¿)1Öáîx9þK¸ñR±E,*ÁÐÙÞñøÝî¯]DÁX©ff`I!&dH fI$I ⨮Þ
+·<!ZÏM (ê¥'5Rs\ÞÍT¦ú¥èk´«x;brðµ§Ùü`¸*LJïstlßRâÝá0V®> ®Ç±ðÅyõ-·ÂJ2¥Õ±*=b$£9=¶¥Ð©99Åv·UhUI¤ã©u¶T¿{°Ü¥wùhßRàõ»öÅoÙ¯ j¢²©>{Êu.XIGrÊ©]ZUJÑÙê
+ÙÚwå'{¯Rô®j¥4`¬à+H®¼A\J¥`®h®ýJ;§-KÙkøÊEÑ_?å¿ûà}ßoæöôî½6tÔ»áYQ;Ý`*ÐÊLñEiµH·T·T´©y;8ê[>yQµRÝãlÅ (áßʪ·*6ª^0¯Lê^åL±fÊ%¸.Ю©pRÀXIGßÛT¶*wJE²¥¯T¹j^5++°+Åß(~NéjC±*Z
+áÒÊ+ÎtuE`yDB¼ªZÔª£+ìÅn Á[~¥RÜ¢yDöt]âYE¡QhhiEv eET®Â¥¦*EÕ-qJÙæãP£\ÑÝÔ£ÏDjÙ÷EKÀ󻢼A\Pâ¼*-h°Ã¤VÀ®Z hªQ»*¥ÑÄ+ÁÀWwJÖ¥À+{V*¿QÁRj+WÍ |þÁ[*\<WÏ[áT¹EeKª+A^ÍQÁÕìúÞÑUUJ`W`W@®
+ 8 kRîs
rª[Elã©qù®×dWTVÍЮ¯*îj+©T·Ô±RÊ@â¹µÙ(t6îH^?¢º<II¿¥Ù`ªº°ýT½FkÐ+±ÁJõ`T»R¥àpQ4Ê+
+%öQñ¡%IÐä©v8Åru
+-.UDÔWtW
+ñøU/eÔºÅ\U/8Vï9¿±õ[|j¤ýø®&ì
+ïwétJMîZÎíªMâ¶<*¦¶sf2ßî
hlõ_Ù÷môfJÙYXû¼{
+ý^Zß-·ôMkWèßI$I$I$I$I$I$I$I$I$I$I$I$HI$I:úím÷×AìÔªü{Üý·÷Cò4k¿¨ä¸£üª5?ï?üýì?áÏ0÷â\Qj_¼ýÐüýë¹Ü=è~OöÿÜþÛçüÿÀϽçÎzHLsÝ?ü¿ô?s£]Cèàu2B7ÿ'ç^§ý_yû_×ý÷ó\8ù÷¨=ù¸{ðû¡ö×Ï{Τ&A¿ö_ËýèuûN«¯ºñ÷Z4ëÜ úY|·W>»ï¿wOPóT at IeÒ"V3$ÌQ4²©e¤§W-*YeJŬ ¢AÿÏöOé~Çñ?I£H(@Q#ËU,l",Ê)[mª1µE[U¾ö(.¤&Aõ÷k'Öþ_ö¿þèÓâ'%ÈA¸ñçò?sø_a¿°þNýÚ=è×ó /¾¨ûùí¼~ó?eÿÍõÇtäÈ /¿øòåþ¹?ì3ÌÉ5ó*\õüÿ?¹üÍÝ̨(âÇcñ·1·CgÄÛR×$LÊVT½f4%sç¶úÑ_cÿóe55-} JÅÿÿÿÿÿÿÿÿÿ÷½ìþÿÿ$y §ç,ÿ¢gü.?
+QóáðضßwxÞ >= @ *Ú¤B@(¡"T$¤ôR( ¤ Òê¥ à
+Ï(ß`f1ðÎ à=ÝmÍH
+Ü.¼ 8 ãÐæìDz÷- 0BðÙÉEô Pw}àzDö@UB ä 9x-ëh2Ád < w| °^Â6b2Ùi â4++u
+k&: o¸ÞÕk(¤ `1Ñ$K`:C ÝfÛÁïç×¾Jå aj at -@ ¶Ðdö`TA(ÍQii¡¦M0'¨Á4À &Fb
+ ihiTÿÒJ¨¨
+Ä ýµUII¤` 4T!$h)êi¦@ È 4h)!È 4ê¦OMe=COHh1?R4ÐÈh=COQ¦bh4i h=&i¨ THB# i hh hÐ4 x?^(£C²{Cê½Mò
+YmJN
+$,0~ Ø6¤¦¥JÃéÉ}1¨~èä8QýZ%ZáF$¶²KkF
+oa©~,l£Ìà7ªÙзHÙ $`HÀXÆ1YTb!@@ú0 ¬c¬UbôQXÃè÷2% ¨¨ ¥E4h¨¢ÖP©ij·2F$ШàóÖZaePØ0£q£¤al£%añ#î( M
+7M¤¾uºÙFË©£D¹eDöK$îiiiiiiilUUUUUaa!OÝpA
C#A}hÁû1ÿïµ¶Ûm¶ÛoØþ3òߣýGê]û¯AÛâ=ÖúöüJüºýýjþÊÿ¢ó»Öùçyß%û^ýUUU¶Ûm¿¾Ù @ý×îUUUV0 ¾Ïé{sùm³½¿Ùû|_/×ïåÙø|·ìÖúíø¶Îï×ß»èñw{y^}!çzþPëyíÍõîo^»]ùC¼çûãç¯øo|{{y^}!çzÿëyíëêÏ^»]ùBàÏ?æo=u¾¿®<zõÚïÊàÏ?¤:Þzר½y^}!çzø#ç·[ëá¾ÿ]úûw~«öÿÏ~ù~½|þ¸~¯3ùÑÿæJ-¿ÓÞæ½×¶k_Iï×οG³zý
+ý-·¯É¯ñ¶Þ¾íɶõö²$?_ûÿëôUÌÌÑÝÝs3]ÝÝs3\ÌÁWwwE\Ì1wÁÿ
+3s>ll_oѪ©}Øûáìh6¨éÓ=÷ñGÞ4û×¾8ëõ¥p9¼`n1+¸eRí
+£ãѺ>_Üéòõ¢WàëD>èë~7ªTºy2T8u³Éózþ¦k7âªT<ß;ÏÏ>v~:¶×éfßèÖ«ì5þ¼ÿf}·?ÝêPO¸×ÕÏÙÏ£þ5ûYµDEìÇøÐ~ö1RIlÈQø7Û¿"ÓUµECvTUbÆ+¬bÆJ Å*¾Ãö¿Ãðü?Ãð}§Ú|Áéôú}>O§Óéôú}>O§Óéôú}>_8d(¥÷¿#äæ~?ßí·äo¯ÈãààyÈÍæg)¦EØ^7rîîU2If·Í)rê]Ô»m×Û¶ÇûVY]¬Ý½×:8¤9ôí¼ýéCdzs¥!Ã§Ôæp©ÜÔ9¬ALk½,³=ß'\,§¸è¹ô{åÑTòë]Úâ¾Õ,NÞÄTÓ¼'SÄù<OO¹7ÝɧÜNbÅy<OîîOÉéj}®'Ýq4ö§òq8îäâq<]Ëow'uî´ú§òi÷'¾îM>äÓ¼}Éâ}é'¼N'ù7ïrx'ªÐ"}ÄM=Äêi÷'ò{®'ðñ2ò}ÉÛjoo.}y<}ɧy8Mõäû:÷¦Iäñ:ï{î¾{¼ñ?&*©ì=7¢x¦Îäñ>O¯rv¢'êxZr}ÝÉÝs{Éâu=Íq7½ÉªbÅjx/&'918'Éìî¾ê-OÔñ17ÖÔû5^4î²î®-Ú¯-ݹtâM¹¦î®
+ÕgoBR©b»±·Æ1^¶RÎÞUXÝÔsjÅCj±Ëª¤³V¢ªué±tÛªe+mH·vNbµtâj«ª§Y,6uÓ½»ºÛÃ^ö:ôG ¶gvw]íqé^ÀF
+pk@ÇÓdúm¥ÜÛä»´8ªÖß7Üw[; H}Ü7ÜÖöwv^îîæß[n[dZ»
îî仵»dݽפ¾m÷^æß[onê[; ÀëmmÖÝËÜvws}Úß6ù·Í¾ÎîîîF»îLëÙÝÝÖ¥kn·j]Ákn¶î^ìî亮|©[À$IÖÝàA¶ay·Í¾Îî O¶¶ä뻾Oo1Ïí `xÏysäOywGTÝZH>qev³^vtë×¶j§mçóX=û£æÒ˼2ÙÁó
ÞÙF5fÝÅwkTÃk®ºç]VSº##å$wVY]¬Ý½ÖöÍRQôí¼ókZáϺ>m,»Ã-WoÕ$wVY]¬Ý½ÖöÍRQôí¼ókvç=}ì¾µNï¹yÞç³¢#ÔZ.·X¦£¯G\lIt))#íZH>qb·ggou½³T};o<çÖ¸sîÏRÊpγªíâ:¥Å¤Ñó«9÷3ÛÓ¯lÕ%.ÝxÞJf»Ýs8Ám'^ÄùõݹmÝî.PÝÍ$N·/·sN.ÜÜ7wt»Ü°ÂîÌ$d¹½ÝC:ܹsÝK;u*S··78$ÎÍî ¶dvÚ§<ÙÙÀîêGå$wVY]ó5ç³§^½³ÊN·^WÄ-û£æÒ˼2ÙÎ'$t×9ÍÕÆØâ¾Õ¤ç {vvv÷[Û5IGÓ¶óÎyk>é¼õ,§ë:2÷uç^RujèvÝÛÑÕ$wVY]¬×:õí¤£%Û¯+Í`ìGt|ÚYw[;w+ ÝÊîÕÖ¹G»Þ7K»ç»ÆVÃ}¬½Áh2D»vKA½êj½=Úvùí~0¤6Ý}¾í¾ÞÛ¥ëIÖM¯wv¾íµÝ|Ûo#i[Vì§uÞî˵¼oI¥×xjnÎM#ªXÜZM:±Zö¼ííé×¶jn¼o%5ØèûYÆi;oÕ,n-&YϹðÎzöÍRQí×䦻Ýs8ÑÎùQ
vô§nöu»½Òe¶ÐÂÉ2m½C·6Ù7pÞÝÛw"ÓÃ6öÌ$d¹½ÝC®\¹sÝKx´:væ÷^ÝÍÍîá»¶Ií;'LÙÙÀï'Äé¨ì±îææÍîvÇ\êã·:e[ìzáq+[ÖnºÍsúwd|{NÍë7XÍo£nlÕ¼Ú´éJ÷Ü/^CÄ`»4ËuÕÛÕ!ãÈÚá©dliC,qîë·*¸T$ìË9U¹».rì»óÎç3SÍÛÐǧ¹zyñ¢Ã:q¦Cåð¾9ÛonøæéwKº^%Þ¸ot¾Ã{qîãÝÇí¸Å{\*Ý7µ×+Ó_m6
+ºª$ÎOä]
3a~ryÝ}óçÌÃ*¹oc®Bʱ\õöwsw%çs$çb·-Lê|XUcåçs|¦>o®wGN×ÏX^qd9³'sǹɱ.ÎìJçrÎìîY9ºe±³¯wëÃ(Í£![2w5ÙÝwbë¬iѽ
Ü;ÙÛÏw¶>m,u¾ìî,°ì·_'WNæ® Ù¹÷gtqdèâÈFû;µãΣ}«^Y%qdîqd9Åæøg½_ðæ=sðßap_õ·ÙÜßww7-×NÝ^<îçÏ:ë3½¸Í¶÷=áñRù;ßRôzd9ãÂ×»u-Öv[¯VIÜcÕËÍ¥KFû;µ×Ïst.8ß ¬+J5R¡£ªW5Dd¦D¹8×>âüKÎeËooy¼ÝÝy¾ç·=qÝn=Êujs¦H·ué{¹ú+uöÎnäb±VÖy/²i{{Í7bÓ{{g8·SÃ>$n)6í»·yï{׾ǽÛíÎnæÀaÓÁ ÃSßfaa3&wttÝÍÝ&¬ÝÍ 3w7yvjMe¹rÛL0èa·uëÙ7sw$É$Ä`Àº£Û-(w.NY»M6g°.ÝÆ3pº#7Ü¢lå;:w,ö^Ù½óaó»s°Ã³²
+Ïs§ikÈúÝ·¤^îî¹îînÉØÚgÌøO ¨ZÓjy\Ë0ØwÖß\̹2Zåîhnë©jåʾI¯ã=uì´I(ÌmÁüÖÝn(-·züå^ÝàaØûw¨÷´Õ×U©F[yWEÚIÝsì+äsĹYNÚQ¶¶ÍÒìèç+·2HÍݪ|KÍní713kw7
+;-«mÔåe;o¶sîîݹÏ{ºk¯»\(¾:6¡9¾$y§3{\íÌãY&XbÍܪeMf²d®u3ÙçfãÁôznðúIó¹Á×µÛd×Ê]É4ORÕNç˳^òlêhú|GkäÍÔ²L®ù:³«ÞÉuîãÜ
+ø±Ù®!{6åÙs¢S#msîãy¹÷qÙf»7$·zɯ'wr¯Y¹½&êIpÝÇQæhäÇaw]w2îÝÜEd|Ðæf9Ë®fgÉDÜÅ
+ÔñtÍn=7rðl`ÌìvAnÏ.õuÎÞç½zqª÷fòêMØúÈÖ×ï
+Ì·.î.ç8wµæmÆ@¼I¡ddÌs+±¯Äµôù"a³qá3$ÆÑÓs7r·»>wÞ¦s`â$î6Þn+}Üì6½ë%}µ½ç{fv«È3Eµ0Õ0$÷^ëYrªÈ§PòW=sîsæW3÷2ßnjQw¨÷s2¶·ÕºÀûz˳cùó3²ôùN}¯w³@H^#íº,ÊbIb»$iôj8]¡Ü·ªÜ»87µfE6«O#lªèlQßRµönM»²ìÝ6nsMÓuÃvnéÎp¼ç3¦Ëw6îîêÝà¶+mË ëÜÝÜÜÝÝÚîné»Ò´
+3´¾pŸ¬Ä£mÄ·f´ÖÞææ¨ôÀ .Q½y'Zfn Cæê[»u]ʸÖʽÉF½ï2pyÍÃq¥/°×
+¡lMÃrioSNhpÈÉÎç½ÉíìñãÞÓ<e!/G7;ɶ½êîÍRnnótÝÝÓ3©V^ÐZZ«8÷¼æªB×$Ù5ôÉ4915³$JL«³touÄÓRd°Ú÷Ýk»-[¯eÚ÷¬[Üìyb#^µ,*¹»ÍÜójîÝ®æîî8«!ã¾ÀqOzcuÛ¦C·¶su<ÚJ·É7ÍôÙº·^ww3¥Æõê¼øÂñÜíàÂNܳ^5©¥µ$²j¦H7º÷eîîg>ÝÇÛ
+Ùó;/LÌY;£ºÃMØ´ÞÞÙÎ-ÕfÔU½R<m+Û&î½;»Ï¢·_l7g|øò¥Æ£jzæg·0Ì0ÉtÓ¼äyÃÞGufîh¹»Ìøw&©4ÙÖ[-´Ã:w^½w7rLLI
ÕÙJPî^éÜåÓi¦{íÜc7 »¢3{Ê!¦ÎS¹9Ó¼Ég°àséÙ;;çCçvçagd3çNÒ×õ»n7I6½ÝÝs
+ÝÜÝ9±µùÀS§@aªù}ÛZ[rqn-ÝxæjÍÜK ìânÇc[¸æé8É!Ç77¤nêo^´Þf#jÐS
J%íRÚ)mëyK6ê¦Ù9»Ý»¥æbÛq3ÛSMÁHѽz>åí̲í®Ë·ö Ùm禽FìDÞhR9»ö¥vó33jæhdÈùoÌÉð`aÀqñÙW0#ÑqD`P:ïtcì§Hïz\)¦Êºi&és ÉÌ¡0'Hc½«n%Zäá62ê²Üu5,ÂhåoÅïI Rå8´NÈw&Þ)N²d· dÉ; §w¸¸#²çgHl-ko&FYèJu6ô·4ÌãdÆk4¬Ëvä«té
+$²£áD¤2d/Wz²çNH7x`'BPé§e\8àÙ2eºtÒ°hrF9[Î35¦^HRå-æ
+ é:»Ò¹^öM¥qxT²d!gGNÌÎd)W8`NÈS«½Ys§I¤-q· dÉ:Jwz\ïCIKÆBS»Ó1ÂçN¡)rðÁ(INïKèi)sÐÀìêïKì6K.sa{½3½sq³'BPé§e\8àÙ2eºtÒ°hpq·&[§&L·NV
+&9¾3\á´ÅÎcC¤§w¥Îô4¹Ìh`tîô¸p0.f40:@³zò¸l8+V22À!N:´½Ã0à¦&\ÆÉvIaǵ9*âÃ2 ö(á#,ì
â÷.Nv¸Û Itçx\8N3W
+uΧF£ÖSDçp8BvUÃ& `³{Å®4¡ÂIÒ¸áX²Ã·
K¹KpÁ,'INw
Ãés1¡ÒSápàa:\Ìh`tçx\8N3ÎxfIÙs1°Àè)Þ,«á è\¶22Â%9Þ¥ÌÆBYÅï¸Û8é\mà `;ÉL vW2´N;ÎrÆÞ´Ã¤§{ÂáÀÂt¹ÐÀé)Îð¸p0.f40¹»ÒS§.[aÙt¨å´ÉCtçx\8N3
+s¼.p0:d2tr ;Q\2de tçx\8N3%9Þ¥ÌÆHS§¨å¶ Ê[LB`N³Þ-q¶p Ò¸Û CC¹Ó4èÒqÖ®8&GUkÕ⣶ÚN `²£¶Ú`ÑL
+s¦iѤã5\4q1×:fN3ZÕÃG48dx1\X$Q°ô2Dæ,űñ eF¢VV0b±X²@:0Y ±a"}b-¨Êµ1E`"P ŵª£Aw
l¶Â7ªT>:å\°-JTªÑU*RÔ~°Ä>|eU
+}1©SêØðõÑôQÔZI×LEr*\!Ä)hoVÁ`Éb ?`·mJWâà©3*TfJFe*LÈ%"
#2%.1Cç;©8bfULÊ00Èc.±ÔRY
I©èeÇr*mMFK«aôºÖbÂ1`X±²¥áZAõ½\,HbY§õWî½>¥àûÙ$Þ§UÙUUNö
+ªªþjªUUVÕµUlàÁ8'Dà¶«¥UiUS¥UUiUXªª®U¥6ªªª®Ò /$Ñ#$Áz(£¢h¢(è£ÑG(èèèðQà¢px½WKUUVªªªªªªªªª¨ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª«KTû/ìàʸZl«fïZ¶n-fëmo-µ»Ûq3*âfUÄmZ«R«Sr«qlÜ[7ÚÝè¶n-µmnmZZʸʸÊJysqlÜ[7jÚÝê[7ÍÞ¥³qlÝê[7jÚÞ[kymųqg¦UĪÔîUÄÌ«WU¯ÚÜ[7Íųw¬[7Íå¶·[kw¬[7ÍųqlÝ«i9q*µ*µ*µ*µ*µ*µ>ÆUĪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪԪÔùï¶ÛmµUUUUUUUkUUUUUUZÕUUUUUUUUUUUUU^¸*ªªªªªªª ªªªª®«ªô Õ^ªô Öµêêê רzUÕzM¦=ß&¡±Ä6Ô6Ô6Ô6Ô6Ô60ØÀÀÀÍqkzPØPØPØPØPØPØPØPØPØPØPØPØPØPØPØQ»5k`MC`MC`MC`MC`MC`MC`MC`MC`MC`MC`MC`MC`MCaÔ6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6h¦¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡°&¡±ÇóÍyo?L?ÓÃ'ë$
+2TFJÅ*²eCL¨bÉY2ÈÁ¾Þ;ë<ïC^\·Û}{gmuÏ0ú£ëC#C½²M5ß%ê0ÐÁÚII9T=9ìPFî±$:àÓzÒ¿gäuTGµe#æª
+/Ï`Ùt¨½aôôÚ£
+õ+"¾¤j¹í,°$Ío$$!db¢/¨~Íú_«úß_«úÎwÛß{ÏmMEÎÊoY%¾ ¦Km¶Km¶ñÛ<I$Ûm¶úißH[ë¤Ûm6ØJlë¦Ûm·ÒÐÛxñ4 [ëÛæ4S<%$Ûm¶Û~÷½äç32~¶i[1DÛ\ÛZ*Ìi
û³\T/,â3UÁÖ[ZY¦i¦³wpÍ.µ¶Ú¡wuÐÐvÙËw)¸k
håé!?yWÌÔ¢·Ê¥eߤ',y,4öÒQî®Ál9{¥Ú\
I®Áp¸Â8-ѼJä°(Å®9.Hȹ#Ü·[èÜ·FäSrÜÖÉH¥þ1U~BÊ/Ç12!¹|J©Èó/ ò¯1²Ù±±»vËv&Û6i¦Ì6TÙLhm¦Êm6ÄÓI£fÌm1¶Û?ÁDtté¸|!GÚõLÕ¶UXÄF ¨ ¬b«TE¨¬E*"Ì!#a\n?
+>Dr¦=ÁÈj=Üú[©xA×Ìr÷Ç!ùQÀâ6GêC)cÌ9Çb1!±Få´Tmjj0d'CãÖÕ¶UU[VÙUfÉn´ÙýdAëöGÑk5¬Ök.µ¬Ì2Q@K
8ERÀ!, e
+À+
+ÀP¬!°Â$°P@QFK :5 áQÆK m¶Ûm¼þ¦kÉõ*§lÊøß[Íí¼¹Ñ'»5»ÍÞ¹çÝvW5{O7¬~µcÍÕÖ5$ÉÌ⻬.¸á<Öïá}{Õ~t?>{êæ®µÔ$Þöù¾OúüÝ×®þö>&Øõ
A®d;ÖètJD
qÈÆM¤ËSæ:E«¶×!<M±p±33UÌzÝ S«ÙäÚL²!Âc§mXŶ¹1âm=A®d;ÖètJD
^È÷&Òeó;jÆ-µÈal\!ìLâÕs!Þ·C BTâ$*öG¹6,p§éÛV1m®Cxbábgf«õº§!W²=É´dC
<ÇNÚ±mrcÄÛ{85\ÈwÐè8
+½îM¤Ë")æ:vÕ[kÃ&ظCØÄªæC½n@©ÄHUìrm&YáO1Ó¶¬bÛ\ñ6ÅÂÄÎ ÍW2ët:%N"B¯d{i2È
+yµcÚä0Ƕ.·3UÌzÝ S«ÙäÚL²!Âc§mXŶ¹1âm
A®d;ÖètJD
qÈÆM¤ËSæ:E«¶×!<M±p³±13UÌzÝ S®9É´a
+|ÇHµcÚä0Ƕ.v&1j¹ï[¡Ð!*q{#ÜID8Sæ:E«¶×!<M±p³±13UÌzÝ S®9É´a
+|ÇHµcÚä0Ƕ.v&1j¹ï[¡Ð!*qÇ#6,p§ÌtV1m®Cxbágbcf«õº§!\r1i2ÃùjÆ-µÈal\!ìLâÕs!Þ·C BTâ$*öG¹6,p§ÌtV1m®Cxbágbcf«õº§!\r1i2ÃùjÆ-µÈal\,ìLbÕs!Þ·C BTâ$+F2m&X`Â1Ò-XŶ¹1âm
A®d;ÖètJD
qÈÆM¤ËSæ:E«¶×!<M±p³±13UÌzÝ S®9É´a
+|ÇHµcÚä0Ƕ.v&1j¹ï[¡Ð!*qÇ#6,0aOé¬bÛ\ñ6ÅÂÎÄÆ ÍW2ët:%N"B¸äc&Òe)ó"Õ[kÃ&ظYØÄªæC½n@©ÄHWdÚL°Á
>c¤Z±mrcÄÛ;5\ÈwÐè8
+ãI0§ÌtV1m®Cxbágbcf«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ-µÈal\/!of«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ-µÈal\/!of«õº§!\r1i2ÃùjÆ-¶Hal\/!of«õº§!\r1i2ÃùjÆ4ï3Üæîv»ÝÜÝÍÍÎnª2P¤@K
8ERÀ!, e
+ÀK B°P
+ÀKÀ!A B, èÔ
FK, &ffeÌÌý(I Þu¾s?FIOÎINýùã·¯?×W<îµ.jë^½»kÛåðù_ó;æï}÷½÷zïÞg|Îûï{îõß!ïß7sÌÕÖ´f®jë^^^Zòòðò¿2$DßßÓß×ïöûòë'2µ¸æV·ÊÖãùw¹ù~_ò~MæwÍÞûï{îõß)¼Îù»ß}ï}Þ»å7ß3Þc´ÖÍ5³MlÓ[4ÖÍ1kLZÓ´ÖÍ5³MlÖ7ëëë>¾¾O§ãMús+[\n9Ç2¶Ù¦¶iZkfµ¦¶ÆãWekq«Æ®7ù¤$·[û}_ó wñù¿6cåÂË9 6s¤² p-Î%àl³n 6s
+²Í¸É`6ÊÛ
+ã):á`aÛ,äXÙδäX £g8ÙÎ
Ý~yy}ß[îû{{¼ë×®ý½¼÷äàæ{swÙ-ööõ×·=ÿ#àG¿¿¯¯§§¿Ëj¶«m¶¨¨ª¨ªªª¨¨¨ª¨ª¾&*"ª**ª**"ªª"ªª¢""*á `f*®çùùä>µ×W:º×ËÏÏ_/Ãå|uâçËííï]fh¬*2P¤@KB U,ÀåË· , e
+Â@+ ,"K
!B, ¶6D áQÆK Àm¶Ûm¶Ûm¶Ûm¶Êªªªªªªªªªªªªªªªª«ÀÌUUUTEUUUUUUDUUTEUU\$$ÅUÀÀÍëzæVæ¶Í¶îîîÛ»»µÝô¤«ÇxUS·§®g·3Þfów9Íæï½îûÞë÷>óÆÛ;5\ÈwÐè8
+ãI0§ÌtV1m²CxÛbágbcf«õº§!\r1i2ÃùjÆ-¶Hal\,ìLbÕs!Þ·C BTâ$+F2m&X`Â1Ò-XŶÉ1ãm
A®d;ÖètJD
qÈÆM¤ËSæ:E«¶Ù!<m±p³±13UÌzÝ S®9É´a
+|ÇHµcÛ$0Ƕ.v&1j¹ï[¡Ð!*qÇ#6,0aOé¬bÛdñ¶ÅÂÎÄÆ ÍW2ët:%N"B¸äc&Òe)ó"Õdç9Îs⪪ªªªªªªªªªªªªªªªªªªªªüÂÌUUUUUUUUUUUUUUUUUU\$$Å]Ï;,l*2Éd±°P L©°FÆÀÈ[ ¬ÀÈ[@l[ ±°P@Éd±° £P@ ËçwyÝ篮ðÕú>Ã:|?¿'·)_1µ¾qQSÇ9Á\¶·WmõvãÍõÌ¾ÖÆ³Ù¸¼å6,Pe³S3-¢¢¯½wºÝL³MõÜÎnw`Ñé÷Ôö¼J#ékSxO{.eU^ówËÏ
+9g}Ëuòº:+[pUëñå}ÓvîewÜ8*Áç{¾0æ§½8ðzà´Üñêñ×¢îÔê7¾éß[;
Ƕ½[ç2ãÁpeiNSÜëÃîV·)]õæîÔ° pBH<xÏvpáÃ4
+T@9"£4ÚTC á8,TUdÑLwm¢aE8sfi¼ääp%98(EÃ.ÇæÎ8sfɲjCÀ8N"N*í!$H*T*Y,¤¥IJRR¢Ë"Ë"RR¬b¤ªRªQP©!0Ébb¨¨©R)RK%
+*T¤²XYe*R¥Z
+*R©(©JT*)*T¨¢TT¥J£¤µQCÑfShÒÖc2sIIUïI>IS§]a¥ðɹª³O_²üm¶ª«ù sÞù±´ÚKt$ùþ#üßܧó¸y~ñÄëêp±ºív¼_,ﱬÝÙ4õ;fÛ)q·Ó~T=ìm.y뮼{èRRQ)*J\&Ïs¹¡ò*§ßøO?OW}û8êôuv{ìêÖe|ïçÍóå«vm[´[mjÝ¢ÛkVíÛZ·h¶ÚÕ»E¶ÖÚ-¶µnÑmµ«vm[´[mjÝ¢ÛkVíÛZ·h¶ÚÕ»E¶ÖÚ-¶µnÑmµ«vm[´[mjÝ¢ÛkVíÛZ·h¶ÚÕ»E¶ÖÚ-¶µnÑmµ«vm[´[mjÝ¢ÛkVíÛZ·h¶ÚÕ»E¶ÖÚ-¶µnÑm·<ú÷óÏ<óUUUUU]UUUUUUUUUUUUUUUUUUUUUUUUUUTóÏ<ó
´É$f[m¸I$32Ûm¶Û~¾~ÿ}ô=z¾½5nÑmµ«vm[´[mjÝ¢ÛkVíÛZ·h¶ÛëÇ^<xñÖô\ëÇ:çdOÉûoÇ6ný}ºð} HHI'æ¡SçyÌïÄ1*T¨T¤¤©1r8\mE)Uº6ÛDq=ÕR¡ú+ò«ôYùÃê^Ëù-
+kZü6ßÜÿ6d¡-¤¥,Yd)J)HR¥Ú)d¥,¥%´)J´-°¶ÊRJP-¡m
+ýÇøae%¶K,²¥%´,¥¤)JKh[BÚØYe!m
+RmÛml,²È[@²Ê´-¡eLcfafÄOGõõþ¹Ïõé,²
´,²
)Ki,²
)B¥´¶ÒÛ,¥´)K-¶ÒÚ[Ie¶Ë)m-¤²Ê¥f`Ãfc3¸ôVË-³CîúCôS¬ëQ×%ùqùÎ>ìy¨ðѼ}1å+ûCZÖôlô{¸LlLLÄÁ$`ÆF2É0c`É3$É1Ã0adfFLÉ0cÞ~æ&dLdff1&2L333ÃF`É33ffLL3,£&CÃà 0Ì00ÀÃ0Ã0ìJ±£æRYhZYK,,¥
+R¥)B¡KBÒÊRÊZZP¥¥¶[m(R)im,ÿ#X1(#b",X1EE#E#DPEøñ5÷ÓjLf4õ7ݳïÓS bdÆI$aÄccÁ2L&31LÈÌÉ0aÌ1zµÛò&L0É00É0à fs¹Îws¼sw9ÎyãsssÁç<çç8w;çw;yW8w8w6ó<yç8w:»®çwsss¼xñÝã¹Îws44hÐihÓZÑ÷ï×>ibÎÇÊ£ª¨#"úAûD¨~Ä®PR("ª#\ÌÆ31öñGÃ&Nôyñ<yÇyN}:7àI~jj99\ÚRYe)JR¥)JRÛJR¥)m¥)m¶ÛiJR¶ÛxI&¡ñorZ²ß(Sú¿Ø}³í31¢kìÛ>æ¦3É2dÉÆa`RJRK@´²R¥Ú¥ÚØ[e)@¥(жßþ»ë0Ì1ÆIR²`R)d¶
´-¡m
RÐ¥(Ò[Kh[BË(KhV%´-¡e%)@¶
+ÚÓô¶Ox~É>ÉGÊûì_-Ú¥ö*XÉ,AO±RD>ÕbS
X±KXQabLX*ÂÅXXF,*ÂÂ0°X±V,IÁab1`±a±b0XF#"¬,,,,Ff#
±c0X#b,µR©HX*D©KBÅ&bQLF,ݢ̡P´¨}*«B:¼»#JÓähÚÍ1o¦¥j#zÍîdHñ "õdëÝ⪼¥X/Z3Ç>ûL´ÌÉßHñUUUUUUUUUUUUUUUUUUUTÍÓ¸Q°!)gÍf»ÎMÚr$2Iä|w¹X1RÃm¨o'>7
+Îm4Í$þ+Ð!Æ÷T+MiR¹í¤[ä¨Ìf2"³Q)-têÙJ¶Û5"«§ÌÕ#l¥»Urß·Vi"]Ñ7ÚcMÒü
+¶ªªªªªªªªªªªªªªªªªªªªÏ'¨í;afáÉúQ#f]Å5æÄñ$ä¿OÁë²d&[HÁ"<¾Ã\C~8ª* 1ÏsáaÞ¹)ý!!é!<f5ðÍÂãYlôÃé¦Ù³M1â*¯ÊlÒÇØ¡ßS)Úg
+{ B!Þ<iºáɤÛß&ï§$oÌ÷};så¿;ç30>`gÿBIJ ¼´MÙyÊdæó0> « FM9Ý&Ïä0å%ùÞ98R0ÃKòÓYíÃ!!÷Þè¤IÈHÚϸü;µÛoÀï~{êÍL1óEj¸e¾ÓVc4F%Äu¢Vª÷xU&r0ò<ñs#Ë8ªªzÞûªkq×{Ã-·ÓÓÃGÆ>Eg
+5QþXú¨«ÛÓÊ'C£[Ì7Þó\vn"ÄDuÍUרù;ç+ë£ Mk1NS7~<¯&pë¸LÝ÷s©ÃÖU¾õr»gmº¸µ·sMÃ]K¹s®åbu̸Üw5Çuß_P{Þ9»»7M
+
+CCf!{ÎkbÄJêÍÙ5g9Í»ºnͱ9À8C9³s0ÍÝÙ½¶lë¡ÑÓ££cf²?O<»éáݹ±°Ùs[¯Vªw庯<ußKÛÕùÁì=ËÔ|QcÆW
+8±Â,Ep£®uÒ¢ºTQ×J:éQG]*(ë¥Et¨£®uÒ¢ºTQ×J:éQG]*(ë¥Et¨£®uÒ¢ºTQ×J:éQG]*(ë¥Et¨£®uÒ¢ºTQ×J:éQG]ú>|#$F@=ðûã×âüs¯;ËÛÞuçxë¥Et¨£®uÒ¢»ÙóçÏMäã"¢×ø¡»í¢Aó$ûáþ5UUUUUUUUUUUUUUUUUUUWãçÛÒy7éûî¾]Q:_&º3Èqçívܱ}
+¸Ì+vòo¼MêÖÙt[ÄܹÞ
+íV;Àüß`Êò_Ïܱ¢?Jªªªªªªªªªªªªªªªªªªª¿cêXÃ
+ûOÉ.Q5»{h¦Û[DÚ!,®î8è·¯¡Rég½G8Ìôêwì²Zø_jê_Æ]k5ñÐu=gÎ$¿©õI¤ý[øUUUUUUUUUUUUUUUUZªªªýz7Û5¼¬ôòÓÒ:ò¯9åí¦µÓÙ2¾I®É;{y=;:©oyÖìÖ]f8ÛW°G±'·RÉ×yolõdߢrú}Ï>·ôîèðξùù=ës¡ÓÑ3ÊØOv½Ù©®B;SMdÅ_9]f±ñQ)$ý*ªªªªªªªªªªªªªªªªªªªú!>v/ùOÇ éÛ´ìsÈrEÞb,&ýPöAÊz¥C³»»2¸¤1Ìs«`
+KI ×Sª'KPîÑÎðµÎùM:aÖ½×Vy6º×TNkªçhóî·VîO7iGî©à|[ÁÈ9Ô#HÔ·ØÜ¶t[VÒÛÄMëråÉë;øÆ:8C4÷÷Úê2½ÚQxÏ£®u;§ ¦¯¢ÓÒÑÐÉ2bu¦áã§QÓÐÓF»'ÏíÓ§LÆxWÅ7·s¨FÐööõõ®î©umó$Û×:Õ¬Ö´ñªâ©bÊe0ír¼ËÕíç[Ün{VI}a²úY±ìÖH
+
+ÍY;ê¯Ô±4Úê[ï!ÞòN°,K'hG§s!|osñ³OCQ=_/fWU_ufx|¼<;ñÙÏ_%Ë:Tu«æ,ªg¼¼ãQEÇ0ËLGc¥-´ãWyÛbF§¬¦&Q¬æõäÆ#AÚ²pÍiE¹®çÛã0DÊÒÔâ½í·ÃÕçX´în·¨f¯"Ä`óÌÍð¢zÏ'yÛîyãÊ<fJÅZµõË©åG¥¬Y|ó'±-Pæ<W98ñTÔâÔsøMÙQ;.;ÍÝM#$*ÝÖ¡»º¹E"Éì[5¹×4U;Û¹9¹kL´óFm´ÇrûÌOôïñéãǽ=å<x' xyE¬}JRÙcë-¢(zIè¢">£hAAY
+Q¯½m*WȯÌ\nzçyNo.ìÝn:éwF´ÂR«Kl;'ïlQ}ë}_wªÄGRÄå©ZÑCÓÇz{ÊxôñãÞò=$òåHP=åzÙQ<VÆz[JMÑTX±SR´Xzxõ}éíóiïzwªpôñãÞò<Ä<¼¢ÇÖ(->²Ú"z÷,_#ê4U´½³.UO®pwí;µ9õZÝ
¥¨MÛFèÝøHøÞü»jñ½Ëw6Rh$¤ÓCH` aô:ñð¼xñãÇK¦»äöÖ{ú2Ñ!¨f
C4Hd*¢C!PÍ
+hÈT3DB¡l^
C4Hd*¢C!PÍ
+hÈT3DB¡$2Ñ!¨f
C4Hd*¢C!PÍ
+hÈT3DB¡$2Ñ!¨f¡Áeèa°Yzl^¡Áeèa°Y{¾ß{yî{æI!£$F@|ü÷ççùçÎ
C4Hd*¢C!PÍ
+hÈT3DB¡¯<xñÔ¼äç\çtùÎxëÆmùÛS6¿nMúúÄ'èäüÅ4ëæ\¾q8zB<Þr¦§z¼Ðv¥XñUª¬«ÌË:Dãq)Ó)¼q:k©:Åó§!ouÐÌ_A\ÁÂ
+&ÃA&dÐ-nÏv?]DiH0öä¹·$À6"¦j$üIÈ+~æ9$&Dâ)|ìÄwA3`RÃMh±mÃSu-õÜ×QQ1ÐêtuT¶H}m_.9ÂÚYæ©hf34ã÷IQ9&²úÃÞp³uÄÜ
+ÖêmÏ=ì$9#5è`ì¢D¼Ý¦¨¶9ØmÉ'7¢Ë%)*²¦â6Ø5Øä#BØí5óìïŰóX,SÇZ¹*Km´*R|åUUUUUUUUUUUUUUUUUUU_;Âo²n
+ìÐr7£f+n£|âo¼ª\bL²²b¬¬)p¥kxÓA22,Èe0X,ªX$Ê07żMÉoaêä8Åpc ÕÊr.w)ÅTÉjÚLé:»ÈGHèzâ;¼;÷Ye°±®²zý98ò^ÞlÚSg;¥ÕpÜmyÂ6nn6ÔM
+O&òÈlÑ©M<·{jMDÖÏfrÀ1«Ô;tÛnªªªªªªªªªªªªªªªªªªªªÖ!l
ËÃb×½Æõ½ZØÚ6¨Ôij¢ßc|ç]TãÔókÕÉVõSÿoþk÷?ó³ÿÑÿÆï÷þÇîïôñû^Ü«Gׯí_Ý|s¿ï¾."Îâïã~ÿ7ññOnÜ«Gׯáü|s£ß}±qhýîý÷íñ~ÿñõÛõhúõû¿`wñ}ñ÷ÅÄYÁü]üoßæþ>)ãíÛõhúõü?`t{ï¶."ͽ߾ý¾/ßâ>»p>^¿wïñÌþ/¾>ø¸8?¿ûüßÇÅ<}»p>^¿ññÌþ/¾>ø¸8?¿ûüßÇÅ<}»p>^¿ññÌ}öÅÄY£÷»÷ß·ÅûüSÇ×nÕ£ë×îýþ9Þûí«1+õݬ¢¿º¼6gåCy·ÌûY§6ðÙ¡¼ÛÃferé³2¹tÙa¹tK¶D»a¹tKË
+Ë¢]Ãÿ¼ëÊÝÒhñÓtÿê7&¥å{½4L<é:y&¥å
ZfDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò.MKÊ´Í&0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:y©ãZszhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<2y
+V½4L<é=<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<Ã'ÕiÓDÃÎCÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBáÈj´ÍsSÝóñ<ñcÕ¼£LÛ4L9Ótò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBæäÔ¼£Ow¦0O! ðÉä5ZfôÑ0ó¦ôò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§xdò3zhyÓzyò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBáÈj´Íé¢açL!éä <«LÞ&tÂ
BáÈj´Íé¢açL!éä <«LÞ&tÂBáÈj´Íé¢açL!éä <«LÞ&tÂBæäÔ¼£Ow¦0O! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôò.MKÊ´Í&0O! ðÉä5ZfôÑ0ó¦ôòQ}£ûÞwù»¿i»ú
+Ýݸç9»»»»»»»úðýû®$ýL¨½°öýÎø R7öjªªªªªªªªªªªªªªªªªªª¿¤ÔtBH~Û~YÄ'!ÔFó&¤Ô»RlnVÄHã}Î&QÀá
+Ŧ!kYS0)V²Ú·Z³×À¬ÁC2©H6E#8NHN²f¼¤FM
+@®Â5fÉ"1`£ßÛ½'Ä'Ë k$é¿_jI ûm&íBß½¶Ûm¶Ûm¶Ûm¶Úªªªªªªªªªªªªªªªªªªªªªª½w½g®í»¾ °^B#&CBh±á²àlÉ`Ì3ÁB2±"Pɧà¶é½$£nåMB¥²ïpfbÉïbD´ï.«MâI÷þ÷ÿ£ßuUUUUUUUUUUUUUUUUUUU^qúíÊI$>¤örãâýg,ÎÏ«hÛîÏs0kV=©¨«®"ãzá«´æ[:Þq;iGÙe;kml}¶Û·ÎLDiQ0ÔµTyÞó»Ì:cÃÛ½/9u39Ï'ízzá7&5ÌLäèùc¢¼k}»>ó¾F&YãGÔ§c²ÌÁ4s}åDå5Zj£¹³Q-
G_wGMöhöêðÞÖåïpN{½,O·RÈ»Iq¥ÏA"Ĭ[²MR%¼]Ùǽ×îA=Ó¯kïz@ñêO}_{¢'©mO[U|OòKZ+QP²1óQ¯³Ë3_aqÂînÝܵm¶O@âx[Û^åñ§»:Åãoj®ÉéãÞò>óïO÷ïzCÂÈU
Emö
+«é45q[kª«¤ôñïwÙKî÷=¯yéãÞ<ú¾÷x¢'©mO[U|Oò$ðx<|ÒÑ<ª>'ïÐ Y=ú6èÄðR¦ÁîF9¾þD· 'íÉ$/òû}¯åÏ;Îó{®w{Îó{®wzSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6êiMº¥ÚSn©vÛª]¥6ê³çÏ3±dÞû»ísÛÞwÝs»ÞwÝs»JmÕ.ÒuK´¦ÝRí)·T½óçÏÞÛ9'k*CʬÉxÈH~`ú*ªªªªªªªªªªªªªªªªªªª¹&Á'ý5M¥Õ1*k¾^3
+l²eêÉ,Àa»°M}aÃfBS(ý.W¯8¸kË1õ2þ;VõÛhÞÝ>ÎÎFáøT*LÕh²É²´ÑZV&CËïÊ
+$'ÝÀûæÝÄ1û§Ý¡%é{ÎK°Hp¡ùÀ îã¡@Óù3UUUUUUUUUUUUUUUUUUUvúÁ~§MfÛ1SϨ«UdS"¬¥>¨=]»\
+ÊÖM$`Ú!S&D¥Ò¥
.¿rªs©:ö;3ß¾-õu¾AÕ@Þ*ªªªªªªªªªªªªªªªªªªªôÎä((3fÌʦo¾¡²¦·Ñ6
¶Ö
µ#³*¦ûÞl$2òU¶Eµ^>=°Òvwy7jÄB'r{¹'?IUUUUUUUUUUUUUUUUUUUU$Ø@>4íØlFno66ÔhGÍå¤ÐO;úöíâxðé½ìØEæÎüèàEñåIÎ
+>é0ÛÙÓ;ÈÈC£ÊÈn´è'MfÂk{)³a5¡ÍìI)ÖäeRb"du¨· lÍî
+Y4Ø/[Ä×r'z+./k7Cá²)³ÃݰD+~1d¨Nä5¶;µ!Á&ÔÒ´TÔKQÆÒÆÕ±KX#zMÔeTÀô>·Nsð]4¨Þò[ÆcÄN[D9±¹!0ɦi;ó¦Â61ßR$ÍÖDo0GZ×6#Dã3¬~]>ÝÐéï·O¬»2©N}µø±Îõä娨ªúh²ÁÊ[e´qÌ{¼åjw^µJeSÆ®Êxç3)Å1b¶V0áê;¼§s]Ã{mÑæqÖ*Nù9í«:4|c·4¦æoO"ÆZ¡ãG¾ñìós'½mðï';ºks
+¶¢Séæ¾ÇÙ¶i¢f¢Ç¤Åfܳw²Ã%½Öãì7Ã
+*i)- 7æ59LGiäRÞ´ÓÕÌJN3DBís=G=»UjÛ éÞw§yÎsx'TêÎéPT;:.U*Îí*ökV½iQÝìâtâvuaÕ^¬çNóçsæðt/Ì©%2ïÍÏÍÌܹ@ 4äå±Ë\¶q×98¶pãäÕd-*ÄYd*¢ªJ¨U*KIU%TIUȶPEDB,"bHU*Ñj*¡e[Ñh¶IUQT*¤´[Ë!h¶dIeHªÔ¨HÇ'ß³I%¶Â ¬?D ¿$oS·+naÔ®TÉvÖªbi£8èÜ¿Ûï}÷óvs§iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiw%ª¨ªªªEU±EDQTW¾ç±ö{yÇÍæsCHDCHDCHDCHDCéú>gÚ±üIt-SàÉE½½ß
ª@gͪgY¤m©]µ}{q·IÛ{=+tñéðbÁѲS²Ç½¿_T/¾ßiÞÜÕµÜͪÞg:µ9ÜÅ"KùUUUUUUUUUUUUUUUUUUU{ÁIA@¤ LöwÝݦäùf¨No©©ÍuÑ®25d#nðÐi×ùIúT²~±¼}ôq;Â}%ss¤ºÍ±(iÉÖn®#ÔYOÔ%çè|þ\Zß1lD$ÌdÆ"¸Y(i¶ç×ɳ§~¼CÕÂd
xÞ.¸ã3±¬±¬U*ÔE[®þ<]åmïÏx^î«Í¦>zÓ^WQ¦]äÝJÕ -ä¨@ä¬û!M¡ããÇÆo±gÉJÀPÃsNÜxQlJ }û3`BYI!ÞÙ:ý
+æ[\ùï»ÃãÛ>Pù÷I1³µµ-°dèç®7%e¡ÝÞÉk¿¹=ܬÎ|Né¬2'Ç'}ãÔ¸&ið°»õ²sÚc¿ÛóMvÏq¹|Y&)óÒeZ×Äιë§vøâ}OXHFNwô?oªªªªªªªªªªªªªªªªªªªªþ~wó~â*T<µ)6Nß#ÅÙãðrk6Ûlf3-ñ*½-»ÑD>õN*ç´Ô
M¥uÛn\N®Ní Á¸£ë*ÅÕÛÌÃja`Å3ñ½MW¹®qqÜÁGlá£ÓÊ'w£:éÛ£»³FÙ§N£j6xïgFLzÞ÷YçÞó̯`¼Ó0ÌXÄǾ¥=rc\Äý]5MrRàÅø7·y·³~3]wᯬí½ç)êõ婽ôïMz[Xs¢Înâvjmä,ʵbbo5©ÍïÉ$®íͦY!!÷pç{Þ÷½<yg½âzO)à<úÄcEO¡á_ZØÛ[}ÞD´¥-Q£J>ËrѨ«=c\\F8ªê½m£ëmõ÷¤ïm(ª*Åâ*h{Þô÷O{Þ÷§¼ª{Þ'¤òIEô}F11yg@ÕÕUUU
+Y¡ï{ÓÇãî÷§¬ï=ïzxòÏ{ÄôSÒyõÆ1EOâyÐ=äUQ¶eÏs=%²æp·xMë·ryë¯/]ô×Å[ñ¦¸ÒH®$+$âIR«m¥VÛJ¶[m*¶ÚUm´ªÛiU¶Ò«m¥VÛJ¶[m*¶ÚUm´ªÛiU¶Ò«m¥VÛJ¶[m*¶ÚUm´ªÛiU¶Ò«m¥VÛJ¶[m*¶ÞìľbI|¼»»©U¶Ò«m¥VÛJ¶[m*¶ß½=¿nÙöWp82|$ç7¯¯¼¸kKJ¥Ca68ê1ÍÕÓ"%i¬ïßÞð3μü¾8ôòßýCÙyaðÓ½;n)õXS&=09¥ÈÓIè©·!%3 ¡!Ù!§ÌdØVS¹Ù:æÙ¾NnæI>Ú}c·¾¤ÑAãÉf%[VÚ#ÔËe³QLÖ·ÄdtA3wËÆîÞ~ÞMfDá¹%döfÞj^o{%IUUUUUUUUUUUUUUUUUUUWàøà4ãO«sædKfàøù)Pîáê Ü£
+Ãáç½§W¬ Àm
+ÊYl~;0vdê(M? °ø_CbÖ{â2©^2TCÞ7×µ«ÕµÄ²Dé4#ÒâN
+wñg~ûYÔc1bK(4§2~Ýù=ï£!`pC`éqÌ7NúíÎÜÑÌÉÛ)ÔA»$Ý^ýgÓ¢Â8î]áÖF{ÒLTu¦§{õSyzuzxY¹:¶ÃEdMM>~^wÞ:ÊQ¡Ð¦£ÚÎÝ2|kåñéåÎyåëÛ~ÞÏ¿>ç·n,3Íã^{ß^®{³Ó2Üç·®(©ÛPS¾tÖ·[».[m·ËUS[Æ·ÇgDõ±É3vË|ñp{Õ¹¸áb(¾ÎsÚãf'³î{:5½ÎøQí4_yÏ=Ã]w2ºtòAöD=ÞvÚ=zû1=ãÞó4n£Ü*"8ss¾7³×4¦æ\neWNâε#Ið¦¾ÞÔmÞW6Nm-¸õg,Mb|¤rd´oY¯nHÚÛ¨ºÓknzܶfg/¸ ïëïzxñã¾}ïOIé<@÷QõTðl$ÄómTo®f*[mL¶Ú¬W<n®>ÛwØeÛrÑÜËEåÍyêæÓ¶Yä2ñÑzÛUàh/ ï{`0;çÞÐ'+RUÇÔ¶«àðn¶Ôv¸h0<wϸ{Þg;çÙÖÇù÷´EôÇ
UOCÒzO=å*»*»¦£¨[Gkhud¤3ÏÝßs\dɺlÓLcnOL½=¶ì¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶]ÌùnËe¶[e¶[e¶[e¶[e¶[e¶[eôÌ.wÑAß
X»9d¹8ä.%JÎ_´æÞCÐç;sÏÀ#½P,C´ÂÈ&R9!¦èñáÎ;å®UÞ&M^jLÙ;gR©Ñm,(G$ÃMîÀ°´ºC!p2S0¶gp
+?}=ïiÔbªøùÉ|êg9M#'&b{Þº<-î&"àDçZ¶Jå²ÚªmUib[âÑ
+Ví>üN@%)I$ë O¦OüK°íÉÌ'0-éׯQ÷;¶Á Àý ¿h~Ov檳Fj±ÒÖÛRù$µ©%mµh@Ö
+ðD+¹,Iða¥Ïäèy»@f°¤s£Ì&C/PÃf'w©Äá8píª÷9ø±Õµ¾¹´wÙÓ¶z'(Î1§^Þ«~·
+öµù2-6~o¯Ufl¢F¹áÓ#sf]ô{2åþ¥îØ ¤É3Ý}V05¬Xi½éËàï
+Ð!ùù»$&üÝ'$¬»ëâ¾Ü;öÕòßjä:Ö¡åÛwdM»Òm &Ûv¾nÒaK̵Ï^éFÃ3ãnÇh/g'!°±F)¸_Ð&>]ç]!z<djBê±7CJ5>yã¯9öð¼±:u^nléÄO[»©Tܪ?îÛçñá:~?'û»«g¦"ßj%æ®
ÊZÝãÅÊQZû8tFx²QJÌ.ÕÛ±-.P«qDQ칦ÙÛFÇØ¼Æ4Üø:5¾éÈs0öÚÅÃ
+Uy<§¾²ãbøç|ù_möfw®^æWnEk-żJuÇÙöìÑ£vn{׫ؽ±{sõ|úîe> +·rtm¡:ï»Þõ¦Ìõ¹ÍµÔ®¹Ä®8VöãÍ^\qÚ)£··S®¾·´¾âÎÎÎÛëqÎsáË%:áJNΤEG¶ÒÚÒª¬Õ]·¶ÔtUPéÄïxÎNXáÃ]äãsäãsÄáÅÇd±Î¸SFÑNN8ç7ËËÇç9ÉÇç9,88lë
1ÃK6páñÛ¤©Áó1çݳ>ëáÑÓè·%VÙkªÛ-u[e®«lµÕmº²×U¶Zê¶Ë]VÙkªÛ-u[e®«lµÕmº²×U¶Zê¶Ë]VÙkªÛ-u[e®«lµÕmº²×U¶Zê¶Ë]VÙkªÛ-u[e®«lµÕmº²×U¶Zê¶Ë]VÜùòZê¶Ë]VÙkªÛ-u[e®«lµÕmºy±f}9>óØ°¿Odܤåé¦1ÓÒEëø1eK+ÑÃK±¥ÓCMÝ>?x?SÆîñõÚódäI9ilf|ÚT.àüwàÓ'Åéi£OsNIsµ9»
g$KHn|ÒhÓ@!M÷¸iìÙÅ?6öù;e5áºêÇz
ÖMRºNù©¡·Lçs¡$ßpïsJéQó·`w¼éðΦí,êm÷úø´ï¡òUUUUUUUUUUUUUUUUUUUUߢ~´ç·#>|rG@ùzMK;¿]Â;=W¾îIòbÊUªæØOÕûs'/pÕÔ`¤Þ`a¦æNì>|hÈT$R at b¤$2`°Ê¤Ì¡a[%°[BR··¦4ðﮥÓÂËÓfÌ)nfJR¥0öþsQÂÄg»OggêiKÞifc5¾ûòbLÇs¾&Ûyyyjz[Æ;ûHô°F©h5KI$j{M½Àýo~BKçÓ´®[åncQñ4áÀuÖõÖõ×[×××Yï|2¯Àøçï÷Þ÷ÞfwojÚI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$JÛm¶Ûm¶Û>¡·ôÉLI$¶ÛzzzzUU^ªªªªªªªªª ªªªªªªªªªªªééé
ééééééW ª ª³¾û=÷ÚI$I$I$I$I$^}tºióB7¿§é{ùgé~>¥ú9èúTúÉæ¾sǦ{B5ïãû¾®¡;qì_^ïW~>9éxßc×~|ñË©ÛÊ']²¥Cú¥CÌáîãcÚ}"N¾ÿK3ß···g\^sçW¶Òâ¶Ú\VÛKÛiq[m.+m¥Åm´¸¶¶Òâ¶Ú\VÛKÛiq[m.+m¥Åm´¸¶¶Òâ¶Ú\VÛKÛiq[m.+m¥Åm´¸¶¶Òâ¶Ú\VÛKÛiq[m.+m¥Åm´¸·»1,ø_/bîî¥Åm´¸¶¶Òâ¶Ú\VóëÎsy·Ý·£Ø°~ù>=üjeÒªªªªªªªªªªªªªªªªªªª«ù¿Oòû{çñçß¹úÿ¾g²¢;÷øõøø¾1éßkèG\øcþIÚyYèõã_h>åôLXbªÛbÕ¯»¿yÑD,ý o2`_*ªª·eº26>Á«V¾î[
+;Añ/Ý?°¾Ã[> ò%u"0JörQu{Àð°~¸ªºG%SCþBI'¤ó!·k[NÕSG³*ÒªnÌÈ+°U_ÅWðEUÀñ0]ó*~¸ª¾¨äÀ÷Gt Ðò\ªtÇÕWõýárÆJ§»J§öc´ebª|jU9*§Ê¥SqàóÒ©ªU5U:R©ÒªtªJd*__Óëªã*&/ á+Ö0n´?¹R¤´=!Ϊ{íUO¼^Øõê¦ ÚÇ8êºThvªGóÚd~ØáT¨qJ§xö©îcõUMÊýÁ¤ÉC;cÇGå¥SÆ¡ójó¥{C½nêU:ãR¥CçG í*¦«Ç«*T;ãÙOÛ@TÜ^Âeì
ÇJ©ë LFØleJļe
+T¬
+Ç($碼ôªbBs»U?o«Æ3:Êz©ÔU2Bå!îF÷
+Ú¹Ô.ØqTª
+©ëa±Ñá!ê
/O@È>°ÐóFÈÒ{CJ6U! Æ*£UDF"ª¢±DTb*¢*±
+¨B!$$cDTQ¢"#UQXª,Ìc0õcuî
+È>ÄHsÀð4ì<$8;jGp5êò MT$`¯´¶KbÚ(YjZÛIÛbÉGÀ£Ca̪ò¡ÕJ§*4ª!ØãpúCÉP»ðöÇ0A°vÆ}*Üâ®Áî¯:U7nAÑ઼cÛ¥S²5J§xêãùR¡Ò1-¡ç%àJJ»©å³eØl¬9ÐWªy*C¸`*HØ|ãÞL~yì~ý÷m¶ÛjÛm¶Ûüá ?² IûbBr@ëJ{²U=Êa°Ø{Uä|qæ1ï¸?0]ÙCßÞT^ü` R¡Àx¢T¨j;(ðSQÊ(NÂ=zU=%ñªo@øê©µTëAÈj9 \Ê©µ%eT÷*CÞSÔZ
ßP¼Aó;EîJHï©*A-SæÑ¤x!Ê©zGs*§ª<ñäxëE.±*W]ÌeEç£xòÒ©ãG^ÂĦ+A°ÊÐ9b]b¡mU¶Ûm¶ü}Púáóæª|yR¡Þ£Ö¥Srªn*§ wC|ã'£bÊ)*íÑÜ-]*Ã)TñÑ¡èÃÀÔ:CÀ>Èz¹Ðr*%Ô0_Â*?T[Çmáàå%¸*¦ÄdëÞ?pnArMJ§PðT'Hê9CeTë´¹8öºº=ÑÞ<ãö-R|ð¯paY
e`¬ñITô4©Pâ(Å*Ô|X¢sЬ=Ñ¡íŨ`íCIPïìwGè*¯-*Æèf<ÃÂ<ìªj.ú¥PûeBÁèëUN#hö"ÕBT¨lCÉlÄG1åEUWêGd àlÄd7uª
+ѺJ¥#ËñãÈ8ªëªU=d òCÇG1ÛJ§TO
+ÆÃãÞ¾9Ò$æ
Uú¡íÚ©åG¿=a¤¼C!Å%0adaæ$b1&*z#²{¨¡èÈÏTn:vh*±)*ÄF¢¯*T0.µTÝ*(ó|zãØR¥C éG{TªhZMS²ªy8ôªd#U<Ú°m%¨äÇzÚSÌ0wª
+ÇJ;b®C¬sª®²FãtcÏGxÐû
¹R¡Â©ÈzÒ<¡´±áÌvGIWÝb\Àª
+ñÛU:d7F!'Xä6@U<©p¥ºÔ<Îb`ªB%ì)½Tõàýawq¼w'${<cZ£¨i~t©PúÊ¥C©# ïÀ<4ªlãU*¡ºå#ÂNñUqz¨ÕITúãÔU0`ÈéG(ö"¸ÞLT.rJ§ÅªJ»R~<}´ÿl}ÇúUUUUUUJþÖ)þD?ü°5Dþ¯ýL
+$ýÛ¬ÿî\¾¸çù#ÔÔq)EfP,À-ª*¡öU˲ÿÚ·ÄHúy×þÓ»jÕî£Mñ.yKùÅTðb)¿êÑt?þb²L¦²
+!ç
+Ýÿ
+ÿ ?ÿ¿ßÿÀPÿß¿à EðÁ| z =àÀ ÒªCï° AT P¥T Já}
+ Aà ãž 0
+ØÁ AÞ î û P úx8 4R¤D@ `EA =4§xêWL°Ëf@¹AõÜ p èøÀd9X (@Ṳ̈WÖ@M÷Àù`¤úÄ O §J,Ú, ×`DLv¹À 2°ÙJ©SP E?ÒJªL4hɦMÂhÓdÄh3Píªª§ú¤@ h O)&UMMIêh=@4
+¨d TÐQµÔ6
+=&iêhÚG©£ÊDB=@ ÔÐ ¦²B~dIþ²«)õÅ_ådWû¨«"¯¬U¸¬¢2*Ý%bVØq[¦VfA?ÙE\IY
+2%seC"°cùÅTþ$«ñ©US¤¢*öKî Ue%TÄ ò¥Júo¦Ö©¸¨ºÌIüNõôþNuÎu¹ík[ÛknëùïlúÉYÖÎÛmoݦîí¦É6»íøL©ÍÓèús}ÖåîÚÎÕÝiƦuWon{DêoÛȲTó}·
Óã²Ô[-øWpÍWM2¦OÔâÔï'm©âÑn'SÄù>îäñ>MÐâz;î¼âÒòi÷'Ôíµ4ôO©âwë§¼îäÓîMÞäÓîOâbxN'1wwz?{OÞO©â~NÛSO0ÝkÞó(Þa¾ô7[Z÷¼ÝúÔâq4ôM;Éâ|wrx&ËÉÒßF^OÞ¾L¤ONäÓá7{}Õ<O¹+Ü'ÉâîZM=O¹4ûîîOä÷\Ä´©§×}É7§'òx¾÷o5÷|ÚÚÚÚÃï<nùós³sÍ{Þa¼Ãy»ïyókk7Ýaï_
+æÌ7X»æÌ7½SO¹7ÝÉŵ۳-²íÛÚvËTìÝ6Öô\Û
+An.ÃbWgEÕ½lm¶Õ½ÑØÛm¢[[k²I×U/jâÝ6+È
+å8ÞR)Û7{WÚ¹oE¼¸V+×·®öÅÜvËÖ˺ºSnô»n »ÀXIoP«yN7ê¦Í½!.åÒöÛ½ºAð¸îÒZÛgZì{ݧTËÜwu-©^K»»¹·ÀmäHÛl%kn¥ÝÜ^]ÆÍ¾m÷wvwtyï>|Õæ¯=çÏ
+óço>jòTú PeQUG¼T{ÁðTUPU@P{ÀHUQïaUEUðUHUTUT÷¡UEUð{ÁðT{ÀððUTñ@¼ðUP ¹ TUPU@PeQUFfgØUEV¶ëvë|s^uvîí¯WYZ ÊCÆ»¡:WÆï>6>Úè6äºÎvîÅ|0ì¾ÆÉ8¯ç°tc¤¶ÎÛo6×nÓwvÓdmÝÔú§4ë"';eâo©NçÎmÝAζºIfÅÜ=ÍÝÚî©Ô&Î+¬ qÏMGzt}F/cdmµüöë&^}g[;mµ¾Sv»¶$ÛlÖî§Õ9§tívAí±ÂåìlÃþ{ õ/>³¶Úß)»MÝÛMm¶kwSêÓ¬ì
Wè÷+cr6ÞÙÏç°Y2óë:ÙÛmò´ÝÝ´Ù&Ûf·u>©Í;¤Gk²m/cdWóØOºL±½³·æÚíÛwwt6Iª÷p7ÚSu²ïQw{Ö÷{¸0³y,Énæm ëììí»©%L2Ig gîm0îÎî·.]ì'gnîæ¶Ì0îη.\0ζÛrÛÆîöu kt¸wa;80oºÜ7s°ÙÖ⬵òâ>ãÖöw±¿Háâ¿Â}é2Ï2[³Ûëy¶»vÝÝÝ
+oÝÔÏ$ædDçl¹I\ëaØÜ·¶sùì'ÖL¼úζvÛk|¦í7wm6I¶ôÞ|&TæÒ#µÙ¸]kPNqò×càaÙ{$pâ¿Â}Òeì
+½o6×nÛ»»¡²M¶Ínê}WI½z+l¹yÖ·«¯'o:áv³Ö>q¹ÝÝHó©kÝçã¨'»ÀAÝÝvÔÞ®ÔêÞë£<8m»½½î}¯ÛKiVã3rR9¬©$Ê#W6ªU]@$»¦ÞçÖÝÖ7®Û\ÖËWZ¹÷5gs 5½¸v6HáÅ=û¤ËØ;zÞm®Ý·w{i²KÝf¾á§4ë"';e
+±ÂåìlÃþ{ ÷I7°6võ¼Û]»nîîÉ6Û5»©õNiÖDNvËÄíÛ]Ö÷{¸0¯y,Énæõ¶·gga·u$³iPI,²»Ýõ¹rïa;7ww9¶au¹rå·;;»ºÜ¶ñ»½h gÇÝ&nØNÍÍÍnÓ°ÝÎÍͽï¤ÉË/³®¼ygìÎÜ·nlohÞ<îwGݵÅS&ÙÜ\ápd¼
>éÞ¦ékß©K´G½'gtxû®¼yÔw Ù¹Ås$æ»;³;:¬î=,ì½®,8³{õx÷»s
Î\ápfïNù$¼¥±Å£}Úúçn¸§w8²^qd9ãÂ[S}ÈÞ¨÷KÉ%ä÷z½]s¸qNÝxòðúçn¸²utÂ>çwÖ¦èïûÞ¥/R©K´G}¶¦ûmMöÄ{ßD{ßWû¶¦ôDágvw6û:Ç&³º8²YÑdá÷gn¼yÝ^<;YcÎîk²ö#scfä4Îèû²õqd£'»;uŪë«vó$çIÌ0,]Í¥w{ß3k~w6ï¾{6·ç±ö}I> `LTE\ª"2I#gÙöý÷ßgÛ¹©¶côuóé
+ Ûvâ@ù¾ZÙzU!v³zêÝÛ³ºTí©M¦ÃVü»
+îF¥°â¾6tIjBnÜH7Ë[/J¤.Öo][»vsî5knIÔØjßfaZ¼mããí0[s.[rÛ/KÌm0ÎVç[ñ~!õ¿Krܸ_noßiÃstÜÜØªNõDq>³í½ÇqtÃzccÃëõ¯"½Ý,¹&¬¿K=úãï»3»;ã8¿lÎÞ´Üìîܹqý{rLïãâéÛv¼°ËKÈËvcÃwO®ä6~Ó¼3L0׺ñ7òYòÌï¾Y|ÌX«U¬mÆÜÐÞwU³6ÜN\ÃQÝvæöåKÉ.\íË
MÇÍ[)»yc·nÎ16l·¶íÞÉ[m½ÙÒÙM|ÉÇEÎI.VÛäPÞÜÞÜæâ}ã3s·.IDFS6k#nÈ\[\ÝÒòk7¸h÷7SRDøÌÆ7É,|ÚY*isé(eÒâT¬¹vëÄû¡«§Bg!¼+K®^ÜìOdÍZÜeËMÊîRËzç5¯âÞãi¹Ù¦\Ü»Ã[ÙÑ^ëÚs˽eYØ µ^{¶eìnÑôáRttí&íÜÜØkª>És³»rѪ
§5gjÝuôû³¸ÚvÚøÜÓ
+a»wµÍëÙÊçh·¢Þ6jÍméË¥·$μ§h°²^x76KwxÊ:ðIUH;-0Ìå7ÕP°«~«cÍ7XniîëpSM×ÝÆMñ³íoûä¾YruâÉ&NlãFðÍmðo;«£Ó»²év¤§3
w;¸´Á°µonnnçe³Y:wd}:Øiâ«nëÛr[7SE¤Ö=ɺ·¤HH{Îq¹ºL6î¼¢×Χy¼O°Ó\:`µØ<}sËQw=o;;Î!²NÛ½'Sx#3²\3\9ãzÛzÝ9åË"ÞSvÌ£LíD77§(ÞÙÏ£î÷JØ¡bc&áa>Õö5òKîÁ[G˺BNá
+»q(.ص¡:mtÖ)6ì2gokÔúl#X»5[G˺BNá
+»q(.ص¡:mtÖ)6ì2gokã{y»ß·¾ÖE ÕíE»¦¹2vîqÊܹ~¶Û
ÅÞ¸e¯#¶ñ~îÉÖá~¹pªýråÊU~.+¢ÃAh³~Ü'Óé$É¿´æÒ6)ô(:ä©Ëvîîî¸â]ÜqzÞt;nìIZ³i$ì
ÄÛÚ
4ÂlM5Õwe]ÎõDsöæçx7Ã37çõ¦^û»ÌìÜ¿V+9Üï·½<D{=ãMïsÖQï¾.síÇãWv<Þ3o5õ1gW¼fÞ>ÊbÁwo
+ýæâ.Ñ»òNÓ4ùÃâß¹'9»8!ß
+«sus¶ñ[yÕ#zúTëŵ¥Ý{{XØÈÊݦÚòÛv:êÑ®i¼oiw6IHéÊ%oq¢
+&óåT%·¶%¹½»´ª[ÖÞMݤdFôÅ4ÝÝÜdÓå°«ÌKìYÊ®Lj[+ãgAô¨$&íÄó|µ²ôªBífêê&k6NÁ÷pÖÝSWwå:êúKoXÓNKq(>o¶^H]¬Þº·vìæ%ר$MùvÜKaÅ|lè>Õݸ>o¶^H]¬Þº·vìæ%ÜjÖÜ©°Õ¿.ÌÃ2µ[xÛÇÇ%Úa¶ýrÛܹz\¶d»ir·:ßôxaú[åÂü3pΦææÄERwª#õmîFð}0ÃØðÃ:æýkȯweË.gfÉ«/Òá~¸åã;îÂæäãLîÎøÎ/Û3·7;;·.\^Ü;ã¸ø¤úväo,2ãÇÒò2ÝðÆÝÓë¹$Íß´Âûí£ã||}˱rLCÀ|¤Í<¶âV§(Æa§0oCsm·»»´É¯BÐ}ð³7ÜÝ]ÔÝ%]UÎõqDZäs·LØ8i§Y5Qw=ÎÅ«Ckf
+7/nÒæÎy:hWÜkÝ7BDÃMæÎÕý¤URÂåãRÙ&¦ï8¹mÇlÂØÝA£{)¹V±0ÆB=Ýà Zæý1M²Ø§ö ³¶óí¹væ}Fë.ÜÉLwÞfö5<Íe<ï¼Í÷&3{·
+<÷<Í÷&3{·
+<L<ãÓ-×&L·]j°hòcÜó7Þ8ÍîÜ4òcÜó7Þ8ÍîÜ4òcÜó7Þ8ÍîÜ4ôOXñìΤ±Üèg0I²Ç,Ãr<1î<ÍóÇ!nõªÈØñ2zÞugXºtDë_$ÐÈ<ãÆkÏ&[®µX4y1îyïLf÷ny1îyïLf÷ny1îyïLf÷ny1îyïLf÷nyZãÖ²®æcÓÄâ2®æc³eM'¤açn½áÄdËuݸ4zyÏLkÏIÉ2ïX¬MOrxËuéèrIWs1Ù²ÌF£ÄÇ«æfë3ϸÌëUGzeº÷.»$Ù<·L«¶½=#r(ìý9ft:¯'¢ÎµÜî )vZû74áuyÕk:4eÛV
+LwÝfºjy»pÓÉû¬×MO3wnx;o»
n]¸ÉѤó.ÜÍj°hñ1ßgmÖn²ta<ÍÆfµX4xyçf[§FÓ-ÖµX4zc¼¹É³6v{¼æK{wzL<ó³-Ó£IéëZ¬<LwÝnÕÝfÎ3¥±Zhp>W³ö4ìµ:ML·rÜÍl¬&ÐÉÛ}Ö]Ë;&Èó.ÝZÉ5<wÝfîã±ó6Ýj²6OIû¹Y®ÆÉ|»»r6<GmyÛYWs2:MCÓ*îf6l³ ¤ôc¾ë7¦fÅ=&;ï3gMfëU&yÙéѤôËuV
+C#¶¼í¬«¹&¡éw36YÒxïºÝ«ºÍO3qV
+wÝÙÙ4zeÝË©àÎÙ}omnÇa¡}µãfË1¼ìËtèÒzeºÖ«&;î³]5<Íݸiá}ÙMwrâjx2v×§L·c¨ÐöUÜÌlÙf#Qá|½ùgZÏÐÎi¢@h0,>S§ÊHíX|¦rGj77,Âi<L:ó³-Ó£IéëZ¬<Æ÷95ÖµÔgmóÓ6v5Ûs5ªÄÔñ0ëÎÌ·N'¦[4H
+¡|½ùgZÏÐÎkUGdíÝ·.ÜaÔjO2í&Ò0Ó
"WåÚÉ6HöUÜffcM)5'ö¼í¦nfGdlWs1³eMèe/~YÖ³à43¤ëZh<ïºÍtÔó7v᧤6 ]Á1Qb¢*úVªT*,T§Õ>iU©¦æQ>YY2ïR¾iÒjtP÷Â{«ÊË,½,½v^_ßUWUUÕuNª«ªêªªºª®ª¬êºªª®«ªqUU\UUWÅUuU\UUVªªª©ªêªªª¸ª§UÅUjªUUWUUUÅUUuUH?¿,UËÊê×YV^¯V^¯UÅ«ÁE
x(ðQà¢?zUUUUUUUUUUUEUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTÿ*þ¤üSö6]MÙu?VË®JÉú¶]FFO¶]MÙu>ÙuÉY%dûeÔÝQÞfâÙ¸¶nô[7ÍâÛHJÉö˨ÒÈÒÈÒÉöË©öË©+'Û.¦ìº²ê4²4²4²}²ê}²ênË®JÎJÈÒÈÒÈÒÉ».¦ìº²êÍÖÚÞ-µ»ÑlÜ[7ÍÅFFIY9²ênË®JÎJÈÒÈÒÉ+'Û.¦ìº²êseÔÝSv]MÙuÉYÉYÉY>Ùu7eÔ
¦Ë©+$¬²JÉ+$¬²JÉ+$¬²~fË©+$¬²JÉ+$¬²JÉ+$¬²JÉ+$¬²JÉ+$¬²~}õUUUUUUUUS5UUUUUUUUUUUWUUUUUUUUUUUUUzªªªªª
+ªªªªêªªªªªªªªª½ZÖ½4 AÕu]W Öªõ 꺮«Ô5kÐ u]7²I$M4ÓM=Aèüa5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+5
+°ÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀà ¨l ¨l0ÀÀÀÀÀÀÀÀÀÍÔ6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6Ô6ã9Ö¹çñë\óÎøÎu®} I>%DUúÕV© OZP½ï¢Ü÷OªIÌ®i\SÝNesE.òt'S°%*xâzO!äÂy'âxÔGS¢t$Dñ:'Pæ§2ºS¡T!Ãöé^wçz«8qÄá®ÄãMMi0cM8pÓF§i85Äã4kN&÷¡"AÃÇyï;»Úzþ«× É`2X É"cn(V 2XÊIc%È!XB2
c%#%!c(V É` ) 2
c%JH ûá>pñ÷ëyÓ5üsÆ÷wk\qîãëòxë·MmÜ÷ªªËªö]fe{×u÷E«ê7¬Ã]´öåÖJÊ%þÏ¿?>û¿]úý~»õúѸïêÓ¨ìjÓ0ºÚíÌ"Úum¬gÄöÚÝÔîLÌÎ(vâsÏtÇyììjÓ0ºÚíÌ"Úum¬gÄöÚ%§tffq@à·{¤ôn;ÎgcTN
Ö×ndYÓ«mc8î'¶ÔÙ,Ìu;¤33 ݸóÝ'£qÞpë;¢tÌ.¶»s"ȶ[kÇq=¶¦Éfc©Ý$P8íÄçé=óYØÕ¦auµÛE´êÛXÎ;íµ6K3Né$ÌÌâÀ7n'<÷IèÜw:ÎÆ¨3®ÜȲ-§VÚÆqÜOm©²YêwI&fg»
q9çºOFã¼áÖv5Dé]mvæEm:¶Ö3â{mMÌÇSºI338 p
+ÛÏwtë¼áÖv5Dé]mvæEm:¶Ö3â{mMÌÇSºI338 p
+ÛÏ=Òz7ç0ì;6¨3®ÜȲ-§VÚÆqÜOm©²YêwI&fg»q9çºOFã¼áÖv5Dé]mvæEm:¶Ö3â{mMÌÇSºI338 p
+ÛÏ=Òz7ç³±ª'LÂëk·2,iÕ¶±wÛjlf:ÒIÅnÜNyîѸï8uQ:f[]¹d[Nµã¸ÛSd³1ÔîLÌÎ(vâsÏtÇyììjÓ0ºÚíÌ"Úum¬gÄöÚ%§tffq@à·{¤ôn;ÎgcTN
Ö×ndYÓ«mc8î'¶ÔÙ,Ìu;¤33 ݸóÝ'£qÞpë;¢tÌ.¶»s"ȶ[kÇq=¶¦Éfc©Ý$P8íÄçé=óYØÕ¦auµÛE´êÛXÎ;íµ6K3Né$ÌÌâÀ7n'<÷IèÜw:ÎÆ¨3®ÜȲ-§VÚÆqÜOm©²YêwI&fg»q9çºOFã½iÔv5Dé]mvæEm:¶Ö3â{mMîêwI&fg»q9çºOFã¼áÖv5Dé]mvæEm:¶Ö3â{mMÌÇSºI338 p
+ÛÏ=Òz7ç³±ª'LÂëk·2,iÕ¶±wÛjlf:ÒIÅnÜNyîѸïZuQ:f[]¹d[Nµã¸ÛSd³1ÔîLÌÎ(vâsÏtÇyììjÓ0ºÚíÌ"Úum¬gÄöÚ%§tffq@à·{¤ôn;ÎgcTN
Ö×ndYÓ«mc8î'¶ÔÙ,Ìu;¤33 ݸóÝ'£qÞpë;¢tÌ.¶»s"ȶ[kÇq=¶¦Éfc©Ý$P8íÄçé=õ§QØÕ¦auµÛE´êÛXÎ;íµ6K3Né$ÌÌâÀ7n'<÷IèÜwììÚ¢tÌ.¶»s"ȶ[kÇq=¶¦Éfc©Ý$P8íÄçé=õ¸uTN
Ö×ndYÓ«mc8î'¶ÔÙ,Ìu;¤33 ݸóÝ'£qÞ·³³jÓ0ºÚíÌ"Úum¬gÄöÚ%§tffq@à·{¤ôn;ÖáÖvmQ:f[]¹d
[Nµã¸ÛSd³1ÔîLÌÎ(vâsÏtÇzÜ:Îͪ'LÂëk·2,iÕ¶±wÛjlf:ÒIÅnÜNyîѸï[YÙµDé]mvæEm:¶Ö3â{mMÌÇSºI338 p
+ÛÏ=Òz7ëpë;6¨3®ÜȲ-§VÚÆqÜOm©²YêwI&fg»q9çºOFã½ngfÕ¦auµÛE´êÛXÎ;íµ6K3Né$ÌÌâÀ7oémeÝ]ÝÝÝÝÝ]Ý]Ø%!<+ ,e
+ÀI$±Àd¬!B±Â±+@ d° !, e
+ÆK+ $ ïzÞ÷ï{ñE/×(¿æQ èIïÛ÷>åÝÝÝÝÝ»w at lç³ l±¬dÌFÙfÜ lçep³§\lç°eqÆÙfÜlç
+1³d±n6Y·, Îp IׯÎp ¶Y·9ÆÎplçeiÝvÙÝÝuUUUQUUUQQUQUQUQUtÌpÀÝTEUTEUDUUEDDDETDTUÜ<w<lñëxñãÇx¨ %É`$AO e
+ÀKB°I,d°+FP¬d°d°"A P¬! À e
+d±À P¬ç9ÎsÀKBNFÛ»nîªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª®nfºªªªªªªªªªªªªªªªªª«¸`nÞffÛ|%WYDUÒ Ó/W«õûÚѸïî-:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNé$ÌÌâÀ7n'<÷IèÜw:ƨ3®ÜȲ-§VÚÆqÜOm©±1ÝÝNëmÝÝüN}ÞÞî æI$I$I$UUQÅUUUUUUUUUUUUUUUUUUUUUUUUÓ0nªªªªªªªªªªªªªªªªªªïñÜñÞ;¶xwd ØØ
+
+E±·@Ù`ccd-
+666`BØB6BØØØB66Xcd- 66 0aØØ Ùccc`BØ ØÉd ÈÍÝÍÝÍÝßóq;÷íî\k~}ÕÓ]ïzy%ÖI÷SLP9N¢ãDqUq]çTAÅêNe¸yÄGÇ"æq@k3ëÀ´söiöûæû~×~ækÉ;àñGîªy³,ñ¹;.iÞ£rÁOn!îçZ\ø;Öî<úñ¦ûÍØ5Ãt6ùDS¾MÔÔ²4ÓPÔXÉÍÃÛ¼^:ëÇ»±®õãÇïÜn%§Û¯§ÛKOlõ¼ç8æg-³m@ä$>kä÷Êuò{ÞÏg¾SÏ<fÀò#ô8<Uìð©ê
pÍwØqÏT}né¥y76Ñ7mͽË
kºFòÑ6²wJ¡V÷ʾõ¡íì<ì¢r¡~IXra>±=ïg³ß)çÉï{=ùO>@<A{ÈÐâz
+ DñVs0âê"ªñÉ#÷³Ùïóß{Ùì÷TóÔ÷½Ï|§ x<Ì=äGèq="x«<f0ò'Ê¢¢eDGØp:ªUJ©JJ©U*¥KXRRªUJ©R¡J,IJJTX¡b
)*T¥JRQIbËeJJ)*(Y,%
ÉEBURTT*),Y(TRT©b%
+J
E%²¢J)(©),Rb¬S&L¶¨«åspéߦ®¿ÉOá*TR¡P¢RPéÔëÍ5<Wþ_}ö}}¿zþ5ݶ[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[e¶[Ù÷ÙfgowNë-²Û-²Û-²Û-²Û-²Û-²Þû>ûìöýRÑ>ÔϹ28_ãî@é#UnñÉY2dʤXP
+USâTE_¤ý³ü T¯õþØTAPYeDXD at D@TAPYdPeXe
F?YúÀ¨*0ª"""³",*ÂË " ,²¨Ë," *
+²ÈÂ"Ë ÈÂ"2"""03,²Ì" *Ü3÷0?p4ÿDDEADdEDYQYDYEaeDEYVYDeADDAYDW3`q þ¶ÛûtÝ8~¿¸a`Æ( 0, "
+( Ë È³(ËÈ +2Ì,²21Ö?Oî33Á "Ç,,Ê2Â,˰, 0a2a0cI2, "² 2Ub`ÆÁÆ#$bL 0Ì>Uý'(¢¢¢¢²2È" ***+#, ¢²" ¬²È,ÏÝEADQTªRÕU©e*RÊU-,¥U¥¥ªR©TªUJ©JRªéÃ_Ö5Óöw÷B( ²Ì"° Ë È"
+2#"³#&HÃ&#ök¯àkwMn馵£MkFÖfMºcZ4Ö´jkfMnÉkc[»6i5c[¦ÖM4kZ4ÝÔÓfÍFÖné¦î¦6j4Ö´jlÙ¤ÓZѪkSMkFÖMkQ²i¦¤ØÙ³I¦µ£[º}MD8H2g¿33UTYdDDDDUUUYeTEYQeYg30ã¼
+ü½þ¨" *
+ È2
+ ¨*,"¢2Ë#¬È²Ì,²0ýó÷Ïß ¨" " ",¨"¢2"2¬,²b," *2Ë#
+£,²0²È2"0 3,²ÕZÖ«ù+áu¨}ú&C²
URôS!2*©)D¤P¤
+
HT¡*JIR%J©P©AIQJ
JJRP©D©H¤¨*RT¤¤©%%JJ
B¥I)*
J
%DRT0É,ÉY&%e2S*2TÅL¦@ÉYIeLC%eJÊb¤Cà"Aþ¸ÁH$H>²åªUªZZÕTÑ?DZ.ìÖÅùþÄ×R_O&§¤0ÉV*ʪ¤H~Ol±ËÉiY»³ºî,#Dõ"e! 9ô²ÙhªõeÈÂíÆ3ç½¼}áÒMñð´²ÇÊÂß@ÉÂ<øUUUUUUUUUUUUUUUUUUUU}çÆå.88¢',÷¾´77ؽçÄEeñlÜó³Å%+æñäç>I ÈGÎ>n¦½Ç99Ѽ妷vlnÔÄÃL>nzvªä¸cro..v¦\ø×`N¦°ÄÆ&LLfF*blÛUaDÒ$~I!)ö²cãïÛò¿u¾ó(«qéïY©nîîÏO¾!Öw®®kû yE)©7Î
+;»ÎéÎ"¸|¡lg¬Îðç7vߣHh¸qW»Â²IdpûÙ×ÓO|Þ7\2ÏusÉcYèçÞrlË>7îæ¥ÓÊûÎyä¹¹æ×¬¦º¸p¹Ó¯¥Ï¢)jwxªq
5Ãpæoפû¼×cRq'o-¸®ý?rQ¢tù9±µ|üúa¢u;±>À3<ÏgO|+ì»ÎçNü+ܦG0és8§¼YYeí4¬,fyDEGÍ0É8&Î*p½í9[·N\çW«§®JåêÎvë´9lÇpxÏÍ~ØgÛ]W;ðû»Býk¦Y&^Ïg³Ç~î]Îçs¯umôÁé=UTzØ`ʲÑtñee´Ò"²Læf©¯+NF»¹ G³Ùìñß
úz§s¹ÓîÞÌôôôóÝ[}0ô=VGé9kçÅ^ÓHÉ2`yTÃÆÌâç¼XÌ£zÕp8xè\4ÐÓ9q^Ð$¥ø¡;¼;v·»O9éÎ:qÓ¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨»J¢¶í*Û´ª+nÒ¨½}öfyEÝÛJ¢¶í*Û´ª+nÒ¨»J¢¶í*ÛÙxÜtë°¼2ÕÇÜñ\.úèR.T¸ãÆw©j±Kzò®)ytf$WNNB=×ë³÷QVØûûôÍVIW
RéquwÙÞÍ®ºÐ½R©*ËK#7¯Ü#çf¸tÈý{³÷b_Ì2þü¹/¶LÚéúÅdçµ3½Kz»ëj]oÔµÏ7§×Ë×å8_ÉOÒI7í¶ÛUUUUUUUUUUUUVÛm¶Ûm¶Ûm¿§é>¶g×
+ky21Ç!gëôïÔ?Tév·#ôRñåK¾ºÞ
+ïRḩn¶RÜܶð[Uº¼UOB5 ì:A&HÉl#SÇS°Ùã¿mÙ窪ªªªªªªªªªªªªªªªªª«ñÑmjKSê¥Äp§ÎÂ## ÈÈb×!ØdÞuòXGÓÉÎÛf,ûݶdýu׿£àÎrdääË»Ìøüoyé¹ÈE:±-Å|ÅÌËHü@Î~ ûʪªªªªªªªªªªªªªªªª¶ÛxÈGÅY²Saù*"¬p¥¸miKUÃ93p0ªªªªªªªªªªªªªªªªªª÷7aGXE9!øú«_úþ/ê~¶êîï¹~>cn³$;ù#WtÕIRguj.|¨û§½dºåe¨ê.xOnZª8q4sS63Î/NfóO
ömæóhà}Ç=äêYÏ{$¼y^pãsãÈyÂA3à÷}m;ìòx8tëlË4Õ×2Ðê"ï9æÌ³Æäì¹§ÛÄFáÇÝ<ëoâ.§6×ar^|¹5ö¢Km-Ï7ÍkQ·rÏ\æmÞ½çÇ;ÞºëU¶rOôt;Ü:ª(+'.µÙTD»lê,âöÅáÞ ö>á_¦LñÏyç\çqÎIËK%[8¶ôxöÉË̲rrûÏ:ï8ãs8ç#mÖôx÷ÕOIë|<{þÈsÏvi$2¶émµü$Ö×SVOé$û÷íßßï;Ìîw¼ïÃMc
+54Ö0ÓXÃMc
+54ßK-Û¬a¦±Æki¬a¦±Æki¬a¦±Æki¬a¦±Æki¶YnݲËví[·l²Ý»eíÛ,·nÙe»vË-ÞϾÌû38Û¦±Æki¬a¦±Æs>ûìøß bÌ®ä|ï#wñôªQRTKªU(XU(©(©>?JSä:ÉñS,É"Ù
G üB0âs!°lSll"å»2ÈrééÏ/âÙöÁªË.þ ÝÞÌee12ÌeXL\AAïáUUUUUUUUUUUUUUUUUU[m»õÙ°$1Éb~H1ÄrWèc,á°IX·a±6<9ýqê<ù(«b8èìr"=øXG~ÞüU¥nDfÏl~zÙØ}C#$&Í¥´µm²mE[î.äì#ä:½i¤`9Ù"lF
ü7Éæ[mù¹×ÏÕ´¥
±m´QUm)JxúXGÈ9ü~ÔHtä#"#0VD,²Ån-¥m[Tdd²&,YKÝ-Ãqo$[U°ÐÔ#¾r¥Ô9øo¢ÒÒÞÙ&~°y9"½UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÜÃì0ûj[«iJZi]fÔ»8®'IÈGr<ä#rsaHz}|¾2[Uc¶Ev)o-N²÷µÚuRæssÊ»N %Ã)Ê
+ál´£QÒ¸RáQ¸N²÷ñ~øZsÿ¿hs¦þùøPy¹5/(ÓÝé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBáÈj´Íé¢açL!éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõRT³ÈiM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§xdò3zhyÓzyò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä <«LÞ&tÂBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ðÉä5ZfôÑ0ó¦ôò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎ
C§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<Ã'ÕiÓDÃÎCÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<ÅVùF½4L<é:yò3zhyÓtò=[åfôÑ0ó¦éä ,z·Ê4Íé¢açL!ÓÈ@<XõoiÓDÃÎC§x±êß(Ó7¦0O! ñcÕ¾Q¦oM:aBâÇ«|£LÞ&tÂ<Ã'ÕiÓDÃÎCÓÈ@<ÜiîôÑ0ó¦éä <«LÞ&tÂBáÈ{¹±kU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôòCU¦oM:aO! ðÉä5ZfôÑ0ó¦ôò7&¥å{½4L<é:yO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdò3zhyÓzyO!ªÓ7¦0§xdòü÷ß>ûð}ù2}fezb¯EìʸNMN$ÔjL,6#!±Q°Ô«Rî+º©Õ68LMICf¢$g)\Iq'8AÆFªÕ¤NI#Ì?©Ç)]"äNV-Ò,Ä,Ä,ÉVE1"Z¶ÉTȵF$S*0% ¦,^¡$å- ºÃÕØGI"=qÏÏÓÌůÁ-Xï¾d$R¹ãÉÄW)¾tÖ+'~T×EÕ>²u¹òv󪻢§^s"â#eÈ
ÂÜ>pGãϪ/¶åO&47Ú¤2Y¬K<"óÏ)GaØ´ò»wËaMLÜ<o¼¢ÓªxóÉ;ñxÖñ¼ïÆáÁbεçöläÙxæñÁXàqvÑ'^«<D©Ø¸ç=ºÛqçÑ©o8ó'yó½áóÇγ¬ËÇ¡?t÷||}Ó×ñãîø`ð3ÙáO(ý
+z¢ô(DGÒ"*±}óxû5IlSw7z³t×®7Ójm·s\EÇ{b}}g})xò¯TíOYûE¼xï{Ëxñß>>÷ìÈ #<xQ|§Èú(¨ò*}/Î*üÖ|â-ãǼsÃßy¯ñãÝðÞ<{Ç»áÀxÏg
<£ô)êТ°xìö/>W=MEõ`A¡ã>?YºËuã^!=Á9ïéÓÃÃ~?>ݺõéÛ]·Û·nÝÓj©mU#Mª¤iµT6ª¦ÕR4ÚªFUHÓj©mU#Mª¤iµT6ª¦ÕR4ÚªFUHÓj©mU#Mª¤iµT6ª¦ÕR4ÚªFUHÓj©mU#Mª¤iµT6ª¦ÕR4ÚªF^üüûóïϾû»«¯¹R4ÚªFUHÓj©mU#Mª¤iµï¿???>ü~ï¾jßårVRGØ%n!dË#"XeZ"ÈÅLIJZ±²ÉJ£$¸±LQË$ ?ß*Ùk&fI [ aßÓ#*#ÀIJx#( Q("¢òA0E#I"dÏ_´çżêïRÒºT°¤eLI±RÊXÊ@( "ÂQ\Y=YOVY>Õ¢|LbGX$T,ì%`Ð2H+µ/Êz±n2=U@Ǹb%UUUUUUUUUUUUUUUUUU[mØáö$LHO»
+hF$ÆÉ&`ËrÈ)lTcîOâeB\~ÃûmÙ%¶Ûm¶Ûy$}²JCd0°P
BKÈE@Ïý_vÕYÑ3ê¥uªeeCªî$ÊÀDÐòÛm¶ÕUUUUUUUUUUUUUUUUUøðªªªªªªªªªªªªªªªªªªªª¿uÏ6eåû?+ö~ü,ȯ\[=©±'QÓy,¨¯-vù5Dx|.uq¬ô¢(V½8À¶fë\>÷%ׯ9Þq$4×ógZ«ólË8{>|K9÷O<ÒJÍwÈ«
+ã®/;àñY¡ß9Ô²<}òtv/V±®)Â`ÝN"÷õï+ÎmÆÃQ
+Ìä¿{äIó?nÛ®rQ:ë¿wM9ÍÔÖØ®òoDêk;«×vã{"DçÆN»òü÷w×Þ:L;òçA:ªw:
+¯j)Q0»©ðñZ£¶2ªNõCç:N¹ÜÍ\ø·Þzyß_{ÏO;ëïO['¡GOÖÛn4»Uo¼ôó¾î{ÏO9ëßyéç}}ãÃÈô¶x¯[kÇáÓÅyUüÎ([d¶S0Ì3U,²2ÊfaX²ÈË,UFX1UªKE¨ªBªKQT*¡eªKd[ÊE²["ªT¡THªÔU%R*¡eHªÒÔBªX,eHªÔÏwù¸qÃeËm¨rÛ'ñ$×]8éÀàpLáÇÞü^ÇO¹Þ﹯½îóÝÓ/ÀL%~a,Ëð f_K2üÂYà&Ì¿0eø ³/ÀL%~a,Ëð f_K2üÂYà&Ì¿0eø ³/ÀL%~a,Ëð f_K2üÂYà&Ì¿0eø ³/ÀL%~a,Ëð f_K2üÂYà&Ì¿0eø ³/ÀL%~a,Ëð f_K2üÂYà÷yî﹯½ïÀ{ì;áµ(ñqÌÈ3³0ÀÂÍÏÄddRªªªªªªªªªªªªªªªª«uòE]u
+:Ãlϳìºlñ
'ÙVÈXG¤HëÓ
Ͷ¼Éll-W¥³E\UUUUUUUUUUUUUUUUUUUUè;ÎE·ZôæØ¶¥µè*Û dgéÒªªªªªªªªªªªªªªªªªªª«ã0*Ø}»^|³6Õú6FÙm+E«-"D¨0Æã ¥UUUUUUUUUUUUUUUUUUU_æÉLTȪP"
+1e=õÈk}^ÕµgÛÇáUUUUUUUUUUUUUUUUUUUW¦æf¡'^kzë]9IËm³úfvÔ·7K at 0¯UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUwüÇåÜß©ÓlrZ-öêìAó1ü*ªªªªªªªªªªªªªªªªªªªû,ÌDÌàççdRªªªªªªªªªªªªªªªªªª®fdåE_Ü*§+}¼3^9àíãZwOéͦ]r÷8"lnä7æ5G,SYWî§\$YpÏ+ÚçÛß±xââäfè¨$8n>Rù6ï¾Þ,ÍñÏ9Ö̳{9%ÜÜÐ÷|¤X^¢öuôÆç§¼ç=x<Vhov5)Ⱦ3ÅgaØ´ò¦s9.èæï9"ûuúæ¼xë»Î;BÛö©Åß\Y¾CkÛ}W+æód7Î9Î8àáÄä['--«Èå«jNS¢ââ®g×8pȵlqÎqÇçpp¢N#LÉÇ9Í·xç&8ç8ãø®'Æaë¡:Ü×[ºÇ²f<o üO>ü 7Üpw¯¯>ïRî¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆÙº±
6n¬a@Í«P3fêÆ
+i¿~~~Íûß{í;G,¶O·;\Û2
+¯êHWÉ$KÔ#î>sáÄ¿xÅ@ÕľW4ÌÐý¿fªªªªªªªªªªªªªªªªªªªªªªªªªªªªª©Àáø³ ¬Ì0ÁÉpÇçÜüÙòÍâvUÙ`µ'®k7nfTÐÇøØÃï$.2Ac2$LÈa ¸¥!K$Èä~âgÔp¬Ö;¬YlÛYxÖÕF°EÇ¡áß9}àP¾ÂÂá7rp2íëmü}øåI,%±ãÏ´iÛf(Êsyf¸9 dAú
+UUUUUUUUUUUUUUUUUUW33:,X,X`¬Y)Ôpës¦)q£Ñ6ÌPåÊæ°Eå¶Ù©ÑT
$´Bî3;^¨Ö¯vjb¶ZUÊÔCHüI÷ļq^÷Ä4£ßdähw¼WÌ)ðÈ¢ªºæñöÎ.¨Ë¬É;ÏS®#
+[«§W7zÄC8N.B¦¹sy»»EÊç2~%ζÏé\Ô¾:«ï7NùÍÔÔ²4Þ}ÜÏa¹ÝÅ:?gÏ sÇÞëy1¼G99=}1¹A¥f
"ä¸
:o¹l¨í Û[±ÃNoÜ®)¾§/RïܾEÖÞï6^%í-'o½ãÙÞ¯}÷g¼ú}ög}
+"¥CÁϾZaUL+ØkåõVé»ÝcuÓÖ0îé¥;»B*.(>Qñ×µïrò¯³:Õ"*üÔç\{dzÞ_Ï{dzÞ_ÏÀA°=êôçS`qå¨ãÉ.aïxö{Ï®Ýöxö{Ëß³Þñì÷O³ÁàðÌò/¡DQô¨ysÀx+ñJWÌXøOç"Hä¶#ÛSù[mËjrÛ$Ã5Äâk~{ï³ï¿/ïËûã»}¿·ÏÙ1Yï$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòG-ÅgÉ·$rÜV{É·$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòG-ÅgÉ·$rÜV|ËqYòGwY=ä[Ïy#â³ÞH帬÷9n+=ä[Ïy#ã÷ïûóßyú~§gåÇßËVÎw&Md(ÎC¥ÌlNsù*aÎv'*GíeQX©É#ñ³ó3R©EáhhhBôtp{9ËartNÈÅR¤©Q'ëãã×åùm912,ø¢ôåu9É:+hɰÒÅ2ºÙ$¯æ|÷ªÛe϶<Ô©ìë¶ùm·,ä<¯æXG×$ZÅ*ERV%*Ë
+
+ WÇǹbß'v>óbÉå,ß2Ìdât#pIU>J$( aûD$c·k:óS³Ní[·2qa}ÙÑA$æùªªªªªªªªªªªªªªªªªªª«~¸Kñ'Üúãå¶ö¤³
+ÈÉc«7q¶nÌäªì¥¤v²§]Dµ#%Iæ1ñU§Êäf*agº#K^»zI5ûO°¾Iò¤ÝC"©,YbYX«+ÁâªT®{s
+4?3Ãù×àwîó./JßN4|2«)}¤ÆÖÉò²¤Î=çz¢zÓm^:N#|ýÎ{"f¨
Y:ig»}öºæ¶e6ö¹ôí)Gïä¼u^ç%Ï¢)éä<9º!¾ù:"©}ÕN¶dxû½ÔòYæRq
+T²G
+§=©ä²=³¹©cY°&FæúZ¸ë6ë»õqÝvÞVýÛE׿×èç©Õ6Íuôóxñç}ãÇ>{z}ïx÷^gÊ({3Þ©òÊúT==JÔÒ®({\×ܽµN%Cæ-¶jÛÛ5ÖÆík«dÉ&p÷ÏÍéözèóËÆyú¨L¼Y{Þ=ç×§Þ÷yõéöy|¢á#Ì÷ªEÅ<²¾$9Ç"
+s' |(,0ø=++À+Çáï÷Þð{3Þ©òÊúTðxðªÉòß[lù2¯ÅV)Ç8þGûï½÷¾üÏ¿3ï¿gÌcúßÖvö&´Ç[SZc©1ÖÔÖëjkLuµ5¦:ÚÓmMi¶¦´Ç[SZc©1ÖÔÖëjkLuµ5¦:ÚÓmMi¶¦´Ç[SZc©1ÖÔÖëjkLuµ5¦:ÚÓmMi¶¦´Ç[SZc©1ÖÔÖëjkLuµ5¦:ÚÓmMi¶¦´Ç[SZc©1ÖÔÖëjkLuµ5¦:ÚÓoïßû}÷ÑÛiò^³wjdS8¹.$÷jå¾ Ä8XdUeRª['yÅì¹Yc,p{LäímOÓør~êÙôêÏT,ÌÞKXNl¸ÉØøT¥ü¶Ûjªªªªªªªªªªªªªªªªª«øö{¿\Ã?,(¿-üévä/SÙ$v®ÄæH´ç3>-mÌQÄܰúúg >Û7W70ø:Ð>3ôøUUUUUUUUUUUUUUUUU¶Ûm¶Û!"AñV¥YT) &F*Çñóqê\ÌGÇü9tÌû?<LL
+ªªªªªªªªªªªªªªªªªªª¾ÄA1DÁîvóæ&ؼì/L:Ï[mµUUUUUUUUUUUUUUUUUUä|àaúp#á±ilAüRÒQ#iil¿xü"u×NÓR«®}ôúûöVLý¯Û.aAº0 ÝPn
Ì(7Bæ¡s
+
+й
è\Ât.aAº0 ÝPn
Ì(7Bæ¡s
+
+й
è\Ât.aAº0 ÝPn
Ì(7Bæ¡s
+
+й
è\Ât.aAº0 ÝPn
Ì(7Bæ¡s
+
+й
è\Ât.aAº0 ÝPn
Ì(7Bæ¡s
+
+й
è\Ã>|èOÒþ!Áj²åWéEZ®·í;N+¾÷Þûï¯ïËûïÛ~·gí±Õ¢H±iUbҪťUJ«V-*¬ZUX´ª±iUbҪťUJ«V-*¬ZUX´ª±iUbҪťUJ«V-*¬ZUX´ª±iUbҪťUJ«V-*¬ZUX´ª±iUbҪťUJ«û÷ï¾ýÏ¿~ýû÷ß~çß¿~ýûïâ§ìÈGñ
+Ç
+ÍeUUUUUUUUUUUUUUUUUU\ÌÏ RÒN+¸By!<hM!>y úT'øÁ?2÷A;Ô&HO©B~ T'PBe"¬d¨{Wç ú*>°A?pMú'*«ÿ'ì`OÝ!>Ù ÑBx*"ÐO DUøÔ*4ªT¬û*?úB`MIWrø¡>
+¤Ò%.N«(O¹Bw
+²ÌÌËË3UqÄEWUDqÅUDEQÄDqÄqDDqDEs030Ç0ÀUU\qQÄUU\qq0¬³1æ¡QöøÑK Nä&(O¹B{%V'Ü¡:¨O|¢*÷J"¬Põ òÐ ý¯ÛBÿ¸|ÀUW夽å èøÂjQy
UWJÙA6¥SÍBp¡Q¥ ë{nBpIW¶Q{à:²Û(¾Y(LHNèLte Ø'½Byê¡>YDUà¡<è&A<ÔªtEZP2ôE\B~)DUÊØ«íB}°êÊBw'¢*ôR©æ¡=ªU;¡=ªm½'PÊ"¯ï êR©øeWT*J꨽JRûÐM¨M"»Å*ò|ò«¾Qq(½«&ä'¶Qy¨O% a1BiBzä'|ôtTE]%WÇ ÒE] D¢*êEDU¸'¤&ä&ªnÅBwHM¨Ob%yÂw(OÕ(¾åDUÔÖBuõÈOE**JÂQxÈO`MJ"®ÒûÊ
Eÿæ(+$Êk#²wC\?ðßòÿûýÿü
@ýûþ _ 3ãê³éT (g¸©N¶²¢UM´O# Þ ïC¾ aÐùÜp@³'
+¢è>ØÐ{¸; HA¨Ûª ô @à
+!Ð#tx!£ÃÐ
!* ÃÃ`pl 9((QSÿ`IU$Ä4ÑÄÐdd4a i£ª~¡UPÐ&& ÈÑa4M
+
+O=U%OhÑ`¦@iä©5$ÄÐ C 4 BQêmAé4iµ
+ @ )DD#F#&@ЦFhi²ÔQ ý
ýÂWý2èÄÈ3
[W,â¸[MfaýH?O-)¥&¦tªÑ4aº¨½ù ¦*¤õÕ
+9Ê¡¥PÑZdQß$Wæóø+R¤`_ÃüuÎgÜ"j8ûÊÄË%/ º¶÷57Úc9*øhÄ.B´¸înûÞs4`è:4hÁðÑ£]AÑmº+Brh ÍÉ '4æ èrMÍI¢94h¯@èÑ|0{
+Ý£F½îó¾÷~,·à»´u@®hMY£4)3mÑ.ïxk|:4G÷¡ï{ÂûÝ÷£Ô´·Hm;[FÆÚÛ¶5îÇ·+W+6ж ª´´JzBC M\ÚdɵN²kodµÔ¶f'wm¶Ôéi$ ®I»$¶Ûl !$vÐ + I-m¢KÝNI '´»ní»m¶À¶Ü¶îÚI2ID¶É%m¶íI-V´Ø9cÃ2ÆàR©¸7Sv©l7µ:V $ã"j8fEòc=T)P S`¬·nÕZã!ê8fEòc=T)P Ñ9f¼ÁaU
+T(68N"£ÆdY¯&0XAãÕB
+M¨åKVkͬÈ`d+hÖ\JÕMÜ
¥a!ãÝÃ.\ã6MÒRÝ5m²X#Ov"Pl&í@@2ᩪIÆCÔp:Ì5äÆ<zU.J͹vNB£ÆdY¯&0XAãÕB
+
+Øæ (D=Gȳ^L`°Çª
n¡A£%r6ÞáPOp{©0ëK[t 7xÞAï7+pn¾&§Íá&Ä»Q¬QS42]Fë8åÕók2&=T+hÖÃ=G,²Z³^\`°Çª
*uH$ÝÈZV=ԥ˼fɺJ[¢îÚÜb1%wj%ÂnÔ-»àn^ÍÙ·á¹ÔrÔ#Æ`
+¡,pnD2È,Ãsmñ;ÉÞ¨G«XÕÎëïkI}ÖÌSpLѸ&lnâxÍã `dz"¡, ò(*À·á¸¨2Ápe¨[e'£fZ@¹b2Ç©b 8ñb`E¡n[^[¸6Byha0ÞÍÆôÍÆöÏ<yç[î\U²à¶KÈ)ìõ¤ôUûzpvfÜçUÉ¡sµ¾vxîðìñÊÑá=ÞEÐúì'3:é-í¹wwfÛí´W§'< zZÃ%¦XÞ;î»
+%uü][ïJñm
ëUÚªåZonÓvзwc@!Ìé@ÀïÖÉ"*¹²½lèâ%À´<³·2a mI5;Ã.A]]Ñp«*Ûª>3<UÞ½ä«;RTîªË¯C¼ç&/*ª_ºâ¡3;Ýѧ'dì#ÙÔË«¸3N=n&í´9§E§ÝYC0ªÎëÉÎV^¡¬i5¿792¼çªD.0îÙD]në@¬mrÆ!0$»·s)Ð ¨ÂÆäSmÉxÏÁìäfìõ]ÛZBÎ9ÑU( z
+3ZÓ¶«"¹Íª¯9¢ë4áÚ¸Bo´Må¦sFò±°ÎFö×'·eØ0Â3¾¡ÎøÄ÷xvxxÒðã#ys^èÚ;[;×ô}àøºá+£øïÙݾÔ'$dzFª¬ç·w7}Í»e²Ö5ÀÀÏO zOj w».u]öÍÙB¸Ö@ñsÕ@:Nê©UU2Ûí²Ùu§Õî»N.¼mÒ5Ôt
+Tå÷°w[[¢1!p @¶Ó£m´¼æ+ZWÝ"(¤Ï6Ù¬*r7Ê·vÃa!''|Ë,8ºÔ}ÅÖY\$]à¤jsÎÁAÖôÝϬ²¸?»3ns·&
ÎÖÎ.µx>.²Êàþ2ì͹ÎÜ>KuKAg/wswwfÛí´WºOí @%¦XÞ;î»
+%+ë\Åov¶ÂÇuªíUrË-D··i»h[»±0Â9ÐÏIh1½©k°ú¶Û%00ÓÐçÒãIp´H^7WnÝÀÄl}í¸l×°IU>ìÖta2~<goÀ%üfK=qddó½9:ÞQË'dÊaÓ¨-"ìì²HĤFr0d¹³y/)ËÉîö7½f1¼£%³Ýìo{&ÌcyFK'qÞÆòK'crvc9ÞÆ÷²lÆ7d²vc;½ïdÙo(ÉdìÆw{ÞɳÞQÉÙîö7½f1¼£%³Ýìo{&ÌcÎùpñ<Ìtó1¸ÎnëËÂé$*³pÆL²adz
+æËÞåÈÆí6áâ×xÞ;8¼o9ÌÓ]ùÛxí,ÎÆÚ2Y;1ï#g$³;hÉdìµß·Î/Îs4áâ×~vÞ;8¼m´d²vc9ÞFÎIfv6ÑɽcÞK9#3±¶NÌg{ÈÙÉ,ÎÆÚ2T¸¾à¥BU}Å-®%Râú# UãyÎf<ZïÎÛÇgç9pòÎw% .!rs&\É;q\¶[.KɽùÛÛ<Þs·/O;·3cå¹Ç76¹^+NÞ;·3±Åy¸ÌÎ9rËcâ×~vÞ;8¼o9ÌÓ]ùÛxìâñ¼ç3N-wçmã³ÆóÍ8xZïÎÛË9Æòìp¼mbÙa%uåÞmæGì³äëm¹Ùïy9%ØÛFK'fFs¯ÆÙläÌ´d3±²7ÝäÃ䳸äëm²vFw¼äNËçc²;3g;ÈÙÉ,ÎÆÚ2Y;àwç3vìr79¼ã8<ãd>d2åÀJRÀ]Q8MJÓCMCµ5f©¦j
+öcú1kÇçcïc:cqcÆcÆ8Æ0û1vÇLvÇÆ8Çã
+c¦1
"tÊÁ0dì$ØaÂvlþ Ñ@}ÐûF & $úÕ
+KP¦ & $}ª
1"M¨RmB&Ô)-BÔ)6¡Ij >ÕBÔ)¨S
+ ¡L at H($@L at Iµ
+KP¤@Hê
+D $²¡H"D >9åUUUUUUvÚªªªª¶Úªªª¶ªªªªªªª¬UUU²í¶×\6Ûk®Ûw ºñBæHÌ 2 at .d\É ¹s$æHÌ 2 at .d\É ¹s$æHÌ 2 at .d\É ¹s$æHÌ 2 at .d\É ¹s$æHÌ 2 at .dé0\É; 2 at .d\É ¹w2 at .d
+Y 2 at .d÷ß:Î÷{üBüP@þ l¢^D¾¹Ö¯"xTår§4®%]ªN0¸º]®J¸Ë¤+¢è»]í.ÑN
ÅRÕÿ´_rðÃï}íq´âûÌqÓMkXáÓsN§?NI$êwrIgo0 ¦Vk¶+1FÔ Ù a35 6À [
+¨0zósîNIÎݬ$Mþ,öü7óøÃ?ÚÈ{ÒûñÙ}ïÀ¾û}ñxøåÓ¶üF$lùâ/¼Âì¤¦Ï è½8oHÙó[¥÷SÝÔÙà§mñ#~kt¾ó
+{²z<¢ôà-¾1#doÍnÞaOvORSgt^·Æ$lùÒûÌ)îÉêJlðÓ¶øÄ¿5º_y
=Ù=IMÑzpß²7æ·Kï0§»'©)³À:/NÛã6FüÖé}æ÷dõ%6xEéÀ[|bFÈßÝ/¼Â줦ÏV^·Æ$lùÒûÌ)îÉêJlðueéÀ[|bFÈßÝ/¼Â줦ÏV^·Æ$lùÒûÌ)îÉêJlðueéÀ[|bFÈßÝ/¼Â줦ÏV^·Æ$lùÒûÌ)îÉêJlðueéÀ[|bFÈßÝ/¼Âì¤¦Ï è½8oHÙó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8oHÙóÄ_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8oHÙóÄ_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8o¢HYó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶ú$
¿5º_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶øÄ¿5º_y
=Ù=IM¬½8oHÙó[¥÷SÝÔÙàêËÓ¶ú$
¿5º_y
=Þ¶I$I$ ÊÍvÅf(Ú 0Æf l6 1Þ9ÎNIü¤rþAöïª{÷ïß9Îs ËQ6Ũ
¨ f¥lÉ mj¶[´ä CB ä\Ì´ ×9Ç,s¾rN
+ef»b³R³P ÌÔ Ômm¶Ûm¶Ûm¡ $äZ s2æe åû`è<"ùó×®sé÷w϶÷öé~4à-¿&$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÝÔÙàêËÓ¶ú$
¿<E÷SÜÞîîîîîîè w$éIh ÌË
¶¸ 2ÒݱiJÍh
+² ÃjZ ZÃZIÎNu9&ðï³Otufï v'zÒn÷gLyèÎs,¤x¤á××§käÝá¾2ôïlcAôçF=áÎo£ÙÂw¤bÈRRç»=æ/:mÕä-#µN!}·Yv!¼eW]zPffw$$oyÞMÝÝÍdÝU3dÐ t5YUUUÌÙ-º-
+¬W&îîæîîæÉ²nªÄÈ W3wwswwswwsdÙ7@ÕbLÙ6MÐ5DaÉc&,F1c0Æ,bÆ,bÆ,YF2c°Å,1aXbðÅ(Á&,VXbÃ,,30ÅÆc&°Å)fÑB«õ·79·êÑvt,X,X±bèíÚã_×EÎ>_MÝç
¡hZ
¡hZ
¡hZ
¡hZ
¡hZ
¡hZ
¡hZ
¡hZsç9ͺè´-Bд-§9'8Êè\×G
t[±EAÖâÒÂ1m&P¢«P~¬>¯Ìÿdníüà~bÝÌÓwFîºjȬÈãLW7íý¹YYYYYqÉâ²GdÈ¬ÈÆ9"¸¬ÉW1Ac$~äϹ33îMþ&+Åb±X¬V+ãVEdqÆ+ÈÆ1X¬V+a¹¹]Aüm£øG9sEòþfiºiºiºiºiºiºiºiºim¥¦éügÇñnnnnnnnnnn-¶[nÚ7kFÛnnn5£s-ÛMÓFífiºi榤c$öN@ùÍ1X"±X¬V.3XçÝ @ @Ì0 C HB @LrtqüqÎmô^_ÆZÝ5ºktÖéÓ[¦·Mn¶ÒÜÍÛè篸ã$A" HD $s8äàq!âGÉHD$DI !L×M¤%$HwÎwºÌäÉ$ÜsÓéUXªªª®8â½Aù_ÌþQ»§ç¿ÿfn黵»¦î²+"²8ã&+'ÞûßzEdVEdVEdVEdVEdVGrb¸ÅÌcH¬È¬c+ÈÅÌÓrÜÝÓ[£?Ç~ò¿nHÿ
+¬(iV¡^ÔV))ÂÅX,X«!Á1bÅbÄa,F,XXFaa±bÂLF*ÂİF#1b¿nBî¯Ýä~@ÌæÛTÀºUû·½LÉ\Ü»æüË«¦°ú"Ýe@ø¼õæVaÍï×®®èOP¼Ä,÷´
^»z½¬ÌÌÜÇz¦]vuÀ¡9$9K7îgzàËs¾ÐuMÒvóȸÇ=íÝnÍõÍm[oûkôèÓi±4GöêI#;´ÖíYî·wÇ2&E9&Y}$ÌÎ÷ÁîFïu'wáÝh@ç^N§C)Èeؤ#Q¶/@7r¼
v¶ð=Ò3Ç:§T·)ð¸ºÔù¸QçN7ß§ZCeóä<E-ßQöÍ©6¤Ö½ææ»ÇFç}&LлrÛdÍÆ t ,6IØÉ8sÚе y4¼Ù9 º -·-¶dÀs åÀ2¶× u'nÒ%¶ÙÛµ¶ÚZÌe×YÓ£·8×ãEôù/¾Köþù/©ÞþâÛl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¶Û-¶Ëm²Ûl¾ûï¾ø [mÛe¶ÙmÝÙ»»³wwg&dñó&|ù&}RLÓ"N:ÌWѪ'}G¶YÉãÚÜvú¶&â{tÆ'ßTª±±m
z½ün{Û®°Ë3á<ù_;ælL|"Óã,ñî'/e¯/
¾½¢kÓ=ßDí·=k}(¼ù½[¦dÓ+Ó~@ú[Tªºº}"b..-ÚÔÙôw|»úGxg7éÎ[Òô^âqr=´ØêÙ±6·m[7Ï]̽}YôÉ@ |gÇ35ÜN8ã2øg;»Î.]Hó3Y}±¹Óá6È=ëùÊÖ6äOÄNÖDÕ4ȶ'"i¶ÒdgÌ÷Ï£tàÏ ÎÆ9ËjæÀb^p$aÙ;±<ÅXöçyÍ¢ïssé¸R1âñll{ï.ÂÒw{'ï¹Êwc=`Ís;ßXÆ1cÉKHJxua
+m;îîã;¼z¸ó{¨²±à¡[dDI$3ØCYªÛcuº&ePb¼Û>ʧ¢Õ$Gkãï²éÑI$Õ¦HÜRF 1F?²½I$¥SD³;n³_òTWï½=¤Ìdû¨º:,&ϱ2Lø¿gF4hÑ£F2åË.\¹råË.\¹phÑ£F4hÑ£F4W.\¹råË.\¹råË£F;Ý4hÑ£F4hÑÙ&|Îiõ!B Lúù&O&d³¤ Ùº9¬Ü³6˧=uñO:õÕ½¾ØÌd¬3Á1`ÃÎ-Þê×+ùuKe«mjÖá3oó»ÙÊíååw·kÑç,ùÓ}ngxÏ_Ì0bbYXË10yÇ«âøÓ§Eè¹sÊW.8_:®GÁÈçÀr¶ScC}^¢ts1ï3ss^>.Î:®Ø¶5R®'¨0ªÆeGåÂXÆM0ZYUihã)hÚ¶jÚ¾/r¹/>=YçÏ/UKÝÜÚòÉñkN¸®rç Öí»ªêñÈõ0ñYOhå;vøqQÇ/
ÜN¥Q×SvÚäN#g!râîeòþý;Ïìý<ë¼ÞûþÝó·|?ý½ï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀWÌÃváÀôàzùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvù
|Èù7nN§¯À©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvù
|Èù7nN§¯À©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±
ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀWÌÃváÀôàzùï;7nN§oÀ©ó±ÃváÀôàvùï;7nN§oÀWÌåpݸp=ÁÓÏ>
ó#ÛÓ)Ûæ0"ÊæüìsnÜ8Nß1¯#íÃéÁõó
+ùò8nÜ8O_1¯#íÃéÁõó
+ùò8nÜ8O_1W7çcváÀôàvù
|Èù7nN§¯Àæüù1pàzpE;|ÆB¾d|·§S×Ì`D+æGÈá»pàzpE=|ÆB¾d|·§S×Ì`Gn{Ï¥}/¥¦×àÈÜO¾&þ&GuM8Ë\eräxÅÇ*º"¬®¹HMåÇE³®«6tê ·:ÚéÐ0ÜäÌÜNÅø=v;ËÍ3k3±fe¬Á°ÔÃL¸Æ4dÜñM$! gÚ&ïÁðzóÁäòC¢]T.ÚA ãl"©[ÚBvx½HÎM
+ì÷Çg÷Z7è¶[}Iî÷³½#;Þú>X&Gcîú>ÆÞÆ\°Í°E|ݺÙR¥Ýg6íÖWo<´»í}mÄ1É6å"Cl¤vâymVI¶K"ÈÉvÚª²mÊeÃM?*Ùãò.ÜjûQ~J-ü¾ö+Åb±X¬V+Åb±X¬V+Åb±X¬V+Åb±X¬V+s330µÇu»Ýnëwx¢õ}³xú`}×¼IâÇ[X2ea1c.5nnäû³¬/2;Q¦²&ÖÒ®ÌÇÑKòÄåÒ*±4V-ª]Ø@à(§õã,d÷
ìeØ*²SȬ)&+1Þ.ñ¸w
ÚÜÌjv&ÊÖ*ÖÌa¬±í]*}×½µäÛv8&íhã=b»E»|*äx&& q¦àÊ %6yß«´\ìL`+\¤ï¯{ÌgÍ:úvv¼¦î B$6lé$¥$ôbÜàAË7·¹³mÞ·½#:Êg¯}<ãé}8g;ÏÞʳ_xò1ìzK »,а[Óa^Xç9u+BrI32}ñ÷wNh
#ïH)dyµ3L@&r^yMÝ·wE®ë!¶é" Cwa'#Â.ÛmÔn7÷ÂÆP1¢>ûåÆ)!dͶ¢I¥cÍϤլßÑ$(©
4B÷Ê$*H¤-æÔoï¾Pï¼ÎÞøÇY´íd3
+4¦Õm0fÁ3`ÌÃ%cÁ3c2¬ÊÌLeY3^»ú±xºK¦IÔÓ©/^Zl@ @ @ @ @$í<^üqÛ©mäòu[l
ØQ×§ëAnf óEéï޻Ͳ³ÚyH»tǾóxtqeâÌÌò*ã¿3sÇËÃq'aU\²ñ®å¬Æw[°@èg3¹TVrÁ[N!5¼ßWwoNù]Ü·>»Î
+¶ï
&¯:xáÓ.g:2õãÊèí]äáã«71ÎÅ:øó±øMøá
+9Ô
+ÙÅÞN¿Kèn|éIAé!ÞöZF>ã;ÈÙïvÆu=ïÝöz¾}Ò3'¼F6lál BZötÎùöéºJ3[Ë·]#¯CW$ß.sço77vKd&æåÈ dÃv2hHnPS,]ÜÝÝÜÝÙ,Hi6MÂC7w7ww7ww7vKd&æÉsLdÜûLõä²vg;öUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU~>g >}Ä&BrI2I!à ±3>$ÎÐ2oI4p°oÝk¦K,0bÆ.ý]¸ç!í2HO°HCä ÎIùrHÅ29æAfÑ6Í»ª=ü|{Ã.³£6nIô#;èì'²i|Yrîe77.ÈÙaa)ή®øºæãr
+t&å¬XÉÌ£°ëÇsÍÓ]Ü33¬©|¯$2L$;ÜwÐx³Y²9ÀrÉ2ñ'²L9ñøøøsºJùñãYË^`óa
¯©â[B úoye:[yîz>Þ#ÙϰÄ;=j÷<°yï÷¬Ó-Ùtne(Ð^T.ÛÉí}Z}ëÛk#'nd
+º ¨ ɹMt 7j¬º
+Úª¬t 6Mzë33>µGªï(úåÞf\ÄmqŬK,H¬V+Åb±X¬V+Åb±XX¬V++Åb±X¬V+!:Üñݲâ±ÉèÏìN_[ydÇ6²=9ç¦o®°G³Y¯2ÉÉ&KdäÀÉ
ÌÀGsÀÍrÏö=·btØÍE±5XÌÙwß®¼s[c&Ó3\Üë§*²`¡ª¦` dÉ(ó·³3l[æwç]ÔsêK¬ ñÌ$ÂEY|K9ïßxËvÓæÉÏx|· 3,é&aQÂFNóºkÉ&Mlc"c*ëUleCÖÚéï¬æqk.wÌÝèN>®üÊî«)¸®±¸7,Fû¨¾(zwËô~9Ýøµp´[ ^pRCÒÝÍÍ0 G§YÝNõï)®ØÆ¶s÷½Ð<Eû½1ÎÎxyñïA½NÏEñHÊG©Ãiæ<Ëíï/ Þñ(n[rÛnBBo|ñTkmVÉ$nEò¶á m¼Û` $$!¶òJ¥Umº5ð m½÷Ù,Y¶÷ÃK«/ËKÊ/GoÀ vý§tÙ-yß¹<'kÝ/m¥Y2YÞôñçxæçóZuÞ3!|õwë{³3¾®t'Öñéç©{Ï~³[g¾ø;fìO»½;ʼÇÔ̽tÞ ;otnm»ÎÙæo_G~© f}`¦îXò{XuË©¬±0åÕ:Êãï=ÈyÞaÛÃ0ÌUÌðÌ3À¹¹}"\4ã¡Çn¹õóéß}÷½
îü×Í|ãm¶Ûm
¶ Lú¦ &fFI&ùÁåéѬ_S¾{ï¾wß}÷ß}ö å÷ß/Äi£ïú}'·ÄN^Ô_*-Q~ÉEüè§rù(§JsÑME>ª%ÿt^/H½"ʦAJêÁùh¿Aô"ìûqüÊ/ ÿÒúÊ/ê¢þÂô^_t8"úæ¢AýPiE¸¡ðQ~J/ð^~£Â/ª©é(¾L3$ @ @É$2fC$ÀÌÌÌÌÌÌÌËaöKô"ýe#²¾XQ~ñ_¤¢ôQ~¼?"©Uj)âÑN ~ÕOÞUüU<I^t|Rºª)ÓìÊpQíÆ"ÕR}J/´"ZQ~"/È
IUúª®ªSÉsÅ;
+¥UÚ¦$_XEáE¥¡Eí÷J/ª/E÷ ô(¾Â,"û*À@ÒõÊ/ÂQ;(¹EU~
è¢ù(¾¥À¢úAðTE;K¼)ӸĮ%é`û
Ê/½T¼zÞQt¤~Á
+.JT>jªú~Ì>A @ü`Ñ
+/ÔØ¢úX"â,(´¢üEÉEøyòÑx¿|=Ql"ü(¸Qj©9E÷_
+/ÆPCíEðQL?L=¨z(½)×¢0K½¢(§ED¸¢üh´=/Ø©%/ü]ÉáBBIO
¨
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,25 @@
+Machine (P#0 total=4192952KB Backend=Linux)
+ NUMANode L#0 (P#0 local=2095800KB total=2095800KB)
+ Socket L#0 (P#0)
+ L2Cache L#0 (size=1024KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ NUMANode L#1 (P#1 local=2097152KB total=2097152KB)
+ Socket L#1 (P#1)
+ L2Cache L#1 (size=1024KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#0)
+ PU L#1 (P#1)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 NUMANodes (type #2)
+ depth 2: 2 Sockets (type #3)
+ depth 3: 2 Caches (type #4)
+ depth 4: 2 Caches (type #4)
+ depth 5: 2 Cores (type #5)
+ depth 6: 2 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1
+ 0 1.000 2.000
+ 1 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2amd64-2n.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,14 @@
+BZh91AY&SYÜ¡² Pÿ¥ÿðQÔsÿñ½;_ÿïßð P *ø`Þùè>í@ÈP q¡ hÓ#Md& ÐdÈ8ÐÐ4i¦2 @h
+2d6%5@ Pié ¤Óħê4 6©Qå=4#G¤ÄÐÓ Â4bbÐi¦&0&
+B&LCj§¦PdÞ¤ñ LÒ3)O'ªBGÿÚ,"¸¨_7ÚºÄ-dç>IŪW³ÛþùñjGÀÒIE ÔêI" %"TEäÓãøínU·ÄøóUþV¶µZ^
@bh
+C¼44 Á'e5®Öºb±½VºÖ¹ÒùÚÒHÙ$$ÄlÎÆUIK,HdõÈÖ©¦Ì°Ý}î6av°Êô.YuÒRfhGÁ¼H*©REB%H¤¢Ê
(¨¥B*%§àz¾/ìéákgĶR[\pÙÅ,X
+(mê'ª:ÇÐ à@ P^H;^.àpÂ몼Euâ©UJ BAÁ죢Õ*LÔ9¥S¥4ÂI4RÆÎ×PÏÃ%ªÖ 6µlfƨ4¤
³bH½î$µª®´$¨LQ,]R(ÆÁ¢!^!D+*Ô ¨M!5£8IcY
4ó¤¹
"Alß¾n^ö
+=¾z»±ì'o\Ie¥)BÑG2#tH9ð²$T9¬üî{ï¾ñ÷¹î{ä÷&]<}¡©Mìê]éù=û?OæüNû8<@HôHèö&Í5&RH©l&KÒ©¢¢ ¥¬M
+J¢"¦%/Vª8ZÏ^5¼ïp×Z9§}ÀÓØ÷¹ÄZRµ%Egäg^£ä\×ZÐ9Hè߬Î]Yµ³ÃI1*£
+W¬çÛºI£m3ª÷â÷øòË\.p¤4£÷í¶ô[Z®RÇËÑ(Õ9¥iu»çlôkÒªrµåpÝqΣæ¬0ÄF¤«ß¯mM)Ù{)Ô©Æá¶m´ÒÉeZÝÍ¥Q·=%±È©*¯³!KirA
IFÁ<¦\" á
+eÅ
+^²OUçLéLX)JMgR¼<µV¿o=kR-ôÆFdHóßÂR°yÞ|gOo/OkR$nÙ®ù4åVÓfa®b¨ÑFZ&Üs{V)$íìEé¦׶i,à²kt7MvH5¾sÒåmØã®àtÚûçfql^Üo§8Õ$c]î¾yöÎú/Õi)=ßñhºb5º¸[«NkI×ÇYIJµA6̺((T¼Z®]IÉùÒH×|çmËe®®ý»ñi¶k,roÖ×Ji®ÒfËé2¤5ÖøÅJöï-uÖ[M8ªaxÑZ¸Ø¾ÎNo¼Ë·
+ÔÓ6ͳêU¾«?#°äd·ÏN
+]t|@¦ÿ«Oü`þ
+hÝ»Gл\°þÙØ¯öªSêò§r~¶Ëy),Õ-Á8.9¤ÅÑ5RÏ¡ýD/ÝÞàú^
N
+Ó.¸úVI#êNIO:hÃéx§7ÖeNä4ÂQüÄB¥FJ54E¸Ø!IQè]ÿ˶M\H¤e¼I#)7û¬¢ígº«ÎCµkRHg%>Ã+>ÅÔõ¶JRSõöè÷Fé<Sº`V:´¤Êû$Ð:9Ò®hC¸n×a$9¤#dò¸9°,òC #Hðó½ïºÄ:$JIÜ£Úê¦ÎóÁ¢u¥¤ì'í:¤Ojç3ÎÄñI#¹àL¯s#u',áª]Hâ¿ÜÕejFÃí$gÔÝÁªjû-Î1'Ús¾ÍÑÑMÆÞ§¥à; s'jI#½=è2âó¢ÚVõkð:ÕËÌ:
5s¼È¶W$É$PÄ{Î'Ûa¢w¾·²ìW?RÉ$lîöi; $xµòDP&Ë'¥Á$)äMlh).NN['ZíH»i0ÔIh]fTaR$av'É(Õ0\)·zH
Õ,¡»wÖGØÑHRÚØ,Rɱ9v"Î)IÒ$ÓÊ-"FäøRû¹"(HnPÙ
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,11 @@
+Machine (P#0 local=280840KB total=280840KB Backend=Linux)
+ Socket L#0 (P#3)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 Socket (type #3)
+ depth 2: 2 Cores (type #5)
+ depth 3: 2 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2arm-2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,46 @@
+BZh91AY&SYIûÎ ÿßÿÿûÿÿÿÿÿ?oßÀÿïÿà ø`;»á0e%Âm«N¾ÇÜÓ Ã¸f²D(ÚvÂ@PRºj50M@!¥I¨Bm@Þ©å7 £LÔÓM"F¢4Õ4 Ð hh 4Äi#SP
+ 4 õ14 §ê%<¦ #L& 0#&§¢hÀ& C LÈ0bF at b`I&Di jSô¦ÔýSÔSFCeP h44=@Ф;â?r'*¨,£X "D 0P
.û$@ *¦*TÁ¼IsïþÁò¾I/ÎqÚ<ÐæÅO"e©"(zG;Ap¥@:õ¤c§M\O¹IýÚñ«ÜJȹ°k+qÅU³-yhúuAG²EX xó"A Ab¡õTP¦
+Pîôç·ãÝßMÕS«§_&M42rE g/-Zxjå·nòòí<'&cUG&Ý©ÉjÕÊ.pfC3fô!Í:ux'-6å¶ïXÙ£nòÅRÊÉJåÝ[Jª°b¢®åQ˹trî]»G.åÑutD·eÔÚÊ.îr]Ë£rèåܺ9w.»Ì4[!¤¬"ÕVXºÔ DN D´DÜ ¡ªH£,BF@PQÕ5$wwj@QQ vuqKº°*$´]KB"! "IwWJ$´B¤µ
+P«.îÊ(¤ªª¦GÔÑUªÚÜ´ $×%°Kv:Rm$9Û&eX
+¬Q¦Vº
DoÉ*6ôgb¤Z,H$'YQ`£bĸZS
+dÆÐ)ÎÁ¬èJw¤$²)ÒK$ªÜð"p!
+¡@dE at HP1bBB
+H¬"@ªD*
+H$,j?rT8pu´Á ým×ÝÊÃ/ØÏâu{Á¸17Yím³nËõúí¶Ûß!ÊìjæÆ¸BGÒL¥U×ÊÃÜæ ¬À£¡"`M
+OªÈvÄBv yWdä åc&Hº©úª¢Ûg P¬A+Íâ6¿8½áõñ=Ò ¤ÎÐCûÂJ6.xöòÎÉÏ» @âmóßç°W¢¿ÆÅ§qt´@
EÈ %¡hæw at O,D¼KD<Ðr%âÚ(ÔrÅõ¸Z
+Løò!äùìë«TmzTÎfñ£ÔÕ+ë×^ ¨[Sè¿L{¥O×é<ͦS#^Q
+µXÌÌ-ÛÌãÃ}Ú´aU´ÙÅ(y9¥~Y[Crñõ7y-͹EnÂ¥®JaÚÖvÌðÉUKf.iÄíÿûDØË׿îôcÆ1çÊUo1ë³fÍø±¯{C¶Ã=ÿÏ5²
¬Ö½&ÊWùeÉ$»ð÷w½ï{I%¶y5kZI%¦wε] Õo{ÚI-³×]zTPê"*yäyçyI%Ë:ÌÍVµ$Ó'¡ Û" ÙPQaº¢H¬V S7X*¤H«° Áb åb¹IßBÞüxñÆ1cS°ø%º N²Usí´m&Æ6Ó]$ ºë®ºãÆ1IºtVFµt<@É{ÞÒI-²{o0#Ð×3ÛXI' #°îÓT¤JR*00034º$®jªÉÄDªÆÅ\[cd̺^ I%ZIÊ|gj¬í/¦n8°"%@o{>°àÏʱØU2.s*M "\Á
Qé"ì\Ý·à
+{
+W/ªPÐEãÁP#Òô±k<ï7·W5þåèØ`&`f2F"`6ï;AP°ª Yd!A
+³$ÝäorOB¨^i¥åîõ?)à<Í>§M¡GFF³¾/éÎ ïsÏÏÏíû~60ãÇRïçIw³Î9Þ3çíssc}÷ßuÖÛoÙâæà?p®ÙïÔ¦[Óèç9ÎrHôA
+|·öãC¥mD) À]T"JUðC²á:{u¸¡Þ>ýÔèÄoqDSòÈBI>PDOj©EhÓDKúü{ ¿êoÌDL²ö|µ`A&¸¼d°A/ /jD¤%íhà-sÎø%´4̳{åV«Þb`Æc<8_ëé¨ßÍ?:ûá]ûÇRÙ[h`½V
+" N4WùÅó y H at A Da¶xBu¦È*t¾ërÜúrz:ïî¦u3b0äÞäÉÕìDuµÝ?DíUW®Â×wMÄ·ÙµbByDDgÊì«\¤ B"èXÏéàå
+O²Âk¡tÄh*VZã B|bíú("v>f{÷"|×î9í8r¶®0¦PÆL±{Hbö±kc'Ò# '"¼§µ§MÙo8N"</zê"'ë®¶'zJ¼´¼4hóªJÛ;@DK¹Û* ¶!|n&´ |Ë(
àµa A5Q«ÊÅô»D$1@¡|¸²`åìÄ´N°´k¦¼îZ;±M5ARb[M¤2çã ÙÇVl)\HëXÊ#Ô¸
+I>¬úýxÿ@ÅéWåç4ÑÏûu¨¿/ÖÌ1U~gæãmö6âxéD)^r¥¥båÄ6ÛÓm¶Ü@fTEDÌÉ}RÖ´â{mÄ6Ê7s|*Q
+S\8Û{q
+¶Û(Ê' ²
+\@YÐvAG)³u¸6ñpÄãdÓx
+VU[)P¶uy^ö¼.LfxGÖQïíëá½|üÄp{ð9[B$1ZÄê©7ÒS¢LëZÛ[bǶ+@Æeí
+ÎÎà-çïÖrÆ2½ÈBa!
+ïih!Åßv»ëâoaTê¦" ©jÜ C>ÓtMá!LÉh
+<·Ãdªª,U8¸! ©ív}EÙ¤Ru9мB;nÔÉß|t»ñ×S@ÏCÀèQ)û:¡S @ÂØçUÉ
+¼VÞ.ÃR¥óg¿^"¦äPϲê"LTŨÒ
Ë ÅÇR K<SÙö¢¸@Xà÷tlDXà ι| 7JEÛ@Ù!4$+V Üe;KV¼3¾ADAHDFöâUì"vÐ5ëÅ
+&WëvÛ**X/TríË^)ðç
+³Q¼:.ÊT4qÐ ïY¹QD;ÔÊǬq§ÚÇVQCRÆ;¶U
+ÝM$eÖg| 3Þ< ßQ:U éá#vî.]ï)=æ*¹ÖRðÌ*2&7(KÃÓQ®S,ªúÕí[-ÛU8R F¹Ú¨ÂNÊ©4Æ4±§%.lÕggyp÷ãñC,kÀzÍ'#s½É¸7"®Éw32&$ÕI0aûOwD#Ρ߳SKe¬·Ù½¸ÝN|©DMÖÕ»ñ<c×Å[÷!0º©W~ªì¯ü^RU½']µ
+#*ææ
+§)tÒ"AʱÜî-®¦lÚ«ú¾~åaɦX¦63Í{W\VÈdh!¢DOø¸¤vú-Õú=A¨P
+
+1¤ç>hF¿ÝÈe*J>8#û(zâìþð«1iIÛ7Õ1}Çý½ÁE'í.´â`[(Í¿Ó-Õue\[Ͻ»]¨ºÐ¥7ëÅð
ÇCuÖin.Gwwww"C2° i'&k3`9
+Æ£C2!
+Lã"%°cKÆ{N¼Q}
D åÀîÐo4/?»zÔkp
+ K0:Aß6
+¿¹u¨Àôÿ-ôÁ<MMÁäÜyå¤Ã´DÞ"&ëäõTêwÛúò,q ¼0Q /£² QÀ ºw@û¥0.tÁkŧ½òzQ¨*¡Æ
+¡"ª¥A8ÎÁ5÷ä×@Ð6Æ:/z-z/iC¤¨Àë³Ù`DK"Ü" %ó~ü ¨;^^#°^À[ZC.-ÂÖ jôذ%â\?áH è ½°@Ó"³×0DO+¶FiFCF
8!$ÐÂJã¯ÁÊrBB²ÂG¼%;{57À ¾ùÔCuó¹
Í7a@ò{âÏ<¡eiUcàöýÈ|49Ý«ÈØÀoÝ@2à°E϶êÛ.§¤½Üä£à.o#þÓpë*0¹³2khªa"á ûIÄ XiCì=¼áè{L
6:^põøÌq=ó´<D9ª~g¸;ÍÀVÒ!ŰôµÞs)={ÀÞs}íKj·Nq@"ðuúÞc¿Ì9æ,÷Ù1Þ{Td
+N3¶{FǾ2\l@ C À¦¯øqïvì·,ª¡Ò3ï6°Ã7C X)Æ]Él3j£µ´'OÁD «X:ÄÈ{\rË`2È óüWTyιy©ðúØ<`u
+³
+aZð-yrÕ¡æÍ.Aò HÃÄó õ=A/yèרo3å³cw}+p ú_:-äÕæJ0X£ÚÞÇBÁc§S°s@=GCnàkßm¶Ð Òú ä$³2£]h-ó¦òå¼;xº »È$*¡<tض¡ba¼2rÐ5øåÇ
+Bá +ÎVg0-é¯_n£&bt6PøÈtéîqáßÐ7ìï"Uõ×Ðg;ý"«Æ°ÝÁ¸^I>f@&+A-{¥U
+acÉÀÌ
+ÔÔý>°<À¸÷ Qíy
U$ ¼¬Ü8fdSpÉÂS BÄâ@PxrÔrñfd( P £Tì÷bYåÜr»
+¯)bÄ@ $!Ì6éäÀ $ÕÌ*@Ür [§ÁD Æ{Nü²mlCMÅÊÇ2¡¶v±D'ÿË ¼ãJ(ýòê×öx"g+pn Zé![áø»CCMâXDâ75P¹ Þú2P9ýLÍDõ*$Ô:ΫÆ<ZB8² 'p@ OPÿñw$S
¸Üà
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,44 @@
+BZh91AY&SYÃDHÁ ÆõÿÿkýïÿÿþïßÀÿïÿð ?ø`}רÊÔ{4%^#ÎÞ²àzñÖ·¹u=° %)¢£4z1¦ @4m! h Ði$ÓÔÑ h Ó I¤Iè hdÉ 4 ɵ
3SIèOS4 i¡ Ñ 4 È
+ CDÑM£MOSÔÚ§©´ÓP=@ê
+ dÈõÆQÔÿ>`é
§LCª
+\`@2ê°>âÍâ¶Dv9AùÅÉô8!õ$Á}9×¶%(h®H)ÕL×Á D`,*TR9 Â"ZªHRB0ì0f
+Éäó0y|¸Y©&aç5aâÄ
+/A6ÄÕTѳB\¢ öêÔÜÕH(yg8k»&¦&IEæ
+Eò2 ´$´ eV"FdÉ
+$XPìK+]¹K)Å$ÅÁ²-*æ¸@20,½ÈÀªPC¥qA t® ×i_¯"%)$¤ZT
+Áa@
$¡DÈÈH %¢ÑÚ½Íâó=
+|jZ-{ø=¬^l[WY¹f
+Á{<<¹ÿûÌëç²Ïöߣ
v2ÃEx9¶ÓùeHWC
ÊÕVÖ'¸H¨åxâjÈÒPÖ»{*bÖ×]JZõïj´ÜÍm¯=ÊÚ8ûU* %$Hã*Hi#¾Ï_ÅN¸øúbnnQJad·àß»á»
²Ãï¥ðÊõÅã²B¦7RB(èeÀf
+IB
0¢
V<~öñÛ¡§ï;4ÀÂÛíþE¹$¶)YÓÞ/iÈÌÉèÅìv®Áïíhòxûw¾×Û=tr}&FÁ¨ÚÞÝÖ¶Þµ/z%oE,ÚÕkK4uLÞ÷ÐÞîÉݳ»cµÜØ»©lZ»p÷V5/d»'zîX/«ß·îü2y<\ÓÊDìhÌÛéûßgeUi?±cCÏÌìÇ·®gyÖ:øJU¤Ónx©Ll,`hjoæû9£.>Ûé{vÂ~Ã)@äÔ²7Ár,r[V|ÎÊãnSyÜælëkÊ6§mÌãÒúÕUUUUUUUUUiàj¸nIÄ$·^ZdáôUmó {Ýíp¾'tlöã]½©/Ù{F
+5ª²Î«ègµU
+»d^_FÍô4*®Í
+Îú
+¦òHâ¹
(ªª«Ûe*¸ÈBsMù¾ÞþÅL/
Q==ta ¦zH]öZZBe¶Ä42ID
+mi7-ßt:5^±wKß+v69Hë¶v}nxJ²¨
+;¯`*¥ø. G) 9¹@ÀÖK3äøÎÏiNºZvÉ4Öa ¨IBÙc^U3 ¹=!AÑã68Ðõ¢xï
+îßDÞy"ä¾R³fPÉÿ¾ûIeB«ë¨AGëôàgø}ü³k5P¨AL,½Ö¨KRUJ¢©#û4Á¾³¦¹²[M5và»Fqr8¼BºH4y B¡ab8Æ«¡»9®7bÁ
r¡0 ¦`ÌÀ_
+ÂÎMèiqzN!Ò*H"ÀGÐüÖÍqý¬ºnú®rá§V¨£.>eu¿ õiuCÄlc\VòE°3¦ð±DìÎÀmxòY6í3Àú{Xá
¯¹x%ñþÇ$¶8íÓDn$:[^yðïa7CsÊ<ãV4ÓSºÓUòmM¬-nC@¤L¡¶ ¬L(e£S*USoGجmÑöMÕ½ü~owYÞ;F»xCMáͬH´ÒÒ¸Ö@%Ëâ\6óÉa¿h1½p´
+va-ÀÞ+)¸¦UZ·pL2JÝ N pkAªo_åßþÇÿ·ÌézßÃ]ØAà./¢Xðt.«¡Ñ@QGM5SzF'îl$»¤Ê
+D©6bnîEt-Ð þ(P%+$IXÕÑ,ÃÛP#ú¼élTvbI (P7ÕÎ[RÍrM"XE ¬¼<^»0PH`a
&DÁ&è>D£Ô¬ÐRCuÈÃ4Q¯â ºs2TO @K5úͤL]s+ÁØU" ",`ÁD:«"qp3Ìk©s5¶{qa³}¤iH`åXoÞÒóLar"kK*¾P¾Êl+KÕ ÇG' x
+ÞûPä:õ=î3Kë®ÖÖ_dhSÛ³3(Ú2¥DÀß;ªiXFe{BåÆ$ão¬æ½)VZ×¼\ËRª wÖycJTiC7D
+ÛM®
Ø¥ò¾µhq¹©ÜMä¬ç(a#«dXpA`ÕÅé´ÖðØ-Ì\aK Àê¶L
+B4¦Û%ñ´gZ4¶5¡^&ƬÇ$ÎDL?gn¬vâÜr3¶Ì°Ñj½p¾´Ë<àÆ Îõ\iXê4§
+Yrà| ½ú¬'4Ú6>wÑ"Vbb
+" 5/kÖq)ÍÒy~*wmC3neCMÓ0`
+dÐ'öj¯Î·aÚã^épFIjÃ-8wáîSÕP,U0 Q31Shñ 5$½µµe+îpÈXb\i¢'ÉÙÅ`u«bvÕÜ
+Ï[Ô48ìÇ7Èÿ>®7ÓU÷º|oLaß¶p½ÙVÚV?¿oÞÃMuù&®Wï?)ØSÅNÕ²o¢£^?ñs
+Ü:X¬eÊwv,¯$03§áþþ¿4@BeS9G»)sÌQ¸tüüS¸g6å??-Þïãþ?Gɶ£âþç¼æÉó½\îÇó{ìý½»+Sæ[w1³þsãßÀÉð±ZÂðÜh¯*áÖCú¥ ²ÓB-#Ø ¥ñÁN
+;sô0.`á_t¤µoNÖµ¥9:àç@,Uô×¹¢dÐÊø}+Zùï)K³,½]kÔµðtoÇãöbðl«=v>;GÁÖö¼^ÏGCù)OcG;¸{}[H.:³ÑN©Hì;¹-6
+,÷¼>WÂw»¾0Ú}Qú3¸óv8<¸;`ti~Þý_[µ¥i8Ñ.MÆ~Îvùöµêkòô{_óqèÔù!éÀÙ²JGfĦå²`6÷näSV±aÝý¯¿âÞÍM0lþÊáNìãMøÁEJmeÕ,YÞ»ûx`¡wFPi¬»Ã4Í$*U⬩7miÕOÃgÒ¥S]YÎffµ"£mKRr*Íî[¢£ã{eCK7Y¯/GLáÁkF:-׳û²»Xòr,ü1Mª7ç±7ÿ¨÷=,²þ¿
+îÃ+øßÙ¡f|,k÷m]à»VO¼ô67tvJ²ØÍ
0ßémmjµ8mÆENckbÚ°dÙbV^Ö2âäõ? ´Ï:v¾ö8éXlÃ+I¼²,§0^´~¡1CÎæ¶\Ûed`¯±GéV-bDmw3ÒçÝ'U
§X9º%Oج~V0árpFÖ÷õÓ<br¢T-Ý\(Ò1ËÆ)ba{,Hº>G½ý3¦GУ'f,~;òó~«&[+¶)½¯g©ÒÕcuheRóFön©^*$EHHà㤠³Ù,릱´îSaBéÉÙÍ9·¢ðL úø£ð~AKyüá##Úb·üYÊUÔ¼8©#.Ìpï&÷'ÖàÁÉàçúøÂ<m7(gn-¸)3ðrÒ÷Û
$ò½>ã
+ugÍ£v+4)©¦lFeßáßçS|ûü ÀBપµØ_¤ñ{êÉNÂê\¥`¤L¬*ßèÖAwöü«RaiàWÜ)ë;7W1ª(hL¦®3ØlÈÏèèçv7[ðéI!Q1´Ño3ÿ³rõ.dèQíkdCw^Æ÷Õx ÕíXò15I¹gÕð0Sp&Ty?l2']^´ÞÇ ¤vQNåó´Yâ¿ã[ÛônÑ7Â)*m)àëü»aÛ
®æõ[1Ã'á}$èËôß}nmGu@,b±ØT1¡Þ½]ýìÈ¡ð0'¾JE¤³0Ý3°V©=
+|Þ .õfû÷VÊ'DVY$õ9,ä]§y4&òmVÆ2n=Ég{ ÿ~ÆÅB
+;]>â~)^àhêl0nÛV^lâDX±ðlïi½~<tÚªíïØfíIrx|ÍT[¹¾1e[h[õ*XòÙÌÌôhk±¿Zùd¥A
+Pv±×Gbv:Â8)ÜÉK®m,ð-#«X¥º\k*CàeÖbÄ~8äé$éðÈäÇk&m
+ÚMÒÊçU!åóìëçã±;ÇßNdîÕwsõR¥EÊe:Î5JMÜ ÖJÝ].á¿-6*S·Yò«ÍFP³Ýu¤½{òL/y$5TkÍoè±>Î.&ã¦7µ©fã«®\Ô§i÷1rílaK638å#©\ÄÐ×o½Å^`ånw½Z5pbÖu¨Y´wÍ!ÝܤÞÖL±[É·/qH
+wÚI
+Bçg,;ñz2úá0Åi+P
+,ïil_;×î,ÜVÿ§µÜD.¶7yújgq&¯j£rlSl÷kh=X·Ì\âù"n[yà¨î+½bÚv+7U¬æÞì_z`ç©Ó&z²¢Ñ¸éÜcÜÏüé ª¸<dµ¦£é¾KÁB¢go;:¹ú:þAºæOÿB
+¼Ïæòb©<ZJLO¯Ü{`|Ùïrmtx´`âÁ!½Öyè\98=
+7%é¹ÖîkÎ_2KêiuÂ) \©äCÐîGä#ÿâîH§
+h
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.env
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.env (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.env 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+HWLOC_DEBUG_PAGESIZE=4096
+export HWLOC_DEBUG_PAGESIZE
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+-p -v --of xml
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" local_memory="409617181966336">
+ <page_type size="4096" count="100000000000"/>
+ <page_type size="2097152" count="1"/>
+ <page_type size="17179869184" count="1"/>
+ <info name="DMIProductName" value="PowerEdge 1850"/>
+ <info name="DMIProductVersion" value=""/>
+ <info name="DMIBoardVendor" value="Dell Computer Corporation"/>
+ <info name="DMIBoardName" value="0RC130"/>
+ <info name="DMIBoardVersion" value="A03"/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="DMIChassisVendor" value="Dell Computer Corporation"/>
+ <info name="DMIChassisType" value="23"/>
+ <info name="DMIChassisVersion" value=""/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Computer Corporation"/>
+ <info name="DMIBIOSVersion" value="A06"/>
+ <info name="DMIBIOSDate" value="10/03/2006"/>
+ <info name="DMISysVendor" value="Dell Computer Corporation"/>
+ <info name="Backend" value="Linux"/>
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <info name="CPUModel" value="Intel(R) Xeon(TM) CPU 3.00GHz"/>
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="16384" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2i386-2t-hugepagesizecount.xml.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+2i386-2t-hugepagesizecount.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,8 @@
+Machine (P#0 Backend=Linux)
+ Core L#0
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 Core (type #5)
+ depth 2: 2 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2ps3-2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,10 @@
+BZh91AY&SYß'4 ÿ° Äwÿü:FL@ÿïß° 0 (P{ÒVJU Ó@hM0&jh 0L at 0 hÈh`ba"M4 z&Òz'¨Ða14¢=OSÔòjhmC0L at 0 hÈh`bajf¦©þ=SÔ6õ!¡êhÓ@ýSn¬Ö»ÃûUÀja¬C¾.<¬
+89Åø[³"¼íÒÕKDM2ªd6)"F@eI¡!´¤ØjØyI¯Ä\ÆàIȳ·úFä:/%ù"H 7dAê?bÒòâ|c)Ô©ÈóÅ|x|9Çt H)-h,:R^ Ûñ!;¼ùU-Î"!Ä»¼ó&cV@$a!±Û®Þ
+§¢(a((hYS³°%R5
<ùY¤åa±1ÇßÉ&'l*lÃ)*
+PµRY.)*°ÇͯæY
+H°Ayº{<'{[FÞØ!¸J=êcËØG¥S1MMûõ)¦¨$I:×TCT ³;+*£øÙc9 öPK)¸HLD]2C% ²|PDL¬Úa/':ÉæDT4}ÏtÓôDQöþ Bªià`EU#`À¿OâY@¦söËl,a¶g4oühyhÿdaÒ8(aT(eX6ªj©D ÖÀè^»4,ÜÐõж
+(Z^k&¦2g¦t
+
æcyÕ`;Z*T©@üI°:^;N;U(;ÍßÖoÌ®
+
ÆêשG×_R¦ ÁS°áÚàWȵRNb¤ú BÕK
+7l·EMö
çXeqir¥ÂÅâ
ÇyS*HΡ§" iä©ÑSi¹C*i&ñÛ&¤t*sñw$S
+ø¢s@
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,8 @@
+Machine (P#0 local=1025408KB total=1025408KB Backend=Linux)
+ Socket L#0
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 Socket (type #3)
+ depth 2: 2 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/2s390-2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,13 @@
+BZh91AY&SYOwM Õÿ
ÿð@Jÿú}o_ÿïßð h`{ᮽ,ñÀô @5M4ý)é2 ¡ê
+
+ E=&2
+ s 4F¦&LM d&A2iL Ó@ "Ci¤ôjM ¦ ¦Ð4 ¦i6Q§© 4 4
+èËíR¡ÿ:²B¡þc
+Pî"Hs4R aqzàD
+À,!8*«Z;A-¢E»gÌ¡Õ4`BÂMÖNnD¤DÒA¤cH :T9ÎÉ\¤ÊL©rH,3RI!I$ÐCÁÐÁ6 Ö¨ÊݾbüfãÂæ{ol¶{+YSÇ_½PFí\+V
+CY¦µ!îÙo×l¦|ºrÀásÝàU.ݬE´ÐÎ8kt#`1;P IŤÕÙ _x±-fT_)ñF}¤söoÏôo ú®¹¶ì$WR@D¢ 1¤À Ͷù9xA0Sþ×/g¹L£|vWV>?!Ëý
é w¥-B¢Ï¨Nzh-Ȳpܵl±1&)Ùzõ~ncûdª*Øð¨D¢Ê¨E
V¬¤3g\º+xËS|êayi@÷ NÍ·B·¤Pæ&÷b&ª ·.PÖAx@´Ø$¤£6l½ù`ÅÒ*ysÄØBH3+ õmbDå§å$ʱ¶Ð§6sî-µË9Wvv7ÅÛ0¢Ò T¬²¦ Tpk«5TT2År Èt¥&dIwZØÀ" 9çõ4kÓßOÜ;§WÒ£¤êæÜ8ÇM6³ynòÂ[~íÌ3H¬âDâ8qÎR3«q*_[S·ÝI¼©XCüC('¨âe«Ð×{¬"
+\H"[§Iô9^6qÅÏdJ\¥|L@µ() Ô*:mìéyHi¤4YrC¦dµ:Òéá;aRs¾òûîº5¤ªÂPETT'jrh#iÄãG(ª!UïU«4È!
+&¤PÉIRs¢Ã¸¢¬5Î3ÓMì S¹¦I²WU,:½TáÌÓzèéæ^Kn'"2"¯Ôm6&¾=úm8PGHÃü£ /$*«A1ô
+sÂãÈ8àUw(ÒdvÀ\¥{°MÆP¥plÊ,(ÉÊç@ì@×ÊÎdK&í^ØÔ7ï<âµåâ¹gzò¢H=7 _2¦ËÿH9A{L::?
+l¿iq¹
+f¢ÂÈå %©l
ªvS+ýT$\-¾$úÍ(ö27áFùyÐË,z7ózþ.§WU¶@Ã]¹ðëH3©yô@ѪÉ(oÀÉdá±ËT.*"ajÓïU')@3é3ÉCQ%þõð£èÝ36p¼4-æç*Hè$U0Ú!A »`è'·s5âÔ9ÄÅkSÀZp *ÇÞ¯é¥Ò¸pzöH$bÁ¾î6¢&4ÎIúÙä¨2í§ æL6¤l
â]
ÂÏÞ»N¡uh±éÎêÙ]\QºuêÐà'Ót#±QµJ ¸Û9é&;±Õ¼ýË&"¸$Me¯¥P°ÚnÏá îI&Ãe¾X=9FI ËXêÌ
¨6Ù$k 8wH@Yzo'3Iò &:eÁÌ`*_9Á¦ôº½¹Rs_ngÊ¡P¦ÁvÙSY»8Åa ì`ô.äp¡ î
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.env
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.env (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.env 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,4 @@
+HWLOC_PU_DISTANCES='0-31:16*2'
+export HWLOC_PU_DISTANCES
+HWLOC_NUMANode_DISTANCES='0-7:2*2*2'
+export HWLOC_NUMANode_DISTANCES
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,66 @@
+Machine (P#0 total=100661164KB DMIProductName=H8QG6 DMIProductVersion=1234567890 DMIBoardVendor=Supermicro DMIBoardName=H8QG6 DMIBoardVersion=1234567890 DMIBoardAssetTag=1234567890 DMIChassisVendor=Supermicro DMIChassisType=17 DMIChassisVersion=1234567890 DMIChassisAssetTag=1234567890 DMIBIOSVendor="American Megatrends Inc." DMIBIOSVersion="080016 " DMIBIOSDate=07/26/2011 DMISysVendor=Supermicro Backend=Linux LinuxCgroup=/uid_2008/job_15389/step_0)
+ Group1 L#0 (total=67106732KB)
+ Socket L#0 (P#0 total=33552300KB CPUModel="AMD Opteron(tm) Processor 6134")
+ NUMANode L#0 (P#0 local=16775084KB total=16775084KB)
+ L3Cache L#0 (size=5118KB linesize=64 ways=48)
+ Group3 L#0
+ L2Cache L#0 (size=512KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=512KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ Group3 L#1
+ L2Cache L#2 (size=512KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#2)
+ PU L#2 (P#2)
+ L2Cache L#3 (size=512KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#3)
+ PU L#3 (P#3)
+ NUMANode L#1 (P#1 local=16777216KB total=16777216KB)
+ L3Cache L#1 (size=5118KB linesize=64 ways=48)
+ L2Cache L#4 (size=512KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ L2Cache L#5 (size=512KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ Socket L#1 (P#1 total=33554432KB CPUModel="AMD Opteron(tm) Processor 6134")
+ NUMANode L#2 (P#2 local=16777216KB total=16777216KB)
+ NUMANode L#3 (P#3 local=16777216KB total=16777216KB)
+ Group1 L#1 (total=33554432KB)
+ Socket L#2 (P#2 total=33554432KB CPUModel="AMD Opteron(tm) Processor 6134")
+ NUMANode L#4 (P#4 local=16777216KB total=16777216KB)
+ NUMANode L#5 (P#5 local=16777216KB total=16777216KB)
+ Socket L#3 (P#3 CPUModel="AMD Opteron(tm) Processor 6134")
+ NUMANode L#6 (P#6)
+ NUMANode L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Groups (type #7)
+ depth 2: 4 Sockets (type #3)
+ depth 3: 8 NUMANodes (type #2)
+ depth 4: 2 Caches (type #4)
+ depth 5: 2 Groups (type #7)
+ depth 6: 6 Caches (type #4)
+ depth 7: 6 Caches (type #4)
+ depth 8: 6 Cores (type #5)
+ depth 9: 6 PUs (type #6)
+latency matrix between NUMANodes (depth 3) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 2.000 4.000 4.000 8.000 8.000 8.000 8.000
+ 1 2.000 1.000 4.000 4.000 8.000 8.000 8.000 8.000
+ 2 4.000 4.000 1.000 2.000 8.000 8.000 8.000 8.000
+ 3 4.000 4.000 2.000 1.000 8.000 8.000 8.000 8.000
+ 4 8.000 8.000 8.000 8.000 1.000 2.000 4.000 4.000
+ 5 8.000 8.000 8.000 8.000 2.000 1.000 4.000 4.000
+ 6 8.000 8.000 8.000 8.000 4.000 4.000 1.000 2.000
+ 7 8.000 8.000 8.000 8.000 4.000 4.000 2.000 1.000
+26 processors not represented in topology: 0xffffffc0
+26 processors online but not allowed: 0xffffffc0
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,150 @@
+BZh91AY&SY|³Dÿïÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿðËÀ À" ¿ø`þ}A 5
+ªÖ½ÈÉÕ.ÞÌ wÍ¢Ã@A÷¼ûï¸dñ&Û ;èÀx.>Ð Ä úî/Çs/¹á÷<°'³àuؤJªKÃböÝ7féÒt5Ü3À{Ïl ]]pkÐt7f
+hÜ·§Ï]±[» ´®½PÅïg! ¥ÂóN4Z³] fÞÖ{@ݶÝ`¦Õ°6Ê_MÁ`4îpÒXó((H
+ (( 5HØ{ÕJ©é6
+z 5=eLª¥OMÔLaAÂdÓÊi£ Ó@4a2b`L&iê~¨56õRE5M§ªh~PÓ@ C@ O)"TÉS TM ÉOji©µ54mMi´@É õ C! 4У@#@R@Ñ4Fõ(ýji?TØ£#OMOPhÍ 2Q¢ @£j~¯í=@?LùDȤ[}L ûà)µ,°Ã$>l¤¯àbJK"ð¥%¤jÂm}¾²ÃÂs÷ªªªªªªªªªª¶
+Âê*õ@ýÀßzªªªªÙÒ@FUd7Cp2.B@R0)« ¦ýÐSè
+p1vTÀÉ"",DeEõ@c*ØR|
+}OÞøm@¡µ$þbGáb7¤iÊE»od&6FQkÚÖHŬÏkÂ-¤]w7Fâð¶;ÈÍRFm$à¼/Jº7÷½ó꾫Ŷk®/®q5çIâȶúÅQ
èô²õ;ªó;|r¢¢$¨ªa"%¶PI*Z$DE¢
+& U TBQD<áQ ùÈ (&ê« Ç$ÖüõÇoòOÏ´AÖ9Yz¦!É/08©¢EL²Ñxd¡@jP.eVY·dR£µPA³H%fÄ;9 ,̺³F7%J.Âî
<LQÓs!Âigéö¸ãJÐ(È,ÍÜ
+¶Û»Ôuâ¶ßøGÂ>»G¿÷ßu#Ú=£Û7ºG¤z^¼;·¸£à
+º¸$¶K ²ÔîáF0Ñ¢ f6eºtë$©R¥:å+¹R¥e:rT©IÝÊÆªéT§NÔbÃ
+ÔwyWhTòâ <¸¥ÐJeÅeSË$òâ <¸yr§)Ý«#ÜÒS.RTòâIåÄË')*xe<µm%2âIåʹ&^[[IL¹r¶^RTòâIåÄË$òâ²ÊYªTS3$Fax^afHiYæa"3ÂóÌÃnË8ËÂðÌ3*ò,&%§y.¬ÌL\Ëb
ÌP1TÛ©¦Á5G1¼m»-+¶ó¹L&IVØ%Ú¶ÝÛÈÛ%w&dKMäb²ÙVeºj+2Ì·Qr±JJL¥#½î¢ÊJK̺HÝjDeofeDð-ÓFYVܼÖ^<Ç2à·*;º²8ÓQE¦¨U¹¨¥:q§Þ'XÛME(qÅJ¯u±´)»ÙUq©¶Üt[o#nÜ9¬Ì&fcñ0Óa³L^eÍ1v£lDZrSIwRHËuÊbYHFñHÌ·ÛÈÛ[,"îòjÛ
+Qæ`DÔ)Ó5Q:JíȱE§N4¥ÜmÕfbj$T(U¬ÖrFÛqÑm¼¸bWr*Tm¶Û¢ÛypÄ®ä&³i¶ÞÝÛͶöbWr9 Â`L& Á&ffa0L& Ba1·ÌNá0L¶ÛÝI$ɲâ»Ó6ͪªUU*©%UJ«Å^*ñW¼/÷ßg}÷W¼Uâ¯xª¦eJªU$I*ªFÝU:ªuTê©ÕTª $] $
+æ^ÆíCaíÌÁs-uW
+ÚmK#ËË´Ün7Æã¼³*ÖGÆã¼»QÆãMæbݵ$n7Ènã¸è¶ÞFÜ1+¹.îÛom·E¶ñ¶ì½«Þ÷WwÈÛnmãn\̽ínó-lAI6®ÆÆÆÆÃA3.Äl ÅÜ6ã¢ÛypÄ®äux²Ùs*ÈÛmämûd²TnËVA¸A¦(á½
+ªæèæèVn*"ò͵DÜ£qeÑRÕÅE&jMÕ¢)ª)DSTR¦¨¥MQJ"¤E%(GfÚ¶"£"¢ÔE%E¨JQ¢)*-;5rQ¶\EE¹fÒ(ÅF®"¢ä£x¨tmª&òµDÜ£qQ7(ÜTMÊ7
fÌ7 Ø hh`ÐÐÐ *$¤BÊÀ¤)"Â2²H3hfıFüÎûUåTªYÓj¨©£Xi±&pkUYªX::NS`.*íT9ÎéUUS£¥]ª§0éÀë\
+s,Ì$ë¥^ª¥]ÇaMÝÝ4Û, ²Är*=6,ftt«ÕT=%A¥tDLÌÁÌLAH9]QG[º¦î¢n«±RìF»K±´TRJR%QUQKEJµ)BáÀá.(sU»Îs9ÎV
FNkJ«µR´<Ã#i)Q*©j¢jU*R$PãÐ#Y*òªVàpÈxqWj¥iÎ ²CVD§7MUÚ©ZsgWUZª¦f©DDEÌÅqU@áÅæîíRʪnîQQ-DTnîÓ©m-UnîÕ»º´KSKQ\wjÊXZZ+.nâê5KU»ªã´UÍ¥^gN@;ÑÐÕ0¯B¸;8)Ì\1CqUäÒ¤IÀ
+feÈä¥9±DDADPA!DãË"4H¦.»DVY¶YãN9UeD*Q ฦæâ#sw74ÝÍÍ,²G"(²¢I
+Ýsa¡R$às18¯%Û»³»µNëtçvªVàs3yU+Np8"8IûU+»®RÕR´ç¨¦bpâ¯*¥Ù56ÝÝ4Û, ²Är¨PS38qWR´ç33ÎQG7uJD©h
Z!jU¨©H¨¨
+75UWjªªUT\81À3yU+Np9sCr"""+,G*
3tÕ]ª§8ÌáÅ^UJÒóô'âµò¾¼ií
<ú0
+E9/©N ApÒp»¸§s5GPd9Üb"aAs¿qSÎ.ZnÀaB!ÅUPaÜ9\¸æSº*ëv**+t¨ªE`ØÙÅdÐè
â#¡¡ás*¯kµ*©äÍÌ\Þo:q.2DÄAN8h¨Æb"NTÄÑV
+àãqðNÊÃÀâÀáR¢¡ÅUcÁc *Zp¼®@^fNVËlà!,¶ Kl¶Û8]ð4Tbª·Æ1ÝÚªUSÎf®gVðâ DM<!´ÓMWi¢ ÁA¼y]0 À,B""*ªªªg ì 5¬Z×=Ny3'+e¶pb+1E»µ-uÖcàÌÜÎ<..eUív¥ÚÉ.s:qKÄDÄAPÕ!¦(¢Ê»M4TàÞ1KÊì.
X((§UUT¸ÌÌægyLºéÜ<£k×0/Ö5ã0)27jÑtÄ-lÛ{føT1DµLä Âí6eÚ§TÚ³:1$ðb&%Ñq±v»mGU<ª<v[åGÇÉ *s3¤y¦F #CÀá `¡±ªªã·88Á·ÕkFQ7Øé4H£sÚø1IdB![]t/EÐP)$DEp" R¤! ¡6ÀdTZQ¤)JB dUV$aI JJB @X at J¡ ( I & !EQEJ$&UHHFGà?Å@©$ùÔ0}A¨m#÷Æðúþ ¸¼
.û¢×ü{ÞÕT`MUUJbc*ªª«{ -
+wà µ{ )UªÇس@ZÒI+ À.ÄËÐvÆÿoî¿ècåýÝ~?2߯áW.@©Ø·ÉII^èÕ
+Jìw,d®i)))ÆøÚìëö;6ô{53׳|_v¯µØÛÃØqõ¯ïgª¥ÿçÑ÷UEUEUUUQUªª^ÏTÑOØ¢(¢(¡EQEQEQEQJ(¢óyØóØDDDDDDDDDDDDDDDDDDDDDDDDP°ù^Fi¸ÃÓ9ËßåÆ0ã8oqmº¸ãlhºËuàëËYrë/
+rð;ÞôÝÝÍÖÎw±¬fƳÕbââç×ß7Îkù»óË»ü.ï'33&feÝÝÝßÌÏX·»m·àl[yÐ-¼ÀoÇo{¶÷¶; -²Û- ìï{ÞòrÎÇÏjܵ]ÛUEQTUEQTUE]ÞoEQTUEQTUE^rÕEQVXeaTU³QëÎx~>,×tÚØ:Õ9\¸8§UÕÒxâWWI¸q8ñ=*r¹q9ÅåÄóÅ*åĵNRq>uNVÜMÎ<á)µ°zÕ9\¸¸§UÕÒzâWWI¸q8ñ=*r¹q9ÅåÄõÅ*åĵNRq=j¸yÂSk`õªr¹q78ók»f»¶k»f»¶k»íê1QsÄqp}³#^ìÈ×S]sQEÝ#U]Ò'QE´u]Ò
+EtTQwHEÒÚEÝ-E]ÒÑQEÝ-ÖUQÑÚ%]ÒÚEÝ-E]ÒÑQEÝ-ÚEÒ«QEÝ)5[JÙEÒQE´ªÔQwJWY¤Ñ¨µ[JÝÙ]Òî3#[pv{Ó25ÕÁÚ¼½3#]]×=òfFººõκÞôÌuptX\ÃíàpEâz¢ÎÇfîËsÒÃ`ö68 xÅ,åðM+åW]¬Gæ&"jn&â'ÄÌMÄOZÌNK;eYÈäãN\¹r³.\8pá³
+pË,4Ãmøß, `j¶9o||¼·®
+BÅ
+pp
+8ná¦i[¸pݧ6næÍ6lá»K0ÓK4Û²Ç}´å-Õµ,ùaÊË8]N7náÃgájæà¬Ál¡Â3u$Fö¹Â6ù¾XbbLLLDg¹Üî%¸$DDDDO:DDïÂ]¢w;gYÏ-¶Ù§ï{ØNûó<xÌOÎ1Üî:DK3<DÜnpqÆËºa»víØrá¦÷Ù³faËSS¹É¸¹d²Xn÷[ºy60<ÌuÜij;òÞµºMï{Þô@£®ûòdÄÄÄñ<LLDDLÄDLDDDÄDDLÄDNâ""&¢"y¸â""""X1""b"5×2ÍË=mNâ""rrjr"w31â""f""w*xæ"""&â'bDDDDDLD'Ú&³bn&¢"yMLÌÌDÈà°ÀclPÀÅ
++n·7w¹[æUfùñ¬Ý<ØK7<ÌÏ3sÌÔ²ËQ;ÄDDMDDóqÄDDDD±"""srNNNNDDD±<DDó5111FØ^bضä qC&9`C&9`CÕ!Æ´å¶,]µë|uUéU+tÀ4¨8È0ÐÀÅo«Þ÷½À ø2I7$LÉ$w;ßÐù[»|Ú©YÀ {ÞùÆëÀO8óç!¼¼ÌKçÃÏëÎ:K$2ImV¾3+ïðÆ×ãë ýãôNüt³u×]u×]u×]u×î
+¬vÏ:ß¶;c8ãq8ã1Æ8ã2i=ÈEH¨( *!"
+D &AñÔóúQ÷×>¯7òéXÛR«ÁîÃÁN²ëîªà±³Ui
+y¸érVdÝÞĬZ¶Õ°Õ¶³ÙÛ9½q~7¬rÈ~ÂDDR$?Z×jé#µ-\®¾bNÜ>ßÅ!çÌyñôNwd>©ãÌ;>_ ï,Ä÷yLXuEâH ûo1`ù¯>¼óÇSíÏ=ssß©CyEEçÏ<LCp¨hç|Þ±¾çÌÒ5¡&qà5BüX6¨k| ÷ZÛw¢uGQËBÊ^W.ñkͬÂtÉÆåÜGI%ß×¶<E¹ìõsÎ'o}ÚõêÍC¸
+põË÷Ütó>ßZn>Ó×¾fð£0;õº®¸*ËÎýÁåë¸×¢ïV<÷§O§Ú¡â¡ÅÌ·(wâÎîo[§YWíV
+Q9U¾P"A:
+í©¾
+îù½K3|§dî¯|Án¹\#wcn*Wª×É/IµJ®umýh`URæ °+ð X
+Rö@ùÿþ÷Å?Ûö½)T©óD")'qP+ô´\~ªÛø?ImY𽾿?þ¿úgëjÖµo³7Û]¯|g2ü;ö®*·âËmïn)"D9ïb;R$ïãkÂ4¬mÌ,Öøs¡åfòøUñÆ7Ú¬µmµ5I>'¬#øªÍd|m-?òLÅßP~@ RIâ®öê¾{Ù½v§VÖc{3ÅúSTܯnÞ3ÖÛÛXó3¥åå-RUJÛ¬ÌíÎA¸(ãlÊçÇ~rY¬eìöë·Ã³&e¦ë»5 ì@
+csÇLâºòÅß=Úðâú÷½¡ 9àÕVö÷ÉøÝïaùozó®ÖÙ¬9çß.޻ݷªþ·aN8ÞËZÖöbËq~×¶µm;ÚYSå~ Ð2ÛkmZ½âv¤4zÛÚ¹ýïZ·µQãdôÁ+\õ¥¯Ös×û^ùc]½ñ¿\r ÒþI,¶û]Õ¬
+ϯ|)e<íïçmÍ«v ;qßopm½kxS^ñ\g¬6fÎ+µ[çù+ÍõLâ
+_6³+ß¿ôêÛR±À7¿=u¿OkbÛm¶ÇZc jó÷L3v±Î ¶·¹½$6ÛnawE%ãLIô@ +q9¿ð@ +½íÍüƦ=î]äÇ%¹Ã1æHÛm¹úÐ m·7ü0 Kosm¸ããåÕE.,nff6äI'ê È ~À}¦ «ëp~@üAùâÈêçÛõVàÐ6à <øþ`À;°í}×Ú[ïqß»¼\ãg1¹Æno*»·yéb3&nÕ¹÷ Ö"Y¶â°à9ÎÑ·kr¹¯7FݹZâãÄR¶mÐuåºhɧ7U8´È»Èç6îpø >àò |в@´6 9 °8àä¸0l øæp`¨óàþmPùTêy¥+ðÈ?p9 2\ ØÁþÛ?oØüAÀ6ĸ9?K[ÅxÛßOáv2SPTÒ|`ÙeTDÊD{½¹zQÖ20^Õ«äóz}[yªåb©ÅËy;ýÏHñ
+ûÔîNäíOl0vÕUzi$UU`5dDHJª ¯S¸DNеÒþ%Þþ:!_x²=Ááçäs¹½w75½æíØ n´ SpʸbÐ -ÏËÔÔ×ɬֵ®¹×Qâu=ççÀûÞ×¹½ï{Þ÷íÛm·ÖÞÌc qÇnß³ëËóöý¶øñú¿ßOµûöÓïö¸xoµ}¼ù÷»ïÞïÞóéçÓÏ·çÞóá@ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶Ööc [mµ½Æ Ûmof1 ¶Û[Ù` m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶µ¡ä m¶Ööc [mhg9 ÷w$s¼{¾ç³ï¼u:êOØê{Z]ë;«Ü\1h ·Z )¸eÜ1hÐ çfOÝÉ$×nMMk®ºàú뮺uÔÛìû>ϳïí¶ßgZÎ@9Îsç9Ëm·ÐÎr ¶ÛZÐÎr ¶ÛZÐÎr ¶ÛZÐÎr ¶ÛZÐÎr ¶ÛZÐÎrÎsç9Î[m¼Össç9ÎrÛmæ´3sç9ÎsÛo5¡äç9Îs¶Ûyç ç9Îså¶ÛÍhg9 ç9Îsç-¶ÞkC9È9Îsç9m¶óZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@ ÛkZÎ@n÷µnVæ³½áÝî¼¼ïÞòo}÷÷m 4ÛkZÎ@9×µíÉ$ÓÓÓÓÓÓÓÓ{Þ÷½ïཧ«×÷=ÌcÆ1$I$II$I$I%Ðêõz½^¯W«Ö¶Ûo¦öc ÷óÞ÷~_®§îõÔu"<xñãÇ7ßÒïÓÊÉôò?¹
SSÉöµkµ;¾:º³:§T31m ÜÈfbÚ «Vfs!hÃÐÜɾó]3MkZøü~?ÇáÛæ=ñéñ'ÀIçéðû}¾¬ù÷÷÷ö÷ømU©¦ªªªªiªªªªªi¦©ìÌ7]ªªªªªª2{ ×]I×YÎsvz½pÐìßcÓǯ×]|zítôçMé¸bÐ n´ SpʸbÐ -ÎòI'G>¾½jIz;zÕϧÀ?içåö&6M zúúúüþ?··¿ÙñðüM5UUUSMUUUUSM4ÕOÁn»UUUUUUbj¸-¶RW!m¢¢ÑV¸2ÃÚ×wd·jwuÝ×i>÷UUUZªªªªªª
6Îjªªªªªªèº?#oVþ@}ß·Ê$!UB½þ(H#ƾ¿oØ
+¿û{{}>O§m·ØÖs ¶ÚÖs ¶ÚÖs ¶ÚÖs ¶ÚÖs ¶ÚÖs ¶ÚÓç9ç9Îs@ öI$I$I$MUUUWAN¡L檪ªª²&DîíQõ! ?)ÀÛñUUUTªªªªªª¾B*ªª"ªªªª¦êªªªªéª¢UUGð !¥U×îñs/)åÛ¾<qCG$5¢°ÂUH¡B«,ÕKËÌÐb5&=7Zyr±UbæRC2
+!&ã©i
+tä8Ü8 @È"6·¦t@/RÕ@Û4¬]Ý5jÄÅP¢¡ï.éÍRvVatQú7QÂoTsÅ«ñ¸(
+Jä5¸ BXD %Ø0¨ävj at HGõÆ}¹Á
+§Úºå«RÕ®:ζí^ñÞÖæ·ÃR¢©P í¦Uî³MݧmSM4Ù³föÍ[|e]2(X±(Ð#` Ä`haÌÄàÓg
+Û´Ç
+×nÝíÛ²á¦)µN4ÃfÍ8n§ÿ)B/ŪÛí45×öA«ßUM¡½
+©$íF±Î±×ÆãÌÐjæzº°bTkã<mÔ4Î!c_e/]Ué ÀK¾,Hqºmî2sÒ¯ð¾&÷À?¶_¶öò°ÿýÄ©?I½ãåImÖ9RAyTÙÉî¤É)¿7R?ÏêÅ
+~hÕ
+kZÿ4 '
òk¨ 8å$8à @SåN8ã誰5\ Lç9Õï{Þ÷½ï{I'=kZÖºúòvf»ÒXÉÓÑL:S`ß1Â
+ ÃèsÈbJJUYV¥{]Ç×m)½ìáVBp
+ëU9×\ñ«æI,&´êº®%«RÕ\òç·U¥¼²·UFOìÕ$B$é|_Íù¾¿$B=ü0ÊØÈÿ{FFÅ-%¤´].Çø§Ó(þúGú#Q?Ñ,L,ÙÀ"Buù¨`Þ`XY}§¯Õåö}ÙäG<'ió°°ÉpÂàzÝÓz'¿ìãxûóÃʦ¦}¾È|Oôå?w´×wNÎéê á;ÉÇtÿðOSÌî<xz ȼð¼/
+¼/Âð´mwxü<¾?gÃÛõày·úôõW¾SÛ ë0>ÐOQ=?òãÉêü¿KÙ~.~YìßlãÐô_/xw wõüpO£2GÐhCa°Ú#`Ñ&QÒét¡t«¥}-ÇqÝ]ÁÝÚð§ý_Ïòïö¼?(¡E¤zè¢É-ABát~Ìúñåý/ÙÞ>Èì^zá;5ÊL%Ñi8ã·§å²66OMoØíÛè}f÷òJJÌäí42
+..K¡~¿ÇÜ'#Èò<åEìM0zf8X zÎóÔÙ<Zyë{¿qúêÿWøöÏѤ~ãè~pyýÇ¡Ä{6M¤öÞHÙ'îÝ?
+äØl4I¡3&dK¥ýó¼çí¼íOCÝäóücã;½¼{Ç·ÁñºÐ>çÖk¹Å븽w*¡ ` \ì\«×U)UPØPF!&Q$ÌRHY ÅìÌ3tpÇ%UWDYf¨\Z \x sgCÞCÖCÛAëÀRîmÜ[¸·qZ
+ÀíBD?äJ!xE""TOïÞ.tNj¹"";vÖ-/Hg£ÙÎõ¶ÄTà8
+mÊ: >ë¹ã-7ºrq¾¶Åi
VåÈB!à±þ´$QàtZ Õ'´Fë5|õv1Ò®½»s«®Ó±«`
+¡b.tÖs`uXá¡a qñÁ=#Ø1WV¹Î3ÆÖi¦8Ë:³µkv;"Ó*ñ$¹Õ 9³Ø1]@½R 4"%Ù¹½¶ÉR@(^N¬¨ ¸1¶VHmqª·Úºâñv²µ*¦¶Û9ΩdÔ¾«TËó³1ÚâI½!*)Ì(8V&Ùz¹îëÛ r³:zyÁZ°Ö¯X-_+NèÝE`A&V^¡¥õZª]vl³´Ö[Ö³ºn×C±×ÖëoÖ£
+oKK^ìÖ'T¶Üݶ/c×FyçGCnX/uÜáªg9éëÈL²@C,ÃÌhç§CnN¼ï¾Ötb1E'×ß^û»ë¯{²8H×ynns#°çoSùÞáëÁäÝ»áÙÀ hr¨2f±xÑ$NÞQÖ@õyèÇNüùòGg§Òý?hsyðbçÓ`M;Õ¬íi¯|³^vë<"¥¯NëסÁN{qÚ5ºÁhp=õûàgÏI×7ô rÂú#Le6Gh¡ÿ4ãjçWvç9¬Ûµê±f@Ê
+6hhBcÊD *©bYåf]ÝÊy+X[XD¤¨U
+¤-èÝ¥wjK Ú/ÂM
+¡(cT`+ UUS n<zl0Hst°à;íz.û뺹vñ]Þ׸!&ò¬ÜuDHl£.^8FX¸®Ûïì l£}þá¹çm×häÍùÅ' t즲d˦ìºkmm³0Ùf[6yµìò»®åºÜ76Yºìg
+Ùç9Î9nÙËví8n³víÛ·ná¦Óeí½óZnálÙ§
+Ü,´¬#nj¥~
+ò_$moÊWv¡Eí¯ö}@×£oMðúS~¿?ÍlØ×ç ýR]ÝÝØ 8I½ï` ÄÞ÷½ñ$&I$ã8ÜN2I&¸ã 7$oÇ®DG4×´ãðuºuF¼örÙ K@,°°¡@BC(ûàðkÄÚié^®îÏîåδ⧦Õ$
F3n¿Ð;>?ÒÆÀ(ú/Ø«®YöÕÞ´óMûÝÞ@¦dÍ8ã
+5ßâ¸z[vþ9ÖÛ¶ÞLT·÷¡8|9ÿÏ3¶üÔ·2üfáé@B+zØüOç©ïçÎ
+òÅj^¹Sq±xqÜc9ØÀc.»c>rsíSÚ
+ÝÎt÷¾ï*I4®o¡ Òþ®ÜI@ª«÷¼wõ[ÍLk³µU»c¤¨Ç;Mª»lÇfÓþÖô÷î©]:s×¶5ûm[Mó²Ùfe|WĶ^»6lë¯u{{ümÛ;·Ö{X[}·Öêæ·yªU,¾1z®ö¶-¼×{ÚyÈ'ºaÝy³
æÎ|¯·z{ÅoðÜþxþO1´]ÝåîÖý{lÛf7÷¶YËÏDDpÕ/V¶±½¶lë}ªut½êkn)mÛëßo{|»ó9åÍ<ïç]é»âîÿ-q¿çürÏjê§ö{\wùza´føcÓ¼½ÙKÝzVÚ©ì6¦]:áÕ´ÙNÞíóù¡RHyóNî*¯aë¾_3Mè»}æVÁ½>*¾f[½K¨^¤÷Ïr>H\1Ó¿É'H9àÅ ¨úÐÛz±µ+Å;uçÆÝv_ÊË|^õÄ[UXî~)|»,ãw×xøLÓkõîí9cãÕ¸(vL=seØõ¹Õ3¯[lÃÃ+/{5kÏbDDae5În¿,Ý{üüûkO·ñ·<÷n®õd{MFµÚk¥j)jVj«c)³-Ü<cfùw÷g«O
p¸sÕàëNÚ]/KS&Vxµ¦)V³Ó¬]ŬªgiÅKvÃ8«*óMõ®2×gN)n¶s¾õç[7RÜ7^aW»½ÖïK©Å>¸´j.Ý;õk§X§yƱ|Z-Vj«[£Ñ!»G;FÝ&Ü(ë8Æ^e)i¼];'·Í·ks÷19C|s+¿×ÑËjë}Êxài(t|vÁcÐÖ%¶ñ$ß-¶~qM÷o7Ãvö8£ëFÛO·l=ßíw}uwjYmürbýæô½âÚªªq&n¶ù9vz®)¶Ç½·´¼åÙ^ôAçf/òë~ûv£}Ú·Uó1§i,±¶c9v$DGe\~xßsÝéÏ[¼xÿz¥Y·ÁÅníÓ*ôv Æxøp¶°*y^O»kq·«¾^)3[RÝZmJ§á%ÝÙv·.§¥cϽB9xíëã´³«¤|Q#µ}êbÖ{S4½5×§ZË\fî°?ú ÅïñØüÌ7j«pÉCÁZà§,ÝPR:ÞÓÆ$AÛãÆÝUIs(Ý]jF˺7Z¨ÅB
+VU«±%$BÌ8J5BV
+ÑrÐHBÁ0<C aCF̪©pÄ) ¥Q(ÐKT±¡s
+ÙGÃÄ®ÇnùÎùâêÌ Àûóí3*-äáyçßxHK§ºDm黿xÖÖnÙ»Óî¾³-[eóÃu4Âí«,¬Ë³«0Õqùk&\¶YÈɹgeYe©½ÍÏ3¹¹ôalËXz+/VÆtÇ;BúÇÀyÌj%xè7~qó|Ò%ÝO5w³VÜÄg{|/ÓZÚ%RO at sÛUU=ôÜå\¾ïáð7~ ó¿gÙUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUp ÝÚªªªªªªªªªªªªªªªªj¦¸nîð D ç9 9ÎUUUUVú=øÏ¯ÐO'Õ-£Ò÷÷û%ò»Ù²Ïg«Ú}6ªôí·½wÉ!hüïÌöö,¡ú^õÛÔ98?·*K×ÇVZò0Sáëf1(·ÛóLGl±IöPæ½63³\Y¼×7|þ^rÇg¥¾¯1rÎU+XìYÖ:nå]M¾S|mRHwÚpÛArééµãÙÐÈ Ô(ViÑwdƨºójul¦Ñù³l¥:lñYÁå¬ëÑoæÌÁ:»µdí-èk}wRºaáÄôP⤪èÝ9ÝÓ¶08ÏÊ»ÍjvÙTê¯éÊ""/z'¿IÛ|ùö¯nºHÚ9Ï|e¦Îÿ}£Ålm3$]ÒÜ[-¹£{·ZÏZ8Se8ÙÇ{½ö³h²Î¨ZTGÒá8oÄ<8'ÕÅÓØ^<yά¸-/ZUëå=ÓléSg,=ÝÛÖßÛöøñRHxðvuÞ@Tw{[÷3ß<=°ªµ â£~8ÝÇn9ªáÇúå¼7¦ÛM²ç\PÔ©-ß~)~é¼ÄH*1*Äo¹£³czæ¢fî×Î4X1»ýU¡cÖoÑ iâ]uï{ò·µÕ>5
+OW§w\[lë zé×~ñ1$/5Ýß}gv£gWUmïÀcaÛqd1B¸/ØES0æËsHµzTÛ©_߬ðìó)µqÍjõÕíjºÍZ¶é¶0ðÓ»ÑßÕøgÔ#¼ïãß×OHªÓ@ú¼/®a¯zfI!IDEy«^ñÎ÷×n¾¯¾Ú¨jelÞHƪ«Î:ì¥-Ã5j¿ÅÚ½-kÖ5Òiç¸zp§o3*Úþ¬¤ñÎÕåeüª÷¥.Dx©'3
4Ä Ezâßs»`ÄvHàCSY-õ<Ô:¨Iýþ6Ù³¶6¤Î8Ò°&1V*uL]-REQ
ªý.²:b§U:ÏMéªçil¬½ñóNtû~úwöÏjïѹÈNÓ×uRËb>\#~¯bhðÄR3® ö£^¢&u\*¤¥¯,¼D]|QR»667ÿ'C6j%¦ìåÞû³TSM)¬³éÃËYwÙ¼³7ëÃ|ãVÚ¼uéÚýã2Hwvòë>Nû6óVfÞ+fÆújóç_
+:i«úSgå¯ÒëÚËsk·kÍçUÅ9¥«mz§löÝê´çÞMýóã
ä§nÔqL0Ö9ëbÞ7¿07~¹¶;ÙÈ?_¹""-û ZõçnsÛl}<w~:ñðxw¼íà»ÌË
+<¬bÌ,êhZvó&<»¹w*®åKËÌe
(FU/å]Sj,Þ:¢É·TÑǨL§J^2Hnj Á §ðäñé¡:ëMz¸qñÜ]ª¡`à·BÍÁ¬#(ÙIu)oj¯VËkCßB¨J)AP,0P,ª°°"BPÀÀÀ¬0`íÛëpkñ"Kð$Lnß©gMÜ:io\¸pá»LSy²Ê,XÝ]ÁsÅg$¬0AÁÁ±ìDäDg&¥Üܳ}wÔMLLȺ óÊåÝnó@n°y½ã/ðL@Òt¦b5t.üìKápÊëØßmóë¯>:óè3;ü@ø¯uUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUW ÝÚªªªªªªªªªªªªªªªª©¦¸nîð D ç9 9ÎUUUUZ×úÔµÖj*ç7»[Yï 1ßÒHnÝÞ}Yéò-ãÐ#ÃÏ^ý~%@â¡bã"´ *}±Æ#µG5¬DÞ«^kzã»[ßÃÁ`ÐdCZ*¡Aã¸x*ð[ºzéÎ6ËJ ¼×tݾNÞv»¾}ð¯`gcyéB÷jkXe½VÓfµ-²""36ƦVL¾õ9kVÁ>Ö4¶*¤T¾º¶7ºæëæã»< ]:ÛX)·4g
+¥ä]M¹a»Ï£áÓÒõìÏnλø¡ïõø±#à:¿¥êù*¶]hÏ Â?Þúÿÿs_ü¿úÿùÌâòç,9ùoøiªuª¶gýryÛlGôýL|ûü?Û¦_ùúÑýù±§þí±î4bo«äÇìæÁyøì,43ZÆm?WáänI¿þrøÿýÞ Wÿç÷ÿ.Ëóú¹²>WÙ=VÃBòXXhf:µÚ|¿ÜnI¿ÑËãîñ»^w¸G;ó¹°GÊû'«âÊ4/&,£C1Õ¬fÓâùâ£rG×{}[@®¯;Ü#úîx¾|E¿º4-f,£C3µk´ø¾g¸¨ÜõÞßVÐ+«Î÷ç~»/î%Ú4/,£C
1Õ¬fÓâùâ£rIø;¼êÕÎ÷çyÜðóÏu÷F
¬Åhfvc6î*7$»Î¨]\ïpwÏ<øq.Ñ¡xñec6î*7$wyÕ+«îÎûîx¾|FÒ_th^f,£C3µk´ø¾g¸¨ÜuÝçT@®®w¸G;ï¹à"ùñâ]£BñâÊ43ZÆm>/î*7$¢îóª WW;Ü#çsÀEóÚ=Ä»F
çqec6yî*7$»Î¨]\ïpwÏÏhÚKîϼYFgjÖ3iø·â£rI×wQº¹Þáï¾ç^|G¸hмÞ,£C1Õ¬fÓño=ÅFä®ï:¢us½Â9ß}ϼørÇpмÝ
c«XͧåìûÉ7ܾ>ï+µç{s¿;|¯²jý«£BÓÅhfvc6Ì÷OÁÝçT@®®w¸G;Îçç´{vÎâÊ43ZÆm?óÜTnI?wQº¹Þáï¾ç^|G¸hмÞ,£C1Õ¬fÓño=ÅFä®ï:¢us½Â9ß}ϼøq.Ñ¡y¼YFc«XͧâÞ{É']ÞuD
+êç{s¾û=yñâ]£Bóx²ÇV±Oż÷N»¼êÕÎ÷çyÜð|öq.Ñ¡yÜYFc«XͧâÞ{É'éÞuD
+êç{s¾û=yñâ]£Bóx²ÇV±Oż÷OÁÝçT@®®w¸G;ï¹à#×î%Ú4/7(ÐÌuk´ü[ÏqQ¹$ë»Î¨]\ïpwßsÀG¯>"ñ/º4/3Q¡ÚµÚ~-縨ÜuÝçT@®®w¸G;Îçç´{vÎâÊ43ZÆm?óÜTnI:îóª WW;Ü#çsÀEóÚ?2ÇÞaa¡ÚµÚ~^Ϲ(Ü}Ëãîñ»^w¸G;ó¹°GÊû'«âÊ4/&,£C1Õ¬fÓâùâ£rI×wQº¹Þáï¾ç^|D«¯º4-LYFgjÖ3iø·â£rI×wQº¹Þáï¾ç^|G¹c¸h^nÂÃC1Õ¬fÓòö}ÉFäý¾>ï+µç{s»îlî¾Õa{4/;aa¡êÖ3iù|>ä£rMþ|}Þ WkÎ÷ç~w6ù_dõX_
+Éaa¡êÖ3iòþrQ¹&ûÇÝâv¼ïpwçs`öOU
ðмc6/á÷%o¹|}Þ WkÎ÷ç~w6ù_dõX_
+Éaa¡êÖ3iòþrQ¹#üY{}Þ WkÎ÷çwÜØ#Ý|'ªÇ~ÂÃC1Õ¬fÓòø}ÉFäðËÛîñ»^w¸G;¾æÁëá=^ÔÑüµìU³¿þ9ùÄϯï¶ÛÆÛãmË~VÛ|öÛmñ¶ÛWKÖø"}¬úûþ'{çC6uïñ¥òñ|Vþ\?°ÝÆÊþÂÔ¿mÒÍ6Î&íyMë¿ÔöÏ^ óé<Ú ý½6k/ÛWwæóÎZ¨Z;fÒ°ñjZTÄæ±$H0³¾Î[.ìá°<·¨ñ8åËÿFFp1ç®0ËCôô|LÁÇìX
+M3mIÖé¼Ý³f·ÜÅBllÚgöx73iãÞE½{<Ûf¹Ò>¬ÊTÃzÁ"×Yã·rÒîûvZrìåǧ°êéêñ1âõÕ½K¬³ßyî[:²õ/yiºÒl©;TÊo¼°ÝºÉÍA66ÚK´ÒÒC,If[å.ËÆg]2¥<qÍtî½ÅìvÚÓauL;Ýw}¶]Ý¿G| ³÷ ×è]¹ë>í
+ DZUzå°¦rwº°ÍôÌYµ0bc,¸õØÚlÖ
LÖ ¼Ì¯ô#ºÛ-3®~q
+ó|)µNËjIµkág[8ew/1Y¾î
gw~reXÄc10Ã
+ð®íéýN´ölâÕã(ÎVs[2ºë®´²Ë|>;e§[½pðôJâí6áºefnóuø´nXW@×Í¡SZÖ³lX"ǤúPàúGX¯¿«ºG=]O|úÜÊt?2 ðf}]ù}|ývë®ïÛ¯®ë55i4ìë²z|;ã58Øq<]wUeCLZÇ,Ùiâ.+x,Yc-ÞV<ʪ*éáÉÌx+©i"°LNʪÓ4®´àU2ðhI¡À¢/R
+M*uMÕéÜYHØ»eK½[AãÁVaEÚ(
FÊ8FÌ,ÓkCZÖ4ª Ná7B $BE%dBVQÚ `dNΡƺ Õ0 ì£;éÁ¨Üë9¯B1A1l$0XBRà]A;Î1ß}÷,ñqËrÉfl²Îç¯[6loÌåg-4Òî\)ÚñjºuZ ç:·â«yçØ7÷x/y¿=x,"Ϲ\¿31Lfô ·`k^.õtUÿ?§¦Þ´ënaa}pû<÷UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUV»¹»»»µUUUUñýfuè\>{ÎÎyë%R_f¶óñ1ßv˯ËÕËð7Þ·ÕVý{Yq¿ù×tÕ¾E £üó«÷ÂqñáL Wz"fàðØÎàC04´*õ_ë>éýø>º=xõ¥¤Ô:±KZ$½c0»¯ßOY½+k£®zÆÛv9¨Ì¦o\©m^\ºÅ»÷Æje³¬c533¶x¾/H]zsÁ½YѪÇc.ê¾³Z$hcx5²> àC(?|å*Ó3_=5ò±°,`OùÀÃkDàT5¦2ó[aó{ØÖGxDhpPÜÝ
øô 6ïlUbî¹Íï{jíö*bK0S[»³ÝUÛæÙÓg9e¬h5hÔËLa0ö/kHÃLäQ1eQ_CR5§nwLm´6w;¥wÂNxÛ¼å8½±^÷¾y¾mUµÑbDDi{¬Û}ºoáâ}6ûÚ·ÙÚK<9ç><ZMm³¦#k
+Ã5µI©¤qÅ$L$·}2_20Ö¬bÃIIñ
ïéyw]ue3kZ¯ßOKBÙ¾b]e0ÝÝoDã6ÊlßRbI\»9ÆvÖ1|1$Ã]fËÛ0ÿ:£jR;Jk@:Ö
+
+·ä> 6}îÒFª¤fµ`]èi¡a~Å|Îxý×åçºI½í·ÛŹÖpç.ºß39mTÃäHÃÆ×
+d=0ÀvÄßâî©ÕW9UíK%f®Oî-.¦¶ôgÒ+×Å»<ºåM54ËmiQ=tΪKaÓB PÞ«hÝàdCp1Àε@`â½óF[øê¸ç.i䮬¬³ñ`8í]WVøcwÙïN)~;.¯K6ÕµÚÎ};cÛ,s-jMtÏK:nòݯævÓ\ÑgkgÖØTvY¬ÊÎ Yeøºç0¨?ó"#üï""0Fþ½Uz÷½ó7ïÎu½<9Î&Ü$
5$±$ÝãÓ¬>Í
e°-rU9tÔÇY4Ú¢rì^¬²(±¼vKvãÉ1Z)Q*¢1ÊT´(¹CP)`QÑ`zLuePÐȪÕ>qnc:ê4º=¦Îøæºñ6vÞÖµÕ½Åð )RÇá2°Í)R¤2$°2Qd¤RSÏûo¬ÀÌqPìÍù&ë·[S+»,ìé
[<´ÙuÛ.É¥AbÅô2ç`°éÒiXàࡱÁ»fÓ·SvíÛ·pÙêÙ³fÎ\¹nÊ(Aà#cïæè©³Ë~¹@ 8ÆòaR¶
bÕ·F¬+x<K)Pîb°|ÏÓ×>=Ã3ö8}ïjªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÓww7wwvªªªª§¯èOò÷ΰÃÀfb>HRW|¶Sg°ðù3kñwiTZM~4çzÙ}Q²*ØlÍØR¦QYÉQe:ÔÕ)¨e0¢°]z.+òÊó{ `æ¨*²Å½z-z¼ª+4ºl·wgSµñÖûÕF£bb,]ÎÏ54ipNweºà·ÖhnovÏÇn5²ºñÕ²Í×_¶-¶YUâ«Ó[*zYUa/ëµz¢éU D£££è{>çÔ;ç_gÞ¾}îüg-EÚñ:ϺÙD+vFëUÕÞ½ü¿¬õA×-}s¾ìæFjh¹B|Ãì>O°Ï4^Ûªè§WZè§lý7ÔÔ
+v©a$
+e7Pâë«}þ÷¥¯{
+Öµö
+¢À²ªÌÒwHéXªâë8YwwªÛg9óßtÚ©±Úþv`Ú»ûvv
+¢Î2Îf¯Þtéâ
+Uî\½Nø'0f¦µ¶ÜâsMU1{ßn,¼v¯ZÒÈ$c¦WSO,¸yMÎ8äàâ¢ÒÝUËËT¬c}³©F¾ïSÅc4+ëÄâÔ±
+ýóc pfÝé"l!v(±èf½¢6wÆ=ÏW5¥¼Duk!®Â0ÂKà#x6ìèÈæíy»Z-,1UBªêÒ,}:vÕoS×^÷GkÙ2©buJ©2¥p#å ú }t¸¸}Ø C¡ :úCæëH_w¦]âð!<ÁàdÏU´>¶¬T×߯yàð[²ÆÅï-7TÞAtU\W`Ó"lè(0¦ X±ªªÂÒ.ÜXãJ¸*²-0ywṲÓÅTé º°Îf®«$$!K6ÚE¹¦á%¡&¨4Ã-k5Z¨ËC©Ti]ÙB3*
Uج·Tº°]tQ]U6EѲÞ#0ÙÎúñ$dL,«)@ÂÈbX 5Ïkpÿ39ÕÒt²¨¢|áÙi9k^&ÎXaº
+6..ppXbÆ%±Aðl=PÍiXÜMÎânn,MDDóÍMObrnw-×Àx #Áà#9F
+ t¯ÃÉA³?2¯áàÝoÔfèîªüÁlPß1÷z=méùË0O>
+Ýucãl-Þ<Ù:ï.q¡À¾pϾ}{rjªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª©@-¶Ûm¶ÛmÎÇgrÙ
+sÌX|T\ëu¸sGÔúü qëâ=vûEkJëÄC¿Æ³;9Y·¼ þ½; r¸j-Vt®èÝ+HvÀ°±õã·,Ú-Æ:¿XçzjµRJÕ¢1{`Tg>Ð= côºïß¡ÝcÏU®;U.¼¦Y^³.Ëtíµ½Åu¯N`gAÕ ·\K6ÇÇjTv¶Á--oj/æó·ñÃÏmíÞ¯{õlNº_=rÎTÓL¼+³Ó4jÛoIâWVK%êYDDU
±5öÙÚââ/ÛLIRKÞKÖK#Ï5¦´Ç}óo/jÚÞÑvv0ÆW¼<;}*ªªªªª»ÀiáÝÿ¾H2v
ìX½î½Qµ3Q%×tD/'zuYÍ[ÒÞqBNÊõ¸í¶çlyÍ[çYÕm
SXÕVÑl-fbÃÕËǯ½]uc·¦34§b¶¬ëfíÚ7Ãò/¥ß`6³óx²pc¦úµt
½Ê ¬æÀ¡õbôà^¯5¿]¶¹6-iÝm_å{]þ7Ë|Ð:fGi1¬0¼G^ïÛîpãp3«#Ýgc\^bÕ¬#
+Áh~h¬ÖTÒëytëüÅV5³ØãUÍN³ÖjT'Ù}æ r9çWzùµ·!=xìßLÓµ!Ú1¨^Ò¤xûvyÆíÝL½|ú:Ø|¾ýW´,rìdchÁì{=ý#ß>õõîÿ3½y^þïé"Çé½{úãó9µwy»¼aVU*¬^DV°¸Í¡BFìUÕÙóLFÎ:ÀJºo"WF2J8q³
fsF¬Y!ÉUU)Sn ££=:Í` ÔaæP!Ù,ÕܪJª9tM«&åVETɦÙ(£½lÙ.¨ÖaÊ$\¨ZK kDZÒkBðÖÛE}â8éóK9g÷ËeÞt»M[/v6-ð9`à((M1Àòõm!cm0Ù³uÛ6lÙvÍ´Ó:{µÍ)˱àà {Ê3Êã~g7äñç9æP¼¦
+aCϰîåFëÎeò^ýk÷ý÷×§®U½¾C3tüW¯ÝÚªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªi®»¹»»»µUUUUó~Ows¿\çuì7Å^g/
µ¢Ìåá»»¶¾MóÇWsv;_S
+¾-½]{Vö]^i,hEºÆ%Ó;üÞWNUKïÍÝkæÆ]0ú켻aß̵úo
+Q×7¹m¹Æ)SU¤êÝ\VsÀÇ5ÀABì`#ÙÖ Qfeµ2Ë»§vµgã7³l[\ÝgÉ{Ü}4'*OtTm!wî½üà¾ËvTªÎ¸ÖXÍêÌ®4ÍkKË,ó´úxñb]ý|yö
+H±Ìú<q¤ø÷½óoè 0He!{Õ"¡¡eÐÆ(P³]5âe¾o*§Yk,Iuuâ8ÇX[zÛábÍlsL)&ªIßZÁͧ:ÊËe|ç7F¯kj²Î]w.î{¦v$DFÒI1âѽI[w\ÝXüx¾8íuÞè$}alõóf'{úûæ»<3aåNÕ¬¯
øb÷Âò0¾«[JYfÙ®÷Ùùái¹UoØ|s8 ëb}´=9£ò'ì¸oϯ«(ýh£õ4F^ëWlæ´3SW,XcN;ã-8Þíù\ÃezVÅö§É|:[Æ,éÂÍÜ7_§iÖXwñÏYáÆ³)ß³=û¡L=hOBª1\ïÝïzõõëÀ¹ùò¾½vsà·Z·ÿ sÛÊ1*¥#U)D˲¬ÂÎï
+6ÛYSÛ·vSG
+ηµiaH`B0íp,ÀVCcÇ"w,²Ë,ı55ê1ÜóÌMMDðx+_` ®yF¹^¶¹áï~³ÊÊ¢+Í~5yI3~
+òöÕùò®ø½LäõW
+9+Ì®ùßû ì©ÏV^ËÞøÅ1yÞÂÙSëï0Îaòûëwjªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª«wvªªªªªªªªªªªªªªªªªªÌ7w@
+ÝÝݪªÖµkZÖµþG6]ÊÞ®ë3cÇäcÖI>'qæI"à¸78U$y"P¢2~ñS
+Ú©ú÷¬]ß½õ¬±¬/Jeí><öçjëÇ[c¦,_¬ã=Öܶ_vîç9Á>c×â>ãQO\Ý>ÑgÁàèô?Ú½x$
˱uBïÚÃ*"¹btËíiÛ]o×3¬ñuÊVf÷ºg«
+µe8jeu¦WiËgK:Ϋ}-LÓk,mÅÓ·»ëF8Ãça×ðsv,ëV}x±¬vÅóg]ì¾\s15Z]ÙÎÕÎ2Æq½õô»¶¬~ºsµÓwÎ̯7Æ,ÙÜ·oÕxÏóÛsÛmòÚjÇYJv´³ÎÙÆ×M¸ËguÛ»íÙ´cK%¬Å¬¢8çtmÕ9è ÿ¹ 4Ï\ñ[Q\Y,áÓLuâüø_]Nã+6Y£R·áK.»7^ÚW)fíÛ0ÖÛÆ1æsfeõeYf%©¡3pp9F§â æë/<ub>o)Ù¼ªe~(ÉÊ;.ÍòSåp§?!Nw??'uÝUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU»»UUUUUUUUUUUUUUUUUUVæ»»»¸îÕUUUVáÏeÏÙC×í><ô}ÞnïN¡MϱÝ9C¬)¢{27<ïÁÙïÓø³7³³l®sïãl×gjvíÙ¥/Úêem¹Õðã8v¤¶ë"ÔNªZi«Y:³àXãaB!à(l||;½P'^oÈÃ[TåËUÛ{óÛ¶oó©Wãµíx¨YÛvUYÙÙ¬ö·n÷í~µÅ[µ7íÙf[YegglóðÊçëÒÎþ·>´ ¾X(0XúïÞîs*òä÷ô>ÞýÁ¡Åè`¡ì~rùÏ®ã-õwK:Ýëúó»¿êOÙÿÚÇþáÿK@þÏ#oú>ù ):S8
¹wBêw@µÒ¡!qS~óWýNgXIøôQp<!×\ñ°ídÔ*ªªª¬%:*µ0ÔÖ`Ê?»MÓ˲ÉÓÓ ºý ò
+ýwÿ7ÝÿÑó}ÖeK¬ü[OÚg¯¿Ãâæ~·ãôÿïþè?ËúÔ´áø&ryEEÿ@ê,u^ÝYéúþ>ÀÄÞUFïþ¿ã
Ǥ:ýp¸?þ§×±ÖE(U
+wïRJª¡óh?ÒôÁ5jýð{}õ`015xwZêJ¡@½jøÕER,ñßôzÎwB(X¥õPëz4 u'Ú Ä>8}±Öõ' xðÖÃF
PÛpâOÎI2N¡ëü ?Æ£0°eÒ?ZE" f2¥öÌÚª«ë· §ð¥ª)%* ÀP$0Âd í äÜFâÂý¿þ_zý;Üñ@´}P òè zÆ Z½=¨P¥`u¹I Ö %`{Ü î´x^ZH:þh(s Ôj}rH&#Äm½W8ð@°8£pl
+`t °.dZÛTµó$DEáÁúÁñ¢Pha¿ëØëÿs¸:$ñ7Ý¿W2'ÀdÁüÁ°;@×zåÿz¬ë01+ØÔ!ñô¿Iú@øØ`|#ðì¨2ÄP6ÀHPz ü´kõI)ÌwÿÐè p\AáæØ@P<ZÈÑ""> 4´wíõ`üÀ|]øDòc¼'bwA¸?ªH.
+d
+ÒHè ûÌþä?'³¸8A^PuêöÇ@íh|$t+ÿp´Þwpp¨Åú ®\À<ÚVcö"#ï1¥&ASÄÌ @ 0À pT¡Óx°,C?! @x§íB*$GP-È$ÌèÀÌÈ]ÐÚvHùà}AEGï ÿ7p`àýO at vßãÆà ¨P¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨R¨TRHUI!üñD¸(^àQk+ð¨È(=¡ë'«æ©ûæ °,
+ðÅQJ¨¨ªP¨U([¿`,å¹Ðn }Ò:H¤QjM{Õ0@XÀ¸>·Z@&@ $ë/Î?U`Y$WàQp#`RdÄ^-hùpX$ÁR$m`NòBz@B.ºF@¸ÜâÂ}>ñÁ5ûðà^~ðå'ãú[Ûýá#â¡HÎlƯ¢E©-ëº[r¦Hjj)"¨Rç 6JF¶bÖm¶Ô-5PÓÕÜW³\X¸8CÆIUÀ)"Làèòp2
+÷¸!ÙÀ-ÙeÀ¨IU$ðÉ( `DÛÊWn ÂBIe:C,ÑÛ#´BÜäÀ²ÀfØ èÀóz 8¸H
â0OÕûð¨ü·¸8ûûºÌ=.¯hZL@äÄT`?xÇ`P(¢.Ë$ë
+)ö¤Ó§È©Î÷ÜL; Ðd° \D
+@ø¾ªéÈü[,`H9NEáí#û 7Aû7$DGÏ/ò¤MàAp&'%! IJ
+¨ó ]Ô
+ 6@ t
+¤x`G¤MâñùKÈH#é DY÷`~ ý ?ý¾õUUQ]A÷É÷z¤ª½dõóUI-UIyÀ øOÌÜjpr8Ø~??»øÛØdAòÀÈ=A@ûb¼X ÜB%
+ù?GáV1ù~X{³Õ5{÷÷= wýHÚò IùÁ¨äZ%o ¢"tAt
+"&ívïý"G.ð7ÀÈ(ö°5$æ,Ã2I àkù¡P5vcxËpr ?h;-õÒÛ¸
+ì8ÀhN |¤$Nah;ðà:(QB¡(U
+(y$x>I0fÓð@è¡ä@ vp7Cûàº@?õ7Ì
+É@j; D}A@=ãÔ ü ßó<-P'Î`ÀþIºá¨Èа·ïxd, l3È
+2$E Pè âI>ëÿ -üµoºHùÒòb}x_î÷ª¤LK@½Át~V"Ð P£ôìÐʼÞ}AR |P|úB¥¤K
+b'À[@T(àt¸¬Ð¡""=Áâ· À$üdÈ"àO¸¸tá?Óoã
½'Å:î|¯ø×¾±û~Yùyñ@òÚóûø,DBÒTI9
DQø'Ȥ>@6P² ú,Ú_BBDU æG (âÃustO°;ù74þ>!Ôx@ç°;wô¿z2¾»ÇÜLýóÒxJvj;p;à5"?1¿Ñt%¤¼H«îø0Ì0`TTP.;ÿDKÃÀ1/:@ÚHCdÉ
+A` ·1áÃ&dØ@Èb Õ@ð
+·¾ÁQw¾(wCíd@âÀ¼Àâ> À(WÍx@ï@ P8áp=Aà²-hÀäXÅêå¼ÀPèAè?¢*}AôY(¸ÔýQþI$újP¬ À8^àÛüPr Y`Z¥ (I,
+`¨û xìã¡"";Àä³õÀûNÀücpkþ%WÌddKÌ|Áò¬!¹ìÀ¶Ô\³À°6ý·¼#Áî`_*òXÉ=.§H<Bx1$ò´>wð}E¢Üø!åÛ#ðX}þ0ä@~"?Ì
+èÓÈ3ÒèNм)i xÈÁì
+EÉ,ÀÀ(Ö|Áæ+#^³`qSÖ±lôx|pdëèèH&׳þ3`wöèyü°/©pz¤|AÒ¶©8â¤ø"?ô~ ì
+Àä ïý d.æüÁP%¤$BAGÍ 'ÒHÂ*ø""ßÁòì
+P3u
+EEp5
+ÁÜ^Zn^úÐ7>ß0UT¤ÌG°)9ÁkZõÔGPøÆ?!ìdp|Nèµ¥ÀzOwp"àão>àº_Gü(z³ãÍÍàRðù)"O?rþÐ*G°2¿§ååÓcç;Â$ù|Aeb""UÔáNvêwÍ$B`HªG ¶âERIT|Ò;$bȲ=®,ßó²,ò[7ÆAc«^õ¶1}ø$DFàô XéµêO1µ»îäª&ûAúð P)Ä"¬Ý-"Ø] P%¿¬H¢qUÊÄ/__o_@/Øuè
+mZ> ÔËÈ%À4
+²*¢à·Ó¨öà6@¸¾~º{\¦I èotAL;ܼ¨hÞ°$òb8È
+Àr Çê°Fc1ãçÈô`zMö÷ø í è »â¨d"0¡@õ$DF<à àèH"ÁèòÁÙÈ$ z¦{ÿG ü2$B/F|'°-`{ýWÒ{C¸4À ܰ; ¤Ã{âAð[ëYÁfÀñ.ï
+$.Á9"#ÌT"NnÀ*¡ßÈ>}n(ÜhêxÀwÐ6#t~tFø3 Xöðp]"P
+ço?ÊK'íû»z7)ê
+'P=ÕCØÄû`|@m× ¯ °6%nôÀÖ{Â=³ ¼+¸:AÕBBDxc`cþmý-"|ÿ¶Iø!Vø`òMEP¡/HxßýÀbwÃöÞ $sïÀßàÆ
îñcñºH¨00?®À÷Ê=2
+Dí<¤ûú# ¤Pê!¾ÄîB6ò
+ àÙØaw«úæI%ý ôüãç*À;$#ÔÀ?P>àöò8{@ÔAi$hÃVÃð øÔ BFÉ"ëôX{߸^xÔPr Å! ¤%! ÐÐHí(ÄI ÿø»)Âå$Ø
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.env
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.env (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.env 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,4 @@
+HWLOC_PU_DISTANCES='0-31:16*2'
+export HWLOC_PU_DISTANCES
+HWLOC_NUMANode_DISTANCES='0-7:2*2*2'
+export HWLOC_NUMANode_DISTANCES
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.options
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.options (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.options 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+-v --of xml
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000003f" complete_cpuset="0xffffffff" online_cpuset="0xffffffff" allowed_cpuset="0x0000003f" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x0000003f">
+ <info name="DMIProductName" value="H8QG6"/>
+ <info name="DMIProductVersion" value="1234567890"/>
+ <info name="DMIBoardVendor" value="Supermicro"/>
+ <info name="DMIBoardName" value="H8QG6"/>
+ <info name="DMIBoardVersion" value="1234567890"/>
+ <info name="DMIBoardAssetTag" value="1234567890"/>
+ <info name="DMIChassisVendor" value="Supermicro"/>
+ <info name="DMIChassisType" value="17"/>
+ <info name="DMIChassisVersion" value="1234567890"/>
+ <info name="DMIChassisAssetTag" value="1234567890"/>
+ <info name="DMIBIOSVendor" value="American Megatrends Inc."/>
+ <info name="DMIBIOSVersion" value="080016 "/>
+ <info name="DMIBIOSDate" value="07/26/2011"/>
+ <info name="DMISysVendor" value="Supermicro"/>
+ <info name="Backend" value="Linux"/>
+ <info name="LinuxCgroup" value="/uid_2008/job_15389/step_0"/>
+ <distances nbobjs="8" relative_depth="3" latency_base="1.000000">
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="4.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="Group" cpuset="0x0000003f" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000003f" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f" depth="1">
+ <object type="Socket" os_index="0" cpuset="0x0000003f" complete_cpuset="0x000000ff" online_cpuset="0x000000ff" allowed_cpuset="0x0000003f" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
+ <info name="CPUModel" value="AMD Opteron(tm) Processor 6134"/>
+ <distances nbobjs="6" relative_depth="7" latency_base="1.000000">
+ <latency value="1.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="1.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="1.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="1.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="1.000000"/>
+ <latency value="4.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="8.000000"/>
+ <latency value="4.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="17177686016">
+ <object type="Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="5240832" depth="3" cache_linesize="64" cache_associativity="48">
+ <object type="Group" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" depth="3">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Group" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" depth="3">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x00000030" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x00000030" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="17179869184">
+ <object type="Cache" cpuset="0x00000030" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x00000030" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="5240832" depth="3" cache_linesize="64" cache_associativity="48">
+ <object type="Cache" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="0" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="524288" depth="2" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="64" cache_associativity="2">
+ <object type="Core" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x0" complete_cpuset="0x0000ff00" online_cpuset="0x0000ff00" allowed_cpuset="0x0" nodeset="0x0000000c" complete_nodeset="0x0000000c" allowed_nodeset="0x0000000c">
+ <info name="CPUModel" value="AMD Opteron(tm) Processor 6134"/>
+ <object type="NUMANode" os_index="2" cpuset="0x0" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="17179869184"/>
+ <object type="NUMANode" os_index="3" cpuset="0x0" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="17179869184"/>
+ </object>
+ </object>
+ <object type="Group" cpuset="0x0" complete_cpuset="0xffff0000" online_cpuset="0xffff0000" allowed_cpuset="0x0" nodeset="0x000000f0" complete_nodeset="0x000000f0" allowed_nodeset="0x00000030" depth="1">
+ <object type="Socket" os_index="2" cpuset="0x0" complete_cpuset="0x00ff0000" online_cpuset="0x00ff0000" allowed_cpuset="0x0" nodeset="0x00000030" complete_nodeset="0x00000030" allowed_nodeset="0x00000030">
+ <info name="CPUModel" value="AMD Opteron(tm) Processor 6134"/>
+ <object type="NUMANode" os_index="4" cpuset="0x0" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="17179869184"/>
+ <object type="NUMANode" os_index="5" cpuset="0x0" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="17179869184"/>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x0" complete_cpuset="0xff000000" online_cpuset="0xff000000" allowed_cpuset="0x0" nodeset="0x000000c0" complete_nodeset="0x000000c0" allowed_nodeset="0x0">
+ <info name="CPUModel" value="AMD Opteron(tm) Processor 6134"/>
+ <object type="NUMANode" os_index="6" cpuset="0x0" complete_cpuset="0x0f000000" online_cpuset="0x0f000000" allowed_cpuset="0x0" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+ <object type="NUMANode" os_index="7" cpuset="0x0" complete_cpuset="0xf0000000" online_cpuset="0xf0000000" allowed_cpuset="0x0" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32amd64-4s2n4c-cgroup.xml.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+32amd64-4s2n4c-cgroup.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,147 @@
+Machine (P#0 total=129236992KB Backend=Linux)
+ NUMANode L#0 (P#0 local=31195136KB total=31195136KB)
+ L3Cache L#0 (size=32768KB linesize=128)
+ L2Cache L#0 (size=4096KB linesize=128 ways=8)
+ L1Cache L#0 (size=64KB linesize=128 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L1Cache L#1 (size=64KB linesize=128 ways=8)
+ Core L#1 (P#2)
+ PU L#1 (P#2)
+ L3Cache L#1 (size=32768KB linesize=128)
+ L2Cache L#1 (size=4096KB linesize=128 ways=8)
+ L1Cache L#2 (size=64KB linesize=128 ways=8)
+ Core L#2 (P#4)
+ PU L#2 (P#4)
+ L1Cache L#3 (size=64KB linesize=128 ways=8)
+ Core L#3 (P#6)
+ PU L#3 (P#6)
+ L3Cache L#2 (size=32768KB linesize=128)
+ L2Cache L#2 (size=4096KB linesize=128 ways=8)
+ L1Cache L#4 (size=64KB linesize=128 ways=8)
+ Core L#4 (P#8)
+ PU L#4 (P#8)
+ L1Cache L#5 (size=64KB linesize=128 ways=8)
+ Core L#5 (P#10)
+ PU L#5 (P#10)
+ L3Cache L#3 (size=32768KB linesize=128)
+ L2Cache L#3 (size=4096KB linesize=128 ways=8)
+ L1Cache L#6 (size=64KB linesize=128 ways=8)
+ Core L#6 (P#12)
+ PU L#6 (P#12)
+ L1Cache L#7 (size=64KB linesize=128 ways=8)
+ Core L#7 (P#14)
+ PU L#7 (P#14)
+ NUMANode L#1 (P#1 local=32768000KB total=32768000KB)
+ L3Cache L#4 (size=32768KB linesize=128)
+ L2Cache L#4 (size=4096KB linesize=128 ways=8)
+ L1Cache L#8 (size=64KB linesize=128 ways=8)
+ Core L#8 (P#16)
+ PU L#8 (P#16)
+ L1Cache L#9 (size=64KB linesize=128 ways=8)
+ Core L#9 (P#18)
+ PU L#9 (P#18)
+ L3Cache L#5 (size=32768KB linesize=128)
+ L2Cache L#5 (size=4096KB linesize=128 ways=8)
+ L1Cache L#10 (size=64KB linesize=128 ways=8)
+ Core L#10 (P#20)
+ PU L#10 (P#20)
+ L1Cache L#11 (size=64KB linesize=128 ways=8)
+ Core L#11 (P#22)
+ PU L#11 (P#22)
+ L3Cache L#6 (size=32768KB linesize=128)
+ L2Cache L#6 (size=4096KB linesize=128 ways=8)
+ L1Cache L#12 (size=64KB linesize=128 ways=8)
+ Core L#12 (P#24)
+ PU L#12 (P#24)
+ L1Cache L#13 (size=64KB linesize=128 ways=8)
+ Core L#13 (P#26)
+ PU L#13 (P#26)
+ L3Cache L#7 (size=32768KB linesize=128)
+ L2Cache L#7 (size=4096KB linesize=128 ways=8)
+ L1Cache L#14 (size=64KB linesize=128 ways=8)
+ Core L#14 (P#28)
+ PU L#14 (P#28)
+ L1Cache L#15 (size=64KB linesize=128 ways=8)
+ Core L#15 (P#30)
+ PU L#15 (P#30)
+ NUMANode L#2 (P#2 local=32768000KB total=32768000KB)
+ L3Cache L#8 (size=32768KB linesize=128)
+ L2Cache L#8 (size=4096KB linesize=128 ways=8)
+ L1Cache L#16 (size=64KB linesize=128 ways=8)
+ Core L#16 (P#32)
+ PU L#16 (P#32)
+ L1Cache L#17 (size=64KB linesize=128 ways=8)
+ Core L#17 (P#34)
+ PU L#17 (P#34)
+ L3Cache L#9 (size=32768KB linesize=128)
+ L2Cache L#9 (size=4096KB linesize=128 ways=8)
+ L1Cache L#18 (size=64KB linesize=128 ways=8)
+ Core L#18 (P#36)
+ PU L#18 (P#36)
+ L1Cache L#19 (size=64KB linesize=128 ways=8)
+ Core L#19 (P#38)
+ PU L#19 (P#38)
+ L3Cache L#10 (size=32768KB linesize=128)
+ L2Cache L#10 (size=4096KB linesize=128 ways=8)
+ L1Cache L#20 (size=64KB linesize=128 ways=8)
+ Core L#20 (P#40)
+ PU L#20 (P#40)
+ L1Cache L#21 (size=64KB linesize=128 ways=8)
+ Core L#21 (P#42)
+ PU L#21 (P#42)
+ L3Cache L#11 (size=32768KB linesize=128)
+ L2Cache L#11 (size=4096KB linesize=128 ways=8)
+ L1Cache L#22 (size=64KB linesize=128 ways=8)
+ Core L#22 (P#44)
+ PU L#22 (P#44)
+ L1Cache L#23 (size=64KB linesize=128 ways=8)
+ Core L#23 (P#46)
+ PU L#23 (P#46)
+ NUMANode L#3 (P#3 local=32505856KB total=32505856KB)
+ L3Cache L#12 (size=32768KB linesize=128)
+ L2Cache L#12 (size=4096KB linesize=128 ways=8)
+ L1Cache L#24 (size=64KB linesize=128 ways=8)
+ Core L#24 (P#48)
+ PU L#24 (P#48)
+ L1Cache L#25 (size=64KB linesize=128 ways=8)
+ Core L#25 (P#50)
+ PU L#25 (P#50)
+ L3Cache L#13 (size=32768KB linesize=128)
+ L2Cache L#13 (size=4096KB linesize=128 ways=8)
+ L1Cache L#26 (size=64KB linesize=128 ways=8)
+ Core L#26 (P#52)
+ PU L#26 (P#52)
+ L1Cache L#27 (size=64KB linesize=128 ways=8)
+ Core L#27 (P#54)
+ PU L#27 (P#54)
+ L3Cache L#14 (size=32768KB linesize=128)
+ L2Cache L#14 (size=4096KB linesize=128 ways=8)
+ L1Cache L#28 (size=64KB linesize=128 ways=8)
+ Core L#28 (P#56)
+ PU L#28 (P#56)
+ L1Cache L#29 (size=64KB linesize=128 ways=8)
+ Core L#29 (P#58)
+ PU L#29 (P#58)
+ L3Cache L#15 (size=32768KB linesize=128)
+ L2Cache L#15 (size=4096KB linesize=128 ways=8)
+ L1Cache L#30 (size=64KB linesize=128 ways=8)
+ Core L#30 (P#60)
+ PU L#30 (P#60)
+ L1Cache L#31 (size=64KB linesize=128 ways=8)
+ Core L#31 (P#62)
+ PU L#31 (P#62)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 NUMANodes (type #2)
+ depth 2: 16 Caches (type #4)
+ depth 3: 16 Caches (type #4)
+ depth 4: 32 Caches (type #4)
+ depth 5: 32 Cores (type #5)
+ depth 6: 32 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3
+ 0 1.000 2.000 2.000 2.000
+ 1 2.000 1.000 2.000 2.000
+ 2 2.000 2.000 1.000 2.000
+ 3 2.000 2.000 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/32ppc-4n4c2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,176 @@
+BZh91AY&SY94²`ðMÿÿÿÿÿÿÿÿÿÿ÷ߨÿÿÿõÜbøBèÄbáûæG"ÿyàyà #íòèNûø ¾êl| ¸©" - Þ
+Ö©Ækݺp¼ïCSozùu(%AE>º]GóÞù° ¬`fÍ{lö¸zämÚp
βìZÀ\
+ѹ´õ¤£æoc×Õ¡IÀfÖVÍ[»©¸ðÃzJÍë
ÒQ¶WSXhw«à{{8;PïL¹/h= z ô (
+ Ó@M#ÔD$jb4Ò4jhõ 4ÓÔ ô 5<U(§¤ÚJe 42
+TüýJSÔTõ6§êÕP44ôõõAP
+ M$"!bbF¦Òz@P
+ 3P ¡ %&¤)êi¡©ö¦GLFM©¦¨ýÕDÚyÄ6P?ÕOA¦ Â1#5z60C2zQHMÑêLMS¤Ôc)þ©µ&i
+=&PiO$Óh Ðh M¨ OI¥äñ È 0~`£@Æ%Å©eK,[R¬ªÀ,IJRŰä%Q( Ì õÈ``fü(g&éab¢ÅE(±JÈQ0,¢sþ&a¸LÅ÷Âf3 È`%%Æ¡£üBM*¬H¢,dUF
+ªÆ
+ªÄ`ª¬HªUD20`bDª²
+¨±"¬TQQUQQTQTQUTQQQ2 Á| *EE1dQDQDý¨`\¥U!ZÚ¶jT´m(¢ÂªE¶¥E[m,Um[)h
+*¢ÆTZÚ¶ZPQU2Ñ*(ª(X O×~×˰¡AhRh
%
,cBÒÕ`mÛjÒJZÖÕª zI$tJRÜ $L
+È«ReF Â7¤O¸HÉ1©¸ÄùFìGg$OÖ¨àQà÷
Äj'Óë2BB¢(¬EEQä8 sìß´kõnfV`]v
+ÌÃ-ysvíÒ\¼¹f 3eLX¢x?§¢ª¯PëÏç333332Ë,g,t¯U!rX¶-`°X,Á`°X,Á`°X,PX,Ábªªªªªªªªªªªªªªª²HùÄÒ$* * Xö)"BqÁ÷ÿÅül£Ð
+È$ò! emvÕéö~£q¶Üõ9zìÍÖï7/;y{¡¾Ã²Þì´7ÜêéR¥)J$I$I$I$I$I$I%m¶Ûm¶Ûm¶Ûm¶ÛmúÖ}ÂBBzg-úÛ~²ßßßßoÇj?
+¿·ñþ*ß³·êÛøÛoßmû+~¥¿~·ò6þNßÊÛù{1o×Û÷~¥¿Rß½Û÷¯Â _íªªªªªªªªªªª²I$I$I`,ûzõdÛ¼¹ºË»zhD¢£q¸Ù´üÑÝìý±I*7½ÆÍ§Ú½ìý±J*7
+té7«?
)%EêáNÁ¿µ½)EFãq³i÷'w³õIQ½î6m>¿¡¾Ö)EG¸Ù´èîö~±I*7½ÆÍ§þÎïeJAQz}OæÖü¹I*-î,é=MÝâÞâÎc½Ì¢£q¸Ù´õ;½Ì£{ÜlÚ|ó¿|Í¢£ÜlÚzÞÏæÊIQ½î6m>yßÔßó
(¨â76Çw³÷e$¨Þ÷6)ßÛï÷%(¨â76Çw³÷E$¨Þ÷6)ßÕßîQQÄn6m=ïgñå$¨Þ÷6)ßä7ÁòR#q³iêw{?)%F÷¸Ù´ùNþù¾çQQÄn6m=ïgò¥$¨Þ÷6)Ù½ªRJÅÅNêÏÚ¢æâË'©±«$¤}F'&5£ôJIQqqgIï1øëÙøÊQQ¸ÜlÚ}»Ùø
+IQ½î6m=çgê
+ìkëáþÐ6¿×
+ã¼øÊÿ\7¡ù'WN}ó§Jmó§YN}÷IÒ§]|®§Q|¥N¶ù'{§y¾IÒ§W|£N
òN9ovn§ªÌê³'9s'`ræN°åÌÄåÌÔåÌ<åÌåÌgC2qNdã;Ædã:ÉÆw\ÉÆw<ÉÆsó'¡ïUUUÎñ;ë³øÅ3+3+3+HVB²ÒÚ[KZ\Ì2ÒæaÙ$Üùý$OÃú$²G³»²I>P(,ÈnA-Ð
+@úzû ¼2ÜdÀ{&y>fLöN ÓA
+Ú°"cåäÏ1'ÌÉÇ<æ`aù7f ó2`&y¹äx7àv k=ëC<ÄÕ`èe{ÔI/ÐË(H:AÏ0¤6cܱ 4b5,±ÈÔ²ÀèeO1 à@ú`ÉÚa$"
+hR&´ Ãe.u(&îË¥
+í)«Jjãþ?_}û÷ñBB$wÀ< í=Hd²EÂI"ªÔ%U© ªµ!V%U©*A! HÄPHÄUc$J ZBHK)$YbBÊ",ý P-Y`ebHH Æ1AÆ1FD# ô@ däâÅ,\L¾Ãájõ½f,_7,X±iïô´t:m;m·O¥·¶ÛríÒ¶ÜÛm¶Ûm¶Ûm¶Ûmà(*»Ô6`@P³s%ï¯/̶ʿv³¢«÷~ÊõD®I¦§YUVòȧ$7´%lÜ3Í]Iî'q;'sm»
WI:7´%lÜ3Èí¤7´%lÜ38¥m_i&m°Ý¸g¢åÝ{¶ÖØ·^åv[ºÛUQU ÚÛvWeµ¼¢-¢·p¢Ì7pïs0Å0A:à Ã{a½Â0Þáopè$Z-´FÜ#
+î÷Ã{A$Â0ÞáÌ0ð¬7¸FÜ#
+îîáo¸FÜ#
+î÷Ia½Â0Þáop7¸FÜ6ÝÂ0ßpè$$ÓåKé{=6¶Éa³ÚaÂóìöÒu·9¶ojúñéÝ´ÝÝÂvá¶Ûdݬ'Ez,Hwm7,¶½¶î%`Ò¶á;H}Û¶ØmD*vx\Ìkg²ÃI¦ÛYÛcËe¶ÙµÙD¥gGlöÒu·9¶okÜæP$ýÝÚIc}¤+dá=FêøAøFm0ÞÄ
+5ÎânÄÕùóåøÉ°jGÎñãyü8¥í¶Ûk¬Æöd;uT¨©K¸©Y[Jâ¦$¼Êy³+³)\T¬¥Ø©Y[[2¶elÊÙ¸4)æVÌ¢é]]@¢¶elÊ](
+î$fØc
+ìHÖÑEØ
+7±#(çm{I¯´6ØnÜ39(ÜI#6ÃobFEmÖH]{I3míÃ2:½Ë)ªª*Ý[w*¢ª[Ûm¶Ø¶ÄöÙ=e'¸ÄîÜÛm¶NáÍXÕhÃ${nõulΫJ]°£mFUu&bf&im¶É0ç¨äë·£ðæº¹'ÒÔoå æº¼fN>ݲKlÛ$¶É$ÚÛmImV.öº,À½¢Æ9v¶.è°/h°/h³o»-b½Ñ`^íÑn;h»¢Í·¢Ú-ë»q3&fÛ&bäÝ$.¾ÒLÛa»pÍ¿1ÜÝ4»H9+d
ðÌÎáÉuéeöfÝ;±/ÄÞÚYc}¤+dággl²Æöd;xa··ÛÓK´²Æöd;h[è¬K,o´%lÜ3ó
+úñWÔIîÞï~~~~ ÏOAÍgNŲټz÷q¶e-ÆÓØ´-Ëeì©´¶e=dÙlðMÉ%í É[$wÕwºàl¯ºàlëÀ£0:º
+·ºàl¯d Ýx׺àw\ëÝp4;ݪ`Íx×w0v¸×Ú`î¸×+Ö8fÛm²fåÝÜLâf&bI¶É¶íd
×ÚIl7nÀvîé!uí$Ͷ·Ñpó±QqÍõ{°ÛÇ^9«\;cê÷a°j§L6ãëÇ1ÕklsV¸vÇ1×sÇ^9¼sxæ:ñÍõVÑoÇ^9¦¨6Ç1×c¶xæ:ñÌuø½íðiò|_ÏLÛa§nn$a7±#=ÄAÒnK§wYtº]Ö\-ÖîâÝ.K¯%wK¥ÒîâÛ&»ºÁðx{Þ÷éaºIEKeH°¨V!bF!`FDÂ
+É$w°5$¬F1b1¤¡a°D20VFDEDX0A"#AEX)ËA½`÷tÕuê¥ãR¢1<Z7WÚå·3(¬¢ª¨±¢¢ªÄDQDUE"EXÄQUTXQ¨
+Jª""ÛDEQUEÑÑÖ.ÒèÌz¼JÑXE
°9mjzÔUµpͺ¢)ÂÎ"¤¨PgGC2Ih²
+öa´ÞI}_
+9.D1#$AC IHëPÀùh²&¬³Z¹Öò`o«¥ÖV=d£Æ #Nº©Ñ
+éÄKdÅ=·$0$ræôIMÉ!ѰòDª¤°>7QáêLÔWLáÔÁX!L+æJÖtV=]2µ4ãWUh-±33¸¤L$kâKhðàÅ×Þ¢Ò[&-]h°`üÒ:Câäa²ä$Ä ¡oŪ=QÌ3%D¶©^d*¨"s#2ê "I:B%$LblCÄó NäMõ  G4âæ+b¢¼â¡¦¨²A"ªÜir>î<-ó´¡!Ç$ ´ÄJHØ}j5«n?*Q*¸s¤ÉöAA mwJ®írå¦aZÜjÅ^Ü«Û(&W ËjÏÀ" lCæKå=¤Jd¬J¸ÊS4Ñ¡|¡@¡1H,£á iP
8Fbp G6&B(£w8jºÅ)k\Kne2¸Ó.9tëV8oÅ1qÛWB%¨xñ-Ù!@À¸dYäµ n´J#D.÷| rÉÌ<dÂdPDg8×nbßsSºw.Ü1¡ÄE«0¢çd+2[$H#]HsUr
´IÒdX
p1
+d°ê"®Ûmp¶ºÅëbmÙ$&CyH¤JI"e>Ør$.m$X"æ¯b $Ssj(`9äæK¤°"
+5%´A"J3öÀL ¹¼Ò¤½'"`\m(ß4½[¨±ÀL fóKÛ¼$ä`¥p©%[/^ð¤n´½[¨±ÀL fóKÛ`-ÈÑÅ`Hª·Z at pe¤«xâI(0äæóÀÒ
+·6ë«lnÀW7Í Ô[r1AHVìMºÖIuÆr-¢N £rNiyì¹8÷LAg¤%:ç7¼neÍÜÌÚ¢ëWS¹÷I$ØM*Ü"Æ,0"@FAÞVQQdHÂM Á% N!ÄQEXQ¡PDDjU9*(´#UDQEZ,QÈC9m+!-¨ª(²rÁÍd6ÃH.üdG À¡ Ø6tK&â_U!b2!!ÚP
+uJ¡Tºc&*«f4(3U! Ȩvv¡`aK"P⪠ªJ¥¨¥À¤*«anBøXX0ÐX
+Ô2v°ë";
+B$bÛe¤,bª82£!ÑJ¦È-[2Pì(Pa¢2CPÈ3±N¦*sQ2$$íU(dHÀa8¢Â
+JR2X*d1U²Õ¹ÂÂÁ
+JDI
+;U:¸jd at QB¨L,RHqFª*Ì``ªÙm0Pîh)! ÀaÜ:°Ô,2$ìAV 8,B°èRà 2"aBð¡`ÃAI&C¸Pèî
+ ,íaÊ@¨«E$
+ª!*ªJªPÀ@00UV
+ÂÂ
k¢¨Q´©>_2ABÂB OÐ""}ó¾]ÝÝ»»»»«º»»³J"""$ àI$>èA{`¤H|/þï°"j¥±ôü >+¸pf
+
+AºB£#l¹-2ÌÚë$`AV£,É$H jPT-@:ÂÚ:*C!@Z*,U°@ÂH,PZBË ª[G°à
+È Ä$Q0¢U Q¢Ø A" åJþ?ðê÷à¨ù@(Äü¯¶õÑ>»èù>È~DZV*ªÁV,X±`*Åø¿7m~ý'õïñ¾ÆÜ·»çwUU}Vt¼R¿ÓYeÃû^©`ezZÚÛ¯Ùöµ¥z_M
+uêWâOÔ+ xÖüqÕÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÛ E¢Ü¬Z-ËZ-xY&(´Z-ÂP@_ >/LðßÙ{{/Ð:b
ا1Iò yäG½öý >×òû×I"I$»³çPÑçļ9#^LQ{¥6´*éô05á¿ísû$ݧõÁ[°°?G¼ÊbÀ
+,`@Ê[EüÕ^ YνóýhøÐ`Poß2E®ºö+âW¦¶¯MzkݯMzkÓ^ôצ½5Û^ôצ½5é¯Mzkܯj½Ê÷+ݯO§G=ªAªjUYAEB>_ïêc À {`²TîØ&* ±!îÜU^3ÇÞBÙ"¤#:íjoo,I$!K$RÄ¥EÀ!) )rËEUUd"vÈ÷xÇP< ÝDÅ>Iöý>OÃæÄt ûßÎ÷²#:õ¹bÞ;\¯p¤LSÒ?XrU¾¨*{.4·úÅã
+l»µää
+w&Q½s«^5Ë[r%±hE!;¾r½·QÜËÖtñÓòñºìð4ñÓØ6 ÷qÅq;¾yâ7ÌëPDpÜ÷¥ç,üEÎÃgé1½,
+V·ÆôõM¸×¥n5ε$íq Ñ @U¼n8pªv«ÔÓ×yÒõóL7S|8~hNmaZ§Årü]diü6÷SjyÎa±!º¸ÓkD++Í xb¬Yì¯$f0SÀÀÆúªªó0n}0ÆãâìqõµÒ7W2[JNffaqbÜ¥-¨ºÕs4Tm¹ïùàø=Ûå!ëPeYJ>à ØÁCgÄØ ¹RãB-¨´
&·)aV&ð`e/0yJÎa&%ÄÃtÂçA"O BGðÁAAAl &åqÀT
+`Ì?¥¨"1b#¨c¬ccÆ*#Åb±XÅb±X Åc* Æ1Uc¬b"#Åb±XÅb±X Åc* Æ1Uc¬b"#Åe´¥)m)bÅ)JX¶ÆA$Èzû´wðAùz ¢Q(£èx7ÊI$lÈ1f½`Þtp2÷A»P~7p2ð ¢¥UE¶Å¢ÅIExQÐ(PÁ5HÄ"$b"DPh 0D ª$Pb±b¢Â,¤¡`ùDI$8 t u=ѬDcÅcÆ+b«Æ1V0!ÆHÉ`ªªP½ À=Ðy¼.©< ï_ø7{>ͺ뮵Ljªª©ªª½à 'î×~¯â~®ÝWääú'´òós33!lÁ¿I7É8$à63/m¯lÎc[5³[ZÚkUkZ¾ý~O Ëäú{RÒ&<wÖ¶Û3¶Û7ÛmÛ¶Û3¶Û7Û}=à ð÷ÏÏ>¶Û3¶Û7Û_©5êOC~¤ø²|ðO¦½ª®ó¸yÖɪªªcU®ºëZ宺ëØ#´ òã¿g¸Racáqy^ÔÞªÛ6ÞÝÞÝíÙMI9sïçÏEùþßiöùöm¶m¶[=¶;i¶m¶m¶[=¶¿;ò'ëõüüÿHáùüpïµUã;lªª¦5UULÔÕUQÙ5Ù=o²{·Uï{Âs¾ÕWîu²jªªÕUU3SUUGd×dõ¾ÉîÝW¾ ï ÎûU^3¸yÖɪ³;m³yí¶Ùí±;m³;m³yí·{Þ÷öضٶټöÚþ$îÉë}ݺ¯|Þöª¾ DÍÂ(ü$A ÁH~ßï6Ãm¶Ò-¶Ëg¶Çm6Ãm¶Ò-¶Ëg¶Ûg¶Äí¶Ò-¶Ëg¶Çm6Ãm¶Ò-¶ËgµTx&¼ÞüâÝWÇõç}ª¯Ü<ëdÕUU1ªªªf¦ªªÉ®Éë}ݺ¯|Þöª¼gãg|ú¶Û3¶Û7Û_Äøùþ¿?Ò%øþbÀÃñüR_ðülïRvÛfvÛfóÛm³ÛbvÛfvÛfóÛc¶hvÛgÛe³Ûc¶hvÛgÛe³Ûo¸çÏçÏí¶Ï7¶Çg¶Ûm¶Äí¶Ìí¶Íç¶Ûg¶Äí¶Ìí¶Íç¶Çm6Ðí¶Ï-¶Ëg¶Çm6Ðí¶Ï7¶Çg¶Ãm¶Ðí¶Ï7¶Çg¶Ãm¶Ðí¶Ï
7¶Çm¶Çm6Ðí¶Ï7¶Çg¶Ûm¶Äí¶Ìí¶Íç¶Çm6Ðí¶Ï6ªª5UUU ¯÷¿ø·UñÁ>0ñÚªø×=xÝóëÛló{lv{l6ÛmÛlòÛl¶{lvÓmÛlòÛl¶{lvÓmÛlòÛl¶{lvÓmÛlòÛl¶{lvÓl6Ûm"Ûl¶{lvÓmÛló{lv{l6ÛmÛló{lv{l6ÛmÛló{lv{l6ÛmÛlòÛl¶{lvÓmÛló{lv{l6Ûl6Ûm"Ûl¶{lvÓmÛló{lv{l6ÛmÛlòÛl¶{lvÓmÛlòÛl¶{lvÓmÛló{ljªª<W÷ãÆ¼oÇ=xïÀ D×x©ÖÜÕUU53UU¦ªª×|
+ø'Æñ²|s½xu_
+®þx<r?BDL& $BaÂDL& $BaÂDL& $íß}¶m¶y½¶;=¶¿rwܸúýÉûü'ï²zçzíÕ|z AäñLIJ³5¶ßeázfRnɵ¶eµ¶eµµ7dëZkZÕ¯^9~7cm¶Ò-¶Ëg¶Ãìj_fþÚM$ûIñ¿³j¦ìÚ®ÙÚÖÔëZkZÕ¦£*`& I$ÄLF Â`I$ÄLF Â`I$ÄLF Â`I$ô$OA $¨,A$~^ðÀxê(&úúL&$~á¶Ø¶Ù¶Ù¼öÚü&¼½ù'u\à°ïµUã;lªª¦5[lÞ{múÏ/Ï!ÛmomÏm¿Ej4& ¶à@LôôLI$ßͶÄí¶Ìí¶Íç¶×ò'~Dýþ¾Ión«ç|á9çµUè DÀ"ïÅN·É;m³;m³yí¶Ùí±;m³;m³yí¶Ùí±;m³;m³yí·¡&$ÝfZ©kZ×È }ù~Cªlè_Ï?(Ô>ü¿*¢¶[Ü£_gÜA%o-×·CRÖn&IæÂzDØ"¾$5X
+QÆ´@5|kë
+J0Ü»F¸x]ÚC[ÛÐ0D¼.ðÒC*ùçÉ
+.+7±<kK§[uå2<2éîMÛO.O;x6)ÂàÜCçÀDhçW/Hòô¸!
+À¬
+ECXÊ2IaKR`ȦA,22HÄ@(`!À,22$H0Ëa22)(©®YJ¹Éûã
õ©o^8ßÞ}Æ=8¶×/îtźF^ò®ÙH¶#§vF`Ów>:óøèÆíP×Ýݳ< ¤wßÑÀWÕï$$Ǥ1®+Í
®4¹üÇÞ>åzüy0¢ªd,wâ27Q
+ S7ßìm¾:ôÝF½v϶f`ÌͶ''Ó l$K%Èm¶ÚéÁ¶Ø Ù.H$K "\ ÝÝÚîî£W3333332U®Úîî£VU®ª&¦fffffffffffffffffg»»»»»¸§¾oçÏ÷Îîîî)ïm¶Ê>|ù¾pÃâ{Þô D\-È~CçÄôuÃYÑ8É ëæôÌÌËp ß׬ֵ¡\@MѺIÞù~çéÞ*§C"òS
M^<rÜücÆ{E4Ú¥B¡%EªU*T*-R¡V¬!QjJ
Au ¨kóJoí§,ú}*ª*}5:§ÐçËIûÔáLDè5E¬ÎIHÄ'ãÖ=³±QJ,TRíÚÛ+m¶¾¶F¯§$vÛ'Ô>¯§cñÏ(Q²!±'$øB!± bÅÈã/Öð$OÌØÄb10`Äb1F#)LÏÅ3£ût"Äæç×ÌñMÎß
+-¶Ø©&?p}rSÌyâYV×òÄ~ðóy±´t¶6¶Ûjؤ:§Q´È¶Û*Ûl»!´m
+mFÑ´lÚÊÙµ´¶Ø©¦ÂÅm
+ª¤²¬ÚCccdm$ØØÚ6¦Ë´ÚÛh¶Úê¥:¦Å«Rʶ©jí!´m#dFѱ±Õ6VÓe¶Ô¶ÚlKuFIJËjµ²FÆÃhFÑ´l>ÛàWç;è(ü-EP°EQbÏ©ðÕQUEGç'ÃTUU²©lª¿¢©ðüÑøøª§ÅTU®ßîóÎüZïNãºwËm¶ÒwU«J¶[-´;¢;Né%¶YmµÜNèwGqÜ;IÙÖmÔêuu=Etóæç9}n¢RÅ)K¾;XKÁãÎt+]Æ¡¤hhhiF%¶Û¤iá¹°w
+ÃpØkj¢l6íNv§=öï¶oëµÃÃk¼ÔÕ.ãCM3Ï?¿ö$ö£j£ÉBĹÍÍÏÎâÝâØ7"D$ ô$(17°
+ª©
:¦HPULs]="áq]%+Eh
+êIc$M!dY%ÂJ0ÚI>²Léá&!oÆ-N´>1¹×Wá¼3N¥«@ Oz¬ í=,{fdòxÐjj^¿çbó6%C3Z¶wS¿Mõä¦N®¸v w$om$ò}Vë^<hbRBjuD¬D*'ã0ÎA*k$Ò %±lg5ªµU UdD²ä5Õª7ù³Dd0¤5ô¡=Ètç¥+:ÒhVù×\Ùs»{i[$²%u &y0$R¤
d"0)½ÝI<\-p¹Ö `æð¸&ÍÓÆnkÔ~1 _/[ 4W¨z24ÎüCGG6<êðY¼79F>·N·àð nHë½æBdg2æ±ÌÃdI$7vo$ëZÑÃpæéd\/¼¨Â0äýï ¨]Óë³áï
+ C
+îÁJXêâéjäºH6Hs*pÖΰ2HèU¼- QEsù|Ëçy||ð($6Á=ïdwpP)UTÅýß5:"jç*}¤DUQÖúÖå¥dDWTDÞ¦Ê">¶dU\©~\ëê |ÕQ1"d1õøöÃïBv?A*ÚzJÇT²'µ¤
#a2@/ðÒÖõ\ß·¨:âF6)*Yyx6ëH(oY<¸¾u©9ç&"½áV;ÎÍıT§£èzú{H)pjºkÖXuÍn=ÚË£²Kuð×-ä3ãÈöp੺ :A²éàð^#»ÔØI%ø³]wîºÎs> %·ñÆømNø¢õ¸Ö¤GÖê/ëéµÖµ©$tªI$UUfgQLÌÌÎy ð´ÏÃÀhA
+âXÄ 7¼t\
×?]AdX at b¨DOoI^ Ó
+öeNþáEÞépTùÝ}Ç DDDDAüÞÈ|)çHü¿5ä´+ïm(w»àGÁTèùد V~ßu&1.HP1zÒI$fÜÂtdÈ+wNçwK£<kQ /
+DÀA|Äë¾w~®@&E*ÄAÂzMÇXd
+{ fòL7©¨j° kôh·×\BÉ>BOw¾ô8ôÂ1Îíù8¥DD>[zß.ý¸
+tê{pÁ=¡Ä/¬w
+¼C¿,-Üsñ,°p`R1zYWAØ6{11±·wÚ[%±-´YT»óå³ñîÔ×Î
+ÙBËJzá0õÃ$ÌG ½H(À,¦ P¬±¤2: /ÀkÀ,XH; ÀC£ð8yRPLDDC~98sL>
+Ma(=î8Å+0zZPdpåjUŸÞýÜîÓà D% 1|<¥`¾)-E=©øõñ½EóÔ>M6V=î5 ªøÌ%püMEZyìyßÞwC¦¾s~6Ûüi¦æ©°8mǤÞÕÄÏ¡ÌâÞh;ùP¬
+ôp9²m"21"
+£!Ù¹.!C~K Ä{_ÁF\û--Ø
Ú,ª^\×t¼ùï§`.üS'¿ÏZ=¾+ð"|S;^½7¶ 4"sÏ=N{P@]B¥}f ~Cç£0ýÕÂÜ&ùsRÉ)Ͳ¥³®I-$s.Ek2$T¨9Bz qcvè{³"(ú਱xÍ"©ì8a64(äý'z®rbÕÁøwUî©p&X¬Å¬±
ÃUr³$é·=W¢),äs®v´s©!:ÂlP¾P©G!uÜë¦[q7Â!öBv wåj´ºøjªuVúù u5¦&±ø;¾©ßàÕà-&ôC+m ò æ½ÐßWÕFº*ÖÌÌÌÍlåÞÚîæ¬ËiÉrD¹"\¶Ûm®^6
+ärD¹ %È I2mµÝN®ffffffd«ZÝÝÝN¬«]U<MLÌÏwwwwwwwwwwwwwwqîîî¶ÛÜSßG·óçÉ{çwww÷ǶÛe?>|
+³÷Ò·×Ôç6O¡ 'ɾ|Oëe]z{½¹ejUV6
UI Ùm¨
+J5Ýëæp==ÿ6w$òÀ 90ø&©gÛãí
5³3-õ×^ï<ùÝdÄ1ãø!
+!J=¾ß$xGwÓié±-æy½L`ÏÇ¿9r1×b&ü'ã/Zðfro$öôç·Áݲµ*«Bª¤ l¶Ô¥ËÜÁ`ûê¶ýpFU"³X,dË<|R7[ ¢8)]ÔZjB¨9h ;µG¹øßUH"aæ÷R@Ñ
Y<ù¤Ø²¡6f³V0¤æ²e¸:ç»âëÉìO=û¼ÐµOzôd!íé߻ϿÓvV¥UchUT`
+ÚÔ£Yw<7G+"ÖfvòÎ3ª,²EXkÍÈ`
+ÃBÝ0źN»è3°!´$0êc$3¤Ì²XK"Ĥ¢(P±"}>Áñ¦§±dYa 2
+Í8F@$umÃ^Þ.ÖÔUor]Ùqä
IFÄ 2yô2 É:èÕéç' "$
+$æ¹\9¦aIÇÙÀ8'}uÎAdHEæõ@Ê0B0I4f÷²n0böú>îsûO"z9£ÅB$Ç·^î|YV¥UchUT`
+ÚÔ£Y}<
+Ñå´zØJÂF2 ®·9©°ÑÌh at d榰¨# dDËC"YMd¤! ¾yÍ÷Þù=k"¢µ0Ì$*Pt` Aoffë[$#$i$<¤8É&FP'Y`ÀÈLi%ö·è|g~ÞãÓ«ëíëïÞ¬JªÆÐª©"À-µ©F²Þ{o׳á«N'£ç®Ï]·^;ò©NO|çW}ùeöþ'w£*¬PURE*yôôÑ'·¿Û1bªÅU$X¨±gy¿wwNýÇxÅ«T`
+¢ÅÁ7®¿?Ø ;ÍïÏ>ªÌ¬¬K¹g,À««3±ÛCÊuIqÛd&q:cB ;sduKÊ´ñÖ{hÃ
ÊÑZG]FÅP5B¹Éª¯:éz6F)IâÌÑ£ê¸Ã¡¡pfKLÊÐâiRrfY {ª0àÉÁ¦ÑEA=mu½ðÞ
+.½I CâQ ,ÏézùÝZÖ«ÕÄ *WMnG¤5¡µ¸-Mk Aò " ÷½GGZï¾ûï¥UîÕUFÛ{ï¾÷ß|ç9Îs¼\ãOIè¾]ç3fM=ÌB<¦)K)K)KyçË«yñðbÉlBËmU/7=M©8ýh2xÈQJËËa`Ñ@. ´ °,H, ±°P$pBC¨,ÂÖ°"ÄdH"ÈKhûìÍû%)®ª8erdè¼N°ÆóêeÒpâ®)$H¦8éPõfáAC,eøÙ¡}þCÍPÎ>Hìö
ðÎà(aÍ3¦@ÇÝÕùáUî·Z[%±-´YT¹êÓYÝG/²nÏÍNDDièË(Dö,Ý£A$2HÛ&DDe7ta¶XiÙý3oËù¯°èÕ®øt¸YÑÒ½h<øÉãÓc^\Z¿6L#ðÜÓHB77dÂHÏ2xÂH¡!çõÀß
+ µH?+üg§0'«¶ói UItÏõ@¯wâ¨,U¸wÙCÑÈ|
tîj6M`æcßù ûcÐ_T "øL4EcyCÇ·~¡ç¹Ä<'sªe³ÃÌ)]d28ÕMTèCÆ<Ç UÊÌc!H-íÎö/ævYªÓÔó%9N·,Æ5ÊÓ×ÏMðxjB¸tz>ººÔ0\Y:Íòì¶Ùt!U2]
{ªÉ ÞZ3Aëé\ö6ëâõ÷¨, $ Pôôëã¯8Ï×sè'É}BkÀ,ß-¦â|y¼t·;óÏì b©@AÆ@ è<qß·õ
+ª¾ª´4©(§1_àîmÕ.sô2WOV|B¯²åÄÎÕ?w-½hhûyÆl·æÂ·§DèîJÌb6VO çc8©|`
+áQGê}¢UÜmÕshìUìJ$Mº«5|©d`-rÌ!¨C*zÜLBî|É;2 aE,DÅ$!+ ¡$IDR ,()«d5"²R5êõUí
+o;k,VòuK[xW·å¶*ÌÄ2Å@ ç×~}õ¯¾
<Ûm·2µÆ^m¼åÉär D×]ó]1¨ j$K%È .@ Ië£~ºi¦Ûm¥=Õö)îç/[m¦Ûm¶Ûm¶ÛmªÛlÛSìá¶örãm¶§ÙÃ#m¶ÙOmú½øiõ01ðH5¶t Qã½5_$8qÀð@öä ð çFDBPÏ,ÒþdJtÖþTl(d 0ðîd£¬½!kf'À
+5»<y°$¦µÎnH,Y Ö¬®ÙkÏóþ5ÒÏ6Ä86 &YB I%ÜyusÕÊÚ±*p¸ÂÚðäò\êV|ús¦ÁÒ
òAª¥G+ Ðéd``u¸B#åb$DÄ´n¦.,W»£_N¹àÙ¯4ø¦ÓF7BC>Pö÷gÉïõôi)ïö°ô^÷LT¬«yÂìDd¸JÎ7fÊb¶ÓNükç _;¾/¿
+'Ç^BÖ
+Hu
+ Øa$ÉÈ\÷°°O|Ãz:§\ L2@³FäàèѬÐÜ&a¯vÈT>4ÖÄç¶Þ\=yÊt×GFú°åybòûzkÓÏ´ù; )O:ÏtÙÖHi$!ïk$=þ}0GÛo (¡EÅ£ª¤¼¸uEQõÇUq¾Ð¸ôð u¸`Èox`@ï3Î@®÷I7@Õ0Gfòd¿lù =uéë|ì0 at 9GO»WY½Àúðd·
+Æ Aßa¹aMëÍzëà:çr Ê@ßúr§Á^û%X·00,À£
"ÚEN1bÎ~mßÔ_qîë8ú¯BÁÁ"F±ÇÈ1ÑR
ãÐ/ftÚì"Ab<
+NU15A ÁD ÝZø°Û
Ã
¹b'åx±%*2ÚÄ×R»wvD¸l*j©2:é¸ÁW_M!ÌÜél<¯v"Âø]½uyÐ
@6$ D# a&Àè@Ìï~mïæ÷ë½ë๷:íáøôáfÔàUÑÞêÚUÌÌÁ$I$A&ÛÓ¶ÞDú?O!Ä B|
+RÒ f3~#Öeò"' Ò¢v$
ÏL;ÔQûec²Ù¬§ÀÉ¡8ë(¯Md
+u|'|HÄ<ÓÁuȳ¦GbäÉÍÇ^<zï~¡¾MJÞ¬iïÒ¾P=Æ'Z4ÁÖ¤¸6 zÇÐÑiߨS«3¸½ eëªrÌù@õ=½pöpçÐSÏ aerÌÛ£N«íçgÊÏd£® bà¼Ô¨è2\}Ú
+®=ÀG#C¥B¤
+¦©KrW¨z{üg=áßfvf°ÂðI$!ö¡Ã³P© (:`US ={î´&èl_ }|ÃÁJ(GÛÔ½ÌT*-õööÒ@ë¯>>|d-°$f²ïìï'z3<´s[\XÊ*(Ua¯ :¤ D8ør)κ-ø}
+4HhÐhÀ5£S\Mm6BD(áôÂ j %8D.
+ë<Ý¡¾x|AÀà¤ð@þ=zØCVG&¸îÁ·9nÍ
+ḭy×9N}uoGW5dº5r$ð{4-ÆÄMG 8iX¦ÀTUXrÏ$åö÷oܧopIw
+6a¤Ò¥ðȺ:²!ÁÝëåBðõ\UÕ`{6BßÏb¾(¥a¶î¾½ÚåØõ2¦Íxâpº¨?¨?
]ÏÒH~?ûòp´¡ê ¾Þ]/éö=2V)¥BL>KO)PéH¤Ó¹4_@ûI!¸Pèê7B"*ûQUÀKÒø69_l5lyº»èâB[_35îºÈ˹B!ÝeL:Ãtä+£áÉ´¸\NX'Z-ª D@> ¿OJ^8ö1ìÜwùï 5YJNÝ×Á,UÛÝ_.-,
;Ä}V}Խµ j%ã]uM7©rD¹"\5×|×Lj ¥Éär K Ûm¶ÛnI$snÛm¶Ûj{9·MSϺ^¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶§ÙÃ#m½¥ÖÛmO³FÛm²ÛéæÝcb}¢b¸4$IÛ<?i-cÝï÷ûuÇà8à;áÃûùÆ+ÈlÙ ÈpÔÀÃ2d2aadO½À{
+ä.aIEÄ:6 w¿»o qv
+°î6¡P:*
F@°ÎýNlαèóqk°ÑѪt=&rpèTèõôôÒ@Õúwi!Ú xd6
[ÖxnkÏ;Á*4¸*äBp¯bM¨MôN½nýÎûrHaÉÛ;òhòhQyÙá+IáC[ïG. õ[¾w»¯Ï|>ìCRë`><=mPH â =§ØgwÁúÃ5&ívÁ#H+:+]ÍùÞÌ8é¿(Ë\ǯ:äI¡Âcì£;
R
+µ²ù½IFØ(`Ð"(gâJ(0ÖÓµ½p0Û«¼fúoÉ©y9ËßzÒÙ
+,7ClÂ`Ài
+Á3©5¦Å2&´O_në¢Á¸åÁ åÕEAQEÅ ¡CcAJ%ßøF û'ãæaûäøàêè<w0DiªÔ UØð {VÙãÛà¯ßçé|ÚöÌù &¯·éýf½§~×é¡ð]ndú/¡ôäåÝŰM]ÊtP.ìl!2[ª$Ao4Áñ,Tù2AÍ¢ÒF#¦!«¸%}Ì
ç*-à1jn
+ôòîS"o aR68Bóz±BM±m*Z{¹ºA =ÎhM¨M.6Õw]
+ÉÏEÞs
L"â &â¡©ôh÷eh² @2V«½ÄãB#rg#Ír¬zM9¢¶÷/ñJ±$I$H$ÄGN¶ÛyÇÀpú §iC>óUã0©â¾/SÏÃÚ
+@
+À )¸Óì]M33xÜË{êüHDuд٠`à$9D±âQxwO¤DËÓ¨*îÑ
+
+tÝ
+AMë!³¤OU¹á£´vC%;ô绿=hð 9HSV6;Ü6C!)C+òîùÝàyE´BåxpÒÐÑÎø÷üúøzäïRyfA¬³L¨QVÉM|9²L±0S¹wôjÐo¥ (¦°i@Õ!8í¼:5zd½ánýM8ìÐL.¦Ów·×/Hv
+çe1®²ôt9Dxië@"y
tp©ml:¢Pî ,¸{ 0sX?>Øvѳtræµ£×/à>
Ø.½éôCða·j¡ãya¯uÙÆJo½@öøxqÍzdÐõ ý&¾³éü£enl1
ôÝA!;ÀÈ$~B!¤@üyZø:â÷[μó½éò£~æ5Ç»2{ñÆ*OE;)äöGö©þ°÷½i
õíÙôóâ}}¶}7Ãíw¿w>ïsûýó32T{2õâXËW!ÚLkTRþÏg^ãþ¿·g/ÎJm¶ÛÎ
+{dÓxj$K%È]wÍtÆ ª\.H D¹ I$snÛm¶Ûj{9·MSϺ^¶Ûm¶Ûm¶Ûm¶ÛU¶Ù%¶§ÙÃ#m½¥ÖÛmO³FÛm²Øþ?o¿åóíú_¨nþa÷Ì3M5Ô 6áââæ_M¬î×UÓÕ >ËÇ7ï{<ÖØ/+ðë³¹7¶î]3ôuñ|6×h¼Ëôv¯NµàðêiWá
+¯*xurÞFTzw»Ù0G±ëxDï<VpÒP\ù®<W'µÔ/ý¼wÜõκçÕj©«wxzôã^iß]«2Y¾×ö>L÷wN$I$|I¶ôëm´ñ?{^ª»myÉäÇ©û7ÝïÜ{÷<p®ÕAôéSÜ<`ÏÛN§¢À9kÌ·.7ç'¾è8zåEÕôéÁÝqtÝwÈñÀìǡ˾Áà?/fHb4h/^z;çÍ*ºµqàKpâZ¾/p ú}D#fÈe¢È%Vª)llµüöVߤɵ]ÑÄÄ~í¾úß¿8Ç*ªZ«?Pü zâJ ,U2y{³ßýÕ¨Mç!@QnV*Â*×µéhc)1@pçò¡ÇNÏI$óL}N§øH`Nà ¡HôôysÌ´ùþð2È´ûj5ËðH 'Øÿ÷ÍùÒ |pj DvlÎæ" T ¿ÃcàpScqÑæó[m¶îóG¯àtcC|þäV_¬àÏq¹Þ^Òîó=Lä0 ÀàÏZÙàÚÝü¨=ÄI$hUWG·tzþuUUnîUU×Ï â¼\.@$K%Èä $K%È .@ IärK%ÈØózn&?a§c¿¡^¿NkªJØÛyïÄÏlWÝ ô4â»yø{Ð}_ì üW·ñêèêßcù÷úìzPyA=ØK¿£0rjFòçÂh×@ní¦ïF$Hþ@; f멤P~H<I$ ,f
+@ùX> nÏÍÓífíy-¶Ûm¶Ûm«m¤üOê§öö@}ùL¤ttOJ£@¤¦M·Ôå[Wæáã]Þùµr|t8D at 5¸u Ë( 6¨sßLAõCÛò ëý¯G§Ý(oâ`' Ý^üùi$HñÀö³w³Ýåºf h&H%Éär·nݺª·UI&r K%Éä I$4Í4Ñ.@r;»Ã9wffffvôQ¶
+`ù ,?½>( ù¼>-wCs a<2~¹Jå¸ G´¬ ÖuGµ¨×¢F÷âB> AäO (DÝ 9÷Í©Ûc³§{&}=¢dm¹Ã8ÌØ#´
tóAÏ}@j
+A at eÈ í{PI
+
+H) ¤
+H)H
+H) ¤2
+H) ¤H)I$RAHE$RAI$¤!*I ðxA00jàïG
+f
+À]»:úüitJÊ P ×̪ªªª¨ª¯×uàGáí·ð|I4}à¨:i~¶y85? úEoxLÏwNOñÀ
+£øB ʪ"{Îñ$ þ < ÌÍå¶`õêØyÁG®Qb¢(±E¤GÀ±,X¥±bàbÛ$ÈPL¥)mHÂX¢Å_lÄÅBBűP¶HÂF%0&=3
+#Ät¤MÕ,ÀË«ëtÄxÁb5²HÔZ ä`@: `! ßÅðým,´Ë3334³x·nÝU[ª¤4K%Éä r K%Éä I$rFúÕ¦i h KbðuôPGÑú;t< úRÿ%ѽ,üÏa~nÕ¦|³ãcL²Ý^¦ÁëÇ,b3ð3<¸ éå¶]]À8¤xàveÙÐ]¤yA¼°9`Ä?1ßo«ãAëã×-¼ºÀT9Àä$Höx#×÷Àfwðîv$I"È$IKÐÐ|n]A°&@àTH¢QD0æoçãײ$uOZ¶Ûdp¹@d w LÁ`{9åõ×ýÒ~åô¾Ëjªªªª+dŸD7{z8ü±§,ù]ÚhG-ø$o{ uÇMÔòæ½éóÇZàuËÕYÀëÇCß ÞÚI$4ø8Â{g£È;ÁÈìú æ\{@»I$¼À:¤XõADu#P)A¸\`zÈõäî@ì@ c´P7|{¢ö'åú¼,ûῲãÊÆ*p> x
iñRÿú§ÆYzõJÀ?Üó
+"Û¦éâåÒ\,Nf)R5Ïþ05Ü aÈQØØî×á`
+s4J¬Ì
+w!ÈrE¶6CµÃ¤8XÍR¤k3]Èr
míq).@§3A©ÌÀ×r!D[cd;\:C
P)ÌÐe*F³05Ü aÈQØØî×á`
+s4J¬Ì
+w!ÈrE¶6CµÃ¤8XÍR¤k3]Èr
míq).@§3A©ÌÀ×r!D[cc»\JK
P)ÌÐe*³05Ü aÈQØÙ×á`
+s4J¬Ì
+w!ÈrE¶6;µÄ¤¸XÍR¤k3]Èr
mípé@§3A©ÌÀ×r!D[cc»\JK
P)ÌÐe*F³05Ü aÈQØÙ×á`
+s4J¬Ì
+w!ÈrE¶6;µÄ¤¸XÍR¤k3]Èr
mípé@§3A©ÌÀ×r!D[cc»\JK
P)ÌÐe*F³05Ü aÈQØÙ×á`
+s4J¬Ì
+w!ÈrE¶6;µÄ¤¸XÍR¤k3]Èr
mípé@§3A©ÌÀ×r!D[cc»\JK
P)ÌÐe*F³05Ü aÈQØÙ×á`
+s4J¬Ì
+w!ÈrE¶6;µÄ¤¸XÍR¤k3]Èr
mípé@§3A©ÌÀ×r!D[cc· S ÊTf`k¹@â-±²®!ÂÀ(æh2#YîC0ä(llwkIp°
+9¥HÖf»ä9
+"Û!ÚáÒ,Nf)R5®ä9B¶ÆÇv¸ S ÊTf`k¹@â-±²®!ÂÀ(æh2#YîC0ä(llwkIp°
+9¥HÖf»ä9
+"Û? æ?S¤S O®ÿ
+¡Ò®ÕF]v¨B4ëµB¤]ª ºíPi×j#H.»T!AuÚ¡Ò®ÕF]v¨B4ëµB¤]ª ºíPi×j#H.»T©¿t¦|²JðvÉ*gÁÛ$©l¦|²JðvÉ*gÁÛ$©l¦|²JðvÉ*gÁÛ$©l¦|²JðvÉ*gÁÛ$4/þàïÿ9{~Ãö _É}÷eîO~Á¶¾eîOsm/|ËÜðNøÛKÏ/QÀª{iyòõØ'ÇfÁ>ì½Ã©É{rõ
+§¹¶/QÀª{iyòõ
+§¹¶/QÀª{iyòõ
+§¹°iyòõ
+§¹¶¾eîùð'ÇfÚ^yzSÜÛKϨàU=Í´¼ùzSÜØ'˨àU<»·`_iyåê8Osm/>^£T÷6Òóåê8Osm/>^£T÷6M/>^£T÷6Òóåê8Osm/>^£T÷6Òóåê8Osm/>^£T÷6 öËÜ0*·/QÀª{iyòõ
+£¹1ñ O^áTýõ/ÿ_´I$ÿl Ù
+®@1$ö û$ óð@ø ø`¼Áø(ûSí¿æö(>p>$:(øúrêãï »à:Á5ýîðr>Ié÷Ô3wFÔµC ä#ðyD
+ßFA>Xu°OT(I(PIH÷ãæz½@u`
+¶Ûm¶Ú«mTUTQUQEUEUO O ñ©Þa:ÀéÎäûÔI$x§ìh3jYÄ 7¤$7ëþÙ3 ìxA8Àd¦>hp(ôµPj £¬à<`ý3òtrühâ0yêÀM d°2!ðÍêq(aƼ07@áËóã ¢à=Rà=ð$ªlUTÉPB,@\ QÅØ¤U"Ä:I$;Á : Þ>à}Û #Ê2ÐI$F`ä@N@ æ ér´I$¤¨gÚ5úR ]àü> ðiÿ>ìåì
+ åäÌǨh7 7 vdéI & ðwP7Ç |áæ²I¸h{bj ¢"o,XÎI íA@59M$K0I${@ón̤I"@0"DÀäXðzí²I=H 9:Àd
+ýæpêÅ7ì
+H{I$Húi$HäÝtÿj
+? >Òõ
+X±JX±JUSÌRÛ)bÒª³¶ÌJRÜ|(J(GQ!â<} ÎHn®1å-Ä7â ,$H¢D$r¡½Ñâñ¬H
+<Àó6QGOÔx:Aîá¼ÕjÒI$t3`à{(#dv$I#3t@#p4ä@?r$h@ªªÀÔ ªªsb|à `0\jd Ì`ë kÀ< È-DÀäA¸@Ý$I"з£¬=ÐäÔàP(6I$FI$uPsË9$M@0ð»¡$X<À=ÏL¹)NÈÔÀ wÔ@¼©$úé$Há¼j
+ýHÈ ÈÁÖ$3 Ìp`æ,BD)$HÔàùÿúþ>ïúz 7»è!#QEH' { Î=µÜôHÔ$xÞC°¿ãú ø`ø¿ßüÇä =ð Ì¹Ì ñøü
x=¿7ßì¿'AvÞºÊ7æ }Óù«úg0côüó!<_üÄ
+ÕA?Laö~Ïêþ§ø>ãÑAÆÛ$1_ô1¥$
°Ò?sáwüïK3X `¢è¨-úU at l 9ÑVöÿ¹"(HY0
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,232 @@
+Machine (P#0 total=100661148KB DMIProductName=DRACHMA DMIProductVersion="Rev 2" DMIProductSerial=0123456789 DMIProductUUID=008844D0-2214-DF11-B89F-F50F715B14E8 DMIBoardVendor=AMD DMIBoardName=DRACHMA DMIBoardVersion="Rev 2" DMIBoardSerial=0123456789 DMIBoardAssetTag= DMIChassisVendor=AMD DMIChassisType=23 DMIChassisVersion= DMIChassisSerial= DMIChassisAssetTag= DMIBIOSVendor="Phoenix Technologies Ltd." DMIBIOSVersion=PDPAX1-6 DMIBIOSDate=12/15/2009 DMISysVendor=AMD Backend=Linux)
+ Socket L#0 (P#0 total=25163676KB CPUModel="AMD Engineering Sample")
+ NUMANode L#0 (P#0 local=8386460KB total=8386460KB)
+ L3Cache L#0 (size=5118KB linesize=64 ways=48)
+ L2Cache L#0 (size=512KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=512KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#1)
+ L2Cache L#2 (size=512KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#2)
+ PU L#2 (P#2)
+ L2Cache L#3 (size=512KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#3)
+ PU L#3 (P#3)
+ L2Cache L#4 (size=512KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#4)
+ PU L#4 (P#4)
+ L2Cache L#5 (size=512KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#5)
+ PU L#5 (P#5)
+ NUMANode L#1 (P#1 local=16777216KB total=16777216KB)
+ L3Cache L#1 (size=5118KB linesize=64 ways=48)
+ L2Cache L#6 (size=512KB linesize=64 ways=16)
+ L1Cache L#6 (size=64KB linesize=64 ways=2)
+ Core L#6 (P#0)
+ PU L#6 (P#6)
+ L2Cache L#7 (size=512KB linesize=64 ways=16)
+ L1Cache L#7 (size=64KB linesize=64 ways=2)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+ L2Cache L#8 (size=512KB linesize=64 ways=16)
+ L1Cache L#8 (size=64KB linesize=64 ways=2)
+ Core L#8 (P#2)
+ PU L#8 (P#8)
+ L2Cache L#9 (size=512KB linesize=64 ways=16)
+ L1Cache L#9 (size=64KB linesize=64 ways=2)
+ Core L#9 (P#3)
+ PU L#9 (P#9)
+ L2Cache L#10 (size=512KB linesize=64 ways=16)
+ L1Cache L#10 (size=64KB linesize=64 ways=2)
+ Core L#10 (P#4)
+ PU L#10 (P#10)
+ L2Cache L#11 (size=512KB linesize=64 ways=16)
+ L1Cache L#11 (size=64KB linesize=64 ways=2)
+ Core L#11 (P#5)
+ PU L#11 (P#11)
+ Socket L#1 (P#1 total=25165824KB CPUModel="AMD Engineering Sample")
+ NUMANode L#2 (P#2 local=8388608KB total=8388608KB)
+ L3Cache L#2 (size=5118KB linesize=64 ways=48)
+ L2Cache L#12 (size=512KB linesize=64 ways=16)
+ L1Cache L#12 (size=64KB linesize=64 ways=2)
+ Core L#12 (P#0)
+ PU L#12 (P#12)
+ L2Cache L#13 (size=512KB linesize=64 ways=16)
+ L1Cache L#13 (size=64KB linesize=64 ways=2)
+ Core L#13 (P#1)
+ PU L#13 (P#13)
+ L2Cache L#14 (size=512KB linesize=64 ways=16)
+ L1Cache L#14 (size=64KB linesize=64 ways=2)
+ Core L#14 (P#2)
+ PU L#14 (P#14)
+ L2Cache L#15 (size=512KB linesize=64 ways=16)
+ L1Cache L#15 (size=64KB linesize=64 ways=2)
+ Core L#15 (P#3)
+ PU L#15 (P#15)
+ L2Cache L#16 (size=512KB linesize=64 ways=16)
+ L1Cache L#16 (size=64KB linesize=64 ways=2)
+ Core L#16 (P#4)
+ PU L#16 (P#16)
+ L2Cache L#17 (size=512KB linesize=64 ways=16)
+ L1Cache L#17 (size=64KB linesize=64 ways=2)
+ Core L#17 (P#5)
+ PU L#17 (P#17)
+ NUMANode L#3 (P#33 local=16777216KB total=16777216KB)
+ L3Cache L#3 (size=5118KB linesize=64 ways=48)
+ L2Cache L#18 (size=512KB linesize=64 ways=16)
+ L1Cache L#18 (size=64KB linesize=64 ways=2)
+ Core L#18 (P#0)
+ PU L#18 (P#18)
+ L2Cache L#19 (size=512KB linesize=64 ways=16)
+ L1Cache L#19 (size=64KB linesize=64 ways=2)
+ Core L#19 (P#1)
+ PU L#19 (P#19)
+ L2Cache L#20 (size=512KB linesize=64 ways=16)
+ L1Cache L#20 (size=64KB linesize=64 ways=2)
+ Core L#20 (P#2)
+ PU L#20 (P#20)
+ L2Cache L#21 (size=512KB linesize=64 ways=16)
+ L1Cache L#21 (size=64KB linesize=64 ways=2)
+ Core L#21 (P#3)
+ PU L#21 (P#21)
+ L2Cache L#22 (size=512KB linesize=64 ways=16)
+ L1Cache L#22 (size=64KB linesize=64 ways=2)
+ Core L#22 (P#4)
+ PU L#22 (P#22)
+ L2Cache L#23 (size=512KB linesize=64 ways=16)
+ L1Cache L#23 (size=64KB linesize=64 ways=2)
+ Core L#23 (P#5)
+ PU L#23 (P#23)
+ Socket L#2 (P#2 total=25165824KB CPUModel="AMD Engineering Sample")
+ NUMANode L#4 (P#34 local=8388608KB total=8388608KB)
+ L3Cache L#4 (size=5118KB linesize=64 ways=48)
+ L2Cache L#24 (size=512KB linesize=64 ways=16)
+ L1Cache L#24 (size=64KB linesize=64 ways=2)
+ Core L#24 (P#0)
+ PU L#24 (P#24)
+ L2Cache L#25 (size=512KB linesize=64 ways=16)
+ L1Cache L#25 (size=64KB linesize=64 ways=2)
+ Core L#25 (P#1)
+ PU L#25 (P#25)
+ L2Cache L#26 (size=512KB linesize=64 ways=16)
+ L1Cache L#26 (size=64KB linesize=64 ways=2)
+ Core L#26 (P#2)
+ PU L#26 (P#26)
+ L2Cache L#27 (size=512KB linesize=64 ways=16)
+ L1Cache L#27 (size=64KB linesize=64 ways=2)
+ Core L#27 (P#3)
+ PU L#27 (P#27)
+ L2Cache L#28 (size=512KB linesize=64 ways=16)
+ L1Cache L#28 (size=64KB linesize=64 ways=2)
+ Core L#28 (P#4)
+ PU L#28 (P#28)
+ L2Cache L#29 (size=512KB linesize=64 ways=16)
+ L1Cache L#29 (size=64KB linesize=64 ways=2)
+ Core L#29 (P#5)
+ PU L#29 (P#29)
+ NUMANode L#5 (P#45 local=16777216KB total=16777216KB)
+ L3Cache L#5 (size=5118KB linesize=64 ways=48)
+ L2Cache L#30 (size=512KB linesize=64 ways=16)
+ L1Cache L#30 (size=64KB linesize=64 ways=2)
+ Core L#30 (P#0)
+ PU L#30 (P#30)
+ L2Cache L#31 (size=512KB linesize=64 ways=16)
+ L1Cache L#31 (size=64KB linesize=64 ways=2)
+ Core L#31 (P#1)
+ PU L#31 (P#31)
+ L2Cache L#32 (size=512KB linesize=64 ways=16)
+ L1Cache L#32 (size=64KB linesize=64 ways=2)
+ Core L#32 (P#2)
+ PU L#32 (P#32)
+ L2Cache L#33 (size=512KB linesize=64 ways=16)
+ L1Cache L#33 (size=64KB linesize=64 ways=2)
+ Core L#33 (P#3)
+ PU L#33 (P#33)
+ L2Cache L#34 (size=512KB linesize=64 ways=16)
+ L1Cache L#34 (size=64KB linesize=64 ways=2)
+ Core L#34 (P#4)
+ PU L#34 (P#34)
+ L2Cache L#35 (size=512KB linesize=64 ways=16)
+ L1Cache L#35 (size=64KB linesize=64 ways=2)
+ Core L#35 (P#5)
+ PU L#35 (P#35)
+ Socket L#3 (P#3 total=25165824KB CPUModel="AMD Engineering Sample")
+ NUMANode L#6 (P#72 local=8388608KB total=8388608KB)
+ L3Cache L#6 (size=5118KB linesize=64 ways=48)
+ L2Cache L#36 (size=512KB linesize=64 ways=16)
+ L1Cache L#36 (size=64KB linesize=64 ways=2)
+ Core L#36 (P#0)
+ PU L#36 (P#36)
+ L2Cache L#37 (size=512KB linesize=64 ways=16)
+ L1Cache L#37 (size=64KB linesize=64 ways=2)
+ Core L#37 (P#1)
+ PU L#37 (P#37)
+ L2Cache L#38 (size=512KB linesize=64 ways=16)
+ L1Cache L#38 (size=64KB linesize=64 ways=2)
+ Core L#38 (P#2)
+ PU L#38 (P#38)
+ L2Cache L#39 (size=512KB linesize=64 ways=16)
+ L1Cache L#39 (size=64KB linesize=64 ways=2)
+ Core L#39 (P#3)
+ PU L#39 (P#39)
+ L2Cache L#40 (size=512KB linesize=64 ways=16)
+ L1Cache L#40 (size=64KB linesize=64 ways=2)
+ Core L#40 (P#4)
+ PU L#40 (P#40)
+ L2Cache L#41 (size=512KB linesize=64 ways=16)
+ L1Cache L#41 (size=64KB linesize=64 ways=2)
+ Core L#41 (P#5)
+ PU L#41 (P#41)
+ NUMANode L#7 (P#73 local=16777216KB total=16777216KB)
+ L3Cache L#7 (size=5118KB linesize=64 ways=48)
+ L2Cache L#42 (size=512KB linesize=64 ways=16)
+ L1Cache L#42 (size=64KB linesize=64 ways=2)
+ Core L#42 (P#0)
+ PU L#42 (P#42)
+ L2Cache L#43 (size=512KB linesize=64 ways=16)
+ L1Cache L#43 (size=64KB linesize=64 ways=2)
+ Core L#43 (P#1)
+ PU L#43 (P#43)
+ L2Cache L#44 (size=512KB linesize=64 ways=16)
+ L1Cache L#44 (size=64KB linesize=64 ways=2)
+ Core L#44 (P#2)
+ PU L#44 (P#44)
+ L2Cache L#45 (size=512KB linesize=64 ways=16)
+ L1Cache L#45 (size=64KB linesize=64 ways=2)
+ Core L#45 (P#3)
+ PU L#45 (P#45)
+ L2Cache L#46 (size=512KB linesize=64 ways=16)
+ L1Cache L#46 (size=64KB linesize=64 ways=2)
+ Core L#46 (P#4)
+ PU L#46 (P#46)
+ L2Cache L#47 (size=512KB linesize=64 ways=16)
+ L1Cache L#47 (size=64KB linesize=64 ways=2)
+ Core L#47 (P#5)
+ PU L#47 (P#47)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 8 NUMANodes (type #2)
+ depth 3: 8 Caches (type #4)
+ depth 4: 48 Caches (type #4)
+ depth 5: 48 Caches (type #4)
+ depth 6: 48 Cores (type #5)
+ depth 7: 48 PUs (type #6)
+latency matrix between NUMANodes (depth 2) by logical indexes:
+ index 0 1 2 3 4 5 6 7
+ 0 1.000 1.600 1.600 2.200 1.600 2.200 1.600 2.200
+ 1 1.600 1.000 2.200 1.600 1.600 2.200 2.200 1.600
+ 2 1.600 2.200 1.000 1.600 1.600 1.600 1.600 1.600
+ 3 2.200 1.600 1.600 1.000 1.600 1.600 2.200 2.200
+ 4 1.600 1.600 1.600 1.600 1.000 1.600 1.600 2.200
+ 5 2.200 2.200 1.600 1.600 1.600 1.000 2.200 1.600
+ 6 1.600 2.200 1.600 2.200 1.600 2.200 1.000 1.600
+ 7 2.200 1.600 1.600 2.200 2.200 1.600 1.600 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/48amd64-4d2n6c-sparse.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,118 @@
+BZh91AY&SYò®ÿ÷ÿÿÿÿÿÿ÷ÿßÀÿïÿð "@
+ ¿ø`ßxñJ " *¥rhHHè±I
+H Ð yS^E { 9óï6ã´
+<p@,ø} ;¹ ïéòÝî`©@ /`4-dÕ!³uEÜÀ,UQÇJçeÀ@(çg ° thuTäåÀ]À¨Éôtð ¸äs ÚÛEJ8;8ÇYD Ò0
+Êv^Àa<x TD H Û &¿ÓÕU)¦£õ5bi¦&hÄÑ 0L`0 FhTñé5$eRH@&& ÔÀ¡ iFO=T êPd $Ò!SQ"¦5O52h``LÄÐLA AB¤ô4hiê
+44mA h z¦@) F¦ÔÓ)´ziª~¢zG¨z4ÄôÓQêéyC hð¦'ýôâbüWñþÜ?ÜÿuUUUUUUUUUUUUUUUUUUpèÄd@Ùºªªªª¿Ù@é p'AÃ,bêÆXe#q7MØÃcà(þ5ÛXdÉ2aLdÉ#bôAX&é½¹dØ(ÒLøñ?Ç|gUÆ(Áܱ
- LN;(ãdZO!¬E2(G)Be:KiBß)m4Á0(ECü´
ú×ëàñ~æjÚyëM
+ªø5çÃÕ¡ÀF¿Ø*dXHõSÑV¡ªHYµ+iTT~éûªÔ@UGJETïÕÏÑ»ç_~ë7¯¯½oUkh{·µ·³Y´^îBSÝݽ2ä»u«cnÝ^¼s^ÂäÜ+KÞæf^ȦäÜɰµn±lr],ªR©L%]]*[º&fìÝ*u#nIJ²«Qò>GÈù<ÝÍöÛäzÖ£ä}ª¥ #suÅÕ:U)VÕnÒ©J¥6ð
*T¥[J¥*à ZÞ6÷Võ#ä|§;}^ssx[Qò¾»Î^VåË.I{3.á·.\¹%˪ªÙ·.\¹%Ë®fܹrÜÛÛ¼»ËîTÃkFaH<`kȼ3/a^ÄäkÈ ×Í !Aæ£MÍkÈ ×RÖ¼3Dä^K×÷0Í<kÈí·Ûoê·hä^@5ä½Ì3@%
ëȼ4ÜGRõáy ×ÂõäªÉ3@ ò"¼kÉazâ¹!U at Z®èEòua4ËÝêÖï+E¡4Y¯S${DIw$¦:Û׺Üë[ÜÚ¦æÝÛÒ;IIÐÌ*ªòeBe@ÚØeCr¡¹PÔô2´2´%lÙRL¦¶PܨnT5=&T-lÌtóv¤2¡¹PܨjzZZL¨nT1Õ½ÚÊåCr¡¹PEÊdʲe2eBª¯&Ty¸än:ÝÙÝÚÝ^îÖì[»¹$$ÐA»5ó[æ·575¹»»$m§§2Nk·wdszmÍsv·vMnîäÍëV]ÍÕ.æíVÔÆö·(ÊuR
+FI2¢Mêóe¦*fÜ6ÂGd°wBLo,6Â2¦mÁYYåL©1Ê2¦eeO{q©wDÒ,njlÈÖGÂC3ÓouÍÅ. ²<Õ5ÍY¯"Èòu²æM¸ëMÛäÚ¬¦ú·Ùé°vã2TlÇ´äÝêÃe]äk&ãYEäYE5ÍêcqUI$·Èò,"qìS^õiá«(zÅæõ¹#zL5äNá«ÍUUdÜ5Ç[»²9½6æ¹»[»&·wrQvãU-ïOMÜÝãÝÙÞs_7kwdÖîïÝÕ2Jª×½_/Ëã¾_öî®®òù|¾=åòúÛm^ùòù|¾=åòù}¼¾jUI%TªUETÝÜLk·wdszmÍsySwã»·µ¹rïaiènfeÝîìw.î]IwrîåÝ˻ک.îUHÛå·ß=¾¶úÛëoÞ¶úÛìÌÌÌËoYrîåÝË»R]Ü»¹wpîå;w.î]ÜRK»wnîÝÝ»»7oHEB-[º¤H¢H¢UJH¢H¢]«EÝZ·1bűÕh,Ö¯«d\u»»#Ónkµ»²kww"
+2åì1ÍÙº03Ý£ªªÝ£ÝÌ 7f¶ÝË,
+fnÆãݽÝÙ5îínÉ5»»êË#5·RÛÇε¾ksjGw|³y5ñï/w¾uó[TÜÒ;¾l+#M6Ö¨¢)&bÅQE»«rªQE¸¢j(¢8µnbÅc3H$n:ÝÙÝÚÝ^îÖì[»¹3I7`µä&îÈÛw+%¼«Öñìn:ÝÙ#Ónkµ»²kww".éf]`¨\Ë×h:¥"Õs.].sÉâ·K¹VEfnZ"³.Es.é{3¥æTÏÙS<_eL÷oÕ{K½Åj½ÊÔÅ{K¹Y5^åLé{3ÅöTÏÙS=ÛäÃ:^åLâ½Ë¥\ÃÝ6«2ë«ÜºYª÷-3ÅöTÏÙS=ÛäÃ:^åLá{3ÅöTÏÙÞ
îW;â÷*gKÜ©/²«"¹K"¹Þ],÷.Es+Sû*gì©/²¦tîr¦t¼Ï³Ó'mÖuJNK+*)X+fAmQ,ÅN7Æu¥U-°¡ô{Túõ«åç3;»Ì̯«=±aYÙC!guOvÕò·¡uRé"º¾Äµ]S©wjMÐ̾ÏfUífÆXRsÊ{¶Ûy¹ÝܯµA!Ï)îÛën[Îfwsww}râi Õ
+ذ Páåæ_f>¡Ï[»oÏsbY¸Î@èH×)©©>©´úiMëZjj[ÖôÓiôÒiZLèÖ+ê±sÊ{¶Ûy¹Ýܯµ
+¶´£Æ Æ"1BÊxÃ2àó5ÝOpÓçM7Öjn¥³Vå-[©6¶ö]Æ®ÓÞjÖ[NnÁDQ2滽Õz·U-MS×{LS+iEuÜËæUi§³&KjJ¢Z"åˤËpÔÔ¸·wnÌ4ZyMãÍ3Uµ«36í⫺.ñ]]]l@ÙÏ/)ëyÏf¹÷³pÝ¡mX Ð8,´¼´OaqªX²ê©4Ýí[«J¦©¨ÖfæËQhÌ»¶§vc©ËÛ¶5T^,mlI£,)Ï)îÚ{mæ_fwwr¾¶Ö`
9å=ÛOm¼ÌÎîægs*ú³D(YÏ)îÚ{mæfww3;WÕ2Âʪ¼òë_¼;ÜÌÜܵ|òå«åç3=»Ì«êÅTUHP Zª*ªªBU¤òÔËÊʺ¹¸kݬÅy3
+ÂSdÖïswY`fn0Ó/ Öi£ap»»ÆñbÖeÎ.\è09á»wwW/1ãÇ)´7·7^Þê5î¶£#d3V3Í6{ºf¦õzñ¶f7Yˬ¼Ë»ËN»V¦Ý©»ÁÓy°ç{ç{/C¦ö[y[Ó¡Ó{
+½¬Ñ,/×0ËKî黹Ïa·yÉÃwBîg9.¥+cZ
+
+Vó0ötÜaîèAÐi¨ÓM6¤ÓLO§ÖÒÝZµjCÕU«Vê[ÓI´t%¥Mn©l¥"N¢[´·¦KVëVÞµ.ôïg
+àsfé³)hT-ãcì3Yî÷w¹;;ÓÁ99îÍoUÌëV£-µôÖCËm5˼¶V¤Øb
QbÂRÊU,âl§3'°Ì0¦ä÷»Ã''8s§Ô}6ê¢Þ·Z÷Vëw_MMè-jnîº[zYÐÌF]ÝÝttåRv¡vòægww+ëmLT(YÏ)îÚ¾å´ægws3¹ËkX!³Sݵ|¼ægws3¹}Y¢,ç÷m_/9ÝÜÌîe_Vh*ITHqñcÊö¥+Rk[©4Úm>NoM55&M6L8sfàsfé³)hTDQI(Q<R´yí3Ã.5Å&{kVêÓnõV©©ÁDHmÙªõ;1©îæîeê½-»j̼ºWv¬4B
+°)m§ëB û¹3)oÝÌæîfw2¯«4eEÎP§°À¥,¡O{¼;ÐáÎáÉÄÞjjM>m>M3¡kI:År
I³SÝ´öÛ̾Ìîîå}m¬Áòí§¶Þeîgww+ëmf@_ïóõ÷Ùªo´²} vEùWj6RÛiÀD
°û*,*©¡Éà(@ê*l
YÉp
ÉÙè, Nç·ÒÚ9Kim´à a¡êªÐ«
+ª¸dÖ(®¨´ä r@`¢°¡daèÁÓ8\8TuuJ[TÐA=pc6yie\,ÁÅ[(U\8r*Xdé¤ÈLlN!Nd¡vMa
4°ì<C$<E=m¼¶G)m´àÀ`rO*©eXUU02²Ö(©¡ÀaÈ`E&ÂÈ`1QBÇ1)jáId8<¨+J-¶Úrb*ÕH+ä0àÚ¦LÌ0ÃsTo9c!ôâ)ëm^G)m´á!âʪYVULCÂëTÀ¡ÀaÈa ÁDRl,C¡à2*(CÁÏ^"&
+®W¨å´äÈx0UmFÒªà`r,Q!2@TÂb98$ca¡d
+aâCÓ§µxTm¥¶Ód9'T²¬*ª)$ëTÀ¡ÀaÈa ÁDRl,C¡à2
+£xë8=W*6RÛiÙ!è'V
XUUÀÀä(°@0'QS 098$`¢¤Ð²Ã°ñSÖÚ½*6RÛiÒC!ÒC åU[*¨UU\Cá Âu*`LPärH0Q Øv=ÌÉÍÍúáäW¹»¹=@öÜ=;0Éè9Ø+Õê¶ ÉÒ\h}*ØdÀÅ]=9t@Ü
¡néµbI
+;b&ÊÖìß\/I¡y t<
+Ò*ldR³YJ
+ÄAY(Ð*hde1(ÀÔÑ¡PY ²A²
"±D˦¦Ædµj¥F°RbÈÁ,,UTÁIY1°Å%eM(ÃÚäð¼Â÷
ñèÊ}ñÒ_-ÒÛ3ó K~ ¿¦32 ¶Úa+m¶Ûm¶Ûm¶Øa,m¶îfdm¶Ûm¨¶Ûm¶Ø[Ø}À%ÅèµUUU]üÀ@&ûékY µ°[°_0XÌ?
ÿ1ÿUýÊþoÍõùꪪªªªªªªªªªªªªªªªªªª¬I$ú ÇésÉkñþ§ýϦ®VBR)~ª5 ÖÂÛoâýÝã030=bf¤ÍI<MK.d²÷õÙ¹YÝe·½¨303YfjLÒONãp1"H¤R)YØ[am
¶Ü¼æ^ü¿£m¶µm«m¶¶Ú¶Ûm¶Ûm¶ÛVÚ¶Õ¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÉùÓàI:( ¢(¢(Doê?géÁ#`0FÁZX#`0FÁ#ai`0FÁ#`
¥0FÁ#`
¥0FÁ@þt?aú6Ûm¶Ûm¨¢"(ýÿcm¶Ûm¶Ú"(¢åå¶Ûm¥¶Ú(¢0yÎs³¾}` PPfffc ÌÌÌÌÌÌ ã{ÞÀ Îo{Øs½ï|ï{Ø ÷½ì {ÞÛÞÛ»îîkÇù3ïÕ~5ZÕEQTUEQTUEQVµQTUEQTUEQTUTUEQTUEQTUkUEQTUEQTUTUE^b}ÿJ|9¿j¦[}±M·lúÅ6ݳ¸¦Û¶Xbc>2ܳ1DrϬRÛ5LµÅTËrË1Íùm»gÌSmÛ>bnÙóÛvËLgÅL·,ÌQ³ë¶åS-CåS-Ë,Ç>U2ܳæ)¶í1M·lùm»e&3â¦[f(Yó¶åS-CåS-Ë,Ç>U2ܳæ)¶í1M·lùm»e&3â¦[f(Yó¶åcek+YZîO>5¨ÛòÅÄÅf"^ÝEv¿.¢»Dq\Ê.e1QEÌ¥q[㨢îÓ¢»EÄQs,ÅUDr*.e1QEÌ¥q[㨢îÓ¢»rÚ.eÄQE̸*(¹2ÔQn\娢îÜææ5¨ÚÍ."rå-E2â(¢æ\\Ë
j(·.rÔQwnrÔQwm·E̵1[åQE¹iËj6å7]Evݺ.m¼º.m¶â(¹¦"rܪ(·-E强.m¼.µ¨ÛÜiõkQ·æ5ùkQ·ÜmøñFÞSÝûmkQ·få]Øð ~ÇÎ* =÷Zxï¼÷YÎñ¼c{ÄÇÞì¾1£YÏçÎo×êF22Ddüi Q¤
+2TFJ(ÉR*@£%d¿bTm¡÷J
µÆ³Ið~ ñxrá}ap`·ÍqÇqÇqÇ6Ûm¶Ûm¶Ûm¶ÛmþQ$ºÔê$UI%ÕMßø¿¡>Vؾ÷7aËï2NI×½»<8ã:x]æsÏ\ð;»û;ûûûÎðç<óÍy综¡8ç¤ÍÍ9ºÜÄò þ ßÚU&º6Yà²Ë,²Ë,²Ö,X±bÅ,YøKªñîù<÷òI$¾5US5US7wqÇOqèqÇ8ã§gqÓ±,eB¦H©^{ÂÕKêDïDÊ ¸úàxBÏ kÞ6/6|ÇÌOH2(| |aò¦añ¼oùnÙª3ãgå©o©\Õï[â´q³,ããê:Bqópçyϧ~v}×åç%q¼åË<Ãd
Vîì©Vg'ÈÜDðPÝÇùÓ¯nÅsÕÇ=ÍÏP_ã}fÏNæÀqθë=Õséã|ÛñÌâ¼Wu3
ÒäÔ`wÇà)»ß¶[Ýsã3õáÆ|[ké¼BRá¸ì¬~>LÞë-âí²kåÝÞ=lSÛø°ñaÔî°ØP/|L ´ªy#lsM:£:0ÝÓE ?À2G$µ¹Y¾m¿º´Ø/t´¯\Ùâ¨õ¬X~ê
+|Û§¿Çù
Ìö×Ã3wZÖw¿ÅkfC^'Øð<ñhÌ*Óà==ÛYaº,ãÇÒ ×RºïK¯Ã3äü.tÛLM¶mêItØ=̬v¿>]Ç®ñ1ff7wæ7Þc¥¾M·ÒK§IáoòÿI.£t±ºc¥V6æ7Þb¬ll¤`éQcüÊIt<ÝF¿a¯G¹ÍÞswÝç7 ý@°öÀ ?/¾Îò
èÝåâ¶p½á{ùôÞp_ 'ã ù`þKJ_ÈýÌvâk´ÆÚ·lÝ2îfîâæí«lÛZwmLbṦ¢5Ͳæ]£¢nåC6îÛrnW\CuÓs4ÕEc1sw7w4×Z\Éõ\ß°?8°õ
ÞØþazü{Bè ]ÁwÜò
¸]áw¸_h_.¡pá{ø
îp\ü¡yûBÜ.ðºìÁvóÞp^|¡rP½A`_0\
ÀGàH
«Ø
A|~éòAôÄqù(ÅM>93333ÉøÀ¤êªª¯¡1UUWÉ$I)±bðÆW÷~ØõÄøhíMªéÈ©¬Îê¿îîæcvì ¶h«b¨ ¶Kb¨ ¶E - ØE¢ØE -Z - ¼Ìðfµ¬ñ52k5¬ðó]8ã·³§N;½»NÞ½zö÷÷øúÚóz fÀmyç{Þ÷½ïzúÿWÕðü?cæùgÑø<@/Çã7óy«Íælت¨ ¨
+m²ª 6l¶Êª
+Ù°fØ*ª *fÁ`lª¨ ¨
+m²ª 6l¶Êª
+Ù°fØ*ª *fÁ`lª¨ ¨
+m²ª 6l¶Êª
+Ù°fØ*ª *fÁ`lª¨ ¨
+m²ª 6l¶Êª
+Ù°fØ*ª *fÁ`lª¨ ¨
+m²ª 6l¶Êª
+Ù°fØ*ª *fÁ`lª¨ °`
+ª 6l¶Êª
+Ù°fØ*ª *(²ª 6l¶Êª
+¶ ªª (l ÙUP@3``ʪ
+Ù°fØ*ª *fÁ`lª¨ °`
+ª fÀm*ª
+¶ ªª (lت¨ °`
+ª fÀm*ª
+¶ ªª (lت¨ °`
+ª fÀm*ª
+¶ ªª (lØ;Þ÷½ï|ó é={îwU»»wUwwvaIjÂPØER[E° ¶e´° ¶h¶haÝÝÝÝÝÝUÝÜù !ðG䪨<óÏËåç/Ê¶Û UU 9ä¶lUT ç¶Û UU 9äm¶ÀU@ ÍÛ UU 6lUT PØ
+°UP@`6ÀU@y`m°UP@fØlUT ç¶Û UU 9äm¶ÀU@y mÛ UU 6lUT PØ
+°UP@fØlUT ç¶Û UU 9äm¶ÀU@y`m°UQáÓÐô|qÇqÐxvù<½½ýý½½ýý½zõíïïòy*òyfÁ`lª¨ô8ô}:qÇN:táãy¾ûÆ~`8( ×jøâï9»Înó¼æï9»Înª¯9»ù*p *¾Üq$ÕUjBîE´dÂH±!#I [&0I$ÂHÙ0[$¶ÒÙ0 ¶L$a$[KdÂH¶lÙØqÃÆx~³YîÌÌÍwÀúû}¾³íöË[m¶Ûm¶Ûmmm¶¶¶¶¶Ûmµm¶µ¶Ûmµ¶ÚÛm¶¶¶Ûm¶× 1Ëm¶¶¶Ûׯ^½zõìëׯo8ó»»»»¹çÇÆ¯Ù°fØvöövsÏ<óÏ={Þ6k¯YÖÞ Ðl"Ñi-XJ [ªKh¶Ál¶¶Â-Â-l"лª»»zö%Äæ ë××ï·qÛm¶Ûm¶Ùl¶Ûd¶Ym¶Ûkkm[mm¶ÛmmVÛmµ¶Ûm¶×I1Ëm¶¶¶Ûm¶ÖÚÍa1rÔ-¶¶aÚÅ«E¬Â)bÛVb´³²ÛmÌ QjÌ"ÛVa¶mL· `ªªªªªªªªªªªªªªªªªª¸HHªª¹&Éëêê^ª¸éçñÇqÓ³8ã§çøø×3`6ÀU@ ÍÛ UU 6lUT PØ
+°UP@3`6ÀU@ ÍÛ UU 6lUTùö _Jªªªªªª¨ªªªªª«ð>Īªªª¸C~⪪ªªªªªªªªªªªªªªªªð⪨¢*ª¢¢ª¨ÅTUUS1UUUUpÆHBI$ü¤U r©xòy17æ«rwñ¼;Ïex»xàÊá¬Ó¼
¾ON¼=¦k©ÃÇ&R»SÏ{ÃzÔݧUÕ§WJõ\ËWº<J(¥'ÓOS´¯.îÕ+PÅ&æÒÈt»ÙO[g{¬î0ç©e{Þto:'M°f:wÌÝ
Üïåë}Ã{¢s¾É*hóCRí¸aܧ·ÕíxÞÞ[
×[ÜïyÚÓ½«^·7;!$:D´j`°Ë&Ë,¦2Ë E 0A$`*©"11cdAQªÄ"$0D c*1eÂÄabeae2ËJÕ2d0`2eVU&!I«[Jhì^Ü3(hìv·ÏKYŬ3°Z
Âê·_¥Ôûó: 3óÜ{I$I$ ú :k<ºÊ®oÓXAD¸9"¢í+ ¬ÖC Kñ!?3 úÔÜζI_û?È_±üÛïã?üæ}Zÿu.GÛsomWáGS]ÞÝÛy8xyÜã³´ÛÁËyÞÞuyÔÆ{Ç>ïã¶ÃDËDD$ID$XÍø-#÷`ÜëuóãÀ ]6Û
+M¶ÚëRKªT]nî%Ó¤é&ÛÐ i$ºt>¦Wm¿Fq M`1J*`BL!J&èt5Ï9ÓÛ>ÃaËs§-@$ 4 ÁDSÍ-3¥¦t´Ì¦ùÂàààÜØØÚëÚÌt©ùÂ+çüÿÞ¿½6õÇÂôÀý7ùÙbZX
é¶óAÙ64F¦¨Ñ¤j54F#Q©¤j54Oöu½¹mÏCûé~ñ?x¦1>^{uÐþåâjjh׳ûïscF¦¦¦4jjjhÑ£SSV[×üA£Qª4ÞØÝo<%¼Ú5FF©¨Ò4j4MF£Qª54ïÞ齺ܽ·¤ú}>Ôüj;ïÕ²dÇ[OÉhÃ&L0É2dÉ,¾áëï×øOß=Áïýó÷Ïeà!úãÈ;§qÜNÇc´íGc²v£·øNç}Þ}2ðx<à¼gñzëÊ{¥äxÏ
+;gHæg'4s99NhäæsNg#s99£ÉÊsG'3rs9ÃÉÍÎNS99ÃÌäsnnK;þ{Âv»]bþýù§è¿n}£øÀ±dy_~ðOà¸Á.o%ÐètWIÍ'¸8£âq8q+8'q8ÁÁ¸8£âq8q\\GÂú=îÄÒj4ùkkdÔb±2¬X¬,L«ÛÇÙºÞ>îÿ{]Gaæl:0ØÙÖ¶o<iÃÂâ654
%% AA at RRs÷<~®N·¬RXXP¡BÂÂÂ
+(SSSS¯^¿dæææú ôyþ?°×à>Û¼ôì\N'q8{®~ýÑÒyÝgZ¿ë:NNgpppq88GÄàâp'âq8NÁÁÁÄàáN'ÄáOÞþ/ù¿Gìw_Òx
ùoòW¾û³ü_ôÿ·çú|ÏÚ4~ôЫ ·°,`\*°þy8h4N$S ÔP ÐiüùÒÖdàäa
û´ Wö
+"
+Ѫae×0ÃGHºá¹æê5M6:¹æ»[QµÁmáûËvæöíÁRÎZÆh ÀiTÆ3ÈÏ@ø ¨¤2ýé´¾¥úÀ²ê 1s
+=\ms@Ã{³¯ ¿´ÓãyÞ»mÁíÄlmio¦Î»J&¶c°[ ^¢ª2xaݪ
+ 2(²
+rªï±D`ÎgÐø4ÓësJǶXL74ã^@|/-ñÊ H»Î¡Æ¸4ÃJ ôùÀäÎJ´¥)Îé7:d2eExkµ»Þ¬Ôè0`:ÁÅjqxÌ,È &}ußG^Bðíì2ZaJ¡X°úØóp,ÃC0;©ÄÎBâ}a9Îmòxï!L0²Ée:ºè!gÝ ÏRö<ÙLs=&ÎÇO¯aî÷,ÓkÒ'WVõ0ÈÄçZYCq øo;ÕlÂØ`ï¢ÁÒ´ozÑ ¢t ?É o!R¯w1\MÍîLtãÂq;K®&¢ÉÃÉéß W:ÊÒ3)e^;»©!Z®)³qk·wpÕí®3ÆYî4ìÜçáÜÈeÚºªQDÕ¡cT¥2õ*Ø-ÁõË'½Ì÷é6rzw¶¼:xFO0ÐÑ£äçszÎo¶u¼ÎM}äê{)ïr¼M2ó|ºm/»Söz^ÝkÇMÝ^SAE]
\¼,¬Çº¦LýgAæ5[EÙv[ÄE'¦1ëÖÃéAfwâJÍñ¤u3<ãXÈç©ü|c\ñÎAvÍ* ïßõÞ1` 5$ºm¶ mµÖ¤T©$ºÝÝÖ]m$Inîè 4]~àPÖç<Æ®sMT2ãä7POÎIãúRéî{Ë
+òë6ÿtÃâphÖaûtä0-ôòØîÏÆEÏ®mKª3ïÖ_xÖ~áç?*;[æöyÑk#nIòü
qù«òåPzwÏqù ; ~|3«,«
Ën|A@° ¿nËh¦`½è(©ÎLMjdqÖHüv ¸ý=Ù w:ûÇÏʧé¨òú<mÂwõð`Å>r85í¼øFéÍ' îfX:s¾÷¸fÍ4fI&}ÕGÀç£Ñk¯ÇÜm//
+Tç1¾yf¼
+j¯¬3>M%cr5é¾5æÍÔ$2z 'éìw÷ù÷à÷îã÷xåÛá´ØèËàg©~GÓÎL¦hóW¯ó³ï}±Þ²qñåÄ09Î
+I$5Çß¼ÉsóبÁDøx4ççwgÜÆë°jÍà¦ñsA¬qÎøôç<ì
åÙãéëëå~µÎ<Jõû@õ5=¸á,Ãæ¨âS%q8`0
ß¾À9ÏØËNÎRõYİֲ«1>ÊüÉìO^¹¡;ÎBêyX<®oh¤ ëHW\%¨ ëôañÍ6¥!$I?µýäøO]ah;ï®ýý /Í9AßÇ_Gøãõ;Ä ~où¸ùîæ1c'tûrqU¨l9;hyibYÛ¥óÛëëëãÉîç{zºZ·´¥j[ghózuCiÃts½é¾æ]¢TS£^ÛE¢USÕZ©¢mÉ:Xú3ss¾i˽;Êrt¶P0aÆzwLÜõöV«Þç;vÓãèN#wÕ
+kÝ[.åm^¼Ê*˼ººë}s½;½Ìåæç³¹H@ÞHy©a2d2U a)Ætõ¼OGE#eÑr>DÆî@j_[*ºÍä]^±Å5;Ëݲßɽìâwʪ¢*"¢:-UQUUUü@ü$&®èÍTÄ.ñ,¹}8_¬ ëuÎý ]6Û *·wwvªªª©TI.ªê$ºHÒK©-$ºJI 4]8úïñtùòUÒÖòó¥¯yÞϨ=ô|Nºêro°Ød´AÞhÖ¬ú.GªÎ={Ù²ù8öüàê9_ÙÆ£__ÁÇÄÛ×+URâ²UØëZuðôüPC¿·AÜKP;èÂ"Õ,^ªÖZ(}m.Ý©$:?&ßG'<BBI=/8)îóqF5%rúK¡¸H³X
+P8äæï(Ùïv;ÄL[; ¡Aqã8\ÁÃG
+
+¥ÄY$Rxô÷×<1ä-ßæªIWD9ÐT][*µÚôyôæ wi2P¨Q¾mK/Nâa1ÆÃd¢*H»rÁØ-0!-d °ÃÜñD|Léþ¡cÑ£9uU1Ä-1Mj[_#áϱöþ~§[åCðãÐì xÈgbÉê_2C)NT°P*A¸@
IÔEj,Ã@5 ºBÒcÖÛ"\&|Î'/á7$fðÖ.tGVWcëÑqçp:.F@B)
¤93|¼I}¹ÜÛÄd3¤¼æ%{&5!Äâñ.§Ä]:Ö0ïÇ!ß81ÏÕÅà,¢LARDREEA$qø8X E$ ,8ÒA!o²HVÏ2XlëSÞ}µ{ÌÔt¨JSnsÄÀìÃÐçsª!ªÑS$A
¡+ÏùM:
Dõºè
+jJÇXȪ÷¿K£ #/U"o¥öÌzOMÞ7çzõòçß´ô>Kè>ºÏ~`z`õªÅü1$
z{`,û:Ô ,ñòè²æï
+syßÂÁTF¨ÂÑrÎLz<îja^å&ì+,Ìób«Þ¤HÀåQ1egUvSËUJ8jÌw>¯(Ä^â^îR©èZ»o%ɳ}0RÉ9v骮Ô:ç¹Î%¶Ym
+ÒN0ï¼¼<çCÚ³¶
îè¦ÃnúÏr¼z+¾MyêÜw]q»]ºîÖãÖû7Ës¶õsmy!ÄĬ+ `ÁXS&©&&ÅÌ× :QÝß?/öC÷~ûÈNÞ÷6Ûõ.÷o¾éeùUETEUEEUDTDEUWý ky½ ©%ÒM¶À ö©¼nÝUUUUV¤WuV]n$ºÍ´é-Ót 7wwwwwwwx K'FÛíë(Éi÷Pá3|ávcç>çãªÂØpuÌ×ÔÐ Ð ~ÔÔ rãÏXQLIÖ5¬dLc/¨Ìc
Û²ó
o-"O[½.Èì"`8zÖ¯#Ç^PC¬õÆ-,
+¸`?¡ö0¹ËDÊ[o#IT ö BuoÏDVõsn bSâ)©f¸hÏÇØ}Úq~2,¤Cºy´ñX³d§æ»ë«¤<ÄÔãc«¨$ÊùhÍ-ÇG&fäzéó ·J¬$H½§ñakwg»|U¢ª«fµ¨®gU#o<FyØPIäxä;Í-UIMª1év_<(îÜòãpJ[··Ù¶TÆÍ%ó|«Ù]%hÞ)d.¼qhTÛMXWØP÷Cj`w®ykÚ¦Lã90âí²ðcßò
+ ,p8sÃCr~fðäü¼o>¾µ*@j^) é°ÝÏó8ÄÅÍÆÔ6¡ïN³,¹¦Òí--l±°´(hhnÒÖÒ¤¯wç
+ÈtwÏ?AÕ ×D'Uô³¨_±? Äû¨>Ð¥ B´"¸°XYw÷ ¸Æ¬5v]cèiêfC'ÖñYóQuâ5×ѪÔînT,¬¾EûOɪªªªªªª®Eô-Û/¨L_¿'®ýyÜòiѪ"q®ám15*){]g[)eæ+»êâD{q¤åNwݺáñz5¼JÇ6W¶ûÇg¹ík]ÞõÊQÕ¼¡µ6d6ªJ`V^sÉÍævòñîÀèp3rº;-VºÕ¢¥ÓOh×)Ô´,[v¯-`}c½zùÞ>nÖË£¶¸Ü·¼âñ̼¯2ñÛ§6Û¼@ôtË
+6ôSÅeÅ0°YVTÉb¬S#$D&0,ïèTV Cø¨¬@Ò¢± =Åê½÷« T8¾¤Æñ£RµÏµkzó®5¯}bÀ§s¾ë·ækrèÁ%1ßç3yÎ+¡² @ >yË϶îîîè ZI
nîåP·;ø_¥9XVN[ã 8?`ÍyÞóéÝÎe|ÆAÔÑ{ºª§Ø¶ñG¥%b/»ö|döø×ÄN¡Ïà¯Y\Í?+\ÂòÔ¾ã®>9!¾¸Yj¨eJ#]{ÛÆ3,/¾-,ºÈmtk'5Á 5!¨^Ó±®É;´&NxèÃpÁF1¸á£Êã!ãã,2õÊ,×·ËBcuRm³yʱr}ps® ÄÐ`îö¸ð5~^fü X éì °ia8L+XN3,ÂäåÐ( µs)C
++PbàZLE÷÷
+#&AW+¤J¡¿\û5GÉï½Í$÷Hv ügóÍ¿^µ°¤qÐÈVɲ-]²
+ ¡BÐÊMÀlJZ*âÁªP$û9/í{îÍ»õçõ5)ÕãV5eDuרúù¿fXHy{y"Ld¢e1bÉbDÓKRDÁJóÕ¬ÄîéYT Tç¼ÓRhÉæ¤ÄÅn½K$À×NÜÍfqÝ/rƯo{¯h sæs®wÏ+»Ö£2ª'vÕÔhl·WXipØ|qW¾|Ü&o#zÔSæô_zT&ȼ'/wc}Ò4cqÆC8HYÖ àl7` hMlU
+pX¨% ;äñÅØ 릾5>¯ýñúÿ±_¯ü³£ö?k?öü?Õãÿ_þÏÿz»¥ôÿ®ÿNUßÉÄ:´Ü¼Ö3ºù%ÖI9ÿDóÿ×òyMy¥R*¿jlÄ:´Ü¼Ö3ÊòK¬sÄóùç)¯4¥J\ª?'éöêÔØÇui¹x=¬7¯Ø]d}[JÏ}שs(ô=º´=cº´Ü¼ÖÃ×ì.²I¾Ì¥g¾ÊkÎÊT¹ÎýnMwVÚÃxzý
ÖI'«sûï)¯>©|ç
+¯rýºµ¯ëÕ¦ùx=¬7³·ì.²I=[¥oßyMyð¥Kç8Sô=ºµ7ëÕ¦åàö°ÞÎß°ºÉ$õnr¿}å5çÂ/á]úÝZ¬wVåàö°ÞÎß°ºÉ$õnr¿}å5çÂ/áOÐöêÔ߬wVÚÃ{;~Âë$Õ¹ÊVý÷×
+T¾s
?CÛ«S~±ÝZn^k
+ìíû¬OVç)[÷ÞS^|)RùÎø~ø]ZãÕ¦û¼Öðøÿ]d~sþ)¯>©|ç
+~·V¦ýcº´Ü¼ÖÙÛöY$ÎR·ï¼¦¼øR¥ó)î/ZóêÓrð{XlÎW]d'¥oÏ9My¥*RåWÏk>ÝZ׬wVÚÃxzý
ÖI'«sûï)¯>©|ç
+~·V¦ýcº´Ü¼ÖÙÛöY$ÎR·ï¼¦¼øR¥ó)úÝZõêÓrð{XogoØ]dz·9Jß¾òóáJÎp§è{ujoÖ;«MËÁía½¿auIêÜå+~ûÊkÏ
*_9¡íÕ©¿Xî7/µövý
ÖI'«sûï)¯>©|ç
+~·V¦ýcº´Ü¼ÖÙÛöY$ÎR·ï¼¦¼øR¥ó)úÝZõêÓrð{XogoØ]dz·9Jß¾òóáJÎp§è{ujoÖ;«MËÁía½¿auIêÜå+~ûÊkÏ
*_9»ô=ºµ7Xî7ËÁía½¿auIêÜå+~ûÊkÏ
*_9¡íÕ©¿Xî7/µövý
ÖI'«sûï)¯>©|ç
+îbñÕ©»ui¾^k
+ÊòK¬sÄóùç)¯4¥J\ª=ú}ºµ61ÝZn^k
+áëöY$ÎR·ï¼¦¼øR¥ó*½ËöêÖ¿¬wVåàö°ÞÎß°ºÉ$õnr¿}å5çÂ/áOÐöêÔ߬wVÚÃ{;~Âë$Õ¹ÊVý÷×
+T¾s
?CÛ«S~±ÝZn^k
+ìíû¬OVç)[÷ÞS^|)RùÎýnMúÇui¹x=¬7³·ì.²I=[¥oßyMyð¥Kç8Sô=ºµ7ëÕ¦åàö°ÞÎß°ºÉ$õnr¿}å5çÂ/áOèyujoÖ;«MËÁía½¾áuIâÜå+~yÊkÏ
*_9ÂÐòêÔ߬wVÚÃ{;}Âë$ŹÊVüó×
+T¾s
?¡åÕ©¿Xî7/µövû
ÖI'sùç)¯>©|ç
+CË«S~±ÝZn^k
+ìí÷¬Oç)[óÎS^|)RùÎ÷Mùui¹x=¬6g+É.²IÏÎR·ç¦¼Ò)r¨ûôûujlcº´Ü¼ÖÃÇÜ.²I<[¥oÏ9Myð¥Kç8Sú]ZõêÓrð{Xogo¸]dx·9JßróáJÎp§ô<ºµ7ëÕ¦åàö°ÞÎßpºÉ$ñnr¿<å5çÂ/áOèyujoÖ;«MËÁía½¾áuIâÜå+~yÊkÏ
*_9ÂÐòêÔ߬wVÚÃ{;}Âë$ŹÊVüó×
+T¾s
?¡åÕ©¿Xî7/µövû
ÖI'sùç)¯>©|ç
+CË«S~±ÝZn^k
+ìí÷¬Oç)[óÎS^|)RùÎþV¦ýcº´Ü¼ÖÙÛîY$-ÎR·ç¦¼øR¥ó)î/ZóêÓrð{XlÎW]d'¥oÏ9My¥*RåQî/jÔÙui¹x=¬7í{%ÖI7Ôó)Yï²óJT¥Ê£Ü^ý«Sf!Õ¦åàö°ÞgµìY$ßSÌ¥g¾ÊkÍ)R*q{öMVÚÃyײ]d}O2û)¯4¥J\ª=ÅïÚµ6bZn^k
+æ{^ÉuMõ<ÊV{즼Ò)r¨=´¬·YíoýóEU_ú;ÝæjªÛÝülÕU[·»¹ªª·ú÷»¹ªª·owsUUnß{·¢IVµ«Ñ$Öª÷ø Ü?¾ïâ}¿÷½}Ú BüA~ª ¯Ñ´¿OÃ×É8Ö±OÅxýøuàu5Js»m§8&¾|^a®&ËK5¨"SÇÞe=ï¦gqñÄëW
9sÝÍóÞDãì½±«7E®Z}^ÊS-[e ,T·qfnåtéi="µ.ú´õ©b2ô*x´²¦÷;îLöéînfy¯y·Ë×
¶e±éërÃqóïWóÞ¹ï3ºï-ç3ÊÜŹV¸Üï+yÁDDZÄJ¢xD@
+¨vºFÇ#î.ñÇWØÎnë=ççÓ·Ø]YVýMþáZÿ+Å{Ó}.ºÐÈ$ R
+I
cÆ1o¬·ÆóÜkW&ü°ü÷Ë)6"a²Ø¸´bo,ÌÞÌn$MÆØÍPaøZ:ÀI ®âmØÁJdÁKÇèu}ãeãg5ݯ7èΧ ûuc80!ø²^Am¬e ý¾ùo×÷nß1¿Zƪ̢××uÏZô8³Y¬ãxTª¡ürÏ!
1úÞ)¡õòée>s×NLa²ÇÄ,AzÐÒ)&ú8¼BsÕY3©©&C~NÍäHHJ=r /QYëCv-- @~rÌù¸snû¹°ßn#juÇ&vD @ Eâe â®&
+?A Ì=ô|ÍK0ÎbÍSîvåUÃèíïe"s$¹´ oo¬íJVp
ôó³x°¢õ®8SUöà|ëÕÄ_±ÎþLÙ(01b¡%+¨w;Ƥ$I'Þþ.ËéæW<äëç~¦<xÖl:dÝräûîç×|úq¼<÷ÔÆ)
ªû!4çç¸z¾zÞd×fÙeæ`#bthj¼Õ©ÓËXîU
+®®®Í½t9K]fV®K¸ân!]C6¥\d©ºÛ/©¶Í¼éj[ml®ªêîúO]ÔÜÊlË([[ÔãÒÛ2˾çTê:<ñÅ/ym£Zr
3ÜáÌå3ÌÄ÷iSÍáåÚÞ¼7ÚÓ;Jñ¹kÊW;Çõê`Æ Æ@IÈ 0ÊÁeF%*eSff,0ÀÊ02&`²ÉæqKL+ ÅeVKʬÉ`0°jÔjL\í±ïÐZ£0A9$'$à8çÎ÷Þç¦ñ¬w
®Þ÷~q¼ÍÎ;|
+ ÀïF}r¢;ÃæºêãZîfåm@'ÞM/¯¾À ´ »Å×iljªn²©j¾·kqUUuëÆ0ìî«]`º¯\r;jnÀ]qºÀém9FaÒ÷¢bãÞæ¼ÎÛI@¼ÜͲJ-!e¤
°d+#ó½GhÈÃ<ÐçÏ@&FB74Û
+Ykýi`22ëáÆÈX}Ð9ðùlÎw¥µª9Ë^óÌS"±ï!xq* \Ý¡ÆÞa BÂímò<W}°úFõ³ÅÙÛcPî'xm8Ó[ x@58îzëÂ@·»ónQ$ Õ"ÄÎ>U }p¨ãu #Ä -@ÏâÝÆ£´p?§iFÖ[Æ<0³Qø½ôH"¯¨ZÒ®ý{xýPÛÌdÑÃCè÷´±òu"îNçxbÑõÁì´ °,¶L
)`w
+KÀÈJþWß>}v
CÌQ÷g!ߣ¡Ì-K×Ì=g<5OÒ 'Û¦Niïm¢:ªnîí«hÕÝÑ3ÁG§×Ñ®<oxñgSQxç]c5/ä~° ý|>bþ
3vüùÇ,í®å|ÙäÔÁ£¦B®ðç½<Òñäå12fa
[ºVyî»N÷¶»31óW¦\¬z¯tl¤¬ºéôb¬VÛ&f§/TÆhU°Î¯*æïXë/5¢±K}-G¥¥päÜfÀìåÑí,¹9}½{ê_r¯KÌöN¯4°¦QÛÎJå«VRµIJÊ
ÕãmS¼u{xÞqç-å×[´½ëä,0`3dÉ31F!!0`$ EUH TY BA2A0A#!d2¦L¦L#¢Á&&0bbbbÅÑtFaÝik¢ì´ºüeÕ~Í÷'f|.vø%lºñézùVT »»»»»·X¤ðæC§O
+Ãåò¥;Ú`Ä®x׿ûløÀN4ꨪ¢ª
+¨A©*Á²ùç²EìwºÉÙÌ¡jÂs¡Ù*á÷Üô¨~|8ôúkçÝb¼NßÓáÁ£1²î9:3wðÏéi´£ AI#hTX"ÙxNsääÀiÌ%ÜF¢äÓ¦ªåx
+ï¬]qÒ"fÓ£Mx¹t Ytj°eõøÐe"¦ ±Ñ¯Y`ìç úI¦NÎéYÜY¡ÁÏ<nm׿vøåVÆ;ÐUSö8ÁtFª"-Xní´ñ¼ã8ÙÈ9-qÎW-²Á2ñ qâõÌçC&ef'ÐFé¬UÂüUÆóLZñ!²ÇFÇ<B¬C! AØ~ú³8 u߯N¶kxÍÖüxß3«óôÝÉww$ H÷Þ;3õkZÖwf20NÙ'F+®=Þyõöyöë~qw|é}Ì+'7?5-ÿáÈ5>ýýâIuIu´¡YçîdâêÝ_'Åq87¼ÎÜÌwwÀ Èf9+/LÏg3<f³W3&`ÀüàÃóÃëüÞ¯RxñSß~öÙfñ¬d1|ø:ºÅVñ\}®þañöúÇ0c®õÃÑòÅs³ïûƳ<uÜ3Ïm{}tgz¾>ÿ@ùÀ
+ç~&×C÷õgU~f@×<oKÆ7;ûãÉsϸîÜég ×Áׯ^Y®÷u[ëÇ^î׺öÞ;»¥Ï3u³²ù¼zxY×f·¸xñÏr~z¡ÞzÜ_Èê¸Ç?½yÏâoxÅ}8øúv{|çøä~ÇàöpäûW_TM"(²ÜæÀÀðÿÇöá`ä:ªªªªé¢xÂâdXÖ
q.@÷û9ûÔä%¡ª%pµXìéÓâWXð+ð¿ñ|?~Üü!{ýal|ô.ÜßÛð
ûKû¿þE»öpfÄÌ%ñ¯þþ`´Çúx½«ë×=T/ÖÅý|oSÔ`]ñíí ¾{{}¿Ñ|}qêü¿Î¸,°¾Ø33+Ð//ÖéÖÄ.r¿¤/àÛñ:Jâ%¸]üÚuÄÌa4Á¯}¿äoÀüGÊeƯ¿:÷WlYû1ZË0~(â6¢ïÿqõÇóGÍõuè<AyGHã ääf¼ê{Êí°[gð0-_ÑaL Á0`ÁÆ0` ·áÍúBýÙ{ì²Ã3,1b"1±b±b+V1Pb Æ1¤c*!ô?@.ÁvØ.} ÔÐ-ýMÔ/¸`¹âû ZÄòÜÀ\y^«&D`Á0AÄAOÔæL Á1,°Ã11¸^éÈÊîþp°AVÁzD_
+·ó]vëäàêW¨.]Áx
ÜÁvàk]2Öµõ"
+Ø/ ¾ ¿èÁxFG(ê`Z~>`¼Bî Cìq
÷}){xû}À¹øìüqõ
Ø.Jg /âþo½}À°/X.â`¿h/ðñp¥Åõ"
+ø
æéï
Èä.áäGÞ°[¾ÛÒØ.à¾`^Aq¢
+ú§Ö÷¢R½w
î«i^¬tíA{°.¾wlÔ¼Ì3ºÔôô?rçrö"
+û´^ð^.
+¯
+¼øèk±æÁy`_¶+à|ò¹_Zà-ïH]Áx·n0.Â¥÷¹È-Gê
ÅRæ]g(:û. ¹êâº9Öx_´åp/Ì-Âä-Â4]ÜûºtèP¥PÌ#0F`Á3fÌ#0F`Á3fÌ#0F`Á3fÌ#0F`Á3fÌ#0F`Á3fÌ#0F`Á3lÀÐXIh@´{Úð¾£ÎA~+Â1ede2;»vu;zÐwÜA»ÂØ/UµO±ú¨½È¿%ví÷2QÔ/fW!g`¶rþp¶AWY$!yÑU,UÀ-ú}¿ #_ ¾!u
÷ñ¼þ/P]Y$ ª0AUÁX1 $ Á¤?Pvª}Ö=k\ò ¹Âö
¶ÀW*|áe)°[ÞÖ¸. ¸¿ ]AnGdlo¾l
+«¶ñAhÖ´
ðY4º°ÔjÈÉk´l;ä`.àÀàn^!p<À¹Ü°ÃÍÚ?Ö¾°»ù~?Ty=ѺPßT¶À-àÖÀ°-Ó`º"ª^qö¥À^ ¶O¬.ä©/
å®AnñkmÂÜ.°]{BØÂø¢ê>è¶ôÜ(]¯`]ègH.¡r+Ý ¶6ñ£Ü¡dñâü¡ó°ET±ðÅ,Ë-+£0-ápï¯ê{¾{áET¾H`*î þ8÷ íxI$I÷%I$YUUYUUYôÀ~Iò
.BþÕ}Úë]a|Áai}AzºBè]¾ ¿">л½À½É´zp XØ7yVßÀ/7X*õüa}Au+Ab
Òä,Dæ%õ¢
+Ð]Ðà¸6 >p¾°x´)Cï
+ܺõ#òÜôuûæ~ ^!bZöÝB÷wy¢®¡r¶ >Ê*¥°FCÀ³è`ÁX2¦aeadabÀ¶Æ§¸-ö¾ ¸ïÞ`¹ ½¹GìP[#Ò~lD¸/ ¼AUl]án<s ½ñõ
È*õ`GØÍâí0#ä¢èx_Õ·ì£öàWp¡¨_Xx§dh.À]Ð]À¸îáEÌ,âæ|üáeúùVÿ,¥XP{¾=Bùµ`,À½Ah£ ³"_L}Ð_@]Áv¤ä/-ö=ß ]Q«jZ"öAj<ºØ|ȽUOlÜÔ*Ð#æQu`½/h.$}ê$õð^uòæP¾@½¨ª18Ì[G³ý ZÈ^`\A`nÔJéÔ,çtsí°_gØÅ.à¹Ä{ðaÞÓÞÜÄéíõãî¸.vعV|£û½kå{ÆÎAh,¸^ÞïB^øóh.tU±,B®ÉþämI'öÂÈUàà¾ê[¦¡y
¯ öÈ^!|o$~Ôl.p,àÀ[ÐyFèxXx[ÆÀ½AxâÜ"èÐYÀ|À//¥"ú&¦ïi+O0¾oÒ+ã
bÁX³e*´sã| ^»^ôA]áh$öw_ IÀ[~«ÚDqKõä|.Ap@¾ð]ÀÄ-ÂùO ·AmÐØ0-hÐ.ï
+-<ûì!{ö£¨^~p\íD`/EòÿT/0¾`¼âøÇ|jÜ-èÊ´/p^À¹£C&Èl°[
ZïÒ9]ó
и,`«ÓÈ*ê^cöÝò 0.êì;ûÂà.èóذ.¯L
£Ö!uÈ^мÜ/GÄ,`YJX¢ólôÀ*à,
¼{´Á{p§@¾¡êÞ:Àµ® º§iâ _ at .±çpüyp]¬.à/Gx\£¹çàE#¼/ô£h[`½RZW²~°´è4^°Ð\ÓîÌ.ÇMPzÈF&óIÞ4(µ6À¼ÐUîÐ]BØ.ð´p`X36ù¥°ZÌET°GLªy{û¼|ànà.9¸ÛZÀ0»Á°!dh/ ^Ar+Ah,ê/p]¯4^ ·æÜ*Ü]à-ÛùBÀ^!'¼ìà\ww`. ºà]ýdA^A} ¿0/Pì^!wm³ÖÉAp$q0/DA[/0½ah#°^¤UKÔç°Góòâòu@ÄUKÚò
â4:µm^`À´_ X}rÅ
´Ç± ´à.Ѩ~8ö<n+À,¥E]Bý`ºÁw#äãÞáuET°,à;øÔ°[
óìÀ^ » ¾ .ð·RÀ/h^u :x
ßêò
È^°.uìKtp°/p\
Îáxá°£À§.ì))^!w
þº}þB+ýr¾ ³Ý±Uw½Ñà9îÿÔ/W°/P/44îöýÑ{Ð/õ"
+üx÷<ñGÄðÐ_°,RÁ¶áW'ÞGº!nl at W=ápÔòiÙó¶cO6áwøBÀ¾>» »µäíÇÇçÞ *ü °zÀApäÁrÒ騍Á1= ´õOìñzjí
+ïÈ^a&"ª_@^P#`ºþ.äp¡ % ?ä
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,33 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0
+ L3Cache L#0 (size=4096KB linesize=128 ways=16)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=4)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Socket L#1
+ L3Cache L#1 (size=4096KB linesize=128 ways=16)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=4)
+ Core L#1 (P#0)
+ PU L#1 (P#1)
+ Socket L#2
+ L3Cache L#2 (size=4096KB linesize=128 ways=16)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=4)
+ Core L#2 (P#0)
+ PU L#2 (P#2)
+ Socket L#3
+ L3Cache L#3 (size=4096KB linesize=128 ways=16)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=4)
+ Core L#3 (P#0)
+ PU L#3 (P#3)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 4 Caches (type #4)
+ depth 4: 4 Caches (type #4)
+ depth 5: 4 Cores (type #5)
+ depth 6: 4 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ia64-4s.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,12 @@
+BZh91AY&SY[Vô¢ !¥ÿð(Î?ÿøõo^ÿïßð jø`_ö[ÆÚ ãC@ѦF4ÈL
+ 4È 56AIµQ1 b@
+?T"§þª¤ &É OISÔi@ 4 Ð
+FhÓ 10@ 4Ó 0&@TCLQõ=@
+4ÐÐÑ z&4SÙüI$}!òÈzÃçüà Áîô¿ÏsJ=ïÏèÁ=R é!PNNI'rH¨9$nÝê¹" ØîJ%Ì\cÀ$,ÂDÉ,îÌR&ôÁÄSbh¸w$fwf§²$Áª!@v`áÈ&p
,+F%"äIkR9Zôc ª¢Âª¨Ì"2!¦(½ªH«BÒ(¢M ´ ´ª)KKJ¢ÒªJJ ¢ÐªJ5*
]dhP$3Zi«ERMÔE¢ÀhdÊQ=äY|Z^V/ieå´LÉ$lD7BÌI"Jª-%(UE T))üw&©²}ÔþgióÀï¥Ï$ImHBBí!r ¸;]hg
^AxhQ?¿kÖ¢Þ
+ÉÌf>I#òr!ãêí±ÖmãNtÚ¬ªµ^¹fH{ð&D0`9ç{[ïkUïW¿à3Æ3kklýé:ªäÝÙwwwrK.ÀÓJ Bffd®Ê"²"ªDUH©ZBHÅÊ9)vÝÍ WÈ4c$ÁM2ÌÌÊ!R(¢"ª"¥J@îîäU[¡VâI,2Û
ÎfÃUz¹OµÜä$s3ad£nôY#^ë_Upós¿ÎÅD(²QJ%¢FS¢Ôܵ$$:É$Zÿ~AEø'"uÞ÷0|3áðCkÞ/2O|)yrì½yYªÊ¢SJººª®wo]j£Ã%?ͱû²¤=èKIGq$GµLëqÙÂ{yMg¢TH¶V\!zWÚŨI+Z jEU®Ú÷,¶}°¾êcýGÆ!Ð<Æú*!DTPýc|äãêUÞ$QoÆaÒ¶k±ii¼Z,¢¥*©3G¦Å¢DTûulYjå¼FfüÊ$FHϸ¨Ý%$çy£5h±$*eärÍS.%ö½²ÅMôu$²h
¡U%KMéÀïð:4TB¨¡³S%:ïÊ,c-ÃqtåÈFiUóÁι^ñΤK*ªDب¢ÆU":OG=21yMÍ«¬·17Òn¢¢EE
+éËvû¤â8±KË¢%ª* Ê2Tb8¯JeRcLíji °qL¥HªIt
+ËHÙ³v«Öe±3Ú e
eKdI#qÞD0a+A¡³ú¸øl·2ý 2S!LÿMoà%çü²§ª¢YEÐQ¦òÍÍcUæ©ê¨`ÑtE)¼
3sXà%çyªzª
4]Jo!LÜÖ8 yÅ^jª!Îhµ¬9C±âvYiá.Ë;3¹A;£)IU¡$íÄËR¡hDv±¸FÆX½ïZÈË9¨¯¿Y=uU4²¥MfÍ+½\ÜyfÖÓµÔUU(®ý¤.Ã^òÅ54,+ª«iR´UãÕ/{UÕ,Îòé$ñ
+YT¢fkãN&CL´g¬¶Ï{YTõüTøå-O߯ýÅ:Ú!qkò-õWûû>_^#3°5¼)»Ü¦N/÷ïß¼búÜs|_8s#:ð
þn½ÁcPÔÔ=gþ$Þ_ëùÈÐ=¯ìvo>¿FƱ[àúìI#´;Cý§ þá¿Û´ù$³êÐUJ!p¨7
vÿ:r&
+aBHÈ!^Àï¤R©G>ÄePBÛ³ÙeV]ñd±lp
+2˼<|rÔ2GxpÁA¤(8ÂHâáL½GÞêxrëëxaFH®I½7!ǹcÆwÏI$ÃAÌ(ðBHÔ{ÿÂI#¸!AÙCÑÒ{íîrÞÐäyУ ;¡çíîÝnî$ÖûÝ"Hö¦AHi{ìI##_vß÷ÚûÍÒkêeÃÓYÁãåÝà¨#:$dG=Ò8ö¿Êtq=?c®Ôyen "E$x Àò1| õĶÚ$ÕáG"IwèóÔ$$Z$`îöÉ$saC@ßÒ+hI"ú #hIÉF}%$/ΤÐ,Gx48`èÌ:bDvãÅAo°G²HyCsBX4p:¾Er
+H5a$l,"IÿÅÜN$Õ½(
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,8 @@
+Machine (P#0 Backend=Linux)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4ppc-4c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,9 @@
+BZh91AY&SY,v$ ±ÿå° @çÿôzfÜ@ÿïßp P>Ñ` R¦¨ýSÐCM4i#F¡P&¢ 2 Ì`&F F&& biÌ`&F F&& biT¡ A2G¨i¡£#mC(x§Á<½¿Æþyú.Tïæ¬ê2u¢ô4°¡
+kÇÎvò,j¦Wtëäl« D(BB^Å[bªâµcÏ&*-}c$/QBD©
+"J¤r7øÕë)HÓGÔ}ëõáb´má/»Ä¶Ä6¡¥
+ýYôèãêÌTÃâ ²Fk|ñxØ>EŰ®À¦ÊÖ+¨[¦D!f¢uOA5ñ
+Á gpCÁÁ@SMVÿ-OJTÀºZèºKÓмÃQÑÅdIh(Ebì¼F"¨A¨Ó£F\³io¶[¿5óY
+û¤-ÄÝèß*X¶1×Eæ1CmF¨ª'Huév*·ÈgN³uæì|ÁÿyàäH'%;K" ÚK˨xc
zDd[6Lº¢¨L.<w]§YäZÈ}É˹ºJ©wUMlGXÃ7PC?
Ù(U33Óª'nùÅEî·Ü8ý3ÖÊ,}°Ô¿x½hD4[!XÏS¦¦vÚè&áQ@Ñ£wÑaxúvÛÖ Ì /]|ªËxQç®îÂ7Ât-Û:#NØXF¥¦[2¡ü$:¾ïyâu¥tVEêMÖ§z<¼½E2ï3UԪ˰¼"¾¨xkÒªN²¢DUAÖò«ÔC6S<ë/:o·1¨Z¦ÆKÕ¿:ÝíH#{DgÐ j8÷}}¦Ëôö³áý9`dbr¾~?õ*¯×ìð§³>Í>]¤¥x÷R%£ý¤b;{â´¥)JP²·óE¢\^[v÷D§´ùÐÈb93!Á
+_»Ñ7æs¡åíÏ¿##VFxãòB¦½w VhÓÆ%¼¸
+ÑF4¡n÷HæÑS¥
+ÓWM#tGµ&èÞFô,ïIBgfÔËö0ÜËÉØU<ÌP:øôjÛGiºIFÓt:²IÙBzOJ$ÿÅÜN$&
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,15 @@
+Machine (P#0 total=16777216KB Backend=Linux)
+ NUMANode L#0 (P#0 local=8388608KB total=8388608KB)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ NUMANode L#1 (P#1 local=8388608KB total=8388608KB)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 NUMANodes (type #2)
+ depth 2: 4 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1
+ 0 1.000 2.000
+ 1 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/4qs22-2s2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,18 @@
+BZh91AY&SYãxÝ
+§ÿð @çÿó?çÿïÿð @ ¨` <oµciE£@Û( øæFFCÐÈi£@#&@0`M52§¨M©  4h M#C!¦ ÂI©d§zÑM3ÀCÔÓ ´Ld 4ÐQ ÐF
+11
+44Ð
+MÑO
+yCÔò ô m ='ùþ{ùñ
+C÷ó
Eã
+®£ÕªëZÖµTò^qÐ̤ ,°AÏ~¢ÈÂ$ÜBC)ÚO9í¶ûQÍÒCCEÓ/-4Óabdyà¦,²Ã830*¡ÅPRbF"Y,loñ|±´Yozç|ÚQ%IT # P° ,¸7yBÛ%¨täC.òiíûw<x»µ~ ×6ôÄVIý!)%$º|ùï`öÒsçï²øogßáÏýê79ÄÓ'^ß³gzÞG]Õ¿·ºD®=0îæ«´
wªAÞÛm§;ãu
+y qÓ}zòçÚqÐ5~а*
UxêDTED{á¦Óc
+J
kµ¬,Uê÷n5WB׫RÞפ¤ºpÞ À(6¶O^0³ma
³ïòôÛNÝ¡0 Z4ÒÚaVVfwww¤C$Ëîîîîîïkh^÷¾«Z×Ï5$¡Ô$Ã¥(RD_[V>g¯£ç0Ë=ÝÚxÈü^®|¼ºÿu~¶¼QMZÑ@vöUQQU·DÜ3(RDß~Ë)ë~ÜݧÏ÷ÌÛ# J}Z½3ùz=GѨì=IåTAÆ ñoå1§>Õ¢`¢)3*µXR+Pý!À,³( :̸K,«Å!ðíñjաפÇ}à ղV0Öy4BÏU Y&{ËÇnÈ ©áh¾¾')YgÒ<$ïgÕµï4êA fñ.v¹kÙlæù×z¶k»åd´""ųÉû!ͯÓ:NóIZWujW0&9_£@Î Ö¨_V0ÅÄJtz3ÄoGg/AeÛ ÎêoÇ8ñ lÈ"°¶G: mǺº¦ù P²¦kIE¸Yn¥ÅË5±,ªëznÒfi- FÁmWUmÎ"%ÀNHÂébUEº.0N?kiØqøJè¨ %|CHV½3Õ(ÜkLưôdZ´fû7¿ö¾Iò@ù¾v4À¦+JÐøÓåúq½ï}±;ºº§¥xV×Ö·'QN°CºÕ<Õî)¯ØÕk¯sj² FoO&ʱ[îFHk87t|>̪_`1
+ç´i1 %þ8â&XÐeË8Ѽ
+²Èë«,&h¹1}°`ZWl×Aª4ØËXÍ aaó^6¹/aÕÊ~ïVV¶L»6âcR¬S
+gªMëVà¡ËÁ[G§i®Ë:ÈwüIï¨ÈÞ
paAV6¥MÕKüƧ/éÇ&ñük>±3I$¿÷"¿Cî±KXOWü+ù:ù
+GØ¥5µk
+yºáEâBØØ·DFKómòóLÙ±WrlÞÓVAáú¤àØ}e2ª=ÍÇ<mѼÿSÀ¿róêvæe8fYÝ<rñ÷-7qvTã-8áY9röàp5
'ÚQÛIPÈÒÐ1ÈÔ)¡"É2%°)f¡O!ÓT&[wÛBÅ">Í#Zd©S9gØq¬TõkG^¼äO]$¤ÛÃHÿT®ù$Î¥ ¬kI°Ë÷ð;ZVÒr¤NicAW ¶ÄÜmÐáÄÀîIsÎv§¿¶ å´æãMû<Sqÿ%ºJmF\dÓÍ$»£¡vwq9ΪÎ1ã)àÐÆæX¤S©¬:ɱ÷&S½k®O^ ©½èV~ÔÙ(bNë¶â=acß2Jc´sE"h°";BÒm3ÀæÇ²yÓGtwÚuP*qÂw0ãHñ$cà{¢ãaª ôlÆéAéYöÌì:äo.\å;:\ê9ªüÀQ$ÝTaI7³îãä¢
+v5MYæPĺñß*Î Íi$õÉ$Ï:¢
+=1²pIDBÓ¬édn`j£ïtâs-¤ç"'O`®)EO^;LAò-::I$MIììÀ¤È
+eI´ÕBÈ ]ÉáBCà?t
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,174 @@
+Machine (P#0 total=4194304KB Backend=Linux)
+ NUMANode L#0 (P#0 local=1048576KB total=1048576KB)
+ Socket L#0 (P#0)
+ L3Cache L#0 (size=8192KB linesize=64 ways=16)
+ L2Cache L#0 (size=256KB linesize=64 ways=8)
+ L1Cache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#4)
+ L1Cache L#1 (size=32KB linesize=64 ways=8)
+ Core L#1 (P#2)
+ PU L#2 (P#2)
+ PU L#3 (P#6)
+ L2Cache L#1 (size=256KB linesize=64 ways=8)
+ L1Cache L#2 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#1)
+ PU L#4 (P#1)
+ PU L#5 (P#5)
+ L1Cache L#3 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#6 (P#3)
+ PU L#7 (P#7)
+ Socket L#1 (P#1)
+ L3Cache L#1 (size=8192KB linesize=64 ways=16)
+ L2Cache L#2 (size=256KB linesize=64 ways=8)
+ L1Cache L#4 (size=32KB linesize=64 ways=8)
+ Core L#4 (P#0)
+ PU L#8 (P#8)
+ PU L#9 (P#12)
+ L1Cache L#5 (size=32KB linesize=64 ways=8)
+ Core L#5 (P#2)
+ PU L#10 (P#10)
+ PU L#11 (P#14)
+ L2Cache L#3 (size=256KB linesize=64 ways=8)
+ L1Cache L#6 (size=32KB linesize=64 ways=8)
+ Core L#6 (P#1)
+ PU L#12 (P#9)
+ PU L#13 (P#13)
+ L1Cache L#7 (size=32KB linesize=64 ways=8)
+ Core L#7 (P#3)
+ PU L#14 (P#11)
+ PU L#15 (P#15)
+ NUMANode L#1 (P#1 local=1048576KB total=1048576KB)
+ Socket L#2 (P#2)
+ L3Cache L#2 (size=8192KB linesize=64 ways=16)
+ L2Cache L#4 (size=256KB linesize=64 ways=8)
+ L1Cache L#8 (size=32KB linesize=64 ways=8)
+ Core L#8 (P#0)
+ PU L#16 (P#16)
+ PU L#17 (P#20)
+ L1Cache L#9 (size=32KB linesize=64 ways=8)
+ Core L#9 (P#2)
+ PU L#18 (P#18)
+ PU L#19 (P#22)
+ L2Cache L#5 (size=256KB linesize=64 ways=8)
+ L1Cache L#10 (size=32KB linesize=64 ways=8)
+ Core L#10 (P#1)
+ PU L#20 (P#17)
+ PU L#21 (P#21)
+ L1Cache L#11 (size=32KB linesize=64 ways=8)
+ Core L#11 (P#3)
+ PU L#22 (P#19)
+ PU L#23 (P#23)
+ Socket L#3 (P#3)
+ L3Cache L#3 (size=8192KB linesize=64 ways=16)
+ L2Cache L#6 (size=256KB linesize=64 ways=8)
+ L1Cache L#12 (size=32KB linesize=64 ways=8)
+ Core L#12 (P#0)
+ PU L#24 (P#24)
+ PU L#25 (P#28)
+ L1Cache L#13 (size=32KB linesize=64 ways=8)
+ Core L#13 (P#2)
+ PU L#26 (P#26)
+ PU L#27 (P#30)
+ L2Cache L#7 (size=256KB linesize=64 ways=8)
+ L1Cache L#14 (size=32KB linesize=64 ways=8)
+ Core L#14 (P#1)
+ PU L#28 (P#25)
+ PU L#29 (P#29)
+ L1Cache L#15 (size=32KB linesize=64 ways=8)
+ Core L#15 (P#3)
+ PU L#30 (P#27)
+ PU L#31 (P#31)
+ NUMANode L#2 (P#2 local=1048576KB total=1048576KB)
+ Socket L#4 (P#4)
+ L3Cache L#4 (size=8192KB linesize=64 ways=16)
+ L2Cache L#8 (size=256KB linesize=64 ways=8)
+ L1Cache L#16 (size=32KB linesize=64 ways=8)
+ Core L#16 (P#0)
+ PU L#32 (P#32)
+ PU L#33 (P#36)
+ L1Cache L#17 (size=32KB linesize=64 ways=8)
+ Core L#17 (P#2)
+ PU L#34 (P#34)
+ PU L#35 (P#38)
+ L2Cache L#9 (size=256KB linesize=64 ways=8)
+ L1Cache L#18 (size=32KB linesize=64 ways=8)
+ Core L#18 (P#1)
+ PU L#36 (P#33)
+ PU L#37 (P#37)
+ L1Cache L#19 (size=32KB linesize=64 ways=8)
+ Core L#19 (P#3)
+ PU L#38 (P#35)
+ PU L#39 (P#39)
+ Socket L#5 (P#5)
+ L3Cache L#5 (size=8192KB linesize=64 ways=16)
+ L2Cache L#10 (size=256KB linesize=64 ways=8)
+ L1Cache L#20 (size=32KB linesize=64 ways=8)
+ Core L#20 (P#0)
+ PU L#40 (P#40)
+ PU L#41 (P#44)
+ L1Cache L#21 (size=32KB linesize=64 ways=8)
+ Core L#21 (P#2)
+ PU L#42 (P#42)
+ PU L#43 (P#46)
+ L2Cache L#11 (size=256KB linesize=64 ways=8)
+ L1Cache L#22 (size=32KB linesize=64 ways=8)
+ Core L#22 (P#1)
+ PU L#44 (P#41)
+ PU L#45 (P#45)
+ L1Cache L#23 (size=32KB linesize=64 ways=8)
+ Core L#23 (P#3)
+ PU L#46 (P#43)
+ PU L#47 (P#47)
+ NUMANode L#3 (P#3 local=1048576KB total=1048576KB)
+ Socket L#6 (P#6)
+ L3Cache L#6 (size=8192KB linesize=64 ways=16)
+ L2Cache L#12 (size=256KB linesize=64 ways=8)
+ L1Cache L#24 (size=32KB linesize=64 ways=8)
+ Core L#24 (P#0)
+ PU L#48 (P#48)
+ PU L#49 (P#52)
+ L1Cache L#25 (size=32KB linesize=64 ways=8)
+ Core L#25 (P#2)
+ PU L#50 (P#50)
+ PU L#51 (P#54)
+ L2Cache L#13 (size=256KB linesize=64 ways=8)
+ L1Cache L#26 (size=32KB linesize=64 ways=8)
+ Core L#26 (P#1)
+ PU L#52 (P#49)
+ PU L#53 (P#53)
+ L1Cache L#27 (size=32KB linesize=64 ways=8)
+ Core L#27 (P#3)
+ PU L#54 (P#51)
+ PU L#55 (P#55)
+ Socket L#7 (P#7)
+ L3Cache L#7 (size=8192KB linesize=64 ways=16)
+ L2Cache L#14 (size=256KB linesize=64 ways=8)
+ L1Cache L#28 (size=32KB linesize=64 ways=8)
+ Core L#28 (P#0)
+ PU L#56 (P#56)
+ PU L#57 (P#60)
+ L1Cache L#29 (size=32KB linesize=64 ways=8)
+ Core L#29 (P#2)
+ PU L#58 (P#58)
+ PU L#59 (P#62)
+ L2Cache L#15 (size=256KB linesize=64 ways=8)
+ L1Cache L#30 (size=32KB linesize=64 ways=8)
+ Core L#30 (P#1)
+ PU L#60 (P#57)
+ PU L#61 (P#61)
+ L1Cache L#31 (size=32KB linesize=64 ways=8)
+ Core L#31 (P#3)
+ PU L#62 (P#59)
+ PU L#63 (P#63)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 NUMANodes (type #2)
+ depth 2: 8 Sockets (type #3)
+ depth 3: 8 Caches (type #4)
+ depth 4: 16 Caches (type #4)
+ depth 5: 32 Caches (type #4)
+ depth 6: 32 Cores (type #5)
+ depth 7: 64 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/64fake-4n2s2ca2c2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,67 @@
+BZh91AY&SY-È MÃ
×çyìþÿð5kF ÿïßð "ø`PØð $ дÖTbE%**|Ü .ix 8:+Уp9Àu7Þ{ïÀu»\
+ð|ïy6Ú©´³èî÷Â{«Íi³`û|=Õ«L '(ú/ïR4ªêo px
+;Yp4 dãOõRúªªßª4À#&LL0 `#ÚFj¦¦ßúUTýBP b ªjUTz 4i&$Ähh @@ dÓLJ©=CG¨M h
+S M´I¦G¨yCõF
+zmCÔe?oô ~°÷ ~¡KùÔ¿QKÊXKú
.Â%S¡: þK IÜâRê2x2CüU_"µD>²%S¥õÔ)bÐ%ÊJÁFâúqýCîýß×~¯»¶§/=Ö»å·Þç}Îûö=cØö=Þ÷½½cØö=cØö=Þ÷½½cØö=cØö=Þ÷½½cØö=cØö=Þ÷½½cØö=cØö=I%Úv£î}; äå[lMY\ø¼æÒØÃX#9§!©¶vCAËgzc,a}ÓM4ÓGÛ,u'cÊQ ÕGnp£0Ï*wÉ>+I3»»»vî-s0N'¬Ð@né¤QeFV÷gÎÜÏ
+Àª×v(8c;¶ãݹ&áUïb×wwnÜNíÑiág^SتJQCt,Æ*DĦ5m1«iCi[Ld«*Æ(Ö2U$I V6o V2Uc6ì*ÆJ±¬h$I V2UcFì.c%XÉV77Ðd¹A$D«7ÐD«*ÆJ±¹¾%ÌrUcu¶¤PD¹c%XÜßAæ9*ÆJ±5cI H"UÍô.c³Øvm1«i¹^,Àû»m½õ÷½ï{Þ÷×Þ÷½ï{ß_{Þ÷½ï}}ï{Þ÷½õ÷½½ìúÞ÷¾¾÷½ï{ÞúûÞ÷½ï{ëï{Þ÷½ï¯½ï{Þ÷¾m]Á÷s]wk%»
+¾v;v;]ó,6ÝùØíØa×6ª½á;®Ûom¶ÛæÛm¶ù¶Ûm¾m¶Ûodpí¶Ún,²Ád9,;]â2×e»ì·c¶ íÍ2HÄ0Ã0ÃI#0Ã0ÃHÃ0Ã0Ä0Ã0Ã1$0Ã0ÃI#3aØom¶ß6Ûm·Íwm4ÓM4øÖÛm¾m¶Ûod8nîÃ
+¶Ûmóm¶Û|Ûm¶ß6Ûm·Í¶Ûmól±»iÝo:úI%uêëÕ׫¯W^®½]zºõué$I+¯W^®½]zºõuêëÕ×
«¯I$I]zºõuêëÕ׫¯W^®½]zI$JëÕ׫¯W^®½]zºõuêëÒI$W^®½]zºõuêëÕ׫¯W^I$ºõuêëÏnÙ׫¯mhï{5Ö»çyçyíkZyçyç{ZÖyçyçÖµ§yçyçµiç»víÛ·nÄÛ·kmµ¡Öݶß6Ûm·Í¶Ûmóm¶Û|Ûm¶ß6É!Ûm¶ù¶Ûm¾m¶Ûom¶ÛæÛm¶ù¶I\çQé»m¾m¶Ûom¶ÛæÛm¶ù¶Ûm¾mC
+¶Ûmóm¶Û|Ûm¶ß6Ûm·Í¶Ûmól¡:&i¦i¦bIi¦i¦fi¦i¦$¦i¦i&i¦i¦bIi¶ÒEu¬²&¬²~> ´û<¼ýótô|±Ù¥
+çË*y¾Xör«×ËQêùöW¼Îò®#åën¯TâqPR§±ÅªV<¸Üy££Ó®7DÊj&cËÄ2i¥Lƪn$q¶8S1q¸ÆSÈ4ÌrãYj.7DÊj&c=t¶y1ËÅ®*¸Öj&cËÆ.5iLÄ"y°áLµÅcËf¢f= |Ò㳫ϵp|ç·´.q©á©Òx ;ìß\ Æ Ó´:}åHOM«¢ÌFvà¾^
ñâ¦QG)m-¥´¶(©@¬âQRªQDmU3
+mª¹
L´¶Ú¹
--¥´¶ÛQ2ÒÚ[Kir
Ê[Kim1G)m-¦$ÄrÐ*6ÉXÄb1EQTQ` ¡îe»|wïÇrɦ-YZ0j`ÅÉ-¶´Í¶ËQU*ª¬ÀUU"UYV at P¨w,N{½ÑA ,'KQ¢&IaòaÞñáJÔÆ®e Xd!hÅ©©F-X´ÔÖ
Ðê³%QÛos-¹íæ\s7wvÙ#%¢I(Z@ä^*X{¡Uä¸êâÀбyÃbR¶ù QĪC{ò*ªªªªª")O$å1÷d¾6hqÜA|22ZâkúáTDã*ZQE
+Ë¥í=Uê´Ô¨±A`°QN±Ë1ÙÖcu
+úCάÖËX̱¦²Ó,eZiYc,²ÖZec-amZ¶ffffffÔ@*AT(¢°ETQET(¢0KfÍÃfÍdÛ4lÀås333333jÁ´fmÌÌÍffffÂ"""""¢DYÌÌɳ2l¶ffffffÕhͲkm²`UVUTªªUUUPH*±c@6ffffffÕhÌÚ1DDE""""""""""¢DDÌÃffdÙ6IÂûl%E;iZÖÛm¶Ûm¶Õ J
¹ËãpÑË95p×R2
#HÂ
%,)eK|ðUUUUS[Yi´Ë,²Ë-2ÆÆkjÀ¯m¶ïÎrÛm¶ÛUe%A2ÒP¥%
)),,))(RRYaIJËAI l⪪ªÄ ¦²ÆZeYi2Ö @ ÁUUUU±1eYe¦XÓXF,@ è@UUUUUUUUUUUUUUUUUUUUUUUUUUUUU]´ÜÖµÆÉLQ`0
+îª<ᲩVRU0þ$J¦CUb[$WñwÁïñæôÿ9¼è>2¥ü@CîåK°Øç*X+ØâêX+Ñ»©`<ºí©ðÀá íÃõ[m¶Ûm¶Ûm¶Ûm¶Ûm¶ÛRI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$úÿC?Bbb"Óp³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³p³qÇO´Á`°X,Á`°X,Á`°X,Á`°X,Á`°X,Á`°X,Á`°X,Á`°X,~¯¯äÔ½¿kKÄÔ»uKËËLN%ËÁ18N&¥Û¬Äâ^XdBP$È&¥nHMR"&D!5PBª ÔÂ) ªQdBQÈ&§ÂÈ(¥*HUBK"¢¦D!E>D!E)P
Bªa
UøY
E2!
+(""R×HD*©QE!(B!E-tBªa
Q ¨*RVý.Ä.]ÜéBåÆE!UUpB¡
Uît!rãL"ªª¸E!EG"ª»#\¸ñRTñRUW¤(¨ªHU^çHâ.4Â)
+ª«RTyB)
+«¹Ò8
Ë0Bªªá
¡
U\á
ît!rãL"ªª¸E!ENÞ&¥Û¢bq//6MK·_½®@ 'ÔTýHNñ2?cóyöö뮺ùá}pGÓöèø}²G¤~ÐT
+áR<*G
Hýzí{t¤|Q*â¥ó)|ºRé:N¤ýà ( mýI$ú¶Û~·ww}~îîúܸç7½Uòª¾ëî}ÏÇú¿ï¾O·Û_mïíÎsíöï{ÞýöØ`ÌÌç9½ê¯UZ·»åw½ï`@fg9ÍïU|ªªÕ½Üç,Ì˽ï{339Îoz«åUVîç9ff]ï{Ø AÎs{Õ_*ªµow9Ë32ï{ÞÀÌÎsÞªùUU«{¹ÎY{ÞöffsÞõWʪ[ÝÎrÌÌ»Þ÷° @33æ÷ª¾UUjÞþ9ôÕÌæìïsLåÓ9tÎ]s|ÍoÞªùUU«{¹ÎY{ÞöffsÞõWʪ[ÝÎrÌÌ»Þ÷° @33æ÷ª¾UUjÞîsfeÞ÷½ç7½Uòª«VíÛ·nªÕ½Üç,Ì®÷·{ÞÝïlÌç9½ê¯UZ·»åw½ï`@fg9ÍïU|ªªÕ½Üç,Ì˽ï{339Îoz«åUVîç9ff]ï{Ø AÎs{Õ_*ªµow9Ë32ï{ÞÀÌÎsÞªùUU«{¹ÎY{ÞöffsÞõWʪ[·nݺ¯¥ô·«Ý¿{Î]ï9w{³[æ÷ª¾UUjÞîsfeÞ÷½ç7½Uòª«V÷s³3.÷½ì ÌÌç9½ê¯UZ·»åw½ï`@fg9ÍïU|ªªª7·9Æfc½ïo339Îoz«åUVîç9ff]ï{Ø AÎs{Õ_*ªµow9Ë32ï{ÞÀÌÎsÞªùUU«{¹ÎY{ÞöffsÞõWʪ[ÝÎrÌÌ»Þ÷° @33æ÷ª¾UUjÞîsfeÞ÷½ç7½Uòª¾|2ªªªùóçÏ>|Ö¾UUUUv«*UÝw{¹ÎYï{Þø AÎs{Õ_*ªµow9Ë32ï{ÞÀÌÎsÞªùUU«{¹ÎY{ÞöffsÞõWʪ[ÝÎrÌÌ»Þ÷° @33æ÷ª¾UUjÞîsfeÞ÷½ç7½Uòª«V÷s³3.÷½ì ÌÌç9½ê¯UZ·»åw½ï`@fg9ÍïU|ªªÕ½Üç,Ì˽ï{339Îoz«åUVµn×9rÎs3.w}ÖîöÍç_MÎëÎsMꪪ«V÷ô¹Ï¦®g7g{ºg.˦rëæk
|ÞõWʪ[ÝÎrÌÌ»Þ÷° @33æ÷ª¾UUjÞîsfeÞ÷½ç7½Uòª«V÷s³3.÷½ì ÌÌç9ºüüüü|üüüüüüü¢¨ª¢ª¨ªª¢ªªªªªªªªªªª±UTUQT_UTUUUTUUUUUUUUUUUV*ªª*ªªªª¹¶Ûm¶Ûmô ù@ª|àU<xï~À$û 7QTUQUTUUQUUUUUUUUUUUXªª*¨ª.Íb ÆËL²Ë,²Ó,i¬f¶ºÅUUUUÃUUULÌÏBh:t(èQУbX%w $TUUUTUUUUUUUUUUUV*ªª*¢ªª¢ªªªªªªªªªªªªªÅUQUEQsUUUW1UUUU~ EQUEUQUUEUUUUUUUUUUUbª¨ªæÛ6ívÖcZc-2Ë,²ÈÁ"1fbªªªªá¶Ûm¶Û
+âJ])t'IÑ¢¨ª¢ª¨ªª¢ªªªªªªªªªªª±UTUQTZHL$&bªªªªá!ë "©Ê¨*
+ï{óóóóóó뮺뮺ꪪªªªªªª®ouUZª¹½ÕWËÞ÷½ê÷½ê÷½ê÷½ê÷½ê÷½í÷¹õW½ï{½ï}W½^÷½^÷½ïUU{Þõw½ï½ïUW{UZ·»åw½ï`@fg9ÍïU|ªªªªªªªªªªªªªªªæ÷U^Þ½)qKÙK¤é:N©³5¬cM2Ë,²Ë,´ÓÓ ÌUUUU\!>Ø >~&vÊZQE$¡kD¶ª^â·>y×2¢sOCéDÎ`XRÊKháÞî[ow¼Ë8ûYëiÞï{eNÜ/BiÝõ½càÌ·32Ø^XRУ)ʪárÙïvо´oå*«mábûS1Âɶ§%I¼Öõ¹ð !Îð 3ÌÌæûÞßd'0H"¸+qDLYJn³çãqbZ
̱ÔCpÀQCv ÀEú³pÿ }üºëÏÏÝÕUUUUUUUUUU ;1Ð UUUUUUUUUUW[m·\m¶Üq¶ÛvÝu×]u×zªUUUxñãÈx^Sv×I¹È\ø8T@ø>?¿`ûv¿XÛ_¡¶½6צÚôÛ^b$X#¤xT
+áR<-Táì¡ZE98ÕNNj¦ÍU
+áR<*G
Hð©¸Ã8rG
+ñ¶½6צÚôÛ^kïá'Ù% BI
+¸²ËéO½K&RÉ>òæ'æ)~b~brw)wNê]ÉÜ¥úô)~r~r&)yO*^ä÷)yO) ¥ÄâG
+]²L¥Ù;)t)|O÷§ÞKï½VÂþS§º{©dÊY2-1_ÊðIñRêºþ±? £ùþ§({j²*}àö}^Dz'Ì}Á=ÁVL¥)dÊ_§î_rÆ0 Óßö¯Ü?ñk÷
+µûÚôÛ^kÓmz*G
Hð©#¤xT
+áR</9½/K,²ËË,cÈ/ï%*§ÏW]eòDªvdÙÙv^éÑ;VÍ¡¨XI")íC¡ÁtÈ¡,,vê]Cø{®ëÁáâ½£ónÎ`¤¹@?KKÂ$}è8O$Ô:¬$̵ÛÎÀD ¡(/¨ D3´E0ã \
+©7h¨@BATµÆQÄ@P$'{Ö
+tHuð¬$Ýå»iY8É
@ÀÂÀÁE``aH`¢ÀÉ
!ETRj(¢²r^NÀPX¢$áÍëgXzgna
+s(((,QD7JN PPX£9y8r *
+
+&d £ 0&2J
+HÙ0à/,±3º%
+.¤ère
+vÔ-mI» T§0uÚ¸îÀUÚK§~píâÙyÊLG¼W.dLEè2t 3CæÄÙKJ(Ô¨©ËV-Åèr÷:O`Ò ËBÂ[w¹'e¾Ïs7mð=·Û¸y/NØÓ¾½ÈÏC2å)°¶ÂòÂ
Ì#ªÞK=ÛBúж^a/)U·¼ÅvΦ^dS302äpÌS¾îûÕë·ÚÒ@É}xÈúõ5çËÎuÃ{zÉä1pC Øôé(~ {UÛ¹ïío{ÞÀ Àc *ªªªªªªªºÛmºãm¶ã¶Û¶ë®ºë®¹ª¢ªªªª¯FÛm¼õ~-=~µD°Ò±bÉñó3ù{Õ;佯1®¨ E° îØZ«
+ìN³½ÈJÊnÔ4Ôd ¿¶eSaʽä_Bú@w;ÑïÇPRÃIÎ\^ðR:i3°X)
+¿L`WZ|÷8+¦ HÈ2µuð ;ª<Í%O]WS&¹Ås#¦Ü÷·}óÜê1ÉÙPPPPX¦Y~$ÅW~Ü|®à'\9l³Ø;ãä ;h =ª^¾dJ¦ö{9{òåàö&Åúe··âI
+Ãê'Êr(±AAAªý@ÕSS
+bÕ&å4(l&SUW.eµ®¹Ã FÐ.ùÚ©h6ÊPËn!9¡¨©1£
+
+ "U8ä4 eds©õ ﻯÄñe-(Ö°µj¡·2<x}-y»C0£o^üÒR´(-ãM¤>ÝÈZ«¾ËwHþ;A*NÌç²áÒgräд °¶ÂöÂÌå+p.[³½´¨úضÐÊ[Irs
+Ú{.30°·\\s{%åñ¹,YVÌÖ÷«õ 0°Y~p;ðú]Ô×߯O§ÜUUUUUUUUUUU@ à1Ð UUUUUUUUUUW[m·\m¶Üq¶ÛvÝu×]u×5TUUUU]ï ߯9>%#QbÙ$<=%<'¢;Áòê^qÅ×Jç ñë6eE{s3I!¼tA(>{g×n\ÍzßIõµSê/!÷ÃëÃ-Qò,| ò¶÷2û*aQÈ¢ºÜÜå2Ë=é$B@)á%Iï|¢ic¹÷G
+¥r Æ*Ñ)JÐ8!ßËÖÛlÙ]¡4 +Êï¥Sv¨©8
êéF«â£#s!'52Hª¢rJrÙ}$
+p Ùu,)iÓ\Z)y©ôèÚTÿ"%SùESø"©ßËÇâ©
+ñMAWvÚF/Òó8=o-1S{7;d~òÂ
Û*O;¶©¶ÝçIí»Ûzô7´¥´;1ß[¤Í³&YBÒÂÛ´wrÐ/.AËÐïm
õ¢6ÙKi.Zç½¹ÏwÌ=ëÈc_nÏHA¹h5}c³Ûd3\ Aæ¹ð ×ãývñèÞ÷½ì sÆ: ªªªªªªª®¶Ûn¸Ûm¸ãm¶íºë®ºë§
UÌ*ªªª½m¶ó>UUTSÌÞÁð·i Ëd9òªC léJºQ¨YÅàs$$UUQ~9`$¯h\î¼ïMa½´ ÀT V±âHÉ ªªª®'Ã,Wiy×ÒHlã"ãë ïåb¬UUUì`|8ªùÀ>$ÀÍw³±V*«Ü@±#ÉUwp Í\Ñ^*¼
+Þæ6ÚÛiV*2Â5;òs}$
|ì¹ Ï:[®.±¶Ö2HXã`ÁÀu|ªPIÖ6ÚÛg£6K
+7©ÇHºÔ%Û£ÍS·ª;¥C¢Í¶õ¸©bãQ]æ ÏQæ±\¢~'vs¤æPÔ¶e¶ÒÚM榦íö%ýî^{J[MõàûÄßzäѶP´ °¶9§-°÷mëXÛOwxªrØj]½Þ°÷½Ó½ìÖ½å
Î`W9/HIt¾î»ÜUUUUUQTUQUTUUQUUUUUUUUUUUXªª*¨ª/wµîપª*¦R¢¬UUUEDUUmªªªªªªª¢¨¢¨»6|hÛF¢m«ZcZmQ]ÖÜ ó÷;/ó× Ïpîä È9 yo>6Þ6ã8Þ³¶ÌÉhÆïsÚmlxªw/J°µDë%g}rÆ
¦/®/ç;/5ɯ¿®zªt\õÉc¢¹c\õOK1¢ÔÏGjÇlñXlbDªT¥$Î6ªfo S®½mºô³.p/HLØBÀS À#»í/j§ëí/Eð_ÝUß)Àsà9W=üìÙÕ¯y¹ÈXë¿WÒI
+3Ô
+³qS¤
+À˲Hoîö0IÒ¤»>jnU;©á©üè!÷¤ IÞ¿>ïÈ¢ËhAظÔÌÌxòðYÎrÌÊ9î~¦JKiR½Ã-nÐ̵m¡¼N8oIí®#5À
+A(+Ñ :`À ü!¶P´ ¥é·U-°ãI&ô¬-´Êª¥¶cZ<àRØ{»¼Cm
íVYÀ$ÌÓ»Þû;¼;ÍsÓ=»²íÇ·WÏé > >¨ ·iõ-¶Û@ =û o9ÍÝÝÝÝÝÝߤWé¥Y(YSyñÇ<U:z i8æ¶åØ ¨ ªØ î±PÐÄCwÛm¼c½ÁNYg]¹U)TÚѸ.â5¢É%êK
+»¼®wuF¹U)Á,=eÂr¶¶°Nr°9#'<YÍ¥Ì/UN\4@
+òGl¤¢[ÍÖUSÌUN;yä
+wMuïrÞó5Ùi©çFÐh]-@ìãÇXg+C¥`"À¢5¡rA2£ /áDòË,تgY£GDU'$¨CUDc/8|¼Û_fvªñÇ ö{ÂR[@¨>¢ÂÛ-¶9X<÷m¡yC®p=GxqÞå³3r´(Äc---Þîiªª[f½Âs|OÂÛpªª¥·-±á½É©ëíë°ÞÉg;À Ýë¨Ã'¹ë½ÙõÀÀõò½ïÏÓt Ïpîä nîîóÝÝÝÝÝÝÝç~BøA,<òvI+(h)Õ¢aE¬"ÙyrAB~U¡»Ëé23:U4¶"0¦¢)X{¨V3 ¶øy«·<Õ<Ý)Ûà¸<ålláïÞ·¾CÚ0!yF ¼ºÝ79 &Å*iÙÛyfï;õ·n½À óà ° ÞÅ·°THqü¿çÿz¤÷J£3ÝÌ[ÿ©ËÌNÿî¾Á{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù8ÐsHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&
CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/lhHI¤4¡oº^ñ{dxBBM!¥|¼ÄíÒ÷Û Äi
+([äåæ'n¼^Ù$ÐHiBß'/1;t½âöÈ ñ&CJù9yÛ¥ï¶A4$$ÒP·ÉËÌNÝ/x½²<I¡!&Ò
¾N^bvé{ÅíAâM 4-òró·KÞ/l
+°ZIUUy/6>O4¿EzÈ ú:àÇTåË·[.,,4Å:½pÒi!i)%JFI!PÚãÊ'EëÓKܸaÑb&ôÄÜç ï÷ÞZQE[{kUl¢Ûæ4¼â.V·*-·t< ËBÂSÈfXc
%g-£îoǹlï7X[À=Ý5SÓ´Ã3!vÂ
e±9LÊUU-ã7Äö)5#¼3ªª×¹¬áÀåÉÎÀÌ3r½ï{ÚnWÍê÷w½ lTz»Z½X(é
+½nô ¬Íî`(¡émã¶ôxó×¾ 9 ÀóÈ m³ËÜv¥TÓ+)Î`¬%Ë&¢Xe¶Ü0¥
+-v½ê¯i§R4Þb`Ù.Ò¤²6[ccv4h XÚnJ
+i¢¶Ë³XÑM5IMdÆbá$4äFw¦¹ùa¤<{§¸IÆ`-d¡M DH©t¡*¤ceäÐ
+é«4 RU ¡MTÜM¨^$$2o0ÈhAYÆ3gÖ±"±ÃX9 áÕgY$çp=cBÊ q×N<&êéÐíÆªc LÃ-ÅÀÀ
mÈ ¬uU´6$¨¤`Ò% Þ©]U²r+¼r8«K.ݸßvçm¶ôí¶ÛÃv»¼oH Ïpîä àyäZÖµlà H>ð¤t=û÷ç¿}h Ïpîä ¸9ä ¶Ûo·íÛϽ·ÛgþOìºàÒ×cú{í¶ÞÇé8øÊÿ0pÒô < @`;y ò J§ðñü(O¸vpûîOúìö ýgÅ©ð<>²*ý z ü öÿÀ°ÈÐTèâ"U>ð"p!/°¬Ô/`>à?@X à0x Tî ´äÅ,¥YV&LOÂ>ÔJ§Ò0a{°ãÐ `> 1û@>Ú¢©þsì; ~Ð÷Ñ*%Sæ8ûà 'â û ©Ãòñòòäçg]}>ÓñÌTú*p ó>"pðø v¿p%S÷@|à= û*º øLÜ 0èüÜ%SñbØð¢U> ú (N }$G`©©ýÄJ§@Eû wùÀaóXûbø >HO° ô~ 'À ö:û°è ù@>@O¬ âAEÝ©õ t÷èýgdJ. {>@?"%S·¼%SUOî"U1ÀÜDª|@> & àØîô xDªxª*X* =*@ùÎ NÀz ú ø x ìîÀÀ@T?aÃæ ÿ%Sö¢U=¢ôè õ }@O >OØåQTô =QU_þ.äp¡ [ $
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,55 @@
+Machine (P#0 total=67108240KB Backend=Linux)
+ NUMANode L#0 (P#0 local=16776592KB total=16776592KB)
+ Socket L#0 (P#0 CPUModel="Dual-Core AMD Opteron(tm) Processor 8218")
+ L2Cache L#0 (size=1024KB linesize=64 ways=16)
+ L1Cache L#0 (size=64KB linesize=64 ways=2)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#1 (size=1024KB linesize=64 ways=16)
+ L1Cache L#1 (size=64KB linesize=64 ways=2)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
+ NUMANode L#1 (P#1 local=16777216KB total=16777216KB)
+ Socket L#1 (P#1 CPUModel="Dual-Core AMD Opteron(tm) Processor 8218")
+ L2Cache L#2 (size=1024KB linesize=64 ways=16)
+ L1Cache L#2 (size=64KB linesize=64 ways=2)
+ Core L#2 (P#0)
+ PU L#2 (P#1)
+ L2Cache L#3 (size=1024KB linesize=64 ways=16)
+ L1Cache L#3 (size=64KB linesize=64 ways=2)
+ Core L#3 (P#1)
+ PU L#3 (P#5)
+ NUMANode L#2 (P#2 local=16777216KB total=16777216KB)
+ Socket L#2 (P#2 CPUModel="Dual-Core AMD Opteron(tm) Processor 8218")
+ L2Cache L#4 (size=1024KB linesize=64 ways=16)
+ L1Cache L#4 (size=64KB linesize=64 ways=2)
+ Core L#4 (P#0)
+ PU L#4 (P#2)
+ L2Cache L#5 (size=1024KB linesize=64 ways=16)
+ L1Cache L#5 (size=64KB linesize=64 ways=2)
+ Core L#5 (P#1)
+ PU L#5 (P#6)
+ NUMANode L#3 (P#3 local=16777216KB total=16777216KB)
+ Socket L#3 (P#3 CPUModel="Dual-Core AMD Opteron(tm) Processor 8218")
+ L2Cache L#6 (size=1024KB linesize=64 ways=16)
+ L1Cache L#6 (size=64KB linesize=64 ways=2)
+ Core L#6 (P#0)
+ PU L#6 (P#3)
+ L2Cache L#7 (size=1024KB linesize=64 ways=16)
+ L1Cache L#7 (size=64KB linesize=64 ways=2)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 NUMANodes (type #2)
+ depth 2: 4 Sockets (type #3)
+ depth 3: 8 Caches (type #4)
+ depth 4: 8 Caches (type #4)
+ depth 5: 8 Cores (type #5)
+ depth 6: 8 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3
+ 0 1.000 2.000 2.000 2.000
+ 1 2.000 1.000 2.000 2.000
+ 2 2.000 2.000 1.000 2.000
+ 3 2.000 2.000 2.000 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8amd64-4n2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+BZh91AY&SY%)Ç DÿøVQïÿö=oÞÿïßð@B "ø`ÿ>¾ñöä½#MÙ¡x-{h %$¼
+4ÓA¡¡¡ hh
+4d ÂbB)·êª¦ú© @ @
+Sت ¦ õA)é"i&"dÓL Ð"HÐ @ *HA4 ÐB4§´§§z22mC&Qé=&LÔ`$#ôøÄþ_ÀP¤L[àô>¢ãBÅíù>?åþY&Ô|Ãh3TXE±l/¤E PGz M¶ÏXÞÆ1XµÊAÒm#§iHéËrõI¬I5*ε«<«Z³Ö¬âµ«8¤ÊfffUAzç|ï2Z÷½É³;ÖeKÚ¶#8BÖµ)jQJ)E(¥¢f&&&&&3UUN1b°flÉÀQBm
,81v0ÇFèÃc£ÓSZÞ hâ$,RL¤I¦ÕV¹BL&㥵òeJE3!$ÍÜ»»»»»I$Sj °(Z(¢*XM
+(¢-(Lò¨TDðUIb¢
+BFE
!¢¨¥U!E¨Pª%JAU";êXîXÌ÷]- ñ1¸È¡=\U
+ô
+BùH òûwÏÇ´«GH´e1F(ÅÆ-¨Á°{};ªªª®UUUUUUUga¥¥¥¥¥¥¥/g
bÐÆ¥:òèmYBªÐ4+l¡_¬©^Í3£ì¢ZQ-E¨¢Õ&i¹¸x`×_8À`P¹Ã_[Ö3ÝÝlö×NÐ:I¦yíkÞýoËv{iÃ!ÏÝQUK¤Ed"Qly
§¡I,)`ΤC³ÒV$R¤^½W߯%f9
'%G¡ÉÎ7zåàðÂIµ
+àLÌ$¢´ o®^øµ¯u^ö«ß¼`Pîàæ6¡õ ÀÀïcõÑÈh=*ªéóͪå¸Ä:.{µ£±Ë¾ ;bBvu6-Ùåx{ä¤s!Ì3øýBà ýcaÐ7|\pÇö
+Gæ2a¨ô ë|l,'`ûDHt°ñ ë;ª©ØnI$I$HôçÇukZÚÆëQ®Ñ×í©M±cÆ
++ZÉ$I$<À¥@e(¥ÔYe$Æ1ÌQX¸I$I$I&7¢«!Uç7jªª«`HÉ$I$I#À
+ÎË$IUUVeQe1{Ýc kZÖµkY`5@ª¢ª¤PUVµ÷LIo 90Þ-LgTQTfʪªP¦
+pÀ qÖpV+1&CVC8tù,öòÆ4cÅíkpÁßÙXX¡J¢M{3I$.*I$ðùrO´~E|â|ãüCð øD°Ì5
+(~Zü^¡Ú>¾£¼îO§êÜ>üU E°hDDÉðÏ áîWÁ;u[%Jª¥PÖ"B¯¾ðCùÄ (ZÁÝZgRD^Æ´i}ØtY¾ßYÁ[¸KQ¬Vlî¦6ÕmïN)#\ëJj=ãuD÷dzIab
(¶?ÐPè5!AB¸ñ4ã3ÒG2D2¾e÷Aí¨v;6ÙÌ=·¾VêîáÅjF©iîÅ^ªDÒÔ®;àÏ=ÄîÏ]N1Óª¬0^gkGXÎí¸çømùIv
+'h×ohÝT»¯íøIqR¢$)kKWUós§~8SÕF-RÒ¥×åjËZ¦Ê ÓYu¢sMÖð<*´¬¬ÈgÚ4ê,,P¥ÑA¡Ç°Ò7Ôª®®Ì4áÀ7k·nQ02ì Ò8Nü[·¦8Úéq/kÛ\|ôÒ
ÒÖªGã©T ZÕÓ4ë½ø¶rEU(KDeS*·}ueáõÄHtì¾é7xnÛ)¬XÎoiȳ¬ uLg¡Eûøñ)*2¹µHlðãl°U¤/k^;±XʦþY1Q|¯ºËÞ^^D!S'VñlL-,/Ç]¹-÷ÝY^Û5-ynYy
ã<oªXë
+ß´¦1ï¸b°áuU¢$8 Ï[ΣF°Î+~sÃßÊÕ[Y¿¥°pk6½VXbvá![B
+¥xc:î &ÖEâÑCÅ`Q$Ìra¥§´z:¬]uëÖ;7뵸Ð4"CºÒ$×»=*×¶K^ôßfLÎת[+È\çÈ,.8í[Ðmº"Bµ
iÔW@¸ÄÖS±ÂV1*
+#HÒ@)ÌJ9dH(^S}¸iÝ×ZÏ)j98a,¥«bg[k}U
+T¨4Ö·«±½È]m%bJ\§FùmÉÍ6ËÃð7¼JÍâçÃ%dµS:Å à(jË>
+üô¾kVìZõC
+ݾbÛvåhv[Af³RÙh²ª¬ÖIv¼öS»l×S5¶ka×ìÜNM8Ô¨g7G(6ËZ¦s£ÚKáQYJ=7ÉË«¸Ð]~
+bKÔ+¦sAµ`ã7(¼dÞaÅ5ÊÍ7u(¥ u{Æ*í0ç"Kg|6Æu2¬®8ÞÓ=ùn;³çÔÖûo½«-ÅL¤f8qú/n
+:î'@~ôx#µãnn}ùiäκ~°/l)ü¿-væ[Î\3?Òª³N³
ºÞ%É3eUZud²P[Ĺ0flª«N¬Bêx&ÍUiÕBÈ]AoäÁ²ª:²Y¨-â\36UU§VA!u¼Kfʪ´êÈ!d. ·r`ÌÙUVY @ÿEç9Ã
+¤à6TdÓ,´ô
+%¶TF5[«ø hø÷ëÄhºl«dFRðvjþ/+âPúÄ&à>û϶?hz
Éö°Þ¸ÌQóø,I÷D4°ª;'ÞU(X~âþeÈâq8
+K4<ÇòÌO¼?Q¸=Ñú¬OtMÃQ7n5¼JÂz¯¨²"CݲjT¹^Ië:ûaà0?)ïÅÅã`¡ÄX¡Ò"CQØ:ÆePñ¢ÑXDØL̰àëÐ\ÔO(!h'A¼Xn>ÏmQ¡üà
ÄdPÌv?Ìb `ga,N#Ü(6ÂÃ1q.¤öUK
Äl(N1à¨Ct ,=cÞ`AB¤¡82±Àd<ÇpPµ ¹:Å´lZ5&áÄJ%"Çï;ó¬ÀPÐ(ØN"
+Á!îë31`Ôl4¨`÷ĵÁ2ÔvÀ&è$-9U*UC!pÌL =#xõ1æ'!BX;¨nÜ\d(P\xõ2FѤD
`P°±àt%ÄÈqðÔKBÁ<`Ð4
+Ǽ#¬|Gä/!î \ÝÈ\6¡ÚuÌ`1cÄè<Äè `wwàPìÌ(r$ Þ3Àðâf3
+ÃÑ!LĸÈ\wB7ñÄ9aÖ(±°ØK¬âI
+Qä5pë@ÈNÊØ
+?y¼h(ê8 ¨(RDyà6\$öÈpqCñjIÈxGÄ ô ò$OHRI<NÈ@ÔGâ09Þ7 ïÀl'QCå§î9ãª=Á¨ñCAÔ: Càbáâ
+áqîÈi°Ñ硨ú´u BP¨Ñ0:C!KÔ\øî5à3þ%ÎÔ|ÂÃÀTD¢s%Áé®"B ÐP:
x!!DBx\XxXd3({Çh÷â$5A,#pK q2¢<ÇÄGu`è`á!!¼$8ÅÆô$(PHd\hnP¸ä<BãÐQ¨Ð¡$24fáÜ%
+à?øj#¸v#°LÆð¡â(oDàÜ=£þÆ!ÔJ(¬þ1ÀþQ yJTRIí#¸æ!PHs¡;Ec°JAÜ9
+Á(P¸õ
ï¬d¡,&ñ,'$9 CÐC¼u}´ ÿâîH§
+Ä¥8à
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,38 @@
+Machine (P#0 local=16468292KB total=16468292KB DMIProductName="PowerEdge 2950" DMIProductVersion= DMIBoardVendor="Dell Inc." DMIBoardName=0NR282 DMIBoardVersion=A00 DMIBoardAssetTag= DMIChassisVendor="Dell Inc." DMIChassisType=23 DMIChassisVersion= DMIChassisAssetTag= DMIBIOSVendor="Dell Inc." DMIBIOSVersion=2.3.1 DMIBIOSDate=04/29/2008 DMISysVendor="Dell Inc." Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(R) CPU E5345 @ 2.33GHz")
+ L2Cache L#0 (size=4096KB linesize=64 ways=16)
+ L1Cache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L1Cache L#1 (size=32KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
+ L2Cache L#1 (size=4096KB linesize=64 ways=16)
+ L1Cache L#2 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#2)
+ PU L#2 (P#2)
+ L1Cache L#3 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#3 (P#6)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(R) CPU E5345 @ 2.33GHz")
+ L2Cache L#2 (size=4096KB linesize=64 ways=16)
+ L1Cache L#4 (size=32KB linesize=64 ways=8)
+ Core L#4 (P#0)
+ PU L#4 (P#1)
+ L1Cache L#5 (size=32KB linesize=64 ways=8)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ L2Cache L#3 (size=4096KB linesize=64 ways=16)
+ L1Cache L#6 (size=32KB linesize=64 ways=8)
+ Core L#6 (P#2)
+ PU L#6 (P#3)
+ L1Cache L#7 (size=32KB linesize=64 ways=8)
+ Core L#7 (P#3)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 8 Caches (type #4)
+ depth 4: 8 Cores (type #5)
+ depth 5: 8 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s2ca2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,38 @@
+BZh91AY&SY+Xw? oæçÿô*zÎÿóïÿÀÿïßô @ !;ø`þûßwp :uC¬:ôÝð{Ý»ïô÷ª´®±k+,h¼à/{À @ hCDhSÊhdS=Hi£#i M È14j= ÿõT£@#A 4 iÒÒh 4Ð4 õÒÉ h$Ò$i¤j&¨ô CÔ A M&©z2 Ð Ð ¤ hh $@&FMFLÑêOÕM4ÁBoT4ÄÂhý$òö°°¼@ Nü,\üâb%Aaüßöüô1 ~ Ù *ÀgJÀýTÀúÍ÷¿rï\ÅÂ/¿ºØøéq+?H@?
+¬"¬"Ȳ,ÁWDËÑA!H
+u $}TJ
ó>oùÀÕØ~,>#®G¶wV7#¥«D+vDÝVҺ겴ËËÝÄ&ãoqinfÔÅ©53vîö,g,#y7e¶w»¹¬äVë@Æ4A½É&É$+IÞÍÔÜIjIjIjIDÔÔæe4` 7·d$LV-XL'IÒt'vI$Ý»ÝÝb³³1<aî!È12714æµpÖ®ÕÞµÍtÑ Bd!+B0RD Í£Õ*¬U¨+-´«KJVDIR¤#A,$DÈÆEXÂ"A¤bEdA BÏMWTc1¨i2ç3äÆLæ(h:LbÈö½9]6Meëà"ªëÆ1m¶Õ7!7&d b²dÒ(¢³2eQY)&B(¢*!
+ãÕë:Þq²@üÈX ¤0ÒR at E(#Q3EH² ±HB@`¢0@$RZ´I<ÀTþ¡RtCÌduQñÒ¨^Á8HVð cã g9·äù°Ë,l0§Yç^ù+Êeü¹õfõfófó§êù¼/ ú¡ë¯ùZÖµñëûYãjªª«ô;ó^ô÷¦Üªe2L¯OÒÜ4Á`°X,ÿHS¨§|ðeÎlye¹-:¹A!ÚÞ^H»
+ÏG$f!fj$.u{;E7ºgXÎ({ò LEI'vHàÖ8l.8ßl+
+¨PÓo{ßÞ0ñT0DZÏMtg¦ådÜl/ç&Û^ÕUU_môÛ³ß1ÍòIîHD¡X'ýI;]¨Ê
û÷$!FU)ÖÄñ²**ªÔAh'}$C#wÔ-Q$MÏF+Mlfê¨dÊq1QV
¢s{Åg¾$0²88ékUV¼Ûç ŬWVæÂDÚj¹þȯ §-/"¨:T`Ñ
+Æ1ûObÃ1æ0ñ1ÿq¸ÀX|Ãú£ò<ôé~! îõåÔéKø^þ7½Â·í"ÑL]í®ÍݶG³»ò@P¸G ê5#ïc(d?¬v!C¼pÂãaqä.;caC ÔXb<à<öÀf?(¹0ªHHy"=Çbïv}Éí 79!ò<¿=ZÛm¶Ûm¶×ð@É ÐÖ¾i/å
,+X
&v §% UUU:ªª{Þ÷¼ ÝÝÝÝÝÔI$I$=Pî *ìÚI%m¶Ûmµö{î$±H{¹9Ï<xñæzI 'd O|@óæùÚ¶Ûm¶Ûj^þ¾rLUUU]Ë|xñãÇn»v{[m¶Ûm¶Û_P5®ãè9ªª«À-m¶ÒÒÒÛmªªªXb&<ÒÇxñãÇyçyçÓM4Ò Í°8µÂªªªä¥ $1×]n¢k§Ûd$5o[¤Émé^
k¤d®
@+¤@y557¦ñ¦y}ù#êôVúFb$5¯Ã{óÊI6úÿ×Ý]ÚÖWǽoóc]èûÃÛºA`²ÕaJ
+¡-
+ÝzíÅ$üët8PG»àáQ«n~v©ZVMI,Ç·73&°)ÓÉ¢S ¹Á¨êbØ um±Å±-p9âìõn£têÚYfÛbâeÐ]P1 dV}A $KxifjJO·ss2$TÄ$QDÃ_6¶ë½ ¤¡¶ø G<ÅÅÞgV]oÂIÁB7Ík$ddHH>Ü0@ BOºóÈBB¨
+Þ8>Ýæ
×G»íÙ3YfXÞÜÚ( (V)¥p ¢íõ:Ä;:àáNò¬ªÈ/
+à{
+¶Y_!=Äw *¾uPðô9+Â1PUP*xqWØ\Ïxk^¸SøíjÃòZÕ+im÷ÙÞíaºB%4ÊÏDYÎ|üçG»CË8$FJ"Gªü(÷á·Zën¼¹ØWG]tíåÜ!;}G¼|Ï9ç;yìÚí)¼ç= £È²Î:Ĭ´Õj]«Ï¨Òdxòߦ3{KF×]xãéjPPÛ:Îyé:ßô÷YîÎ+o¼"%4[÷Ëüîûgµ:ç÷ìßN;Ùj³9ÇZ7sJip3]èóºÎð¼rÀç,%)!2³ü"r,¯
+y[n<¶Ã
+Âõ°úÇìy¼ÿSqè8H(*¨
+
+æÝyÇ["=%z&0ú'¤ëLjÚö½T0¯2@øYpÎüëçlÚ0Mï WRò©MÖ]zØp!ÖúÞ¶hгWXC6PË$×ÅïáiçÁÖ
+Û° Ìz`¬à mÍÆ_íáô zÏ^»sÞ·
+ at 5±ì £ L Ef.µbsWèêÐ"DÍ ÌlMÐ̡ѮØyÒöï×òå TXÙÓëô
mÅ1álôµîy'N0f¦ÖKp:uãܤ¢E«?ÌgÌÖª×ÛÚ°ßè÷>3¢Hsã<>·äoúz©Ñ
ëDID8 }yìooZ÷ç@|Æè^Þ _zÕ¾t<°lu˸kµikFU3æ¶ÃáKÉÂàl©¯Cà8mÖ7é¨
+®;f{¥ÜNõ×lÐ@<}u¼#6óçVäIêïzµËÉ ÚLõ,ÒZ"ÃàÆ«³QòACe¤k°Ã¶ÛÕéË;Õ®½e
+ð0g5ö}ÀPÍ«ZãRøYe¼jùuµÕ~ ¡«îôø9Ôo bw~l´7«ç
+# öÛæ TDQ0Ò 6îÞk9Ñá Br
+gÚï8zM:Î
ÅÂYjÆüíAâmQ,x:Íwf+1§,·éÆã4¦Y!M¸çá
+ªsŦO]9Õ£zx9Êi÷¾Y4¿LĽHîÆùÌö×9L¶²ô¦Ä'Axæ6;uC
+ù˾£Ö» ¦]G`Ðá¾E§ Ptål-eèï7ÄtíÁ¥B~þ7çÇã½.0bHv³ã®s /=YÓ2VáfÎuBÆ&fñÛÁ¶xgW8lʱ´ÏC]}ü Há©÷R7Ó,
+Ü1㺲Ï5ZÐp©4Ò2Úª¡H`WÍäêhܤ rÆf0]uÖ+¡*[¬gSvåãÍæûýáóOtÔã#>î¼·ä0IãÆa)Ý
ÙáB%+0¥°3>ùãX5;@Y×»¯¿]ßlæv B\ã4`i8ÁÈÔ8ëÑÁ Bt÷×kåÕÈ/gJH>^^~¼°á¾³rªß a®Õ÷rÇîUZKid¯S at F:v)¸8ÍÂúcWÁè¨$3þ¬§ìÀä¸_Ë?©r÷+ èÄE3ºÖÑyªãV0Iÿ½ÞýÞo®Ã¤%&qήa8¥îòï7$É,Ù3^uslIÅ/wy¼té&O-á;l^uslIÅ/wy¼té&IfÉbó«cbN){¼»Íã§I2rÞ8Åήa8¥îõwÇNdlÆ/:¹6$â»Ë¼Þ:t$³dÎ1yÕÌ1±'½Þ]æñÓ¤%÷]v ×®×^ŵ]}â1¦-G¶µõmrÀ5¬y0 1%
+Q3¶\í
ëÔÓ0-Aƹå ãÊ·F¶©.´`>#ì}<&Òím0Éö
+9=¿ !ñNçó>³ÍïYe<ÏW¾¢¾?¿óÿïý¹©U]a'÷]
½?ñgÛÀº.ʳ²9Oµr|\4ì1UO}ø/ª¨÷ÇÀ\}Ô,6ýÿ½l0àÖõW©e|%8ýïÙRgf߯3àíͶÕ_jÖÁSw½wÏÝùFzt2Ó#*¨}?£&n×ÿàEUÄòýÑù9ázýMF¢PÜXL7v¾¸gý¢¸Â`;°Æ³¶{ °ÌP bÐ(eíkcKU«Ù!s²Dß?pÕcþ,Äø?Lð¦iÐ<ÇÈnõ{ÆEt#íõ@Õ(Nµ
+/p¸¼Ý¢÷|ùÏÔP»KËá;çg¼uè¼P5f?먡=³è'½ÿ6£>)dê² PXGØVCcf<ÉáôÒ¨*qAtMFá
+1PÒh)ù@ðÎ9¢Hi
ÉiÈÆÜq
Ű¡d3k©RDRARARARRHªII"©$\%
hèÕî7>ób¦37i 5CaRGÉð¡ÝPJp
+eËQØb0$¸© MIJf%ø'øõÈñÂl~Q>q
+6²`§¦6·Ã °ÇiÕöè.:"Âb>CØy
+Cb`+E, P`4P`òáRʦg!|á¨1°Üa
+ð ~gAþª`'úy¸,ͦa0¤à'ACaCÝ%úÒ>è;O16br¬êýAùÆ#ÃÄiôÄéè%¬'Q¬Îáß £cl¨à?ñÄe<Õ&UCu"o>÷'¡â9üDî&ÂÿL=ÃðHËtgFâ
¸Â¼
8ÉDâÆCH1%ÄDï$ú;`%C5Ä~A6>Ý2w#A=¤,7î©TªRQTR\\s-ià8qsçæ;«B&â#aA2µsàèO$j'qAã4;1LcÌL4[Ùwcq°66cBk~¿fPÑ;»û R¡Ì °°ê,.âµ"~7ÐitDëìs¡K¥ë¥"q1mB'1½zÐEóæf(TÔ`:O<þ¼I¸tC¨°à%
$"~#£³¬sÄÅT%X:#/AàǼl>ÿdMÝFZû.ÜmØ<ÆõcQ¨$"QtG{g«â¡,:7%ü¸D¤
+¿úÂñQqãq¸Æ¡Ä[¾Csñ·Ã75£ááÚ¸Ân8xÏtXö*-,ä;x~²%`Àï ¿B&ÃQ' BLÐï$l;ǰÚÇÀIî;
xi´à¸ä¡ãÔ?3A ã¸Õåë íøGx»v«K!ê*Ô%ý(J®,9Î °úp&bhØy¾¡cÈj
+üÅBP E
+I'øtMì.=!Ü,.ù
LEBUb5DÀx B}!êæÄ'ßu ¸ßÐc#ó¶ÊvÊCruÆDDâ'$`3ÐÖâ{ê3äqp¡¸°õù
+·¤%úÒ*&'áöÂcÆöµ Ï`<ÜG1ACçqñNôL¥°qÁ`õî0´0¸}c¼%!{º*$°Àc°õZ$Lvâ'!ýo6("l) N1ZËPÙÇAý$NÍ,§E
d®RðHfvÌ0I¬G® Ð3´'Üy Dà' î
+DáqÇÈsè3
cAnÌr]ÈLúCB:C/¹ù¦r4©U Å··Üü.oðHDý ÿòB&ÚÝäðÜál2Àº öAäàÕÍuÝWl;t%qùä6$P¡óbáÞ>BK³- Ý&âT;¤<ÃÁ8¢ÿrE8P+Xw?
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,34 @@
+Machine (P#0 local=16468292KB total=16468292KB DMIProductName="PowerEdge 2950" DMIProductVersion= DMIBoardVendor="Dell Inc." DMIBoardName=0NR282 DMIBoardVersion=A00 DMIBoardAssetTag= DMIChassisVendor="Dell Inc." DMIChassisType=23 DMIChassisVersion= DMIChassisAssetTag= DMIBIOSVendor="Dell Inc." DMIBIOSVersion=2.3.1 DMIBIOSDate=04/29/2008 DMISysVendor="Dell Inc." Backend=Linux)
+ Socket L#0 (P#0 CPUModel="Intel(R) Xeon(R) CPU E5345 @ 2.33GHz")
+ L1Cache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L2Cache L#0 (size=4096KB linesize=64 ways=16)
+ Core L#1 (P#2)
+ PU L#1 (P#2)
+ L1Cache L#1 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#3)
+ PU L#2 (P#6)
+ L1Cache L#2 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#1)
+ PU L#3 (P#4)
+ Socket L#1 (P#1 CPUModel="Intel(R) Xeon(R) CPU E5345 @ 2.33GHz")
+ L2Cache L#1 (size=4096KB linesize=64 ways=16)
+ Core L#4 (P#0)
+ PU L#4 (P#1)
+ Core L#5 (P#1)
+ PU L#5 (P#5)
+ L2Cache L#2 (size=4096KB linesize=64 ways=16)
+ L1Cache L#3 (size=32KB linesize=64 ways=8)
+ Core L#6 (P#2)
+ PU L#6 (P#3)
+ L1Cache L#4 (size=32KB linesize=64 ways=8)
+ Core L#7 (P#3)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Sockets (type #3)
+ depth 2: 3 Caches (type #4)
+ depth 3: 5 Caches (type #4)
+ depth 4: 8 Cores (type #5)
+ depth 5: 8 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-2s4c-heterogeneous.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,53 @@
+BZh91AY&SYÅP ];ÿçÿ÷Ör÷ÿÿöïßÀÿïßô @ !;ø`7``ìë´9
+|çww¶«uãÇM·c®æ®Ø
+u×U»÷ xÒ Ðh6Èj3H @Ð=A©²i¨¢(OSÔ24£A Â4d
+2
+õÿÕU¡ h h j at HL¤Í"d
+=@ JSóU=ªmGê§h
+
+¡¡ ?T òA£F4
+"`44SM!6¦G¤Ð 2 4 b@3SG¤þàûÁý÷Qý4*JO¶>è`Üü¹¤}ÀÜåQD}A¨ÚÀX£èl×ÕzÒ zýW×Ö=¢aXyBûcÀKmA)þHB|H**¤X,E"ÁdP$<éÙ¢H@R*#
+ >mÎnq5©çê:úµbRPàµ
+xm]xmb17nÁ,¤ðÊK&]Ba·XÌTìw!()xÃ"ÀãblÝ˼»%$¹PÂIá
+Æí`¶Ã
UËÄÞf®ÒeeÕeUºuY.Ò¥eLx
+[
d±{o1á½ÕC1f®ÅêÉ¬â¬Æ+8Ʊ°h- BAR :G4R¬U¤
+ʪ¢¢®²Õ%"$PE"¢H²"H"$"Ȳ"H"$BÜ4¨QÒÉ÷-2\¤¡ kT¶ë¦ ¤Õ÷`
X4¨âSÚ3fKÉ@X¡Ì*±Uc/%\QV*$*aÝnøÍíyhÜñµY$"¶¬I!HFKDT@PDU I#H#"!@T¥BK;¸Tü¤æ<Ü=Qãeªf.Õé«d%ïÃ-oA¸zíØØ`.=@À5oíçÎ÷¦ý%7a7I¤áRqõz¤9FP×;y3äiªªi®½¾¼Y×"ª¯¡ÓXBï³jÓèøau`°X,kùBvE ÁìGU
+@³*²-'n
R¨Z#u´g%_[(¦sEñjCÂÔá/¤¤áRG ü#¢ãö°ª
û;ZIw î *Þ9¾ls{7ÐÜØj/å&ºÞÕUU^Ám³×rÛ!ÉÌ èBOï$ëvtyyni
+zßxû<+Ëk·<)I$)%ª ÛIãHƵTeÅxå´Qî¾®¥^69Ö+]Uղýváf¬½°/ºRÄ6îÔaeqY!åB5HW±Ö_dWlI0ñÎò*H¶ÙoØcº)¤õLGxîó¸? Ðoâpûãïàøc°XoCÏ@=µîRðR@Úv¬Ft&î®í*pôzÆñÐoAÞ>ä1
+áE°PíÆC¨¸Ô\xÁÀXPÜGÞ;©Ä`2l00-#_$'ì8ô:{²ìIôÌïB#
+ÃtÊG ÄqmªÖµkDCæ4';1»jûv÷wvr6Ù¢ïJ gZS^ wwwwym¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶æa¢I$kzt°ÃUkZÖµ]è9ÀDH9å2ËóÏ$\ÀPhF3ÁáâBWNÝBjKUUÉ5Uׯ^½xßqMUUUUSØc ö
+
+YÒª®UT44ÕU5Jª´N¹I!ÇwwwwvµkZ×p½ï{Þ÷$I$I$I$I$IkZÖµf/
+YUVäô`ïh¼Òf|,ÅYsɽ°6µ@ÞÐ,,S0ªeÎÏ'fÛ%M%LË®eR ØÑ`HI æ2×T¿¡æt4z\ë*múø×h÷£ÕØ%eªÑJETФrÎW´¹5ÁTÁ0ªnEA20vmc_çYgPíÉ)%$TM'ÅÅÏìùÔD¸@;0ÎÁ×ëˬºÞ1Ì-,
¥k²Y!k,/×s½@!¬¶Þ-£ÀÌTl/·¸_äïÆx{^WËë[];RÔ-KãàpíÒÇ@¤D@/ÂB1}P·Á4|?N|82e6UC ãZÅÊ`Iï
+$Æ&ïúÈÝBPWÅ`ÅcFZåX½
+PíòÂj¹¤¹ªç:±ÛZÖÐ0ar;æåîóW¹½MÁqh
+¡qÝ!°4(!ÓíJ\&r¸Atô(ºlÙ»¬¦¼}ÆãÌHàÀÆ(Ä6!°C@ÄMggÚé+±Äù¹CwàËÙ¹!*½ÔÚ!Yñ2
+Ö·`ÑmEúåÄ Ep+Q7|ãY5UO>ýÃ|BmÄüùb¯ÀlÁ5ay;§JÙ¨W=bÙ´åߥÐÙFJ¥iL®:õÊê_ ±$«[ÜùCÀ2Pð%õ^ëØúôÙéâìRt4W¬_TÝI!çÉ jöy÷Àê=ìÞóÎùÍÎNcDLP`º o& ²U P¢k´âÊ»=¼ºÙÏìîV8iä¶¾|[³kÒS^m³Yh®8\³vÚ)¨19ñø8´ÉáÖ¾mkR
+¨
+sG¬óÀ8ç¾;um¾u²jÔ k'N»2òÍQ IU at h ±l=næÞó¨nÔPjK½@H1ÅÝË×Vm*ãmû
+À-ÃÓ@µjvÅï
+tÅîZ°ÕcøÛ@õª«ØØnàiUkëãXmÓó5zLÒFþ\½|F
+ãPµAú»7(½gÏâ«Û8Í3Ì«ªr}!"ØrF¿TmS
+ÜqìÇû×%g[ìu|:
N\õ+;¼Kk¯ CV¾èêßhvf÷Øö(ÄNÊ&f²· D#Xo+/y$c!Ñ/бdJͤ@ìHo{øøäÙ;µf¬YÌ45x
+ku»NxN: 3¼®ûsÜÕCÑðñ¯~äãnbê_à/ t-]±îðسNUÇw8qX`fZËUOHfäbA/³i~1SgZ¤Áת5}Û:³RHô6I]8.í,îÂã[©MUí˳î3ÞNö4Îܶj+!w-Ûû7jl2<'M\8çyø
]Ñim¾¶a70z±~XV)j®WÔ¿\^ëUbîmJïð=.¬
{
+MÝi¸½ -ÐêÌÁf(³fêæfñkITê³x+ Áïè[¸®Zæp[½Ìv
+¥/j©¢Öµ²åÍü@xdðMë¡¶köï¿,xl8Á\wÙkÜh3ËFìó´Ê Á*¢¢g7¾lr«kqϪô!,kÞ-Cº3³Z©óB,×mguWé½!~yÔ8 !L×Þ¸ÍäèdVxSQ!U+£±2UÏMpc5ª,1Ók±bHYCndVh BÕ]<ëÕ÷'$5m絸qoîAäëªÌÃæÒ7p©D~±$^BLøa$¹s7Z-Ê¡)lï;±ÆÐSrøùÝ
+ùë£'¹£
+5« IÝZwÀT
+·jw¥®¶ó"dÓ)«¡FèjÅàVËlÁqÐË·²?VÏq~ßäÍ¿Þ;ì¨[rÕDåWü´/¾ïºÌBóÿ µÞ7UHC½÷×o"ÒÑ*ª³$»yU\´ê¥¡ow±!Ã'.ÜâÒÑ*ª]Vq{9u
ç¶n«7|ã»yUTªê³[Ýã¬HfpåÉË·8´´Jªå§U-{¼uι9vçUTºôK®ò;ïØßsÝ÷{¾öü5t<M{îêEe÷y±dqMW¿ÒUëÞU`ÔØé|¤î.çô¾©ñ³ç8?ÛPn|eYn ÆAò'w8º´>c¢QÅ6ÅâF-à7Pj~ÖRAh/È M9 Eße§Ë¾`]º¿hq|¬w¶ßÔa
+UUOp~!òßUQí
+cÖ.=ÔóEð{׸Ývwª½K+×,¿ñ/¯UIÎÓÖïâÓFûDƯ9Dã{ýeº
i[jmâ¥a¼Zÿ,®~Èÿ~Bø^Ø>´ h4
+VßL2ÿaAp¸ÚfÖVËPÀXd(P³
+¼ílijµ|ô#Pí`Ñ]h=oîGIÌ<GpÜ6y½C!
Ñ\Èü~sÈPæ%J
¸¼Ùb÷½
Aî6Ã ¡v)!,v°9Yí×
+ú2tÐ:ÁêË{L¶ÐbÚHGÚ ÕP#Ü5¸joÈäNù8CÐl$Ã,
?a$c£(ä<¹-8Âq
+âÂáBâÂXPÝPõâ&!T¨J¡*ET¨J¤T.$ÍÍ£ÐÚT{ÍJRæÈØ9pI"¢¤bÿõC² SxSwQÀâ¤ä
+GÚ÷'üôÜMhËQ5>Põ EE'¹¤)åëÜë"Z¿bã ¸à,`õCÀjLcH¥E5
+õ,ªdoqÊ ÃBÁAAðùÆìS ñOzÌä)71CaCÏ%D>ºHG»ÇYâ¤Á$#±ùÃæÒB7F[ñ§¿ZÁÐi2¸våtB?2æ¸1¼|BeÂIÄn*uP£szHEü÷¼dG¶9ûa Ô_âÏDø|nÞÇ ¿°¡Cç0N`XIá$
+aâNvî¬ :àÖÍpq!
+Ú%tnðâÄPI$BÁS`齺J¥%E%ÅÇ9"ÖéÁ=Ý
Ïwì9|B6 Eu«Û åBx£@ì*'Y÷Y
+cAp-軩°Ô(jj
+!'ÃÕ$´NÎÞ¡R¡È °°è,.âÔõ1IÍ!jº^¹Ò!kbHG!µy1FB
MñËÞzÄ1¸qô
+IøÐb´qtÿ§!È1UX9£wîcÚ5TLÅÝí=K¶õáqpú«! Ð5I¨<hÖ"Ï7-ôÒÃar_¹l(ÖÉ!Atï¸ØcPà-½Û!±õ[ðâ64cAÄÃzðîë\ ØoïcÔT=°´³ëÝò"QÐmdôFO ð`=×l
+GhÞC1õ=Áaa éBÙë7®C¿°>ó1É$#AÇxÕZW¯f.Ù¢ÒãÀyµø`¡¢âáÔNPÌMÂÃäb=
+gQàF>ÕBÇÐ7
+¼EBP !BFõ÷d¬.<Ø,.÷LEAUÐgÜ'¾nLAô£{¸ÛÈc#æ-l(;ëºBÉ! ¥ä"8afipõª2âqp¡°°µ¸{Å
ÛË
E´HEÒD?E$"¢iRqïì8ñlîÞÖ çÀ0.# ¡ô;Æs±$#t°X8ÁÁæ(5ØaC0Òz®9`1BX7ÝÍQ`XyCHF:ðIâ1âÅE$o#;Yj¸pÜ>HGVc5SÂ̢Ѣ^#¹ HFáâ+4ÇßDà°4d;ÇÎ91â(rsCrÀ.âsÌo7Fïó,¤f)Rª
+{ô¸ìÞ$#èåI××´Û è-ì¡!QPx7´r]wEÚ¼åpxpâ&¢(Pú» ßÚ=K²D´l¢)$CÄ;¡'Å$OÿrE8PÅP
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,31 @@
+Machine (P#0 local=1016272KB total=1016272KB Backend=Linux)
+ Socket L#0 (P#1 CPUModel="Genuine Intel(R) CPU @ 0000 @ 2.93GHz")
+ L3Cache L#0 (size=8192KB linesize=64 ways=16)
+ L2Cache L#0 (size=256KB linesize=64 ways=8)
+ L1Cache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#4)
+ L2Cache L#1 (size=256KB linesize=64 ways=8)
+ L1Cache L#1 (size=32KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#2 (P#1)
+ PU L#3 (P#5)
+ L2Cache L#2 (size=256KB linesize=64 ways=8)
+ L1Cache L#2 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#2)
+ PU L#4 (P#2)
+ PU L#5 (P#6)
+ L2Cache L#3 (size=256KB linesize=64 ways=8)
+ L1Cache L#3 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#6 (P#3)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 1 Socket (type #3)
+ depth 2: 1 Cache (type #4)
+ depth 3: 4 Caches (type #4)
+ depth 4: 4 Caches (type #4)
+ depth 5: 4 Cores (type #5)
+ depth 6: 8 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8em64t-4c2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,163 @@
+BZh91AY&SYLE± Û4¯ÿöþ_ÿÿ÷ïÿþÿÿÿô
+ ÿø`bþûéø ê
W¯ Ç É»På/` ÛJ6ÞÙDN^¶Áôøûkï¼àÎu\Mö_E|;:4tnî·ºÍl:ÝÁë¸v.×sÑç·§TmÞìãÝïpk{ÜõÞ^ÜN÷s½mÇ=íïöï-Þî÷nõ§x
+U[×»ºsîÛ£l±È
+·9ljèJ¡GA«³@jE4W@»s5¶Tèt
+4NØ( £±Ðh ´)ÒîàZ[ 6ÀÔ ! &ÈÐiMIêªzy õ?SQê
+=@õ6¦Ô E5SÞ£ÿÕJ2(õ jx"
+SÔPõ¤ ò I!2jy&§µ4(ü< iê¨z õê @hMDÊi°DÉ´)íM=!¦ ÉôSjhõ0¢ hhiêI ÓMÔðM?§¦©ú5CõG©M2êÊhõ 4Óð'Æ L§ËDDò'å %>â|@Ò#ûEâP?çiIR þÈOíáXu7(õh°Q
R©P?¬þÀa`Â[í¨ i@×mq¶¢mÉa÷}ÿèú>wégòF´Ì ׯL~
+?QN å
UìsDDeA0êDt©$àø¼ö9ëê»Úñ}ñ¼\½»Ü
«3bÞ,'vnd²îË^òBæ0¹¥Ìhy 1E£7VµGXÖ5än5Vá+0ëÚÜ2mn5Va×µ¹0ndÌÛ¶
«ÌX4A¢iÍÇ$ׯ1¼[æQm¶Ô.äÍÖ®ªÆnLÇ2ܵB¶,¹·uEPÚÝÝǹôæ,Ñnn[BÕFîºò-ÜqKmz^»veÌXSw«½,ë[nÖ+1àÔ´$´$³ZZ[©-!î5\jª75h¦5Ùwh·mÚ4e8±G¶Ü˹h»nÚÞ<Ý¢í¶ÑrÝ´]·mmܶI&ÓnÙ¶%£FîÇLau\Idëɵõ×]N
+¡¶ÓnÍÒFfÝáw6eÓqâÜ'1n=9¤æ.±î¾ôNcÌ8ºðñÇxx¼ðñÎÎ5° H¾°ª"AaT²ÙLbµ¤Ë8.êa¥À踬,²ÂÂ]"ÀÅ!T
P,
+Kib1Ë-lQË´¬Ée-)d*e-¤ÄTÉBÙ%EÁIX*#¢¬QimQ0ÀÄX£¶
+,
RdÌÃJXTQEj(+JYe,¡s&LEBË
+°¥VÕÈTÊ[dÅS TËQ´©ªÙ
+kP1fK)e´¥RÒbÀ¹iP1fR%\m²b©
+å¥@ÅJZSéFoGÎÁäzJf]Cz;j&ÆdáðSJ[MͤïÊXDêÚ^TS\L£îÚ,àâhŵ5Ûà ààPác âef (©Æa'ÔÈN!Ê)QËi¹±¨å'VÙLbnfLs¢Å´YÄUMÕäd,8
`D§¦gsxáζ\ѱz¼º¼½rk
+ri
yqÁÅ&K¬ÉuÊÉuÌiÉMdî$mBFHE 'ÊBrÊEZê¼DñK]at@# ¤*°)(`)-FXl±d!A$A"ÁDa$D£USÄÿ¨R=Èxß3ÓLòªûÀMeUYÐ
+Ò-â=ØC!æ(8_õÿ<8CñÏXûe|£ù¥J:u(êQx OâïC(´XWYyWñ¼ÃV6S¬èøÆqs¡Ñ{æk¬<yåÃÊÓ¤,0ÊXqßÃÏæ?;çÁÌ¢ÇC´¤/ñ¼½í´6ßd¶Ûy$²Hü¤=ªí¥5Þ±å¥5Þ±å¥4©±!@í1Wm)ÃV<´¦·
+XòÒTÅX 7½ÙM¼Êmà¶So¢So¢So¢So¢S}dè!bÊ8RVRV0BjÐFHUIA 0M!ª¾X HÂ,ë 1¤a
+,î"¨8s!÷$á°ETÏù|ûn¾.á·J6dÍ#ÅGêgR&rÛe9Îwèüȧ4Uò
Lk¹þ wÿo0ìP?}ý¤Q,{øo£ù´Ó7W+È©Þô-z¯
+Ãèð¦,|SÙ¼c²ÐHé»6ÓLð·ÓqGd¾uÑöê¼P#Eðíî
¹l Íh3Af0 )Z:V¸KJVÌ:ÎåAU QCÝÉ;;õªõ.Ç3÷ã4[÷L"X½l¨RØè9aÚ±ßaíu9¯âÁ¸Ù$2?¡@ò}¿É¦^zxÄÉRÀ±t½ü¬ÑÉYè{{ÂuvuÝ|&RV½è¶Þü&øC/gZØ®½-ãÍeðD¸¨ìBÕ,³d*t ð5£sCùó2°»øº½Ñ²ï\7Ýr¶Ùë»_=@ÂYÚìÕUUUUUUjýjÇnu¶BßqÆ»&Ã<olæf«npZ¶2ÑU#d³t¹µU
+;'TÏ=9!QEæcP£-eKŵ8Âæõ1ì=SF©ÑÐz_àÆ3YéO{3ÕìÏGM'ØåUUUUUVóUUUUUU~À×ȧéÀþÛÖå以Uzx¬ÖXL¾-h
+rx *®N}xê9Ö¿ïä÷äøäþX,výëe6ã=^£ët±* -$`^DT;O(wþ(¨gªS»OÇ X
/à
+xà?¸ô¤Æé3"ü=À/Ö¯¿s¼ø¬Dfº¹9¹¹¹É¤¨)xãÝWué?/!Î$<1Îzú#ûü» -¢(
>\ùOþUUVæ6ý;çÕÎtdz-ÛP9mÄvØ`½UUUUUUUUUWòäß÷òü>O»±÷O/¯<&O½>Cì}U³ç¼¥)ÖNJʱFµ\JÚ2¬^1í0ää_ Ôcíôûvôzg®R©HB¥#Z]dç¯[ë
¸a
~Î`:,þJ5f2m>áaPÜ£qq9ÿ1Va at Hü×mn·oiª'³Þª§;+u9UM@)ÃWGFÍ|µPÒïø]pQ8!÷ríi×ük
++"M¥DÀòHM" WAP½Ûí÷¢#CL]âX8pGóàyÇé üg¾B þy<ר6EhùL®
+Z6EhÙ£IWÈ"´lѦ¨#`DE,]J´²U¦0F$¾°ÓaPl(~ DBÎx*ªªªªªþ+ª¾wâü>ó:²Îß²Cî}lß|z»Þz @DZ\
+Ù8¡Þ
+
+ßO7[çot÷½È#å0eƪ©Fse)Z5@Äh']umìvÜÈìü
+¬ú×äõ;â{MÿÛ=+þ±µòTô.ô®Ñõ7:~Ö!Ú¼®@Ü@³µ0é§0/;88ÃÀõ0ïO¡úüc½B ^mTÅÝ;úÎNêP½x* BÎHNDÊú¶z»Ä/";06cè jâªpMµ~]çÒU'4 ßG¥
+EÜB"G(fÜË*\¢ÞÓÓpí·vxêà#£ÖuÔ¾À·Í=Büyý>ºkß¬ä ·Ö ¤%Ù!`sLº(BË'Ù¿ZèQnj¨µª ÷ùèôùïsï©2ËCjðyDNþlÄyaÌyÖòÙäNr¯UªkIKR#ÅAu,[Ïsø¾_.ûýíô®ÔðW(/bïdFåðÜܧ/U9®ö9ëNc«©ÕΫ_m»»Dîg)j'i³a®1¸·* "ª½JÖ¥ãDò'
+ ª
·;ᳯ&¶;ÅQLa»;¦4³¾ 4,µPèr¡ç!?dsn?]ªyìïü¤/`ÑD×ÃéúD{¤¿s$,pÞ{ÕkÐYýhËê8è½=æ²Ò¦#VÏÕÇÇÄtcöUUUUUUh-ÇVúIðý»z|më¸ýBªµ×ót;0ìÔQ7¢1NÀÅ
+Î5¬Î]ëá
Õä§ðYׯézÇ9èý»úÝ{òíò¿©
+¤}ÙlºÓö,Âpà?¯;ßòLÏ@áÖ{Éc¤QÖ÷+öÄ?E?æ×Ç¥ºé,ÛçÜIµ~R¼uñvóPOºC ô§^ëú¸I:Fþ#S/ºª¼^#ff¿BóOÒ=¾^òÆUJ 9 at K;d#¾<PÊÅgϸÉÏ'¨xçþWî廫¼lJ%_w¥³ªHaõ¸ä^Ú.)ÝOÝwW«Úª{ðtð¸ï:5AÐCí0ECé¯v´rZlåçx8£¡:áÛ²Äër=NŹùÃp|Õ'7Q˦ª>)?ÂÇ4û]ÅÑà TÎd&âö=CP,5;1Aù»×5ï^Uô:züÕ $IªªûKYÌÌÊÎfsϸ6¢jXýÿ[µRfßx`ú¹_ÆwèÉqʼ7âO¾÷y
¿Í®Ü 1»Çur¬}@C XÏô@¦òÐ/Öû.Á÷Ûñ£Âr꿯¢RYú¹ñÐ#õZ</ Û¢¸!ÊÞWó|=ÛyI¯Ôpüé<GÐ2c½éVyFû×sçvÝ61Á´y¤S·S9 ìñð#ht¾«s tønëÝMÇàkMÓw/¬»+Ý}üv'çä;0¨f+jýCBÝAçEQù¢yn_³Õ¯¯wÀôwâTX±TX±bÄb¿5ï« ;ÐJpËݺgÐðK¹mÜÓ1¹¼aCSõ
+QÑ5<Ëß¹ü=cÁ7$ }ÙñgìÑw¹?Ót5ü àjÐ(Ñ@±!´3vz¹À7XäQ,Áø)â£sÔ7ÙôtuüÃAæ=P»ª¹tqÚøâ»8¼y|ÿ?¿ÛæÛ»Ûã«,²Ë+ZÖµ¾û¯¾ûï¾ûï÷ßmÍuϺë¥u×]u×jîëîäC[ù~ô ô|åOÒ8p8Ô*mnMûøKY4Øfd©£³mÄÁÔJðnaÅî~îÓn°µËJÑÖ§^_WÇãòí {ÈBÓú¸æ6^ûÞ÷¿çs'àhPÓ9pðæàè ëà6¨vy
+e#
+ïâs
+¶Ûm¶Ém¶ÛmÛm¶Û÷Ð wÒ7ëó=_ñhÈnbÓæãfÑÜÐ:îÕD¹x÷عqzfwÀÏZäxâ9ýÂr|Jäs& vòé¯ÔëtÃUÓDûÀñÛÀõ2-Äwõw<6þL+Ö;ÊèSót1L²ò¾BºÚ¬Q?
· í`: úÐÁ´Opð18 wçæì³¥¾þB&Ð>
+G ßV¯t#3Î\3üÿ cÅcéî®úùOÌèÛLÀÀACæË¢;ru}hªC½ßù¼6 òÉõáÖ.5`À_çVîçØËÄj>ùùw=ÿGòé:ýr~ÐãyXzFWªr"Ûù¹¢)Ñ=½æèã¤ì.ÜIYÙÉãvOØf´í3ØpúýÐLlb#˽Ä,UØÚ¾¾©ÀÊ'±Íêãî²wvö@úà{sSóõE¶ÒÕ¶ÚU¶ÒÚÌÌÌGWê>o 4õj1øðãìú 'w¼DÎ: YUUUU îø¾O5$RÒÂÎõOºí"¢$r)'<«
+ÕKW åìCIðDìëõ©Åh Èïh*ãn|M¿}ض{¨â+J2.×Ty
+ ð[º×Ãm}á÷Ñý¿¯ßâÓÙÓ±ÇÑì,kÌzÿ4ÿ
+$É 7ðTPal±n~/¿§H-dl<¾Ì!oä,ÝíjÐ{º(âûü{úúïWÆøt?éóá ;©Ël¿~B±gú¾äDBdÁÄ7oéô練@AéÄ)$eü§øt¦j%víÛ±ÅVR£)¢'Îr#Ôþ5U¿ªïÃþáRePè°u÷aÏ7êþK(÷0ªòð?gÛ|¸>Þå6îÏ8Ö
+åuOOãÞÁ áú§Ô[sÓWðjÙ!
Þ®v×"zô>Õ!Æ¿ckT¦[á&Ha´ìæ'õݳÑg9bW߬÷½£)K8¼}ê¾ÊÖµ¾r¾ÐUsÒ1£3¬²Ë.ºÛ/U(Ð1h«(9ѶVÛm¶Ù,²Ë,²Ë,¥ZµiJYdÀ½ïÇì²¶¸/ß¿råëׯ]»víü×]u×]uÖÁeû,·eYe,²Éà¿EºW]u×]e«j×Þß}÷ß}÷Ý}kZÖµkU¾Ò뮺뮺뺵kZÖµ¥)JR¥+h$УíºáÎdÈ@ª/©
+Ø
+$í.tâN«<t3î®»¤©<3»O«ôT/BÀæÞú&=RHá#ÀPßUëÈપªèØ\~ôE5òÑÖÇOú¿*àôQAEVlÕsÎVm"Ùi¢Ùi6Ûm&Ëm¶Ò-·ð ?2
+1»óÂgo
+«§ÀB at aâ{ïËiJh"¢M,U}Q:îÒË+¬ yùá×OVõkå¹kîzúD2î!*¤"©ªJ¨à'pÍÝI$I$I$I$I$I$I$I$I$ç9Îsç9Îsç9Î`)U)JR Ø- ·0 .\¸ <óÏ<óîà[6
+JURáÜHïV #Â1ZÕ)UJR÷W-¹©®WÌÌѯÚív¦¹mÅ30õHnͪ¨»Ç 6ý½½½»÷|»=¥Ûm¶l´iÛ÷qÀÚªªªð¦ô3í
+ËïOivÛm¤[-&ÚE¶Û-$m"3¶Ü©ªªª¸êð $ðª*ª""¬]UEQ8paBR¥*¥DR"-JVR »r¥)JR¥)\DbªQ@ÃLE¶ÛKVÛKnèöI ØO]δcR½8íËÃõ
Î0ÉDFà:6ÆIÃ,¨7`§Mm3X)Â"u ÄXD¬ ¢I!uøÞºUUU_ppãµv`6Ûm¶Ûm¶ÛoÏôª¯á_Íã§£ [û^{¬RúÖ¼tÆP(¤ÎÌ:¶¹_º ét>hslÛt¥@CñQ bÃñɶ½7ÒBHDìH3VuµDîª(!¨,w'}¦Pí*ÞØ&µzªy0Éys3H
+ñãÐÀpÉÃt§ &·7kx(µUX[éöãò7³«5w®M߸kìoQ>fÞ9M þ±É%ö="Èôuå'8ªB±/]öê*¢J¨øÒ0ÅWüò~|Ç´W·?*´#´¤,)(K,*K
+£QHNHÝMô<inåc>uEiÐ"%x_n+z²3ßéQ÷Ô¡$ QTþ0C0CÐ6Ô
+{lCÁ×|§ldè=!>
+½$¹ð~T¶À R´BhM ôädÙ%"¶Öºi¶Ù×MÇ?~
ÌLç»ZÖ""""3;²N
+pê(eÔ÷Úü'ÚpÈ²Ë õС@íÿ:~ø?
+F
+ÈÆ§é²ÊRÖL
b ¦¨àûÇÈÐ[98ÀÃÔÉrrC z»ý|wc`ØØ66v6v_Öd
+Ú4ÁTjÕ¨5jµ+P¯"Ù:CU¨°üÉ`¦3·&FF,déÈe&ÂY% 4Y&I1ºÃðý¸ûl>IüY$$â"xìÌÞÝõþO|ÉÇm¢?À³bͰ6É~î§ù½N CÒzP(I!÷PUYUH
+ªþ½Ï?}}¹³È³³d=@UÝéò°
,*ÎöÀ¸?ÂXS\¨¼Ïöp9YŵUm5Ú2ΦI²£q¨Va $7\ì¼
+ÕT²Nuèå|ãÔ¾n¾3r¹Þ¾¥×±Se$ÌΨêܨNNuÉÁ¡Ëé(p#Ô'×ãÐ@VuÍüI;a"|×°ÞØEXERÂ[a-°¤EdP
+H¡"ÀYE¤UYßIÜóÏ|ÑçìÏP¾æ3I¤ iwik$ºÆM,â°Z4Ü%1Ò(ãHÛÎ_n®R·k\98läÙWȨְµ[¼QmYEsP)IDV´Þ÷/äØ-¢"Íò(I$×QZ2kÁr ú'ù>ÚZIªZÉË´rKÍTIûóG9ê(]uïKíPåXkW$ 1\WN4s¦2®ëͬµPJ"UV ¬¤:ÄjÒl5\ÖÚÃØ1ÝQ/®bÃ)%IºpÂÍjcN\MÕ7 µëTQ!@HhÞnlë]JâµÔ%ÝÚºêÔu@µ¦Ó!B º`zÈ
+6kf')°Euv¨ÞbZ¿v[F5ΰ°oÒ3c¤û@êÞi², s0OÏC¤ +!D;VG$²>Ç×¢-t3ª¬IÌ(pdrTN«U=*s/Ût¨órÛ,½PKflF ÛÕTÙ³z±UUUM CXª«¡Ö^G}<d0°1÷°9Wô!&AEË ´`|DØB}¤Ù*ªªªT±UFÚT*¢¿±ðñ÷üÞ·{ÓëfäÞÃzãL À±2ÅÛ%6!µTOaã<% ¦ï
+5Å! Ù-
)@ªËÙÇKÿò@p¶÷Õ¹R0ñ¶¬*É[kÖû§ö@à:AäzàÞ¶ÏU&F6lǼñ?0]þͦ uo~©\$ö¹á±Ãðý@7æ|X
ÿÞ¥r8
+"e}®BHÉ@(Ra
Wú
t©:´8óÁP
+I.(Z
e
IaaCÑÒ?ÏõQ$c Iܧ*¯Ð©õAP"äA
+ùªÈü¬vøìPooªhwr4Ò§àD`´O»ÔÉ*¨ÚTÜ6È@UÒw¤á«[ãP@¨2ïs'*q«ÅÐßôéRG ÇBx*\ûL ¼<ø9S%ËFµñؾå
+¤F)<)KÚPI¥áÍìhåÙ)GEw§v¡ uÏX~t[w$wÛ¬µF â°1Û +hQÈzÉf at bí6lI KXÐ/G#Õ´½¦©~ëÌBIåwnX]UÎÛ.n[b÷ôÂwg«¯6;}>ÛU{|¾¦¨\¬Ë\^ é4Q6,\Iyc¦¥ãD6RÍ@lå%§%O[<5åìpDEBÓKYS:¢æ
a!Ím8Ï5UUUU^Àxwëß²¾û7ä¿+'fBùßÙ6ßëî»#ivM)MÚÑlg¸L±\å$º*,s«8Us§ 43|Õ@& DÐoÅaú;Ë×4ùÅe¨ïjR\»i_ãçâ5¡kÓ¤+çûmɺB¨U
+¨J[¸af0¡0Ã0 ,&éÒJlõëBÁEÓÐl8ûþß~¾¦ò?r¾|cð84S¤bÜÊup!p jÝR^&ùàÅåÂÍB××*BrFBD¢HJ RC`f÷ÇÊm' qìUUU_¬CØyø÷ûøkú~ÛêβnAÊÞxt¾HiXq½÷CJM\n¬'v¶ôÿø&ÐÏ®àñ¼ÏM> =ÝöÈ4¸¾
""Kà"tò`®»ßìñÕéN¬°^FÝ,«JcZ/øÐlÞ=£ËB,)$¸XP¡j%%
+E8YÂ7¯·rØ[gMRs²áô`ï±&÷÷ÑÿZ"Å/vù>êÂ<íljõʾêè`©-ÎòÁ~Ìguúì´Û&¬µq·BñHç|/aìz:bYcÙáQU&¦8[Ï
¨
+Ë£> 8%òH,£AIã~ê:mÞ-µhw2r3D *s¨\|ü(rìcM\:[@BkÕ@
+ÂN56^ÀÖ©Ý®²²kÒ;÷jË>¬©A0ë«1!Õ5ÄÁ $°5^ª_dÕ
+TרֱÏ'ªÂÃ!õ.$8I
+" 2 3 Ëûoo\
+òál^CËé¹Î½}C¼_(3îR)êMød×h;ó|o ßÃUVu¹7IM§yi¨%Ç`ç&Ob0VþO¯×ïoB
×óýc^ºCIGܵ"z ÜØmc]
+ó
ª{
"±^®|ËÐ[åf"F1ÄWVÓpÅkOeX`P`/^ÍÇ ;êæ®®ç¦&/7Í!¸ãC- ƤfVÕåö{~U»<y@h!}72 ÜX÷ka· ðú³ÙTÊIjªKnìùïÏô̰¤áaB
¨XPXT;{·ì¼Y[£vCÂûëtÏ#Åë«×wÎpðí;QwѬ¿®Â}Þy¤ëï[AtBzæ2¿RCäw3dÝæMl$RªVC os
òH!FF%Ï×^åÔa_häÝj¬øØwFvY6WwÞµJ+è`3·*ucMÞ9¿ð'P
+Þ>m_ÄÈé,}ñÛ»ÇhÃ^yïàáO¡=ªªº¬îͤãe¸ªª¹¥Ý*ªï!®Æñ½¶k`ydIÇ£¦AÏu'}
+:ã
+I5wêÆ >Ëísö@íï弡ÒB&
+íåx¾_[<svxxÝaÔ ^ÃAe~ÛrÐQR´ièj¬Y^WMwñÒÕofK^yTÅ8HéÁðÐÈ7$ñm¤fõKHÍCq&=Ó¤$¿)+4X@´¥iÙ0=HÀû^~³ßÕö{|î·§É©®QºµFJ9ÙI AM¯q¹"ÇxN&ݸµãTÛ¼h BA@û¡¦)(
T©HXczñËö
+DwW[ÌíàùwÕ
+Z¦ÁJÜ ãàÄ4R'Ê.ù5U2â&ÇʱÚÒDVo«ôÁ¶NN
+vVÎ62Û⹯¶pªª%1`åu6¬eR`ÚTP< ¯{]3:£M¨nâvóÒÛYBÛXÜ(
+Áf
+&J±³¦fB@)3Î'ÃáÞÒNyÌ\Íêè}¸O!$
+ýÎ7©ÂÇ÷7o¥©ãdz >ÇÁ(¼yg]o³ÁÎÍkD4ZLõf@$DÊ
+kÊS|¤;
+½öbÛ@&JÄ` ÀA ²"Dd$A A ,Á NMWP6ÉÕÕZL:Ï-îCêsx¡Ðb N4ãªZ:ÖÊ@6e§·9XSUèF2¢3 ëÙ@¦½÷º±<gOÍ""s°b7È}¢/WxkrÑN®xO¶¢ ÛÈlvamÖ÷´üèÒÕÍW
+om.DQk+
+
3{¹s¡yâ¥t'HI5÷ ¢"`EîvÈfÅ×fÏÕ{¯¥ÍkÒ)äý·´àÎñ3ÄüKÂXYpP|KíæS¤.|ê_zOòqÍD%Ý9×=iKó¡|kWW'
·àæih ªG]ljV÷ݶÿh¾Ihc°s±·66Mq×ÕNy\Ë,¥
+0RN¶NwÎt£*+¥#7¾2¥&æT·HSërL(KâÂ4RP®Ö¸ä:²òñË.°2j
ÀÈX,6h¸ÉáÓ!Ó;:뮳¸lâm>9áî¤}§qXÏ>f÷ûóÁçèdÉ#g2é¤oJÙ-·éÂAÂËHÝÙ9Å6'ÊM "2]<<üp°òÃÕòZI]Y)&Àa\ÃGé7>d°ÎáX üµV#u°.° 3¦{hÿ²5´üú²ÃF^,-UWÇ*O×GS£
+ùn8A3®@ZÖÕ[,JGÎ#¯¡árC²àkÄF[õää@|ZôU3å sw4poª~ð@køèyÒô9q ç&`dRÂÆ6Ñcc|5¾xÃZã^¾Û× ÒÆFKÆd¶f9Õ¼ÜtØ·¬âQ%ÙÜv!&Zm¾XS+ME)mjT(/FÀK®v¡Å-ôÑNÕÙ¨_)= 1;Ìλgm<¡Ì×Bàë%uB9&q9áÍ#ç."O{AÔ¸XÄ.ãrµ5Ú¢ß"ð©VTä`ØïÉٱ촨±RCÖO|^*³Ó®8H¡4vA$AjÓ^\M;æÈppKðÔ]s®¿ZOE#U5e[9¢3T,Gߦ©É
+}ÃD~qÄI§Û;)£êáI
¾ÒðL*WkQ ^¾8(Ão]r-¿
+%xûËåöÕ¸è
+¶öݽ¦´Ns»ÌÏ~z°7º¥P$+®zº·»ZyàKÛºPIbé ÒI£.Y×¢0}cPªF©
+,&c-YÝ~DA1ÃêñÕ¼ë$£vÝ6¬Úßx| ôg9¤ SÆxBw+|¾p3e#8¿9¦®)iÎuÎõEädÈvÓTQT¢NL1¾´ì¯<¡ÓiÀgc< 5 CHJ¤^ÁçPT~©sHE£·FwÍûÀ`o»Ç\ò
+õÕê¸sP)&DFµ¶FÉï¦H,·aTÊZ!=غØsmI'lÏtW1¡C]¿fÖ½#û[l}k¥ñÖöxÓÅxMÄÔDD)6Ö6 :pr^`Ò I¨E[0iºéÞ»eÝô$>}ñüßüþ.çßû³çû?ù)þ¿-k-oÑ4±K$½ÝßûÐ=æoý¨yQ ]y_OSñ[ñndöôÌÌò\cÙ}BBÞä4¡oiËLòÉsؽÝÙðVK×OåëÖg^33<Âã¬øaз¹
+([Úrã<ò\ó/wvB<õâSãÇó:õÜÌÏ0¸Ç«=0èH[d4¡oIËLôÉsȽÝÙõ+'^²_ò}Îó<{yqqf {Ò
½§.13Û%
+éJR±¡¤bÏF£ÙM§\²Ñð],»JF9g¹qyaз¹
+([Úrã=²\±])JV44LYèÒÒpT{)¢´ëÙ¾gHÆyK33Ì.1î²Øp$êCJô¸ÄÏ.y+¥)J¤Óy4²Êd:ÂÜ_ƶãHÆxÊ9æöd `HIÔ-é9q.yJRZɦ,ñic8*=ÅZu1|3ÎYÙÞûhr¤E4--X~X¼Vþi<Þ¯#Ç>?y':°¶ë>ñÓ?:¿±Û£:þ¥Ö´I?y{þ¿âÀóÔÆ¾Ôiìîå]èÜ!^x°¿ÚçÎ2¾yÄuÅñÁ[¹'N:îÂȾÅûiÆ.£í[¸ù82÷¯û"íþ0? þÇ÷@ãúôþ$»unè9þ¾X®ÕáCGsúFÏíxú¤=úfAI½oø>2í 3@?97:UUUUi£Ñ«5¾Ä;HYÉÿâÐØÙÏbNFBáíNæïÜÐÒ¥¦êÀ;9ÿ»ní×~øméauAY3¸]Uk
+]ÛTG]DTíõC ÔmÒ¥y¿S%ê\ÁüaÛv»¤Rà!VYg×IqÈ-Jªë¿cõ HP ±±rQ)þ+|ûÿkYÏ(\sÁ[Üu1I¥åKÁkRÄsýÄN× 0¢²3ðµçH¿}ënÂS¥qÕl¥&fpú@
+¤Y²Ü PQ?R
+Kr cþ£¼6ªÅ×Rúãeå* óÕÚµ\$^È
¶ðaþ½OF±Î¿ Â,̬síDæ7Ãv4Ùç¿`!+»4°AÅEFTCe¬3d®{dF3ªÛý:úg¸íw·Ï×ñy0Ç(iBZDóØÙÁ'RD`°KJH hhI¥$La
+¥Döõ ÷É#B©º\¾É7ÊZ5 Tz7H$Díèûi©÷Ï_úý^ÇÊÌj?¨x³1ÄÉU÷p}o«ß×Uöþl¤`õ{å< PËú}/xÕ$¿?Àà¯ì¿â>:I~4k>/ÒÝ `©ç7; ~F>úµm¥}ëùö×ü½còðñU
+ß¾Ûî娤<$4û!=¤§û¿Z_mýBùíöìáH¡UU6Ø¡rvy©
gãkqµ¤©[³±ì(X?»_[)ÂoI¼åFJ"Jª!RÐx ¯Å ár( Fõ
lYm-±e¶,§Â= }mÏûóì<NÚ
+Þ¡¢¾Z²Ve-D
:)mÛ«ûXb)
=cß0ꣽICUº<~QSôbÚÀ-ÒW TöSB±è³øÒÏ:ù)áìÇÇo»l¥*¨ª¥G´j=
G4²îù¯ïS]RY=ròã`rã.:µ÷+
i)ëu1KÚ½cÀNt }é¨ýÑ: hrÝø
+syõ=uÆÃÕØsÍêÙ$}.
+v$õJ'ÁÙJRdöw[©Nå'7ÙøÒ=´2ªªU=¡¤YC¦X=<ÔKTEÄaß^ Ô%2Ò,àÂIFI`.'!òµj`
HéÙîwoZ pj '¸üøÃ\b»ÜDØÅT*¾Q礤Oø
+ËE»q2¢èGNáhNò´bϹ¥ÁrT2»ÓܰôaåÀ²UHâéÖ.çß±Ý]»/~»hµ1¯8*ß½d
Nu#g
+h¤
Ò|GXgôCÅD;Ì{ü³â¨ <_~1_+?4~¹ðÙZ°ÀSÌu|èÝhK
+¢B
+ÿbDð8)'Àaí!õ5ÏãQR µÔ¢åß¿mó'ô2t9;C"ñ;¾\¢Âv±¯±{òo¤µ="åËÌj
+D*¤åazê^HIZH
Ùû»'Ú ÎÎTI}uèx*Ùñt0
l#ÅÓ·Û|{Þ¡¨µ}ÑØ£é¡§CØï;@¤¡¯4l°÷ &|dé?V"¾OSú઩ÉàñtÈ¿:<;¸«ù±¡êI)ÛQ:ìlõQ§MW·ÆÇò³¥^Ò TÊf¼·<
m¥q²ÛÉ9õqù06º±LÑ
+(.äÍ@Ër6ð[ÒâÕÏ!<½"«¢z~FÜû~×áyЩÁkQ(¦að@B¬$£HG¶FâºkwYÍâÂþÖõ¥ç-6oXÁU]]-X*>0Ç\ñg$©¯ÙiûQ¡ùÑQn¿8P=@,¯00 @0/é=ïQ|ïsÍô©õºWçÑRü>½ñéÄïÅðmz8kIFñ`«lÕ:¶û/ôz,é¿w×òþÝIþd ºAàû¿ç~ªÏ$*ÊR¥Kwoti*N¶Û¿&ìz¯Ò¶VJû/¶û¯ÃñÔ ÆúÎév7cøÛ÷Þ_ï¿>¹0wÏÝò¼Ðû¤·ÿR{V|iüϰ0$ÒÂ3ñT?4C$:2Oî"z3ýû¬²Ë,²ª¥2MãXÖñ JÒÖ
+é(¢)Îþ?ÇXûð
ÁCÆ.
+Ùú#tr×,cÆ7áoÊ´ÛÀ¸À¿ªÎE¸k$¶zSx0ÃQBzíÊ7£W¾FôúD ökèµörøû¬ýF8t
+
+ÜÞxb
+
+± =×èëôvõû¡äRÊ%,Cí´{$,ó!ë?!]i;"Þ¹1Gø;bTÂ*ª¥UUTA@Ã=? ྯlØù:LFcöÇîZmqäõÇëß$sQ?*?`©L[n(ź+ÛNÀe;i¹û$^/)RV\ å#¶Æ9ÿ|ÿò¹þÏg±âåQ>"¡â¸ÏÒ¼X
+fø[ÌW¡l¨×=eäN¯;kù½í½"òW¨vó
þ}PÝl$
+-2©a$ìÉnwfÁä,3b4tîÄuóóêc½&Wõ³Fì²Ù¤¸6I7r£l(eVw
+²¢Z¯<±&èÙ&.Ë%¶Í*LÅ]¯ê
+aæ,¼õ!4mΣ ÐIêÁy¦åflYHþêIRQkÐ
+6oß\»0^t#º:©Á#vô{vËñÓßé¬0ú|¢bLEY§ÈèÞ;ÏöXÃ0Ã
+LñANT
QEOQtnÓäiø+Áê³)¬VWz
KT6G_¯£¢úýJnuI²Ê-_c¾[âÅ$"Ý>ßp³½óæ0ÏI;3²ð<1%¤pT:éì¯[§ÃsèrÐv|¼vPñæÓq#¼×M§êL~
yü1F¸C.`D<p¹î[osLÊrGt;;jî`X
¬ÒIT/:~T^p|ó[¾ªb#¹ª! ChO )Pê&̤û`3*WstñÙ×¥2
¤èt
+RPºs2C·|CJÚ
+á"RëJäH$¡Ð¨å
+G~õÁxzä0¶6k8¶R(rø¤ûòPÌI$UD%TUHETU$%RBU$%TBaSÂ(¸©%TK£8¶£IÌR`w±ÐÊØÈËoÓ¶0Ü®¡Ö
+Òê£H¸Ê(%az¬Òª"
JTbX ªª(/Áª¤¥H¾Y{p<G$y6TP÷8 ³ÆÑÊ^CFY¾ ðd9
wd Óñì2 P¥
+Ji&Ê"ß4Æ{<0ôÃ=²¾zÃÛ^a{ò^) À$,qíäQHòñÚî©ÏÏÞÙ`ä5d"$K0'Û¯Öà,1¢[ó:ÂõÊðtôÙ"IýÔª|ø·Âvmõa pJ7U{aiàÂÁcxÓJ196nm¶"¥b±1.ÙõÝðq¼L¨©R¥UÝò{¸b/û}xò:¶Ýµz¦6Tzm}=ß
+sj(Bh0%¸MQ_6¶I8²°qÒd;Ãjø^ìgF>ÚÇÍì O¦¤4B/I0@IÙãÛcjÙ¬ÓFù¸]mr:1TÂb»J1×v©2»9S*çVÙ&<b½1³
"(, 5³©*
PªÚéñ~wåæõüìl[¬XIò¯qq%PTóÛíÎ.ì'ë,ÉJít
_½r¯ü^k0
²F®ù Ù&1΢÷6ÅyóF´
+ä÷Z~D θ×ÙÇÀ°Èfý/iì2¢ou$úéÉ71)¬)Ìönh}èz~°òCµ¿.mçAfPª ³#À1Ýla<"âpl0sç÷ 2ÒµKÂÕ´¦p ªçk°È[)3ç0hÄ_$Ì
+F+mXÍùð"¹
ÝðØ¼»kûû=Ù Í)JU;|
+Á´PçJ)AWr/Pà[(ýÙ5Ï4|T¡Q Mß4Dð"G®>aSXp_@>ÜW ]æ6Ì=5Ø*e{]ûO0ÍL6ñnúõ"h¾A< DãVþ¤QIj{QEQEQIï`¢M§Çç'ìêûÍàú9
+w!\ÀÆ,´J³29³Ó¸ ¹©Pº<Ç?q«`IÃà® Ö¹¬D¡Â¸zòá'òRg³XvÇXðÓ×yê¾I¾åë4¢´( ÁH"jb°ÐÉ>0± èaIftRH² è'@ü*ÄÃsÛ97Þïô[ô©¦üZ>Ô©²¢ÑQ7%MH7¢o¬¢;BªnþÕEÊ 7 ßçå$¶é·ßlc«ðûü±¾-2UI*³z°x {g¬oõâ4}6]!ë<giåðpÀP;¡¶Iy-íiý¿h¨µURòIÊ
+)µS
Ù^ùýàñ>~Ú}>¹ÙóÃujÒU~£ÝZ¤åWJ-ËßÓ±ï)#Ö>À>89_Úñk"í»kõgd(Pð³HO"D¨²IÝòð~Î_RÓºHl¤¥U¡ZÐc¹S§¸:ÇfC&Ghè)sÓ¬åÂhÕ=FØh&+nÉ#sPÖ&Tãsôª
+Af³4IÛ$êÚ-ÎÙt)H¤ß¤Â¡Ú¨rÇMLÅI(VÌ5¨>úÙUR`ÄZCæÝÿmAÜ.B¥IC¼¡6¥{+
+Å*ºH5W¶!CïGm*h]hëÀPÃË"ìXD©ª b1÷rAèÍHôáRh4R´²$«²KoË´§wXtJQH@ }ôà
+eÀ'×E$4_¦8¯Uá1»2D~?ÔØC¤*I8wµá'4?To½ z£vðëéál󽪱lûó;Ð(ûûÑ& sFõX#sp7¢4`àIKBÒÕHÏd1§¥g³f*Èo\»ñ&ÂëV7tCfBc]tºZe¦v
+FÌUiÛI!ä¡8;¡Q:ÑuQ~¤RuÜ1^
b/ÑQz¾J.ª®ò åo¬ÇgâW=ª)é[¤~¼×FrD±s6&@iè"3ÓØw«9´ÄóÃ4ò.kÔDjï14¬¡2ºÛ+®
ïäÆ"-
+N ^l<²5Bb¯.7òX»Ñ9¸¢o ó'Û
+T¢"~lG}d½ÐÔ¯Õñ 8 Û(Ĺx'eZ]aT-
+²/.öÖ *^
+°°°²Øö.FU¢J¡RT¬jÙU'ìmïûùk
+
+íXsÙ03D}[øå16dVz^Ås©1R1ãXÞ,Ä^)1PNOjUJȯ9¯vð".8 Î &ÞèØ=ÑN¸sÔ÷äg$ÐQdDfÅHta@ðç$Å"ö&¤ÞªÐf8ÔH¼
+¬ªëÇ0VÝ,útE¹yÀßx@¥*býÐéî¼2IÙÝÙ[{ PÙ{HUêÖq
+ÄR;h&7h¨Àß/3'Ï0è
ã8÷¨Gp1Ù%ÞV6[-IH¸F·À;Ó¼ÖI9¨W¼VMüÖîl¼®¡ãÑ
+$ÕµÚEÉ[]ÀSà©Ï+) k°(ǰl¼JK|vªÆ¦êFR`ÁÅ Ñd>qJR¶çMèVB¬¤,,´°²Ç2lÀ¶@5¨,?pM©IâHMDgºP9®Ä"ûåÄä=`:¬Øwúä ´J#¤@L,(5Vaª¤'p¡(©U%Jt¯ãÂ2ÒZsëÉÖ
+¤æ,ìôÿY;Dt¢«E 9^D
+PF('0ySjïy£t1v ]õ+nmʹ7× RqcÄ^&Q="HÈ)¥ØÀ! 2Y()N3{°&5 *DëøWFÑ@Ï8\pôOi#úÛ¶ë]-·a-ÊÉc/订òtÍáBÓí¨`ùoh«ïE6:Å(~^ÖÁVÁ§ÆçByMî'Âè·p6Cæ^URªÎ¾
÷
+x u§!ãy$Fë#q)$TºªÂÖU-nº½MÌäHòYþ|¿D\5)3ÇâVå-DÊÉ%§!åØêÀwóþ.ÈZO%wµ 8Î#¸l©#ÑØ°´P©ALjÒõà0Ùú³¤¦£*RLbZ
+ßB`yedÎ hɺ¼äÜU »µTpåý98HYm+êÛI=#E"t;\¤ÃÑÁ'w9þ$x¬2ó'|ÃDÅ]`ìTn²`¤,Ó×óW¿ÎKYY"uß-.×+ã7¹wnûÆÁ¬Y'Z{ÇDY`%ínö ÂIðrX]³ÉiúHR'1ѽù¤GÙ ÒNÉIõÞóp²sßwàâÌ#µ$fHÊF
+ß]C!òIê]Ð$¨wA)ªÉtKö¢Y1^DµD¤pAùã·f0ÁM]дÞÚê*·i(R>;ÇÏ7TaS«ä
DI$P¨IÓTç$eb÷^É&§íö[8Á!Bë!+
+{UöÚªª;¤YP)xÒ ôª8¸0 ŧºCÜXëÍ
½ÔÙáo-ä´çá$éÔl KU±áÚ«ªÐì2_,Ô
+¸I2rØ´Ilg¢¬JæÉ6#JJ3ïèå4j5 ï¡mÞ1°lèX{öÈp£ÖqH;UëVeRuö¤¤Û:ưcâÿÞfà<ê¥ á9å,(
+ ¾à"ø¹¶*ª$¡)ãN:¢N©2tå:&0>P
+î0Nb8âÀLbHD,d1OpÒC%%¡34ÎrËNi$îÁSbMn²£H¼`½Â" CÀ`È//wg÷í2d
+Ú3qYiy.Q
¹D©';Mo
_ü»çpl/ËJX_-aéiq+;´1,¸´@Ñ|×@ÐN
UÍi¤ßÑ9M@A@ÂcQzkFåÅUE£·^ãTdù¹ÓÜî|@
+é9È
+û$+ĸ1 ðQqä´¢°²?ÅyOá
+7@¼½ÂâL¤1IÔåºeöhKÉ[:³B¤FíÀ6#leô£©µ´0 Ç 7U#ªFÊ+9x7¾NµnÎ5"^ Ù÷'lUÜ#â;±ÃGKèì²á¼Pa%ðXc@¼x'F(ÛXòÌl1e&= (<°ëDm
+"&¤Ô^õz¼uõÛJdH¡¢+ËF N5íkz,:ï¿®ÁÖþÍâfºLÌés×òòBȧi¬¼Û4ìZMIf6lÄÑKÖ¬Eå¯9hãZÔGSS-Ü齬:dkõA7ïÏDKlÏ÷´UÔ`6et¤µób_F
7aK÷ß±ñǬRñOk"Ñ0h656ê!*B!ØñZN|ÝÙ<ÆBʰÆ$È\°^hèyÝ0DT)BT7Ù½¤T3WfÿeÉifXÇcdãɳðýs%TEMÉ&Õå»0yãDÃt*u×]áÆãKt"(å&YbÜ4©DhKTpÈa0LRlä¶àÛ*BR5ÄÆ¤gB¦-4ÑÖ6_:*ÐáÆÚ
+é:
C9cu<æ½#pØ6ÇÔj5¹NGøß.¶ZÛáLÖ/kuÌ´u§ÍÓPèRI ¦°ñÝêá×În÷øwuð£§"`y+<wu$}Ðp¢D<á-#öøúv¹~½] ã[',íìlǺ¯Ola"÷ìxSÑÇË÷С]1ù¢^l¹Î(Åã;jÄ^¤}G pðE"¢Se4٨첨pýÂ$=´
+R¤ª©$£6ø6½5!ÎÝ.=A2¼~?mëâÉMRc®£Z\Ty
+@É ²M!!
+ ¬àEØÁòp{qÒO¥mi õû&»üç¹8¼¢$Í$UIèØq̼¤¢GÏt¬_¿h]ÉØ2Ó?á"ÁHê$X"PEDqSx¦IÛ¾FXÇÕd"pð_plÿPëÙJº`Ç
+õcÏ/E¯l^lÖøQ,±Bpæ#8.ÀØ ¶[1Ñ&É3ýQ6eHPùEì
Pz5=±QĹ;¿çEPÿÅÜN$b,@
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,60 @@
+Machine (P#0 total=33331648KB Backend=Linux)
+ NUMANode L#0 (P#0 local=16554432KB total=16554432KB)
+ Socket L#0 (P#0)
+ L3Cache L#0 (size=9216KB linesize=128 ways=9)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=4)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L3Cache L#1 (size=9216KB linesize=128 ways=9)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=4)
+ Core L#1 (P#1)
+ PU L#1 (P#2)
+ Socket L#1 (P#196611)
+ L3Cache L#2 (size=9216KB linesize=128 ways=9)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=4)
+ Core L#2 (P#0)
+ PU L#2 (P#1)
+ L3Cache L#3 (size=9216KB linesize=128 ways=9)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=4)
+ Core L#3 (P#1)
+ PU L#3 (P#3)
+ NUMANode L#1 (P#1 local=16777216KB total=16777216KB)
+ Socket L#2 (P#256)
+ L3Cache L#4 (size=9216KB linesize=128 ways=9)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=4)
+ Core L#4 (P#0)
+ PU L#4 (P#4)
+ L3Cache L#5 (size=9216KB linesize=128 ways=9)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=16KB linesize=64 ways=4)
+ Core L#5 (P#1)
+ PU L#5 (P#6)
+ Socket L#3 (P#196867)
+ L3Cache L#6 (size=9216KB linesize=128 ways=9)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=4)
+ Core L#6 (P#0)
+ PU L#6 (P#5)
+ L3Cache L#7 (size=9216KB linesize=128 ways=9)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=16KB linesize=64 ways=4)
+ Core L#7 (P#1)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 NUMANodes (type #2)
+ depth 2: 4 Sockets (type #3)
+ depth 3: 8 Caches (type #4)
+ depth 4: 8 Caches (type #4)
+ depth 5: 8 Caches (type #4)
+ depth 6: 8 Cores (type #5)
+ depth 7: 8 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1
+ 0 1.000 1.500
+ 1 1.500 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2n2s2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,24 @@
+BZh91AY&SYã; Xi¥ÿØãÿþuïÎÿïßð kø`7¨A´Ì¶àw:× [
+P) R
+º 4ÐÈ b2`4 d
+ SñõT¤üª¦4##!d0M© )µô= z I ©OL¦ 4 4ÐÈ b2`4 d
+ )Ah h¦§ñM=AâLM2i¡¦PÍOÖ'æäòÎ'èíÁ_LÜ&ãàý¿KQÉÝ÷¾/àøþOáùy»òåË\!ÈF"w(©e*½ªÀe%/AMººúiÕ§=:®©HL£z¶´ÝÅ®ê©wWvÔZâ×uT»¨ÕêôÓM4Ò
N\î©^îÖÖµ3©L¦S)ÊT¥)JR§7¨Ôj¸FBÞ÷k{Þ´ÅÝØMU)JR̵2ÔËS-Lµ2ÔËD!!wvÞ^ðËÕïxÞ·ºÝn¥#
+R²¤ÕWV©JR<Ü`ÒUU^£éEgJ(Ã:QFÒ0ÎQt¢3¥S¥{ ±°-Ða5râÕ6\L!1"$D,(°²&AÌc1Ì °!Ⱥu9(à:ª¯Kj½Zæ\LÌÃÌ0ÌÃ¥-)màQ
+ªªu"éKJZRÚ[J°°Ú)Ò¶cc,e³#Q7oÃr©S0`N ÒªÝRHÈÔÉ2¬ÃLÉFXÌIfH¬Å&9õp½LéÒÕáÂÕ|ö¬Û«&2c&1ù³óP~õã¼ ß1m=G,K%ËårĹb\±$õü¥-¶RØÑ²Æ¶h úÐ \æ¹c*&Khi,eL:h,aD:h,bf&KÆTæÆêÕv\ð´Å¦MóÑÛÇ_?*J2
+¿TT°'Ò&±)àõ½òj&ÃÛÙ®qZB*ªªªªª¢*«èóà'3Ñn&8ânS9H{¬8EKûúA²pçé§]uã¶Û$I$I$%ݸ
+0Ë4Ìêc¸¾ÆÆqïòyÏUUSÄÅUUT·Y¯ø 3333332Jªªªªªªªªª³Ä%öK2K2K2KIfIfIfIi§mÙ³ fÌ%K0a,ÁëâiZ>$$I$I"K»»°µ` feUUW88UUU;Ûj¶Ú¬âpªª³@P4Ð@NÝ£·z;víÛ´vâ";ýþø 7 kóÇ<àUUU99UUUV×$RI$I$%ÝÝa¹°°|¥êt+5mÑL7&M§^5HMz¨§ÆÐ×ïq5òü=êøÝ¦¸OGsæÓ§Å¦û´o·ÏþãÓæÐb¦
+`´ÌÆ3:û<ª¨§²*^Çô¾¡ãûéHúDØ>±õõ¾¡7¬:ÌE ´¶ÇÁø;Çø]ãúü¿ÛøÿËüqzÄ T½QRëc²cÌÓe´T±6¶cÍꥴÁè{ve½ò7ÚØÓlU/æÝËâ7Îàx7mÙìö8×ÁL9V`.!¬C&,Bfi´D²ar ð hÇi:½¤÷½Û ÅL,Ái09_}ó.ï h|Üz'sRîÌÑD³AÐ.ÖuÚuéâwö|½¢ã·k®yY6¨>°åÙ-x¹pãÐûð8ôäé¿?Ë3¾\6P´ß¬ä¨Âf¸háÅÌr:ü<ο&xYÜ×çÙ»t`o38Ë&ÏPBeÈ4
+í<`rê³°yGnTÁ2`uty~};K\újïØ8]£v¢otðJÛ`Zw4k8l9à0o§
+F=kÎá½0°aZ¬åbdÅY£}ZYVY¢*^è©}8Bz9çêu^´óvÞw^voWfF.ɾ
+µÛ]óVð/(;;FÞ¦TÁ2`r&EÖÍ2:wk1ÇAßÃM±;µO7C{Ù
+Ín:Õ=ÔPõ#½ì£
+Ãd Ó¯s;ůмÍ^¦²Ý&36\xfº³]mñ¸ì
ª]Ã@Ä»â|µåRñ1SÉ®ÛNÌsó`8ñÙ3A¯nµnÞimmëllmq¡N*ihÝżJge\{y¶ôk°ÅMN}|uó`írÑÇlÎ]®w3NxMÞ8íÆíp/âho «èï!ÞÑÖK¿©v;]#WERζ8ôËö¸HZ´ÚßG
+8ó0¹Ý2sh59N®÷ÉA¡1PÖ`I|MëO2ðey7½lÞt¢3
ÍêpºÔ:0¶:òØ!8eó±ÚuÀTQF1ÜfH É«!@D@ÕiYKo7ú"¥Ãvsæ¹¹k¶ª!ÃÀä0¾¹ê
´å(ÊJÕÑGS§&Ýè¹Á×]¥àÕO¡Öe;7û8MÝpÉâäéÔ!,ç5Òp2ä
+CÖg«¦k!,¸dÑ,´a®°+UÄFFÚå£m´oD³yc7£~wEÜ.ó[^]5à;¹o
+<°îÎ@¯ÖFudã×öâTÁË*fæ¯Tª¶\8#&qfæqfqzÍq*`ã3sW4uQQqç½íyÎEæsN÷Íß=×ÌâÜ9¨¨¸êw×Qy^uyS#5¾»¯5Ÿ4uQQq©yÞ×ä^g4ïq¬ÝóÝy¬Î-Á£§}uÅçYÕ9â3Y»ëºóY[GUç½íyÎEæsN÷Íß=×ÌâÜ9¨¨¸êw×Qy^uyS#5¼p2¦njõJ«{_²{$à
+4§O¤Ô3ôÙù~VÛa6üæø(ûãÀÇìcì~ÿËú\÷N!÷¼ªª¬ n¨C?£w;÷^fÁä>§æÀOãuã!à'ßWèô3&üôæ'1Ì,ñÂÌàC÷EK½u6}Ò?P{ïÖ=nÑö>äëIö4°O`5~ÐîõÖô{âz¹ ç§_TT¹OØÔx̪¥¸TêØMÝ]cÞ
+_µÈNAÐÃ9Bqª¥¸ÇÚ'X¦ff+ÁïðSä¾ßc-¼Á³íZ
+Ú: vïò;ÓRô¯;a7{ôè'8©`µT»{16A;ª"öû|¡;ÇézOB0lo,wEK5¡t²;[ Ôh=£Ì?T¸ Ä<Á窥È>Ðáê|o<T½á)zØþGx|-Þ·°îK
+wïGÆFÑ=høÞ§ÔÑÞ'®*^q5Ö'Q
+ö-ÄÂZµvõEKs}Ø©{¿õâuºåB_¸u$|M\wkåcO}ìwüB{bt äâyÄøDè¡6§ÝHù_¸êó¤í8¼cÒ&ÛºVEKÑI°{F¢{î÷¥£È©y
+òDÈî¯T±U/¹,MíñzÞôTµQ06&g:ÝÂz8ÅKWT¶*Tµn{´.ñ©l*¥ÁÈMGDÐNá8` ÌO |GPè¶bMõ/µ(}¸CË=Âunfq: NÑ<Âc¸L¸T¹ ç*¥Ì'º$ÿrE8Pã;
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,35 @@
+Machine (P#0 local=16591312KB total=16591312KB Backend=Linux)
+ Socket L#0 (P#0)
+ L3Cache L#0 (size=9216KB linesize=128 ways=9)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=4)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ PU L#1 (P#1)
+ L3Cache L#1 (size=9216KB linesize=128 ways=9)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=4)
+ Core L#1 (P#1)
+ PU L#2 (P#2)
+ PU L#3 (P#3)
+ Socket L#1 (P#1)
+ L3Cache L#2 (size=9216KB linesize=128 ways=9)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=4)
+ Core L#2 (P#0)
+ PU L#4 (P#4)
+ PU L#5 (P#5)
+ L3Cache L#3 (size=9216KB linesize=128 ways=9)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=4)
+ Core L#3 (P#1)
+ PU L#6 (P#6)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 2 Sockets (type #3)
+ depth 2: 4 Caches (type #4)
+ depth 3: 4 Caches (type #4)
+ depth 4: 4 Caches (type #4)
+ depth 5: 4 Cores (type #5)
+ depth 6: 8 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-2s2c2t.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,49 @@
+BZh91AY&SY§± ÿ§ÿÐüóÿü}ÿßÿïÿð nø`_ÏU$B×mÀvÔëÀr& D P*
Rï@Ü
+ 5OOJ~ª©¡êh4 ¦ ÕOßê©M
+¨ Õ<É¥)¨ i& PjTòj=@ Ð& @pÐ
+ Ð ¦4 ѦA¢ #&¦C$ÙMG©æ©êj¡íSÔ=@Úz Ú!é©ÿPýùÄ,CýÃýâ5`~±GóÒC%,¶ÿ`¬`%0¸Gß
+##}?^4¨ÐR4],ú¢?IøN!ØI´$)TYxH\b Þ°I
+BÀ¿£~êߣ~ÞæÕÊ÷¶õιxlïqæRÔqºÕÕÌÆµG5T¡`X±s72«©WSVÉ*jíe«Ã3Ìnó¦
+ѾlÞöo¶Ûjââå³qÑ&®êÝÕKº·unêÔÄJ§»¼Þtï
+÷½Å0ÃÃLÛ)ûܳbîð»±vH+V.iÄ9ræ¦\l6î¤Q$Ä%J!¢Iµi·( ÔéÜ338sf#fj®µrâܹÞ/{yz··4g\ËåÎïJpU#4¤CÇbîÍ0«5Si±)©¥P
+b¦Õ@4ÔÚ¨7NmM*Ms7s|Ms»¹»®ø$ 2$
+BI è¤À²,´,¶P²ÊU*Ûm([Bb1IjÚQ[JÕjµ)hTmQX°´«BÕÙDUP¥--¥jRÙQUU%¥YiV[-µUEUe¶ªËj¨[(ZU¨¡R¥ËÕÒIl¡l Ê ¨,¶Ê[(ÄDR
ª-²Z"ª( U%²
²@>`5;"NVVÚ)Àà2A]¢ª 4R8ÒÔ¦¦L3´bC¦ÕN
`1z«¶ëT¶¶rp!Ò+»J¬á!¨¢î«rh,ÀÐjDX Ój§egw¢u¾n÷Û¨'psUè6\Û¢f§
+t]nVb4ÖÂ$><A$WPÈ1!$,"BÄ DȰ¢ÂÉZ,IVÔBRÈ!TI*?Wä-
+[üóF¨RÞM0Dýâpú~zªª£¯¶QEQOë ùÿvªªª®È¤R)E"öxýøþ;§Zºu«§Zºu©0L&LF_7
+^Z ` `àAá³{ÞÍîlÑMOêÜïÐ pXñèÎɶìA¶ìNaÃ`¶Ä¹Á¦Å135Áml.^¹§Y=r\½sN³:z䢪¯Æ|¦
+2¶Äµ:Ô0Ør×Ú½¼`;da@ïïêÔií
íw¶ÜfÕ·¦þi¯.'DHùÃ>ä"B¢Hü¯èÑý!¨ûÃõR>þÚ&z~Þ:dbQ)G|;ôØ=^>YÇ¡¨îöwf5ÝÌ4ç±=zÿ·Û|ôç¯$j:ÑñkþàéÏ~ÐÜŰSóuu· s¼68WØ
+¹ç« m°Þ¶÷ÛáñÛsàúúëÜê¼!7õ `u
+=câµgÏ.Õci5*Z.·¿@= òÈPõ>!$Jæå³¸°YÖÝ(ý£dy1®¦gA]çiòÎfa(S(DI% Û 4àÍÉ&LÅîôßÊ㣪¶Ú·êëj¶8ä§ !fffffffffUUU]íݶ¶¶Ûm·â{H@÷!^|ùôÌÌÌÌÀ $ ! I@ ü&&¤EQEî{ä@~ |
Årå\©½«»w[»mMï{Þý½Òa4bªªªàª¶Ûoa'nÝ·ß}øïDè$ð×óm¾<êÕw·ví»Õµw½ë{Úªª¶Ý-U¶Õ½üHx èK.T©SÀ 330
+QQtmDUE÷v®®êò¦ö®íÞµníµ7½ïk ñÏLyLävkÀëÁÍÝhMoE¥S{é9{6nuãyf@1µ`ÉÉHdü4Ý*÷¾¿Ø%<ü:®$ì3çç·XÅø=ÿ{Ï?L3<2ðÑøÇÝRECp*P²Pì,ï¦'~s HBKñPFB«b¬U±V*ÅY
+þÁUUU~hDçý/³óüÁÉæ?åùæD¥¶²ÞÜ%(µ¹K-þAùFCÂ}Ù$û°ÿYþ£ºI¹¼Üæóssr7òãã£Å>Ãó¦+Á1&LÃ#2fd4ÒfÉeTû
+0ý^ÏïÓ¡ú$Íf¤j'êý?§ôóúútéÒ(ù"4+ÔBDûðHH|é÷>D Ó?G:¾g·[%HQÆ»i²gY!%Bq¾MUí Ml×ZÎoÇlèõ8j}&3àøÍ²RÐ@©«
¡ç gMw/|x6xM8¬ÖÍÍ<l©zYÞ^ØÂºlë{£}f÷m¤IøSbqsó;@û©'=7ú»uîúTE"
¡d¡·ißô8׿¨ñ
+v¸
+ÃyNY^A9^!íÎ&6fb^þAë¦ÿ£l¶ì'Mô©ÍÊaV·ÝukMÆñ®ìS~qÙÆ¸F_Ni½ó½Ð
+³ã¿=Уë6Øw¦Ïð4½uß.7ÃÀNQÆûñÀé[:}n×ez¡Ö7Û«\3Y;±M!(§hD
kõ»l.Þx×ÝåÏ!¶úvæÚ¾=°4g{fsviu1¢Jôîs:cÀ$ìN%U=Æú»1Ëy¯MÞ¡Å$QH¡hY(m6Õκn;³¯<M8¬fC|az
+ò¶îç
+wã<p qÇMg&r3¦Dt©Î£5$Pz4fàn2À´W;½ÄHãyÑa÷äIÉ ÖôBMJÃg¦ÀèÐ&Ûßc/VñB$=ÉêëÃU×{nhèk×&)´52Ê&úföÚÝ¡B=¢xC^ï>}ºuÍcZ*H¢BвPÒo=c×éïð^6Ã$IíæO*PÄHÃ
à ïäç7Â9«æùã¥÷·*®è
+_FÉäóàÕð¸»jy5|y4tzÚ:É(èc³][¥íº$Yæ)¢mª©¨<`æ0,7ñ×|ã¶ygtD â8¢¤)-%
+¶¼°Qk (K4À=4SgFµ½hÍo' ¼®ûnívhåáªÉáÑÛÅHX ´&¤P,6m&»«.fV3.'ÅH[¡N4ÆzéÓ[noÕlZBFóÛsa³swÇ
+£#nWTg\%åªñ¬í<a´BÉdÖÌ+ÐòãO.þ;4öN¶cëãºw<~Üé'¡ãzÄdá8ÈÏÂÞ´¾Ï#wçL»ÌB$;¼]
+îòØl馳0ÍMd0T¾m'&tã £a Îfç,fp@¦^ì72O[Â
+3Û¯ªz7¹ãÓ|.Õv:txNñ£¦´Õ;Jv9Óºkm©ì |5é9ðæøïǾìÛqÉÈwäC´äÝÑsÒã;®ûMòt=Ðã$
+^69ǧ`B at y{6:´Ök»!mÛ[6ê!Ûý°
+Éç¹²Yb9vå¹öi²k9d {RY4RPÀ´¤¥¤ñ¢aG¡ Ö¨¥](]ãÒúkáx
+Å
+ðÛ¥½5FîZ2á4fäÍ3YnÎÉÃÑUÓS½÷Iïöóß? 0õ©Ã^ð7½Å úã½Äc!á.ß±MVÁPö-3þ÷¶èïBë~9²¦ù7¸º ¡$}@²T6
+á¤ÜÎòpeðjáêÏ
+<ï`OxÀÂoña«oµ³uäI¸ Ìȳî jÃYZÛô7Æ $ÄeÈw:è°.ÛÃQ¢ý }#ïâþ×ø×"®Jm9 ÖçÊt¤ÄÄ<G#Ëþ;eðrNÁÅ
ÅËVJ¤
+Sh© ÖçW)ÒñQÛ/ÐʰqaqrÕ¢ç ¥©Ú*Bu¹ÕÊt¤ÄÄ<GTvËà42¤ìX\\µh¹À)dª@¥6nur)11ÁÕ²ø
+©;-Z.p
+Y*)M¢¤'[\§JLLCÄpuGl¾C*NÁÅ
ÅËVJ¤
+Sh© ÖçW)ÒñQÛ/ÐʰqaqrÕ¢ç ¥©Ú*Bu¹ÕÊt¤ÄÄ<GTvËà42¤ìX\\³e`²U REHN·:¹NàêÙ|T§·¶ÿEþfççìÜà Í*U© ¨°ßÊ ^"4Ê a9û)õÚç~ÚöÒ?¼*PRöíÛêWøáÞpQ÷Ib`úLóçQHûÃð03?ô?~ão#°b¯éü{ÃL#ðþ_࿱Úl8¶¬·úÃaÔdkñ|-¶Ûm¶ØOVúÛþEÂñ[çygî¹§ö
+ÿgîoÁº<øyùÛæô÷XÓ Çð{þâ? ;È|£òOÓYþ!eYBË(Ye·
+E´>àAþajr,²Ü,²Ý²7û~ÀÈ÷p&wî
+(Kë"Cý°TèÊÿ[`I¹ýAüMÆ=Hïôô
+7þ ê;Ñ`<' zÓ#Ô(|³èf!òÆ#Ø706Xh&¢>Øòæ8ÃwV=ð
+Æsc¿">Áõì?}p§ñé<ÂHØb1'Ü$<i"$5¨h¶£#A"cqâðÈD["È
²!l["È
²!lyñFÏHùÃÒãpæ#AóàÈà`. cácA`ø#a²
+"E£ýÂ=cå)EªýE}ØzFí
+(öÁâ¬6pÆ¿zLBäs
+Cl"à7Ñä>çµÜðmÀ3:ÈïÛx½aù#çè¹G]C´"CÃaà5 ÈgÎA!Òy,h.a xH$0(¾cæ> püa§¼z{ǶD÷u&3 Ql(Ôç°£ÕØ6ãMCÈSÈ&$$=nÈÐh¾>ÿ°O®!Ôj#q=ÃØ|R ¡ô é
+Gö_0õ÷z?þ`|
+íFXçNú'Æà<GÔÔq´ÒsÍÎòCODHÄ<R'á|ïÖ(t¯@!Ð|B9 =Âl#!ëÒ`z§£^¢OHì8òBBÏß;ÆD9ÑD¡5ïp:DÙuõ5u èÖ ! ?âmª:¢j"FE"0,$ïû«º'Òð
N¢tuÿÇyûEòÎëJXyÆ_ß"¤ô !n$÷öIïuè£Ì<D
<£í!Ô2(yÃçEHñyÛ<¡ï${Qê߯#gê<Çöò 9h:©·®ÃQºI"GA"`Q´"CêÈî
+ùFÃâ>10#îøiÀ`9èÐuý¨ÏqI!înÙÑÞ4죰¸Â$9G®½d$* DZµFÁ¨zÄÔuÄ$ù] ôØj#Èyü`F¢5Æá9tàEܼáqÉ¡ý¹H$9¶ïù/"B½Ú¯B/ÛDHj4ÀW§Ìv ½Â9CÈw÷pG@ 8æ#yë°Mð#ÍÀT$ÿÃídô§ì2ÀÄÅeñqÈsá¸ýþ!#Ä<»ÌC"=#¼3 ÒÉôÎá£Q(v|ãà$ÃÀEТ<$;@v>ù$Bü]ÉáBBzbÄ
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,53 @@
+Machine (P#0 Backend=Linux)
+ Socket L#0 (P#6147)
+ L3Cache L#0 (size=9216KB linesize=128 ways=9)
+ L2Cache L#0 (size=256KB linesize=128 ways=8)
+ L1Cache L#0 (size=16KB linesize=64 ways=4)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L3Cache L#1 (size=9216KB linesize=128 ways=9)
+ L2Cache L#1 (size=256KB linesize=128 ways=8)
+ L1Cache L#1 (size=16KB linesize=64 ways=4)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
+ Socket L#1 (P#6144)
+ L3Cache L#2 (size=9216KB linesize=128 ways=9)
+ L2Cache L#2 (size=256KB linesize=128 ways=8)
+ L1Cache L#2 (size=16KB linesize=64 ways=4)
+ Core L#2 (P#1)
+ PU L#2 (P#1)
+ L3Cache L#3 (size=9216KB linesize=128 ways=9)
+ L2Cache L#3 (size=256KB linesize=128 ways=8)
+ L1Cache L#3 (size=16KB linesize=64 ways=4)
+ Core L#3 (P#0)
+ PU L#3 (P#5)
+ Socket L#2 (P#6145)
+ L3Cache L#4 (size=9216KB linesize=128 ways=9)
+ L2Cache L#4 (size=256KB linesize=128 ways=8)
+ L1Cache L#4 (size=16KB linesize=64 ways=4)
+ Core L#4 (P#1)
+ PU L#4 (P#2)
+ L3Cache L#5 (size=9216KB linesize=128 ways=9)
+ L2Cache L#5 (size=256KB linesize=128 ways=8)
+ L1Cache L#5 (size=16KB linesize=64 ways=4)
+ Core L#5 (P#0)
+ PU L#5 (P#6)
+ Socket L#3 (P#6146)
+ L3Cache L#6 (size=9216KB linesize=128 ways=9)
+ L2Cache L#6 (size=256KB linesize=128 ways=8)
+ L1Cache L#6 (size=16KB linesize=64 ways=4)
+ Core L#6 (P#1)
+ PU L#6 (P#3)
+ L3Cache L#7 (size=9216KB linesize=128 ways=9)
+ L2Cache L#7 (size=256KB linesize=128 ways=8)
+ L1Cache L#7 (size=16KB linesize=64 ways=4)
+ Core L#7 (P#0)
+ PU L#7 (P#7)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 Sockets (type #3)
+ depth 2: 8 Caches (type #4)
+ depth 3: 8 Caches (type #4)
+ depth 4: 8 Caches (type #4)
+ depth 5: 8 Cores (type #5)
+ depth 6: 8 PUs (type #6)
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/8ia64-4s2c.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,18 @@
+BZh91AY&SY?NÍ UË¥ÿУxçÿó5onÿïßð jø`>½à[à 5=ÍÞñÛÞÌ#Ðt$¨ >øè Pý( §¨ESóG½U(ýUGêMC&&`CF@ÓF 5OÂ%Q=OQ¦@ Ñ 4OR ¨Ó@ `4` j20¨h
+=@` #&d1 R" £M#Dz4©ê ~¦£2ê?R2SÔgª|ÈöýB?PÿA O¼Ed##çúñðÀÚ³èú}¿Wæ÷èÆ3¾»í¾ñ DE@ xT£UÅQV HPå"3·¯¡Ã£×µëUÀV*í!VµÄ:yR³NbVYeRÂð¼/ÆHM1ïßfèÆÃVeJRÖiR¥7½ëDo{ÞË»°ÆsaYgH\Ö1½cÓMc
+c
+c
+c
+aJ*JRZÓFW7.j÷³zÞó¼ï,²Ê¡Ye3jµzÕ*fg $ÌK»´ÒÔf)ÝK£S.xb¬ÇJÔtIK[ÎvÆã7¼L"Y%¢I Ø
+oy@´ &äEQ`î*®5kZÅ
+E A²,QDX²LÈ*)ÔATUSF,F(¤5 2""*$Ë ¨Äb]øÐ'0ÚªêÚ¯C\Ëaa¥¥-¢BŹf YÀsj²sK
+°0ÐòÉ!¨l2GvÛJ¤7EÊ©,*U)UIÕr$Nh\BEÔÐ$üH!Q¨"À¬dAdZjx¢nQ9Ê'«(J<2£Ã(ñõp<P° 8` gô££º)ó¸dà8d·
2ækiÖ°×\¥²Ê[)l¥²Ê[ ö 2ô³b®²îU(iR©CLºJeÔªPÓ.®êèÛ.ìJuU¥÷ÉiÖ%,erü¬Ø£ò1ëóz¬³$
ðGZÎÎÜæîîîµ'¦jDòï5óVp[J"L$¹$m¤y
+ØÅÝÞ~¿w»ßw`¶tõÆ1U; ì;1U-Ök¿¿¼ Þ÷½ï{Þ÷½ï{UUU^7µmV¶ÛJRT\DFµÊ#"#"#"#"#"#"#"#.Zð@)P¤¶[% ÛoBI$I$¶DMÈË+Èd
JªªòQQS¤G
+¶îêªk*QUS"ÆFFG\˲«³³²»:ª¡ýýà ox#
UUSfÕUUM]+U])+«mºÌ·VÚGÙ¾3·otÓ,ÌfïK¸Ó,Ê©ª´©ÄDi õqCcÊx§ÕªG~}®þøýÖ)$P´P¥ qAÜéìêC T HéüãúB¼{ǾI<õØ>Áø8©#DüéH¤rRå¢âââX`ÀXkú>`Ò 8P2â§Óíͯ×jd\ÐQÃTà ¥À" *H"|o`ÀHõi=5#Hm1ÍLF"Lh,(ZÍh%ÊS54.eE%AQ¢¬ëxÒøh¥9\êÞ `DC&X¤²Ü$q®3LPHûdÖ¡¤?IN>qÎ
$QAº>Ñî;+ó8s]á¢×´EQh"X©Âø§:kXàN¼ê&YÜ6àfaMEDi´ìÓ[Üj»{ßsVøc#\hÓ6Ða ܶwëçÓ¤yÍVfLpâ0bªS~0ÒQ!AÜ"4»ZTXU\.'YoHé8èfûuP¤B*(4:j¹÷n¡Åhf«8iUKíµ¦*v^]WvXA"F¸V qÁ;Y#Èr(Ñ@
æ¬íPßZ«\fãQ#¬(e¥UB7ã*bs{¹ýdH|¹]Jß^mk
+`´ê²ÃR\Õ%åÁ¦ò°°w¤yE
+I"¢sJR¼ xtjQ'\Áæ#0Ez´90S
+1
+D¡F"0CÀ¡H0d`hµ4r³ ÊJ©*Ût.:{vsnËn/Ýñj\ª[6\«jnq¶ZkH'PÐ(GÃJ¢ªp°»"DëèRH¡9tÌ9ݳE'i`U½|kZDØ=Å$F M ÙtÐ$\é©!ÖBEoZÈíPã|ïvg2E»låcû:òA¼ætöS¤ìèË0¬ÎZÀÁrNÚã%ºÜ/˶%IQC"&ú"h_ (¥ÈÐT¬ÞQUé\.æâ¦n4®) åï¦zÒKQETÒç&úñvnÚ÷Ó³u4ÂæUZi¤UVµ8¨èj:2äDßå
+Rª®Í{GN#xÀæçpØò$N]½2D!B$¦·/wæävsoÔ(:Ü6i¦-ÓM\¦rË7w®hÎd½ïjÖPÑ7"o°è»Òc
+p3Y[ÑôL4ÎSÌ2DÚH.ñ¤aƦc9¤)¦1Vc«1[§æä'XkÜaÑ|Úh¢eDSïi à´ ÕQ+ at J":réÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛsRunÍf®·órKrs.îªjnùÛzç]wÆÛí¶vÛ¢ÖÂããX£uG1Ú<ÿFÊx=/Ñ«ïGõ}®/ü3øýÚ;Qíj
à1ØüËõú?ưߪªª°&Iô¯mûssçÏÜÆ±6î~¬GGò9Áåüb1ðôp"ÄXÿ[àGÖH ~â$N¹¾?I¤>OØ<9ÇÖ(àÞÑülÒ#Ò#8ü°GÀGGÈ#ÑÄy0ØIô"nGý`v©DÐ$Yp! :DWcðÜFáÍ [Á6D4"¾";ĤªªIAåñHò¡)ª×Zw~2Æ=aÌE
+4ëÝ:çQÀa$O çÈ=B<,F¼"P¤I«¦¦DXÄ¿(GÛä¾DJjD]HÁÑÌGLGVDrXùxû5°yDPó¢Hsüðö÷"zH¡>¯ |úz|]ÕØäÚ
¡1=¾WäâDçíñÈDõMR#lc«&¡Çå¿¿«6Aï'³>êÖòøöù$æÚD ñ8a¯/Ètú»÷9yáCëÑà#:sQ'¡õü¦2#°Gï½E"wdIæH](àØT £TuÁbPêëñù0#(2(Etvô^ÄHÚDÈlH1£Ùa·¤0 "k¸ì;ØEì°tÈuê#ÊÃéræj¼ã$Aû(¤¨#Ø#£ %XÄVDHêÞ"»P
É qqp'ÈAÿrE8P?NÍ
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.env
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.env (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.env 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,2 @@
+HWLOC_LINUX_USE_CPUINFO=1
+export HWLOC_LINUX_USE_CPUINFO
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,225 @@
+Machine (P#0 total=528473984KB Backend=Linux)
+ NUMANode L#0 (P#0 local=132101504KB total=132101504KB)
+ Socket L#0 (P#1 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
+ Core L#2 (P#2)
+ PU L#2 (P#8)
+ Core L#3 (P#3)
+ PU L#3 (P#12)
+ Core L#4 (P#4)
+ PU L#4 (P#16)
+ Core L#5 (P#5)
+ PU L#5 (P#20)
+ Socket L#1 (P#0 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#6 (P#0)
+ PU L#6 (P#1)
+ Core L#7 (P#1)
+ PU L#7 (P#5)
+ Core L#8 (P#2)
+ PU L#8 (P#9)
+ Core L#9 (P#3)
+ PU L#9 (P#13)
+ Core L#10 (P#4)
+ PU L#10 (P#17)
+ Core L#11 (P#5)
+ PU L#11 (P#21)
+ Socket L#2 (P#2 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#12 (P#0)
+ PU L#12 (P#2)
+ Core L#13 (P#1)
+ PU L#13 (P#6)
+ Core L#14 (P#2)
+ PU L#14 (P#10)
+ Core L#15 (P#3)
+ PU L#15 (P#14)
+ Core L#16 (P#4)
+ PU L#16 (P#18)
+ Core L#17 (P#5)
+ PU L#17 (P#22)
+ Socket L#3 (P#3 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#18 (P#0)
+ PU L#18 (P#3)
+ Core L#19 (P#1)
+ PU L#19 (P#7)
+ Core L#20 (P#2)
+ PU L#20 (P#11)
+ Core L#21 (P#3)
+ PU L#21 (P#15)
+ Core L#22 (P#4)
+ PU L#22 (P#19)
+ Core L#23 (P#5)
+ PU L#23 (P#23)
+ NUMANode L#1 (P#1 local=132124160KB total=132124160KB)
+ Socket L#4 (P#4 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#24 (P#0)
+ PU L#24 (P#24)
+ Core L#25 (P#1)
+ PU L#25 (P#28)
+ Core L#26 (P#2)
+ PU L#26 (P#32)
+ Core L#27 (P#3)
+ PU L#27 (P#36)
+ Core L#28 (P#4)
+ PU L#28 (P#40)
+ Core L#29 (P#5)
+ PU L#29 (P#44)
+ Socket L#5 (P#5 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#30 (P#0)
+ PU L#30 (P#25)
+ Core L#31 (P#1)
+ PU L#31 (P#29)
+ Core L#32 (P#2)
+ PU L#32 (P#33)
+ Core L#33 (P#3)
+ PU L#33 (P#37)
+ Core L#34 (P#4)
+ PU L#34 (P#41)
+ Core L#35 (P#5)
+ PU L#35 (P#45)
+ Socket L#6 (P#6 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#36 (P#0)
+ PU L#36 (P#26)
+ Core L#37 (P#1)
+ PU L#37 (P#30)
+ Core L#38 (P#2)
+ PU L#38 (P#34)
+ Core L#39 (P#3)
+ PU L#39 (P#38)
+ Core L#40 (P#4)
+ PU L#40 (P#42)
+ Core L#41 (P#5)
+ PU L#41 (P#46)
+ Socket L#7 (P#7 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#42 (P#0)
+ PU L#42 (P#27)
+ Core L#43 (P#1)
+ PU L#43 (P#31)
+ Core L#44 (P#2)
+ PU L#44 (P#35)
+ Core L#45 (P#3)
+ PU L#45 (P#39)
+ Core L#46 (P#4)
+ PU L#46 (P#43)
+ Core L#47 (P#5)
+ PU L#47 (P#47)
+ NUMANode L#2 (P#2 local=132124160KB total=132124160KB)
+ Socket L#8 (P#8 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#48 (P#0)
+ PU L#48 (P#48)
+ Core L#49 (P#1)
+ PU L#49 (P#52)
+ Core L#50 (P#2)
+ PU L#50 (P#56)
+ Core L#51 (P#3)
+ PU L#51 (P#60)
+ Core L#52 (P#4)
+ PU L#52 (P#64)
+ Core L#53 (P#5)
+ PU L#53 (P#68)
+ Socket L#9 (P#9 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#54 (P#0)
+ PU L#54 (P#49)
+ Core L#55 (P#1)
+ PU L#55 (P#53)
+ Core L#56 (P#2)
+ PU L#56 (P#57)
+ Core L#57 (P#3)
+ PU L#57 (P#61)
+ Core L#58 (P#4)
+ PU L#58 (P#65)
+ Core L#59 (P#5)
+ PU L#59 (P#69)
+ Socket L#10 (P#10 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#60 (P#0)
+ PU L#60 (P#50)
+ Core L#61 (P#1)
+ PU L#61 (P#54)
+ Core L#62 (P#2)
+ PU L#62 (P#58)
+ Core L#63 (P#3)
+ PU L#63 (P#62)
+ Core L#64 (P#4)
+ PU L#64 (P#66)
+ Core L#65 (P#5)
+ PU L#65 (P#70)
+ Socket L#11 (P#11 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#66 (P#0)
+ PU L#66 (P#51)
+ Core L#67 (P#1)
+ PU L#67 (P#55)
+ Core L#68 (P#2)
+ PU L#68 (P#59)
+ Core L#69 (P#3)
+ PU L#69 (P#63)
+ Core L#70 (P#4)
+ PU L#70 (P#67)
+ Core L#71 (P#5)
+ PU L#71 (P#71)
+ NUMANode L#3 (P#3 local=132124160KB total=132124160KB)
+ Socket L#12 (P#12 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#72 (P#0)
+ PU L#72 (P#72)
+ Core L#73 (P#1)
+ PU L#73 (P#76)
+ Core L#74 (P#2)
+ PU L#74 (P#80)
+ Core L#75 (P#3)
+ PU L#75 (P#84)
+ Core L#76 (P#4)
+ PU L#76 (P#88)
+ Core L#77 (P#5)
+ PU L#77 (P#92)
+ Socket L#13 (P#13 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#78 (P#0)
+ PU L#78 (P#73)
+ Core L#79 (P#1)
+ PU L#79 (P#77)
+ Core L#80 (P#2)
+ PU L#80 (P#81)
+ Core L#81 (P#3)
+ PU L#81 (P#85)
+ Core L#82 (P#4)
+ PU L#82 (P#89)
+ Core L#83 (P#5)
+ PU L#83 (P#93)
+ Socket L#14 (P#14 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#84 (P#0)
+ PU L#84 (P#74)
+ Core L#85 (P#1)
+ PU L#85 (P#78)
+ Core L#86 (P#2)
+ PU L#86 (P#82)
+ Core L#87 (P#3)
+ PU L#87 (P#86)
+ Core L#88 (P#4)
+ PU L#88 (P#90)
+ Core L#89 (P#5)
+ PU L#89 (P#94)
+ Socket L#15 (P#15 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ Core L#90 (P#0)
+ PU L#90 (P#75)
+ Core L#91 (P#1)
+ PU L#91 (P#79)
+ Core L#92 (P#2)
+ PU L#92 (P#83)
+ Core L#93 (P#3)
+ PU L#93 (P#87)
+ Core L#94 (P#4)
+ PU L#94 (P#91)
+ Core L#95 (P#5)
+ PU L#95 (P#95)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 NUMANodes (type #2)
+ depth 2: 16 Sockets (type #3)
+ depth 3: 96 Cores (type #5)
+ depth 4: 96 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3
+ 0 1.000 2.600 2.600 2.600
+ 1 2.600 1.000 2.600 2.600
+ 2 2.600 2.600 1.000 2.600
+ 3 2.600 2.600 2.600 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.source
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.source (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co-forcecpuinfo.source 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1 @@
+96em64t-4n4d3ca2co.tar.bz2
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,388 @@
+Machine (P#0 total=528473984KB Backend=Linux)
+ NUMANode L#0 (P#0 local=132101504KB total=132101504KB)
+ Socket L#0 (P#1 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#0 (size=16384KB linesize=64 ways=16)
+ L2Cache L#0 (size=3072KB linesize=64 ways=12)
+ L1Cache L#0 (size=32KB linesize=64 ways=8)
+ Core L#0 (P#0)
+ PU L#0 (P#0)
+ L1Cache L#1 (size=32KB linesize=64 ways=8)
+ Core L#1 (P#1)
+ PU L#1 (P#4)
+ L2Cache L#1 (size=3072KB linesize=64 ways=12)
+ L1Cache L#2 (size=32KB linesize=64 ways=8)
+ Core L#2 (P#2)
+ PU L#2 (P#8)
+ L1Cache L#3 (size=32KB linesize=64 ways=8)
+ Core L#3 (P#3)
+ PU L#3 (P#12)
+ L2Cache L#2 (size=3072KB linesize=64 ways=12)
+ L1Cache L#4 (size=32KB linesize=64 ways=8)
+ Core L#4 (P#4)
+ PU L#4 (P#16)
+ L1Cache L#5 (size=32KB linesize=64 ways=8)
+ Core L#5 (P#5)
+ PU L#5 (P#20)
+ Socket L#1 (P#0 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#1 (size=16384KB linesize=64 ways=16)
+ L2Cache L#3 (size=3072KB linesize=64 ways=12)
+ L1Cache L#6 (size=32KB linesize=64 ways=8)
+ Core L#6 (P#0)
+ PU L#6 (P#1)
+ L1Cache L#7 (size=32KB linesize=64 ways=8)
+ Core L#7 (P#1)
+ PU L#7 (P#5)
+ L2Cache L#4 (size=3072KB linesize=64 ways=12)
+ L1Cache L#8 (size=32KB linesize=64 ways=8)
+ Core L#8 (P#2)
+ PU L#8 (P#9)
+ L1Cache L#9 (size=32KB linesize=64 ways=8)
+ Core L#9 (P#3)
+ PU L#9 (P#13)
+ L2Cache L#5 (size=3072KB linesize=64 ways=12)
+ L1Cache L#10 (size=32KB linesize=64 ways=8)
+ Core L#10 (P#4)
+ PU L#10 (P#17)
+ L1Cache L#11 (size=32KB linesize=64 ways=8)
+ Core L#11 (P#5)
+ PU L#11 (P#21)
+ Socket L#2 (P#2 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#2 (size=16384KB linesize=64 ways=16)
+ L2Cache L#6 (size=3072KB linesize=64 ways=12)
+ L1Cache L#12 (size=32KB linesize=64 ways=8)
+ Core L#12 (P#0)
+ PU L#12 (P#2)
+ L1Cache L#13 (size=32KB linesize=64 ways=8)
+ Core L#13 (P#1)
+ PU L#13 (P#6)
+ L2Cache L#7 (size=3072KB linesize=64 ways=12)
+ L1Cache L#14 (size=32KB linesize=64 ways=8)
+ Core L#14 (P#2)
+ PU L#14 (P#10)
+ L1Cache L#15 (size=32KB linesize=64 ways=8)
+ Core L#15 (P#3)
+ PU L#15 (P#14)
+ L2Cache L#8 (size=3072KB linesize=64 ways=12)
+ L1Cache L#16 (size=32KB linesize=64 ways=8)
+ Core L#16 (P#4)
+ PU L#16 (P#18)
+ L1Cache L#17 (size=32KB linesize=64 ways=8)
+ Core L#17 (P#5)
+ PU L#17 (P#22)
+ Socket L#3 (P#3 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#3 (size=16384KB linesize=64 ways=16)
+ L2Cache L#9 (size=3072KB linesize=64 ways=12)
+ L1Cache L#18 (size=32KB linesize=64 ways=8)
+ Core L#18 (P#0)
+ PU L#18 (P#3)
+ L1Cache L#19 (size=32KB linesize=64 ways=8)
+ Core L#19 (P#1)
+ PU L#19 (P#7)
+ L2Cache L#10 (size=3072KB linesize=64 ways=12)
+ L1Cache L#20 (size=32KB linesize=64 ways=8)
+ Core L#20 (P#2)
+ PU L#20 (P#11)
+ L1Cache L#21 (size=32KB linesize=64 ways=8)
+ Core L#21 (P#3)
+ PU L#21 (P#15)
+ L2Cache L#11 (size=3072KB linesize=64 ways=12)
+ L1Cache L#22 (size=32KB linesize=64 ways=8)
+ Core L#22 (P#4)
+ PU L#22 (P#19)
+ L1Cache L#23 (size=32KB linesize=64 ways=8)
+ Core L#23 (P#5)
+ PU L#23 (P#23)
+ NUMANode L#1 (P#1 local=132124160KB total=132124160KB)
+ Socket L#4 (P#4 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#4 (size=16384KB linesize=64 ways=16)
+ L2Cache L#12 (size=3072KB linesize=64 ways=12)
+ L1Cache L#24 (size=32KB linesize=64 ways=8)
+ Core L#24 (P#0)
+ PU L#24 (P#24)
+ L1Cache L#25 (size=32KB linesize=64 ways=8)
+ Core L#25 (P#1)
+ PU L#25 (P#28)
+ L2Cache L#13 (size=3072KB linesize=64 ways=12)
+ L1Cache L#26 (size=32KB linesize=64 ways=8)
+ Core L#26 (P#2)
+ PU L#26 (P#32)
+ L1Cache L#27 (size=32KB linesize=64 ways=8)
+ Core L#27 (P#3)
+ PU L#27 (P#36)
+ L2Cache L#14 (size=3072KB linesize=64 ways=12)
+ L1Cache L#28 (size=32KB linesize=64 ways=8)
+ Core L#28 (P#4)
+ PU L#28 (P#40)
+ L1Cache L#29 (size=32KB linesize=64 ways=8)
+ Core L#29 (P#5)
+ PU L#29 (P#44)
+ Socket L#5 (P#5 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#5 (size=16384KB linesize=64 ways=16)
+ L2Cache L#15 (size=3072KB linesize=64 ways=12)
+ L1Cache L#30 (size=32KB linesize=64 ways=8)
+ Core L#30 (P#0)
+ PU L#30 (P#25)
+ L1Cache L#31 (size=32KB linesize=64 ways=8)
+ Core L#31 (P#1)
+ PU L#31 (P#29)
+ L2Cache L#16 (size=3072KB linesize=64 ways=12)
+ L1Cache L#32 (size=32KB linesize=64 ways=8)
+ Core L#32 (P#2)
+ PU L#32 (P#33)
+ L1Cache L#33 (size=32KB linesize=64 ways=8)
+ Core L#33 (P#3)
+ PU L#33 (P#37)
+ L2Cache L#17 (size=3072KB linesize=64 ways=12)
+ L1Cache L#34 (size=32KB linesize=64 ways=8)
+ Core L#34 (P#4)
+ PU L#34 (P#41)
+ L1Cache L#35 (size=32KB linesize=64 ways=8)
+ Core L#35 (P#5)
+ PU L#35 (P#45)
+ Socket L#6 (P#6 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#6 (size=16384KB linesize=64 ways=16)
+ L2Cache L#18 (size=3072KB linesize=64 ways=12)
+ L1Cache L#36 (size=32KB linesize=64 ways=8)
+ Core L#36 (P#0)
+ PU L#36 (P#26)
+ L1Cache L#37 (size=32KB linesize=64 ways=8)
+ Core L#37 (P#1)
+ PU L#37 (P#30)
+ L2Cache L#19 (size=3072KB linesize=64 ways=12)
+ L1Cache L#38 (size=32KB linesize=64 ways=8)
+ Core L#38 (P#2)
+ PU L#38 (P#34)
+ L1Cache L#39 (size=32KB linesize=64 ways=8)
+ Core L#39 (P#3)
+ PU L#39 (P#38)
+ L2Cache L#20 (size=3072KB linesize=64 ways=12)
+ L1Cache L#40 (size=32KB linesize=64 ways=8)
+ Core L#40 (P#4)
+ PU L#40 (P#42)
+ L1Cache L#41 (size=32KB linesize=64 ways=8)
+ Core L#41 (P#5)
+ PU L#41 (P#46)
+ Socket L#7 (P#7 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#7 (size=16384KB linesize=64 ways=16)
+ L2Cache L#21 (size=3072KB linesize=64 ways=12)
+ L1Cache L#42 (size=32KB linesize=64 ways=8)
+ Core L#42 (P#0)
+ PU L#42 (P#27)
+ L1Cache L#43 (size=32KB linesize=64 ways=8)
+ Core L#43 (P#1)
+ PU L#43 (P#31)
+ L2Cache L#22 (size=3072KB linesize=64 ways=12)
+ L1Cache L#44 (size=32KB linesize=64 ways=8)
+ Core L#44 (P#2)
+ PU L#44 (P#35)
+ L1Cache L#45 (size=32KB linesize=64 ways=8)
+ Core L#45 (P#3)
+ PU L#45 (P#39)
+ L2Cache L#23 (size=3072KB linesize=64 ways=12)
+ L1Cache L#46 (size=32KB linesize=64 ways=8)
+ Core L#46 (P#4)
+ PU L#46 (P#43)
+ L1Cache L#47 (size=32KB linesize=64 ways=8)
+ Core L#47 (P#5)
+ PU L#47 (P#47)
+ NUMANode L#2 (P#2 local=132124160KB total=132124160KB)
+ Socket L#8 (P#8 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#8 (size=16384KB linesize=64 ways=16)
+ L2Cache L#24 (size=3072KB linesize=64 ways=12)
+ L1Cache L#48 (size=32KB linesize=64 ways=8)
+ Core L#48 (P#0)
+ PU L#48 (P#48)
+ L1Cache L#49 (size=32KB linesize=64 ways=8)
+ Core L#49 (P#1)
+ PU L#49 (P#52)
+ L2Cache L#25 (size=3072KB linesize=64 ways=12)
+ L1Cache L#50 (size=32KB linesize=64 ways=8)
+ Core L#50 (P#2)
+ PU L#50 (P#56)
+ L1Cache L#51 (size=32KB linesize=64 ways=8)
+ Core L#51 (P#3)
+ PU L#51 (P#60)
+ L2Cache L#26 (size=3072KB linesize=64 ways=12)
+ L1Cache L#52 (size=32KB linesize=64 ways=8)
+ Core L#52 (P#4)
+ PU L#52 (P#64)
+ L1Cache L#53 (size=32KB linesize=64 ways=8)
+ Core L#53 (P#5)
+ PU L#53 (P#68)
+ Socket L#9 (P#9 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#9 (size=16384KB linesize=64 ways=16)
+ L2Cache L#27 (size=3072KB linesize=64 ways=12)
+ L1Cache L#54 (size=32KB linesize=64 ways=8)
+ Core L#54 (P#0)
+ PU L#54 (P#49)
+ L1Cache L#55 (size=32KB linesize=64 ways=8)
+ Core L#55 (P#1)
+ PU L#55 (P#53)
+ L2Cache L#28 (size=3072KB linesize=64 ways=12)
+ L1Cache L#56 (size=32KB linesize=64 ways=8)
+ Core L#56 (P#2)
+ PU L#56 (P#57)
+ L1Cache L#57 (size=32KB linesize=64 ways=8)
+ Core L#57 (P#3)
+ PU L#57 (P#61)
+ L2Cache L#29 (size=3072KB linesize=64 ways=12)
+ L1Cache L#58 (size=32KB linesize=64 ways=8)
+ Core L#58 (P#4)
+ PU L#58 (P#65)
+ L1Cache L#59 (size=32KB linesize=64 ways=8)
+ Core L#59 (P#5)
+ PU L#59 (P#69)
+ Socket L#10 (P#10 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#10 (size=16384KB linesize=64 ways=16)
+ L2Cache L#30 (size=3072KB linesize=64 ways=12)
+ L1Cache L#60 (size=32KB linesize=64 ways=8)
+ Core L#60 (P#0)
+ PU L#60 (P#50)
+ L1Cache L#61 (size=32KB linesize=64 ways=8)
+ Core L#61 (P#1)
+ PU L#61 (P#54)
+ L2Cache L#31 (size=3072KB linesize=64 ways=12)
+ L1Cache L#62 (size=32KB linesize=64 ways=8)
+ Core L#62 (P#2)
+ PU L#62 (P#58)
+ L1Cache L#63 (size=32KB linesize=64 ways=8)
+ Core L#63 (P#3)
+ PU L#63 (P#62)
+ L2Cache L#32 (size=3072KB linesize=64 ways=12)
+ L1Cache L#64 (size=32KB linesize=64 ways=8)
+ Core L#64 (P#4)
+ PU L#64 (P#66)
+ L1Cache L#65 (size=32KB linesize=64 ways=8)
+ Core L#65 (P#5)
+ PU L#65 (P#70)
+ Socket L#11 (P#11 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#11 (size=16384KB linesize=64 ways=16)
+ L2Cache L#33 (size=3072KB linesize=64 ways=12)
+ L1Cache L#66 (size=32KB linesize=64 ways=8)
+ Core L#66 (P#0)
+ PU L#66 (P#51)
+ L1Cache L#67 (size=32KB linesize=64 ways=8)
+ Core L#67 (P#1)
+ PU L#67 (P#55)
+ L2Cache L#34 (size=3072KB linesize=64 ways=12)
+ L1Cache L#68 (size=32KB linesize=64 ways=8)
+ Core L#68 (P#2)
+ PU L#68 (P#59)
+ L1Cache L#69 (size=32KB linesize=64 ways=8)
+ Core L#69 (P#3)
+ PU L#69 (P#63)
+ L2Cache L#35 (size=3072KB linesize=64 ways=12)
+ L1Cache L#70 (size=32KB linesize=64 ways=8)
+ Core L#70 (P#4)
+ PU L#70 (P#67)
+ L1Cache L#71 (size=32KB linesize=64 ways=8)
+ Core L#71 (P#5)
+ PU L#71 (P#71)
+ NUMANode L#3 (P#3 local=132124160KB total=132124160KB)
+ Socket L#12 (P#12 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#12 (size=16384KB linesize=64 ways=16)
+ L2Cache L#36 (size=3072KB linesize=64 ways=12)
+ L1Cache L#72 (size=32KB linesize=64 ways=8)
+ Core L#72 (P#0)
+ PU L#72 (P#72)
+ L1Cache L#73 (size=32KB linesize=64 ways=8)
+ Core L#73 (P#1)
+ PU L#73 (P#76)
+ L2Cache L#37 (size=3072KB linesize=64 ways=12)
+ L1Cache L#74 (size=32KB linesize=64 ways=8)
+ Core L#74 (P#2)
+ PU L#74 (P#80)
+ L1Cache L#75 (size=32KB linesize=64 ways=8)
+ Core L#75 (P#3)
+ PU L#75 (P#84)
+ L2Cache L#38 (size=3072KB linesize=64 ways=12)
+ L1Cache L#76 (size=32KB linesize=64 ways=8)
+ Core L#76 (P#4)
+ PU L#76 (P#88)
+ L1Cache L#77 (size=32KB linesize=64 ways=8)
+ Core L#77 (P#5)
+ PU L#77 (P#92)
+ Socket L#13 (P#13 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#13 (size=16384KB linesize=64 ways=16)
+ L2Cache L#39 (size=3072KB linesize=64 ways=12)
+ L1Cache L#78 (size=32KB linesize=64 ways=8)
+ Core L#78 (P#0)
+ PU L#78 (P#73)
+ L1Cache L#79 (size=32KB linesize=64 ways=8)
+ Core L#79 (P#1)
+ PU L#79 (P#77)
+ L2Cache L#40 (size=3072KB linesize=64 ways=12)
+ L1Cache L#80 (size=32KB linesize=64 ways=8)
+ Core L#80 (P#2)
+ PU L#80 (P#81)
+ L1Cache L#81 (size=32KB linesize=64 ways=8)
+ Core L#81 (P#3)
+ PU L#81 (P#85)
+ L2Cache L#41 (size=3072KB linesize=64 ways=12)
+ L1Cache L#82 (size=32KB linesize=64 ways=8)
+ Core L#82 (P#4)
+ PU L#82 (P#89)
+ L1Cache L#83 (size=32KB linesize=64 ways=8)
+ Core L#83 (P#5)
+ PU L#83 (P#93)
+ Socket L#14 (P#14 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#14 (size=16384KB linesize=64 ways=16)
+ L2Cache L#42 (size=3072KB linesize=64 ways=12)
+ L1Cache L#84 (size=32KB linesize=64 ways=8)
+ Core L#84 (P#0)
+ PU L#84 (P#74)
+ L1Cache L#85 (size=32KB linesize=64 ways=8)
+ Core L#85 (P#1)
+ PU L#85 (P#78)
+ L2Cache L#43 (size=3072KB linesize=64 ways=12)
+ L1Cache L#86 (size=32KB linesize=64 ways=8)
+ Core L#86 (P#2)
+ PU L#86 (P#82)
+ L1Cache L#87 (size=32KB linesize=64 ways=8)
+ Core L#87 (P#3)
+ PU L#87 (P#86)
+ L2Cache L#44 (size=3072KB linesize=64 ways=12)
+ L1Cache L#88 (size=32KB linesize=64 ways=8)
+ Core L#88 (P#4)
+ PU L#88 (P#90)
+ L1Cache L#89 (size=32KB linesize=64 ways=8)
+ Core L#89 (P#5)
+ PU L#89 (P#94)
+ Socket L#15 (P#15 CPUModel="Genuine Intel(R) CPU @ 2.66GHz")
+ L3Cache L#15 (size=16384KB linesize=64 ways=16)
+ L2Cache L#45 (size=3072KB linesize=64 ways=12)
+ L1Cache L#90 (size=32KB linesize=64 ways=8)
+ Core L#90 (P#0)
+ PU L#90 (P#75)
+ L1Cache L#91 (size=32KB linesize=64 ways=8)
+ Core L#91 (P#1)
+ PU L#91 (P#79)
+ L2Cache L#46 (size=3072KB linesize=64 ways=12)
+ L1Cache L#92 (size=32KB linesize=64 ways=8)
+ Core L#92 (P#2)
+ PU L#92 (P#83)
+ L1Cache L#93 (size=32KB linesize=64 ways=8)
+ Core L#93 (P#3)
+ PU L#93 (P#87)
+ L2Cache L#47 (size=3072KB linesize=64 ways=12)
+ L1Cache L#94 (size=32KB linesize=64 ways=8)
+ Core L#94 (P#4)
+ PU L#94 (P#91)
+ L1Cache L#95 (size=32KB linesize=64 ways=8)
+ Core L#95 (P#5)
+ PU L#95 (P#95)
+depth 0: 1 Machine (type #1)
+ depth 1: 4 NUMANodes (type #2)
+ depth 2: 16 Sockets (type #3)
+ depth 3: 16 Caches (type #4)
+ depth 4: 48 Caches (type #4)
+ depth 5: 96 Caches (type #4)
+ depth 6: 96 Cores (type #5)
+ depth 7: 96 PUs (type #6)
+latency matrix between NUMANodes (depth 1) by logical indexes:
+ index 0 1 2 3
+ 0 1.000 2.600 2.600 2.600
+ 1 2.600 1.000 2.600 2.600
+ 2 2.600 2.600 1.000 2.600
+ 3 2.600 2.600 2.600 1.000
+Topology not from this system
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.bz2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.bz2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/96em64t-4n4d3ca2co.tar.bz2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,142 @@
+BZh91AY&SYYd 3ÿÿçyìÿÿð}ï_ÿÿßð
+ #ø`|îñ@ P_l @ (ÞáÇ ð^«"RjǼÞ<Z÷G$IDAA@ À w_3ß1@À¾Üà ßx¢à ëß 6ã
+b
(.,Àu ¼äÀSë< æxòOëç[£
+õÇxèÀ=sà®6ÚÌz-àµhàu\@ s@ =£T½USÔ¨~©©¦ ¦ dÀ j=R©JzP
+3I5R
+4 C@ I¢ªjP 6£Ñ=A
+ ¡ =@ "PÔd 5#Mú 4Ð64 h4 hÕDh4G¨ Ô4zÔ=@@~¦)ê0zL£Ô4z©§õÈÿpñ ¿IüùE'¨
+Ðù
'
++
&"Äþ¸ù)?ÄèeBÓÂP÷©$Åà=pv@kBT²#%HaRÈJý8"¢¢Ð$E E7ÔÏÕ>·Ö¾ÅZ©Í[®®UÔuÒ®º«ª¥SªÚÏ{ÇÖW¤ãNëöëÓ{ÁÛE}+¦÷¶_k¾g3Ìݯ¡Ðöe½äáí&Ë{ÐO¥)â[Þ})EãÎÚN]Å:rë®Rë{Ôú®uÕÛ]U
+ðîð×yÆÜqóùÕ9¶ûo¸î¾÷GGâH¼^ÓÄ$ñáYzoeó*¯Þºoºµ´C»tô¼É½®êý¯´áêà=G/{Ý$~ç½t}¾>î¿]¼Îmn·GíÑáF¯F·£[Ñç&×y½gUÉUtÕÉUa«ô%<«ÓË qïEî÷³ÔÙ¦m@:§P¥¶öu êÔ©ï¾ õ êÔ¨GxêÔ©¶ÞÓÓÓ¯_mö¶öu õ êׯ^ @:m)Þ=|êêÔ¨P GÓ¨P¤Ónm êu´§[Ju´§[JÑÞ:u ê-hÐ @:u êÔ¨úu+¶60 @:u êÔ¨ê :¢a:Û@:u êÔ¨P @:u6i£§êÔ¨RmÏÞº]>rI%WwI$u/»mÕ>îîUI'I%T»ºJã}ÝUÝ:»§WWrîí©¯¤rwwwvʶ«»u®ç½}Ùokc#§¹ÎtWÛÕ·»Þ·S¾¯Üºynô³6û1ºÞîIUÝÒIKîæÛuO»»¤RIÒIU$îîªI'wrîîîîî®îînTo¤ª»ºI#©}ÜÛn©÷wtªI:I*¤Ý$ªNîî]ÝÝÝÝÕÝÝɾ9Ìëí²êg_I#©}Ý}}rIUîé%Tr××}ÝÝ;§ÒI'wvUvóéÝ÷m÷võWIÒúd¸®]G*«§TDê_w9.\¹u;»ºIU$$fÎîu&ÉÝÜ»»·Nèö³»ººêtI*»ºI#©}ÜÛn©÷wtªI:I*¤ÝÒUI$îî]ÝÝÝÝÕÝÝÙj×/w.\¹råÒ(¹råÝË.î!råˤQE.Õ¨¢åËw.]vråË(¡éí¥===:téÞõTéÓ§N:téÕ\¹råË.\ºIË.\»»g¯Kê½9:wMÉ$«»ºIKÜÛuM÷wI*¤¤ªIÝÝ%TNîåÝÝÝÝ
Ý]ÝÝÞîë6´iÜ´÷jèÛt¤ôðIJE(E<N Ó)ÁàpE8"N )H¥§S)ÁàäúN§StàÝ"M§S)Áàò=ÄS)ÁàPpE8"N§SqÁàpIJE(E8"§S)Ááò¼N§¤RS)ÁàpE8"N Ó2;i¡àpE8"N§S)ÁààpE8"N§S)ÁàpIJE:lS)Áàx'¯6Ëj$éÓ»§N=:)'N:{ºté¼§N7ÞI³Ó§N»§E$tôé8ééé²°:t4÷6ßM:ztéÓ§FútéÓ§N:tS¾¾¾ºwÛJmM$«»ºIKÜÛuM÷wI*¤ºIU$Ý>I;»wwwwuwwsr¤}$«»ºIKÜÛuM÷wI*¤¤ªIÝÝ>I;»wwwwuwwr»¾»V¢(¢(ºíZåË».\»»1bÅËH¢)vEË.]ܹuÚµË.]ܹrëµk.\¹r)vEQråËU.\¹råË.]w|¹råÍÂ|,ınqðÞõÖ·~Ä{ÂÜ!àå}ëj¾õµ^õµ^õµ^õµ^õµ^ö[¾¶«ï[Uï[Uï[Uï[owmªõõªúúÕzúÕzøwkåïvÚ¯_Z¯_Z¯_Z¯_Z¯_[ݻ֫wÖ«îõªû½j¾ïw½zÕ{½j¾äÞ@äî@äîR.÷ FûWݽåïvÚ¯tÝ[:n7VΫgMÕ³¦âÏun7j§ºÕN~Õ»íµSÝj§uªÖªwZ©Ýj§uªÖ«îsT÷´Ý«JÁMó;)ÜÁNæ
+w0S¹Ìî`§s;¥ª[è4wA£º
+ÐhîGt; ÑÝè4wÕ7ÑEîáßFøB;#¸»»ÇÂź
+\~¸?s`QE.\¹ræ1cÆ1cÂI ÂI r¤ÄE.´k]sýqë¯=:.÷6ßN :ÛUªÞÕº·wVêÝÞ÷·wVêÝÝ[ª«AP"HÖtîîî^æÛéÀÇUmV«{VêÝÝÝÝÞ÷îêÝ[«wv«zÕm E$¬Æ±âI¼q1"Eªö÷m¯ovÚöÚVv¬êÎÙÜÁw´QIE%;ÐÓKAAEAKÁÁÅÓäæs999¹ÎnNNNNNknW'3§K¥ræ¹9¹s9årrssÍÁÄààݾóss}¦ÆÖkVto¹¯K§áC}KwÝvïwnðRûÞ=»²"ÑDÜm¼i<æx×Lá Q¨êájÕ5®<ߦļ
ååê³Á¢^W*«Ë¯&¶pN×*·*åÙÚ輤Uojܪª»;¶F¹D/ª¶«U½«Rµ*¹r÷x\`¹Uj··ww{ÞÊUvow¶%ÈHZ»VêÝÝÕmåP.^Þîݶj©jÕɶÛéi½¿rywsm½ûVý«S]"m´ÞÞ¿ZiòîæM¶Í¦ï¤M¦÷g]«÷wtR)#M-[ö©óz·{s2ؤi§ÒIù´kîí«ºIm¶ZQn,Ë»zm¶¤^õ@
åÕKíZ·vRF*ç9e(ѼÛZV¶²µ¶Ò½ÔæYZ½7bO®Õ¯w{FÝZm7Sº¬W[mbªQI¨ÖDM
+!u \*µnÚHf£«½{»¶X&¢m·îâMoÚµEÑH¤´Þý«wíMO¢Im6ÚoÚµDrI"Iinýª&Ûm7$Oµ-Z¹6¤R6mjÅQ¦m©yU·Û«wfE ªÛ"I at j;KRµ"H±XÅF"°D!HÀ10c"$ZÅß9N§F5:<óm®m÷2uétíôWÐÞ¶ñö4ñ®Lá &g:®>¹«§±oKÊ籿/,ºz
=Ïm£ìâ ä}6¢{<=Àç³ÙsSz*P|CÙ}zÏA_gtO
+óRö<ÜòôO
+ósÉä[^ÛfS%òy<¶áÉ
+¥t¥Dgj"vÆbï3øðð¾&棫½_¦Ä¼
ååëgD¼®UWw{Ó®UnU˳»Þðº«{VåʪäM[«v4ÒÝûTM8¤6Û}©UW-[Ë»·m¼ª
ËÛÝÝÞòÝ[¶d\¦©$M[²þµiµ"qfKµq´ÛæÙ7nR×ëm-kY$QT,$ê¯ovÚö÷m¯m¥C¡êΨíÁÁ§y9;àPQE%ï¶Ã³°ìÅ-GNkÉÉÉÍÊæss999®y¹ÎnkÁÄèåÊçÉÉÌ÷ÙàyÀáÃàp9P¥²¹Ñ¾ ëx´ëb§F¼Ómsi¦¹ÅÑ¡D.¡#«
VÛYÕpZ»ÞÝ×
+Òò«Wî×%ÅQU«¼¤RJyªÝ}JóíMO¢I1¶ñ»Oæj|ÜJ¸s%zQtI>®Ìϱ&¢äÚI®µ;Zb¶r÷\¡WUµÃn5U@ÛbHØ \ÒÒÚªö÷m¯ovÚöÚVv®si§3$!#:åÎÔµ-Z·J
+wÛaÙØv
+bö]iÌääææs9¹×<ÜÎNgNJåÍrs9råsÊääæçÁÀpáÈp8ÁK(RÙYØDÎ0îæØ
+ºÔp#Ý)»»»Ãç=EÇËi|£ÊZ§ `O£à
+&\ªp(Å Æ"(C¡ zs¹uÄ«I´¬ABU[]J«mJÚËjªª!)$Ù`+î$ ¡´¥)iURÈ0X"1b"Á N¤±/+ܺ¤«Må*V«]U[nUm©[mÊ @)y$°GN{¡!¤È³ZÙm--(¥ ÄAA°`¢ÌKÊ÷.©*ÓjÉZVºVÕUVܪÛR¨E=,§=ÐÒdS[-¡mÛDDYH0Q1(v,Ìò½ËªJ´Ú²*j¶×U¶Õmµ[mT ¢Eå+áf"ÒÛ-²ÛjªXàDDDF""Á!È@ôçzwVVE at H@%j¶ªêµ[UªÚªáÎrpÛÛ)iCÒÁÓèHi2)-²ÚÒÑDD)pF
+""""'B@ô9ܹ\J´Ú²*j¶åuZWU¶Õj¶ªµT@g³Ág%}ÐÒdSZ[Kl¶Ëmª+,8ÁDDDDDb1:,ļªîo:¬U¦²* F Ëj©ÕiZªÛj¶Ú¶ª RI"btáéCÈ)im-¥¶ÕT¤ ÁEDDDDDX$ Ù ôçzwqÒÞc^cmm§²CN{UT²CÉÆ10]6g?±»Ø¡X©TµF¦FLÈÉÞåÜìÙcƦ8I$8 8pá»äzN==1cÆ1cÍ6lÙÏ4¹K22d¦b¦f&21J²`ÄÂ#:a e2ôËÔD½| ¿8._z/Ïü¶ËmikQ¥® ¶Ú¥%H¤kú µUbZ¬UV EXIeUUV0
+K_µUV*°KUUÀJª û pÏÊ O@ ²ªªðªªªÆÕUUb«IfffeÀ¶ _8,ù7áÇù?@ý?Ф¾E}±V*ÅX«ýU±V+ú1_Ò5ª[T¶©m`OÓQòÅh¿"¬U±V*ÅX«éò×EX«b¬U±V*§Í\J|ÕÁ$§u͵k3EZµ¢33È
¿ö úUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU_óøªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª¸ #²**E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+í2îS!¡R¡yLå2**ÈnS!¡R¡R¡yLå2**ÈnS!¡R¡R¡yLå2ÑBþ
+d3*ö´ÈkEÊd3*Èd¨[EÊd3*ÈkEÊd3*ÈkEÊd2T+*ÈkEÊd3*Èo>óÅd÷ Åd¶ÛIFT1Y*É1 ÇöÛdݶâZöÜRK°x¬¶Ü[&í·Ö¬
õ¸¶M÷Ųnõ¸¶Mß³·É»ñn-_Á1Y+rb$=ñn-_Á1Y+ø&+%>-ÄIN·%:ÜDëqUÁÉW+%\¬8ñÉo[dÝëql½n-u+%ä¬õ¸¶M޷ɺ#ü~¸¶MԬǡÉhVJô¬Çqâ$O [qP1I 1I) âxC©1
+LDb$>M·Éº¬+%¢1Y/zÜ[&ëVAÇ¡Éhb²^VKCÐÅd´1Y+ ãÄH8ñ
+GRb$&"AIàÅd·mŲh¤+%¡É|¬¼æÐ弿Ðå¼çæ 'ìäüd>
+Â)?ìXµ
¬ZÂÖ-b»Áxÿ°/ pÛîóñlmão
+_Ö+kZØÞÛ÷²üýGUÔa;ÙàÌûs:xw·Ùv°Î÷¤_jI/öîù»mãtÛzÓmÓmënÛxÝ6Þ¶í·¶Ûm¶ÛmÑUUUEUUUWÐ µ67ßUn9ÅmSòcü®È{Ó5k<½TôôñÊJ½½}» ^mùW³³=«Æ{{ðKá)òI/¸ ¾mÅ» ç*¦q·\Þ÷ã¾¼üÚXæ÷°hs9Îg9àw(Ûæp0ç9Ì=ÕUUv×<s¸ü~5nîë÷½íîï{{»ÞÞî÷·»½í ö{{»ÞÞî÷·»½íîï{{»ÞÞî÷¶ÒI}ú¿VÀY% dA¢UÞÿ,Ön¥øÏyªúIº¡Vç¡s
+²¾¬¬°øÁi8zi«Yì9ÒªÑ0Qéûà±¶Ùi$ØÖ+@=ü_óóv»~`s5$Ëm IgÓ¤Én§¸I%¸' B |¤WÂXÈÐæÜ¨.À_ /æÿ\ò ^ ¹óðñ¼õ¯fÚðùwã|k~7Ö$ä!U-£mV
+(JñÈ*¬ßnÓ3m÷Ù÷Ý»<A}`»Ð.ð/ÎùÁ} ¼@¸ú`/ \èâ Zî¸/h.AnÞ pÞ¼¸¼ñ©U°/ÌDZ÷Ð|ùõáù3ã8À ¨"¢*"¢/ï"¬U±_Ô-ª[T¶©m~EX«b¬U±V*Èà|ð>gÆqOb¬U±_
µKjÕ-¯È«b¬WámRÚ¥µKj| x)>I
+*aÜX¦qbf&Å·åÛÕ@s$È${À| "díܰ3Ëy¶ÛZH H $`É $ @@ $6Ð2@ Ø"(Á 6$ I#l a l0h À@ #H À>ý$}BI,ÝÝ èoÄúiý^» °I4°Çf`y{/WÕöÚøÞ«ÓÓÓÓ{ß§=/ÓÓÓÐXI$Ö hÐI½íŬ X ° X£@ $ff`÷·°`Ö I °FxñàÌÌ ÞöâÖ , X , Ñ¥<x33 7½¸µ 4i`'ÌÀ
+ïn-`À À
+ I#33 7½¸µE
+ @P £@ $ff`÷·°`À ` $ÞÜZÀ 4 Fff o{qk , hÐI½íŬ X °I¬ Ñ 330{ÛX °` °FHÌÌÀ
+ïn-`À À
+ I#33 7½¸µ 4h$ÌÌ ÞöâÖ , X , Ñ 330{ÛXP E
+4 Fff o{qk ,$Ak 4h$ÌÌ ÞöâÖ , XI$Ö hÐI½íŬ X °I¬ Ñ 330{Û -` $X£@ $ff`÷·°`ÀI$°FHÌÌÀ
+ïn-`À$H-` $ÞÜZÀ I$ZÀ
+ I#33 7½¸°k I µ4 Fff o{q`J I$P £@ $ff`÷· , ZÀI$°FHÌÌÀ
+ïn, X µ$H-` $ÞÜX °k I$ZÀ
+ I#33 ]¶µ °IÑ 330{Û -` $X£@ $ff`÷· , ZÀI$°FHÌÌÀ
+ïn, X µ$H-` $ÞÜX °k I$ZÀ
+ I#33 7½¹ , ZÀI$ /FHÌÌÀm`À¬$A`ôh$ÌÌvÚÖ , ZÀI$ /FHÌÌÀmé@X5 I °JPI#33 ÒçÈ 0d° @ $`É ` I l$ @
+ #m$ lâ $¶ "$l 8 # B 0IgÊÄÄKÌ}:téæ*}÷ßÚûãvII@ÛpÀB HÚÙ$ À b"FÐ6É Ø¤Q7Û$ #hd l@¢¦6É 7ÓmD FÔ$#h =ñÅï{ÀÕUTUUUEUUTUUEUUTUUEUUTUEUUTUTUUUTTUEUUUUEU\HCÙUUUVر2@ $`É`@ $F I Ù#H I#m$ @
+ÜQ$ @@ $6Ð2@ ÂdQD! 2@ $` È Fò$ÏlRk$h" lH$$ HÛ0 !Dd2F @6bÁ0m $a$l À``R5`Ñ
Á 06ðlA 6
+±H A m¶ÛiUUUUUQUUUUQUUUUQUUUUUUQUUUQQUUUUUUq!HCeUUUUÄ1
+â ;ªPççZçm¶óß}ü÷ßóf~lÏÍù³.ëÞõû3=»»æÛ~Ié$wîïß¿~ùÎrï@jMîåéV«UªÕzM*ÛÖ¶åÝóÖf/Yíï¿~ëïß¿}ffk«Ð )¥Þ«oZUª×¯*òºò<ªü³=µ¾m½ô7Û'¶nÏI6s33|æ®JZïnsnq½·µí»»ÔK6m{mzM.ãäç9¬Úï#7s½r ÒîÝiº].K¥Ö¨z׳³6½ºÝçrnyɹç&æ·~|ùóç×Ï>wª¨ªªª¨ªªªª¨ªªªªª¨ªªªªªªªªªªªªª¨¨ªªªªª«ôHCá!
+UUUWÒ
+ªª¢ªªª*ªª¢ªª*ªª¢ªª*ªª¢ªªªªªª¢ªªª¢¢ª**ªªªªªã*¢¨*¨ª(*ªª(UUUQUTQªªª¢,b¢ªªªª©²ªªªªìªªª¿¸ @}yÌϳê"[Ç%´¶QûraæÜÉQychGíéÓÀÆf#{¡E(#ÝgKtU2vúéÏ,-d«:qì׫¯´â+§§¬<hzQAJ|êzfsÛå<âÎl¡B«.ÙC.Ø2b¬UJ0m9¤ò¨úØ[b¨{±¥%<Û_õ+¼ØÔCÐUÛE fºFÖuï<ò¼|§^/$,$ (+T°d¥P=L®·kp0¿)îÜ]õΰv®múë;gt3$I$¾ÝÖv×» L è~o»èÛéÞÆKã0bcæª0TòÚ¨ÅLmßN\8 0áà ÙÚ«µeUUvõ|xçS¯SËÔöÀ UUUÛªÕUUvÕjªªª»u×]u×]uÐ @yUUUvóí]«½kUªïRªªûvk,Ë2M¦j
+ á§l»eâ`0
+
+
+1GÄÃñÉL|øyjZ§©å© B:õh @ÎÎNÍ4ÓM4ÓL0`ÛoËȯ"¼ò+Äâq8
+ÍÍÍͶÛo¶¨RþÊgõ¸û÷p6[)l¶Rû¸0ÅL2SÃa²Sà ùO©øëS¦0XÄ`Éd
+Yr3LÊfOÈh-ÍÔ¿ p¸Gâ~!øÄNN
J
+(¡J
+E()¢
() ¡BP ¡B
J)R
JZ((RJJE(¡J.
+pqGvuHüä¦Wc`
+U(¥J(RJ(R ¡R¢()¢(¡J
+(¥J
+¥ RT¢8Jpp§#8p0XÅ1c(ÆTÃÆ)LC½
+li
+¤6ÚCb@ÚC`ÒHm!!´6Á°m!´ÒHl`@ÚÁ6 ´ÒÒÒChm"È(E´Ì,e3'ü=ÿßúÿ!ñà}OÔð®T?h>Ò»îû©AJ¥RJPP)T
+P4*U!T
"JUAB¥¥R4UE)C@¥PU%?ô~._{ï}íÛ·nÝ»vî÷Å3VjÍY«0Ã!B!B¿2¥R©T7bË.VíÛ·nÝ»wlD~f `"@b21#1#I1#I1H`Æ`Æ111,FHÆ1cÆ"1b#Æ1cÆ1cÉÉÉ1cÆ1DcÄDHÄHÄADÄ 1T#0c0c0 °c+XeX! ÈÉT¥Áí°Ìý¨yÆô²U×w8-ÿG4·¸ÉÂedÂxÞ̨«ðe¬"®Ø\G#è¢yÉ#dQERJþjº9¶[#\ìU+¶JmhÞUèfòãUÌÆf'vÕ¸Ø#K
+ôZRRé¹Á%PvÀw@ûêÁX¨8Äc rfnÙ¼lQtõ³[#º4RRd%°>W¼yÉ>¹`ÜIIîäØbk ©ïYnÃ3fãd*ç
\Å`2mC¨¾m¡½±Æô¸QæûÐ Æ[%i
+ñqÄ{î 7î»ÅyµW"Û¯YMl¬²¥Vµ>Þûðk(V[k±"»N¼W½NhQa[;'=¯<O\gO×bÚX(°==ô¶
FÙ{²RØ*ÅP¦ÙCʱV*Îzi/)¤ÜëQPUØ T¢Ñ¶î¨÷ÔÊëÚ*¬v¾óq*WÝEΧxùæ|O} OçàQ2æ|g?<k»c}¹Í¶É $M·ë[m®8¸ è¢ÒBHú@ñwçÉæóóóø UUUÛªÕUUvÕjªªª»u×]u×]uÐ gZÖµÀ 8Òlh×K ¢ò
+ÇPȱ!bY 2,
e%°°_ü?îÈCª/Uüp>¨ª+HY
+(DUüp>ÿ¬S_½ú´ü7æyy¶1£¿¸Y°^Çø]Â['øGê¼ÑçÞå±n0Ý@5 á:ìðÁT_áÏ>Û,ôÞÞJ&`U L[ϱÎ1§rvI~Ä{óÍY{Q7èg¨±xWǶNàJã(¨¾ÀAð><r¾O$
+ûhª áñIâ3¿p{Îô½¨íêÏ»\$dHAÁsã ès©íöïí %C×x. °yd½üiìÌc)w¼:ñ9Q2ydª s£êèÉm«Wã}ÍÔLðü}bì¹hsKZÅ¡hÈ}¸c^8EØ+nûÞú}C
DÊR]´4Ô,D
æ0W"³ÅáUqÞ0õ³Ðãâ+λƧ¶sÛB¶¥6
+áå¡×ÑT)jÄV*ËÍ1¶¦¥Xª ¤õ©I¼YÖÆµiIîÓ[Í1«vº[Ú+*]´ÊýÚkZõ¡ç]nãàÉôBüò²
ÌQfsc ìµøç{2o$BI5XÕm¾µO° <\3,ÛAî Î$®Òªª»{ªªíÏë¯/Yåë<ýx ÕUUvêµUU]µZªªª®Ýu×]u×]t åUUUÙYÚµZªí®ËìÏï©TMý¤Oai!$) Or湸$ (FH½ÄöóÔåD¢¡É{,6DMF)0mÕ¦ZÑfðuë ëIÅx.«Áw]ti`[ÎÑa{¸ÛûrX)ç¹Tp?&;¼ c#]ô¢nª¥â
+¦Ë" ¬ñ,H"¢"+ÌAѬüs
³"ÛÉÝÆtï²NLéha0ÞÚ2=ôÔ$¨&+×X(àMíkA1VLïÛjÌbmeFLÆÑ
+Ì +xí}ØJ¿ºa n¡=6Ìí°ºaG7}ÑÛ¾z$\)n¤ìÊÒoÜÚÙ,aÃM
+Nq)8ÞlçzNïÚÐ-Àû(ª ñ:£µíbBñ³bKX)¼ÕÏ.Ö*ÅR±_¯Â÷bhø°ÜÆ5
Ê
CCÆäJm*<e´+Îγ®¾ø¶ú̧q^yï±T=²²d¶Ù9çµF´Ëeµb©lª«B¨Uíb* ¡.¶{ämÊÐb¥ÏÑ$Î&Å-C)õ-z\®ÒÜÓ*±Úe Ðõ¡"$+XÌv~p [`}E[Êg®93ä{ÖÜëZ¶¡©$I%³µ`ÿ( û¹ßïÏ<séh UUUÛªÕUUvÕjªªª»u×]u×]uÐ UUhMä$Ú*Èä>¾0 ¨mÑUÊ¤Ë ^ì;ÞÍkÛ$Æ]µÛíIÊ:áÔÁÉ̼¼"Äй2¢_å¯O>d1{9ì ÂÒ&Ѻ½@@^;ìÇj&]Ä,æÂ8ÉìÔ®®"Ø"®
2eD¥N g|·eí`Ì-ÈH dGQ6:2
+X2j,«¥]:= Ë£¥ÅµÅõ "DXÌK8á \bÞqÁ¥'u°#×)&Â
+*Á³Ô²ðoºñW \wÖr¢kh}U ëÄÇ]
¶-b}ÎnZW%TX¢¦j±áÙ{ÃDB÷
¬¢,mî2*ï³ÛB¼ï¥j½¶[´m
+¯¾+ë`m)<âøÉi¥X«-«o¸4EEYÛT8m)¬¦¤´³Äêx$c#í¡ÚKJL}aëB8ò¦Wz]¢²¡ÐËÎn'òxõP!$B Â"XªÃ2eL,#k0aÁac1L¢) È"ÈY AARc2LÌLf&M
ñ33Ú¥¾1V`³f0½Ê`brm< TÎ:Æs¿PÔ¾¤I$/zÖxãÀ8/r}{\eI "9¾oιã=kZÐ kZÖµ¬ëZÖ¨ ºl,A· ÈôòBÒëIÊ^+Ç3ÌÑ|pøeEQVA"*þÆá
+,YQVX
XÄéSM%*4N0^Ýô2
+XÉ^à^o#3lÆT×BÌfCÍæy(ϧÐT /ÐÙç×ÖÇL{mL±a-vȲwÙÚÙ×\ôä-Ìm`,@$2Ï'*&L!ÏV¤¿P´²ÂZ0!"´Ú*ÈZGZ
+OEÑz#³7À8ÀÀpzèÚ_˰»'r0Ék¤TM÷ñk9µ@ÄÏI -d± ñÂG[dc$
HH>yʳ«(°ìê'yçt.)3Ã.A~YTûeP¢¨ aDDðqhù
iPø~¨¿rÔÖ£5ªo}ì´¤¥ 1Â÷¼90xûN0õ³Fò«[
+ßb¨tñ|mo¨mbjcÏ_QX ¡ÖK=Yëe5§xb"¬Sl¡eUX«/vP˶ðæ4-(êM˺!ÖuȤgKJ,¾ó/:Ù2&áûfǯÚ[ÚUc²µXÌçÞY¹hHBâ* A« Uf1fPÅYY0YFXafUÀÊ0020ʰa| ÁöLz[qÈïÅø®wñm$IW;ùgwµUWns|âO\ ß9͵%X´©, ɺÏÅö©Usñ}RûÞ?`©òÚ%\Èëµ,X/4äÁÌßJ$Þ,º´I¹`×´ßkì¼F&/%¡kH(VÑbªD"Íò¡´´,ÙÑléDÐ7d$k:
+Aj´e¤qeZÒv-ÈÂ-âKÑÄq1hhòáDÐfU-$f-h¥ÍHºÛZÉ~NL êJîºi°jÕª£F$ ZBxüùóç>Å¥[F¥^:\m|å3¹LÊ5-ihù÷¸
¥
-,)ï9Âs¸01=ÖfxîuŨ¨wÕ}lÞ_-*«[YëçzÐí%¥&jù%Yê=ÊMJ±V]2íDV*ÅPÇvSÎc
+ÚP8óÔí°ª
g\b´ gÛÏ}ògz`ÀPÈá0}ºeÛnWÅfW³[uÉÃÇ>òÍÌ@$ '>¹ìø 7 Aè |\6Ús|ZÓ~· oÖÛu¾·È ÞöÚúÆúç!pÉĶXUвo§¿( Mûò*¥õ%T¢% mÝãy%íã£~'$°plm0Á²1exwB H©pzém$äÒr@?>ë×{äú¨ ¢@ÛNð/;ß
jña9áàB$# ,T¿yn6ã
UÕÄ#«$Ѧ4ïѧ²Î¶øc,ÄÆÆ.ÖRÚìç #²µ&çsFZµ4i¥©¦"ÖÕ×q³jÐÖj¾TÝ«³*Ì3,fU´ç²ïr¾ç|2"²
³ÌK߬. BCF
+]´HÏþ¹ßIÑ:wêK»s®»ÉP E=JAñûÞý;é7Uܦ*ÄeS¦CXïÔ. Þévâï¹øÒ±¶ÅÔM¹ $U ¹çG1êÖ´ZÅíiibfé¯5Ù+P¢êT¨-m¯§¡ô¥-
K
÷[/¾»N[3ÞZÊ7ʨVÎwÔVsv³Ç8×ÖYr%s+ij¤Q6²ziÞ3
+Ù7x³.Ø2ÄVÕ
+me5EX«/lébT¢Þö*ÎÚkB´m(( y½|Þ{ìñóÚ`S Ø÷Là3_']ØÕ{6bؼÅÌLC ¾æ> Füfqé_³sò¯¯»ñ§¿âÛl?( ^}õWÉ/ÉIR¥]òÏ´|²l¢`Ë¥îêb F0~®¥E ø3h(!!I>yóä9ºm¶VÄ¥!BÒJKÔ,é#Ô:;ûfwRubbXX«È±V*ÅXG¦hMu׸Ìé¤ÛÛ*¶7{'T·¼5&¤´¦D´ÔµEY10¦¥kR5*gº6µÙ[ÄÅèáãÙ·~Ý©9jK
+ÉTBÌ"Î?VÙ Xd@¤~ºvDèv@`éË»c®MwmmzRIaFD'¶'dRP
+'m'Sa,^Âf-ù°Þ VLÀ±Q01P,!!õH hEPQ#0&$
`°I0?>$! >Ê"ÀF"³J2:J0
+$±ÉPÄP¢*¥Y± È Âup¸Á.£hÙ°A,#£9ÊãgªNÊ7ÜöOA at oZæ×æZýw÷x»[Zß®3óÀÈÎq6¾/^ZýªU|¾4üwçÀ 8 ?S÷æ|óüãÕEQ_Îø
+¨ª*ÈB at a$Ü;<º8Q-bÊ'«ÅRwù=<Ýýð]z´÷º÷RytôÎAt)DÚù1
qÐ Õ(wåÀêm©§ÉçÀwÒy®õèõçØ.ܰ¼ÎL¨ï·~\yúzzfþηÍoÆúÊ åwßZ®7üfÖï9ß à ü¿
|¾^Ëñ0¢qbu5Æû(ZÊ&7!¨mT¢qÐ ã>ÿÁþÿvÇÝø}Æc
+Ä*Õ_ü¼ó³gÿ±küìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$e×ÍzóG´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ:ú¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ:ú¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ:ú¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ:ú¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ:ú¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬j/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÆ©Rõîi;o×{6µû$cT©z÷G´·ëÉ=Z
ýKV±×Ô½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬j/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk}K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$cT©z÷G´·ëÉ=ZýKV±ªT½{£ÚNÛõäÍ-~É%«Xëê^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk¥K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÇ_Rõîi;o×{6µû$c¯©z÷G´·ëÉ=ZýKV±ªT½{£ÚNÛõäÍ-~É%«XÕ*^½Ñí'múòOfÿdÕ¬j/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk¥K׺=¤í¿^IìØb×ìZµR¥ëÝÒv߯$öl1köI-ZÆ©Rõîi;o×{6µû$cT©z÷G´·ëÉ=ZýKV±ªT½{£ÚNÛõäÍ-~É%«XÕ*^½Ñí'múòOfÿdÕ¬uõ/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk¥K׺=¤í¿^IìØb×ìZµR¥ëÝÒv߯$öl1köI-ZÆ©Rõîi;o×{6µû$cT©z÷G´·ëÉ=ZýKV±ªT½{£ÚNÛõäÍ-~É%«XÕ*^½Ñí'múòOfÿdÕ¬j/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk¥K׺=¤í¿^IìØb×ìZµ¾¥ëÝÒv߯$öl1köI-ZÆ©Rõîi;o×{6µû$cT©z÷G´·ëÉ=ZýKV±ªT½{£ÚNÛõäÍ-~É%«XÕ*^½Ñí'múòOfÿdÕ¬j/^èö¶ýy'³a_²IjÖ5J¯t{IÛ~¼Ù°Å¯Ù$µk,|&¾Ý|1ýÆ1cÆ=~Ot·Ä|e¿ ~ÛíÌ]©
BÂØ%U±?ø÷ÅU]
+æ5?Ý?O_Û"N½tTSïþø,¿Wîat¡~[lfÏæüÚ|@·Ö_¦ e>RI3kûÓé À ÷«Fÿ /Ò}÷ËÀÂ@¾P_ÙhÃ8gM
Ak+0é°Àû¦±ÔýÙü`½?/éôË.gÓÝïÖ½óáþ^@]&ÜÇyôýtúg/¸°-À_Ý÷`èúÀ/°Ô .N.êÀtrê@«äòJ 0¨ÈºM§ôÍÁ%|¯Ø/@_4ìÞp^³ìÀ-o /x.À^*azÀ^WP^´, ¾KØÄ×8@| /`Ss`_ÐùÀ^`É5: ½eP [§ _ åtûÒ¨*ààÀ\÷dýð[àrV ´R.ð]A`/×@w´`ZÐ-Ázܼ
+ ´SÔçØÌ¹ìî<À°ìJ 5üøPºxt+¼TP°À_X-À¿HÕ
&)0¤ÅXLL'Ì`¸ÜÀ¿Xôì_0/P,¬Kh&îòyLÃS´ð¹ÞÀ¹4°. X Xçà.ιgߢîxÀ[Ð,©}²¨¥^ ½³ -} ]qÔ/¤ö °¹Ìªï{ÁxýGp¨óÜÆ1-ÁlÔP «ÐT¥} »×Èñ.¶ñ};fßéÏïñù×°.À°ØÎµ>2N©ì@aÅ*Ð.@·´
+½ ¾À½ +â7rÄlÀíx]ົÀIóÐ. ]0{{Àº
+}g¸à> _Ó´ªìK¸@æ³ÄÀSÐÜ/Û>è}3/~ -ÒÃEë:zÐ´Þ >0,æÚ@¶ÓªüâÔ²|ç©ð·àÔÏ*ù@.AP´^ËÔùÁW-À½À¼êP)>2ýWp.ð»øAyÏP[Éâ©áêÙÜÈzÀ.À¸ÀTz~U©ÿ9à¨,<§¨
+X$øHP\wòØlærÀx`Zìlí? qìê½Ò¨ø«|À/íña1ÅOP/pï@| º®à¨*ÜØô;§p.A|À«Àúlò0ö÷ªuö'°ÆA~à/¯x/P[h _h ]à°Æ
+¼Auànæ\âwöë|¼UOP.Azï`,²E]à»åP°.{Á| °à¶ °úà¹~̰¨/ÿMê´P ^ÉÀ«åð@`.rh<`,°½ÑPp;ÁlÜp ,¾©í÷¥P ¾¾ ]A&[ ¸í»WÆðó7À,ö´óÍÌá*ÜíRð¸/ÕáÜ*Pê4Ô/×@pàóÕL Þ{¸Ú¤AçP\ ½À¾0_¸àÈ*ä /p.À½À/ ]| µØ ²w ¼ yØÑöའY
^Ùîÿ¬ªõ¿ªU¸/o{Ï@UñÁP·`)öÞ-äÀìÔ
+^ °
+X}@»| / _@*Ôä¸#@/(¨ ôR÷{`÷$RÿâîH§
+K,
\ No newline at end of file
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,149 @@
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2011 Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+# Add your expected output file here.
+# By default, it shows the output of `lstopo - -v'.
+sysfs_outputs = \
+ 2amd64-2n.output \
+ 2i386-2t-hugepagesizecount.xml.output \
+ 2ps3-2t.output \
+ 4ia64-4s.output \
+ 4ppc-4c.output \
+ 256ppc-8n8s4t.output \
+ 256ppc-8n8s4t-nocache.output \
+ 256ppc-8n8s4t-nosys.output \
+ 32amd64-4s2n4c-cgroup.output \
+ 32amd64-4s2n4c-cgroup.xml.output \
+ 32ppc-4n4c2c.output \
+ 8amd64-4n2c.output \
+ 8em64t-4c2t.output \
+ 8em64t-2s2ca2c.output \
+ 8em64t-2s4c-heterogeneous.output \
+ 8ia64-2n2s2c.output \
+ 8ia64-2s2c2t.output \
+ 8ia64-4s2c.output \
+ 16amd64-8n2c.output \
+ 16amd64-8n2c-cpusets.output \
+ 16amd64-8n2c-cpusets.xml.output \
+ 16amd64-8n2c-cpusets_noadmin.output \
+ 16em64t-4s2cu2c.output \
+ 16em64t-4s2c2t.output \
+ 16em64t-4s2c2t-offlines.output \
+ 16em64t-4s2c2t-offlines.xml.output \
+ 16em64t-4s2c2t-offlines_noadmin.output \
+ 16em64t-4s2c2t_ncaches.output \
+ 16em64t-4s2c2t_merge.output \
+ 16em64t-4s2c2t.xml.output \
+ 16em64t-2m4c2t.output \
+ 16ia64-8n2s.output \
+ 48amd64-4d2n6c-sparse.output \
+ 64fake-4n2s2ca2c2t.output \
+ 96em64t-4n4d3ca2co.output \
+ 96em64t-4n4d3ca2co-forcecpuinfo.output \
+ 128ia64-17n4s2c.output \
+ 256ia64-64n2s2c.output \
+ 4qs22-2s2t.output \
+ 2s390-2c.output \
+ 20s390-2g6s4c.output \
+ 1alpha.output \
+ 2arm-2c.output
+
+# Each output `xyz.output' must have a corresponding tarball `xyz.tar.bz2'
+# or a corresponding `xyz.source' specifying which tarball to use
+sysfs_tarballs = \
+ 2amd64-2n.tar.bz2 \
+ 2i386-2t-hugepagesizecount.tar.bz2 \
+ 2i386-2t-hugepagesizecount.xml.source \
+ 2ps3-2t.tar.bz2 \
+ 4ia64-4s.tar.bz2 \
+ 4ppc-4c.tar.bz2 \
+ 256ppc-8n8s4t.tar.bz2 \
+ 256ppc-8n8s4t-nocache.source \
+ 256ppc-8n8s4t-nosys.source \
+ 32amd64-4s2n4c-cgroup.tar.bz2 \
+ 32amd64-4s2n4c-cgroup.xml.source \
+ 32ppc-4n4c2c.tar.bz2 \
+ 8amd64-4n2c.tar.bz2 \
+ 8em64t-4c2t.tar.bz2 \
+ 8em64t-2s2ca2c.tar.bz2 \
+ 8em64t-2s4c-heterogeneous.tar.bz2 \
+ 8ia64-2n2s2c.tar.bz2 \
+ 8ia64-2s2c2t.tar.bz2 \
+ 8ia64-4s2c.tar.bz2 \
+ 16amd64-8n2c.tar.bz2 \
+ 16amd64-8n2c-cpusets.tar.bz2 \
+ 16amd64-8n2c-cpusets.xml.source \
+ 16amd64-8n2c-cpusets_noadmin.source \
+ 16em64t-4s2cu2c.tar.bz2 \
+ 16em64t-4s2c2t.tar.bz2 \
+ 16em64t-4s2c2t-offlines.tar.bz2 \
+ 16em64t-4s2c2t-offlines.xml.source \
+ 16em64t-4s2c2t-offlines_noadmin.source \
+ 16em64t-2m4c2t.tar.bz2 \
+ 16em64t-4s2c2t_merge.source \
+ 16em64t-4s2c2t_ncaches.source \
+ 16em64t-4s2c2t.xml.source \
+ 16ia64-8n2s.tar.bz2 \
+ 48amd64-4d2n6c-sparse.tar.bz2 \
+ 64fake-4n2s2ca2c2t.tar.bz2 \
+ 96em64t-4n4d3ca2co.tar.bz2 \
+ 96em64t-4n4d3ca2co-forcecpuinfo.source \
+ 128ia64-17n4s2c.tar.bz2 \
+ 256ia64-64n2s2c.tar.bz2 \
+ 4qs22-2s2t.tar.bz2 \
+ 2s390-2c.tar.bz2 \
+ 20s390-2g6s4c.tar.bz2 \
+ 1alpha.tar.bz2 \
+ 2arm-2c.tar.bz2
+
+# Each output `xyz.output' may have a corresponding exclude `xyz.exclude'
+sysfs_excludes = \
+ 256ppc-8n8s4t-nocache.exclude \
+ 256ppc-8n8s4t-nosys.exclude
+
+# Each output `xyz.output' may have a corresponding `xyz.options'
+# file modifying the behavior of lstopo
+sysfs_options = \
+ 2i386-2t-hugepagesizecount.xml.options \
+ 16amd64-8n2c-cpusets.xml.options \
+ 16amd64-8n2c-cpusets_noadmin.options \
+ 16em64t-4s2c2t-offlines.xml.options \
+ 16em64t-4s2c2t-offlines_noadmin.options \
+ 16em64t-4s2c2t_ncaches.options \
+ 16em64t-4s2c2t_merge.options \
+ 16em64t-4s2c2t.xml.options \
+ 32amd64-4s2n4c-cgroup.xml.options
+
+# Each output `xyz.output' may have a corresponding `xyz.env'
+# modifying the environment of lsopo
+sysfs_envs = \
+ 2i386-2t-hugepagesizecount.xml.env \
+ 32amd64-4s2n4c-cgroup.env \
+ 32amd64-4s2n4c-cgroup.xml.env \
+ 96em64t-4n4d3ca2co-forcecpuinfo.env
+
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_OPENAT
+if HWLOC_HAVE_BUNZIPP
+TESTS = $(sysfs_outputs)
+endif HWLOC_HAVE_BUNZIPP
+endif HWLOC_HAVE_OPENAT
+endif HWLOC_BUILD_TESTS
+
+EXTRA_DIST = $(sysfs_outputs) $(sysfs_tarballs) $(sysfs_excludes) $(sysfs_options) $(sysfs_envs)
+
+TESTS_ENVIRONMENT = $(builddir)/test-topology.sh
+
+
+bin_SCRIPTS = hwloc-gather-topology
+
+install-exec-hook:
+ $(SED) -e 's/abs_top_builddir\/utils/bindir/' -e '/abs_top_builddir/d' $(DESTDIR)$(bindir)/hwloc-gather-topology > $(DESTDIR)$(bindir)/hwloc-gather-topology.tmp && mv -f $(DESTDIR)$(bindir)/hwloc-gather-topology.tmp $(DESTDIR)$(bindir)/hwloc-gather-topology
+
+SUBDIRS = gather
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,13 @@
+# Copyright © 2010 inria. All rights reserved.
+# Copyright © 2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_LINUX
+if HWLOC_HAVE_OPENAT
+if HWLOC_HAVE_BUNZIPP
+TESTS = test-gather-topology.sh
+endif HWLOC_HAVE_BUNZIPP
+endif HWLOC_HAVE_OPENAT
+endif HWLOC_HAVE_LINUX
+endif HWLOC_BUILD_TESTS
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,83 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2010 inria. All rights reserved.
+# Copyright © 2010 Cisco Systems, Inc. All rights reserved.
+# Copyright © 2011 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+lstopo="$abs_top_builddir/utils/lstopo"
+gather="$abs_top_builddir/tests/linux/hwloc-gather-topology"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+# Ensure we're running on linux. If not, then just exit with status
+# code 77 (the GNU standard for a skipped test)
+
+case `uname -a` in
+*[Ll]inux*) good=1 ;;
+*)
+ echo "Not running on linux; skipped"
+ exit 77 ;;
+esac
+
+error()
+{
+ echo $@ 2>&1
+}
+
+if [ ! -x "$lstopo" ]
+then
+ error "Could not find executable file \`$lstopo'."
+ exit 1
+fi
+if [ ! -x "$gather" ]
+then
+ error "Could not find executable script \`$gather'."
+ exit 1
+fi
+
+tmpdir=`mktemp -d`
+
+# make sure we compare things that are comparable
+# (the tarball cannot be "this system")
+export HWLOC_THISSYSTEM=0
+
+echo "Saving current system topology to XML..."
+if ! "$lstopo" "$tmpdir/save.xml" ; then
+ error "Failed"
+ exit 1
+fi
+
+echo "Saving current system topology to a tarball..."
+if ! "$gather" "$tmpdir/save" ; then
+ error "Failed"
+ exit 1
+fi
+
+echo "Extracting tarball..."
+if ! ( cd "$tmpdir" && tar xfj save.tar.bz2 ) ; then
+ error "Failed"
+ exit 1
+fi
+export HWLOC_FSROOT="$tmpdir/save"
+
+echo "Saving tarball topology to XML..."
+if ! "$lstopo" "$tmpdir/save2.xml" ; then
+ error "Failed"
+ exit 1
+fi
+
+echo "Comparing XML outputs..."
+( cd $tmpdir && diff -u save.xml save2.xml )
+result=$?
+
+rm -rf "$tmpdir"
+
+exit $result
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/gather/test-gather-topology.sh.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,138 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2012 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+bindir="@bindir@"
+# this will be changed into $bindir/lstopo during make install
+lstopo="$abs_top_builddir/utils/lstopo"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+error()
+{
+ echo $@ 2>&1
+}
+
+usage()
+{
+ echo "$0 <savepath>"
+ echo " Saves the Linux topology files (/sys, /proc, ...) under <savepath>.tar.bz2"
+ echo " and the corresponding lstopo verbose output under <savepath>.output"
+ echo "Example:"
+ echo " $0 /tmp/\$(uname -n)"
+}
+
+name="$1"; shift
+if [ -z "$name" -o x`echo $name | cut -c1` = x- ] ; then
+ [ x$name != x -a x$name != x-h -a x$name != x--help ] && echo "Unrecognized option: $name"
+ usage
+ exit 1
+fi
+basename=`basename "$name"`
+dirname=`dirname "$name"`
+
+if ! mkdir -p "$dirname" ; then
+ error "Failed to create directory $dirname."
+ exit 1
+fi
+
+if [ ! -w "$dirname" ] ; then
+ echo "$dirname is not writable."
+ exit 1
+fi
+
+destdir=`mktemp -d`
+
+# Use cat so that we properly get proc/sys files even if their
+# file length is wrong
+savefile() {
+ local dest="$1"
+ local file="$2"
+ dir=`dirname "$file"`
+ mkdir -p "$dest/$dir" 2>/dev/null
+ cat "$file" > "$dest/$file" 2>/dev/null
+}
+
+# Gather the following list of files
+cat << EOF | while read -r path ; do savefile "$destdir/$basename" "$path" ; done
+/proc/cpuinfo
+/proc/meminfo
+/proc/mounts
+/proc/stat
+/proc/self/cpuset
+EOF
+
+# Get all files from the given directory
+# Ignore errors since some files may be missing, and some may be
+# restricted to root (but we don't need them).
+savedir() {
+ local dest="$1"
+ local path="$2"
+ # gather all directories, including empty ones
+ find "$path" -type d 2>/dev/null | while read -r dir ; do
+ mkdir -p "$dest/$dir" 2>/dev/null
+ done
+ # gather all files now
+ find "$path" -type f 2>/dev/null | while read -r file ; do
+ savefile "$dest" "$file"
+ done
+}
+
+# Gather the following list of directories
+cat << EOF | while read -r path ; do savedir "$destdir/$basename" "$path" ; done
+/sys/devices/system/cpu/
+/sys/devices/system/node/
+/sys/bus/cpu/devices/
+/sys/bus/node/devices/
+/sys/class/dmi/id/
+/sys/kernel/mm/hugepages/
+/proc/device-tree/cpus/
+EOF
+
+# Get an entire mount point, after decoding its path
+# we don't support path with \n since it would break in 'find ... | while read ..." above
+savemntpnt() {
+ local encodedpath=$1
+ if echo "$1" | grep "\\012" ; then
+ echo "Ignoring mount point whose filename contains an end of line."
+ return
+ fi
+ local path=$(echo "$1" | sed -e 's@\\134@\\@g' -e 's@\\040@ @g' -e 's@\\011@ @g')
+ savedir "$destdir/$basename" "${path}/"
+}
+
+# Gather cgroup/cpuset mntpnts
+cat /proc/mounts | while read -r dummy1 mntpath mnttype mntopts dummy2 ; do
+ [ x$mnttype = xcpuset ] && savemntpnt "$mntpath"
+ [ x$mnttype = xcgroup ] && echo $mntopts | grep -w cpuset >/dev/null && savemntpnt "$mntpath"
+done
+
+# Create the archive and keep the tree in /tmp for testing
+( cd "$destdir/" && tar cfj "$basename.tar.bz2" "$basename" )
+mv "$destdir/$basename.tar.bz2" "$dirname/$basename.tar.bz2"
+echo "Hierarchy gathered in $dirname/$basename.tar.bz2 and kept in $destdir/$basename/"
+
+# Generate the output as well
+if [ ! -x "$lstopo" ]
+then
+ error "Could not find lstopo executable in the install or build dir."
+ exit 1
+fi
+# we need "Topology not from this system" in the output so as to make test-topology.sh happy
+export HWLOC_THISSYSTEM=0
+"$lstopo" - -v > "$dirname/$basename.output"
+echo "Expected topology output stored in $dirname/$basename.output"
+
+exit 0
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/hwloc-gather-topology.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/test-topology.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/test-topology.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux/test-topology.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,139 @@
+#!@BASH@
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2011 Université Bordeaux 1
+# Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+# Check the conformance of `lstopo' for all the Linux sysfs
+# hierarchies available here. Return true on success.
+
+HWLOC_top_srcdir="@HWLOC_top_srcdir@"
+HWLOC_top_builddir="@HWLOC_top_builddir@"
+lstopo="$HWLOC_top_builddir/utils/lstopo"
+
+actual_output="$1"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+error()
+{
+ echo $@ 2>&1
+}
+
+# test_topology NAME TOPOLOGY-DIR
+#
+# Test the topology under TOPOLOGY-DIR. Return true on success.
+test_topology ()
+{
+ local name="$1"
+ local dir="$2"
+ local expected_output="$3"
+ local options="$4"
+
+ local output="`mktemp`"
+
+ export HWLOC_FSROOT="$dir"
+ export HWLOC_DEBUG_CHECK=1
+
+ opts="-v -"
+ [ -r "$options" ] && opts=`cat $options`
+
+ if ! "$lstopo" $opts > "$output"
+ then
+ result=1
+ else
+ if [ "$HWLOC_UPDATE_TEST_TOPOLOGY_OUTPUT" != 1 ]
+ then
+ diff -uBb "$expected_output" "$output"
+ result=$?
+ else
+ if ! diff "$expected_output" "$output" >/dev/null
+ then
+ cp -f "$output" "$expected_output"
+ echo "Updated $expected_output"
+ fi
+ result=0
+ fi
+ fi
+
+ rm "$output"
+
+ return $result
+}
+
+# test_eligible TOPOLOGY-DIR
+#
+# Return true if the topology under TOPOLOGY-DIR is eligible for
+# testing with the current flavor.
+test_eligible()
+{
+ local dir="$1"
+ local output="$2"
+
+ [ -d "$dir" -a -f "$output" ]
+}
+
+
+if [ ! -x "$lstopo" ]
+then
+ error "Could not find executable file \`$lstopo'."
+ exit 1
+fi
+
+topology="${actual_output%.output}"
+if [ "$topology" = "$actual_output" ] ;
+then
+ error "Input file \`$1' should end with .output"
+ exit 1
+fi
+actual_options="$topology".options
+
+# if there's a .source file, use the tarball name it contains instead of $topology
+if [ -f "$topology".source ] ; then
+ actual_source="$HWLOC_top_srcdir"/tests/linux/`cat "$topology".source`
+else
+ actual_source="$topology".tar.bz2
+fi
+
+# if there's a .env file, source it
+if [ -f "$topology".env ] ; then
+ source "$topology".env
+fi
+
+# use an absolute path for tar options because tar is invoked from the temp directory
+actual_exclude="$HWLOC_top_srcdir/tests/linux/`basename $topology`".exclude
+[ -f "$actual_exclude" ] && tar_options="--exclude-from=$actual_exclude"
+
+result=1
+
+dir="`mktemp -d`"
+
+if ! ( bunzip2 -c "$actual_source" | ( cd "$dir" && tar xf - $tar_options ) )
+then
+ error "failed to extract topology \`$topology'"
+else
+ actual_dir="`echo "$dir"/*`"
+
+ if test_eligible "$actual_dir" "$actual_output"
+ then
+ test_count="`expr $test_count + 1`"
+
+ test_topology "`basename $topology`" "$actual_dir" "$actual_output" "$actual_options"
+ result=$?
+ else
+ # Skip this test.
+ result=77
+ fi
+fi
+
+rm -rf "$dir"
+
+exit $result
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux-libnuma.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux-libnuma.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/linux-libnuma.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,244 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+#include <assert.h>
+#define NUMA_VERSION1_COMPATIBILITY
+#include <hwloc/linux-libnuma.h>
+
+/* check the linux libnuma helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ hwloc_bitmap_t set, set2, nocpunomemnodeset, nocpubutmemnodeset, nomembutcpunodeset, nomembutcpucpuset;
+ hwloc_obj_t node;
+ struct bitmask *bitmask, *bitmask2;
+ unsigned long mask;
+ unsigned long maxnode;
+ int i;
+
+ if (numa_available() < 0)
+ /* libnuma has inconsistent behavior when the kernel isn't NUMA-aware.
+ * don't try to check everything precisely.
+ */
+ exit(77);
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ /* convert full stuff between cpuset and libnuma */
+ set = hwloc_bitmap_alloc();
+ nocpunomemnodeset = hwloc_bitmap_alloc();
+ nocpubutmemnodeset = hwloc_bitmap_alloc();
+ nomembutcpunodeset = hwloc_bitmap_alloc();
+ nomembutcpucpuset = hwloc_bitmap_alloc();
+ /* gather all nodes if any, or the whole system if no nodes */
+ if (hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE)) {
+ node = NULL;
+ while ((node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, node)) != NULL) {
+ hwloc_bitmap_or(set, set, node->cpuset);
+ if (hwloc_bitmap_iszero(node->cpuset)) {
+ if (node->memory.local_memory)
+ hwloc_bitmap_set(nocpubutmemnodeset, node->os_index);
+ else
+ hwloc_bitmap_set(nocpunomemnodeset, node->os_index);
+ } else if (!node->memory.local_memory) {
+ hwloc_bitmap_set(nomembutcpunodeset, node->os_index);
+ hwloc_bitmap_or(nomembutcpucpuset, nomembutcpucpuset, node->cpuset);
+ }
+ }
+ } else {
+ hwloc_bitmap_or(set, set, hwloc_topology_get_complete_cpuset(topology));
+ }
+
+ set2 = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_linux_libnuma_bitmask(topology, set2, numa_all_nodes_ptr);
+ /* numa_all_nodes_ptr doesn't contain NODES with CPU but no memory */
+ hwloc_bitmap_or(set2, set2, nomembutcpucpuset);
+ assert(hwloc_bitmap_isequal(set, set2));
+ hwloc_bitmap_free(set2);
+
+ bitmask = hwloc_cpuset_to_linux_libnuma_bitmask(topology, set);
+ /* numa_all_nodes_ptr contains NODES with no CPU but with memory */
+ hwloc_bitmap_foreach_begin(i, nocpubutmemnodeset) { numa_bitmask_setbit(bitmask, i); } hwloc_bitmap_foreach_end();
+ assert(numa_bitmask_equal(bitmask, numa_all_nodes_ptr));
+ numa_bitmask_free(bitmask);
+
+ hwloc_bitmap_free(set);
+
+ /* convert full stuff between nodeset and libnuma */
+ if (hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_NODE)) {
+ set = hwloc_bitmap_dup(hwloc_get_root_obj(topology)->complete_nodeset);
+ } else {
+ set = hwloc_bitmap_alloc();
+ hwloc_bitmap_fill(set);
+ }
+
+ set2 = hwloc_bitmap_alloc();
+ hwloc_nodeset_from_linux_libnuma_bitmask(topology, set2, numa_all_nodes_ptr);
+ /* numa_all_nodes_ptr doesn't contain NODES with no CPU and no memory */
+ hwloc_bitmap_foreach_begin(i, nocpunomemnodeset) { hwloc_bitmap_set(set2, i); } hwloc_bitmap_foreach_end();
+ /* numa_all_nodes_ptr doesn't contain NODES with CPU but no memory */
+ hwloc_bitmap_or(set2, set2, nomembutcpunodeset);
+ assert(hwloc_bitmap_isequal(set, set2));
+ hwloc_bitmap_free(set2);
+
+ bitmask = hwloc_nodeset_to_linux_libnuma_bitmask(topology, set);
+ assert(numa_bitmask_equal(bitmask, numa_all_nodes_ptr));
+ numa_bitmask_free(bitmask);
+
+ hwloc_bitmap_free(set);
+
+ /* convert empty stuff between cpuset and libnuma */
+ bitmask = numa_bitmask_alloc(1);
+ set = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_linux_libnuma_bitmask(topology, set, bitmask);
+ numa_bitmask_free(bitmask);
+ assert(hwloc_bitmap_iszero(set));
+ hwloc_bitmap_free(set);
+
+ mask=0;
+ set = hwloc_bitmap_alloc();
+ hwloc_cpuset_from_linux_libnuma_ulongs(topology, set, &mask, sizeof(mask)*8);
+ assert(hwloc_bitmap_iszero(set));
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ bitmask = hwloc_cpuset_to_linux_libnuma_bitmask(topology, set);
+ bitmask2 = numa_bitmask_alloc(1);
+ assert(numa_bitmask_equal(bitmask, bitmask2));
+ numa_bitmask_free(bitmask);
+ numa_bitmask_free(bitmask2);
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ maxnode = sizeof(mask)*8;
+ hwloc_cpuset_to_linux_libnuma_ulongs(topology, set, &mask, &maxnode);
+ assert(!mask);
+ assert(!maxnode);
+ hwloc_bitmap_free(set);
+
+ /* convert empty stuff between nodeset and libnuma */
+ bitmask = numa_bitmask_alloc(1);
+ set = hwloc_bitmap_alloc();
+ hwloc_nodeset_from_linux_libnuma_bitmask(topology, set, bitmask);
+ numa_bitmask_free(bitmask);
+ assert(hwloc_bitmap_iszero(set));
+ hwloc_bitmap_free(set);
+
+ mask=0;
+ set = hwloc_bitmap_alloc();
+ hwloc_nodeset_from_linux_libnuma_ulongs(topology, set, &mask, sizeof(mask)*8);
+ assert(hwloc_bitmap_iszero(set));
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ bitmask = hwloc_nodeset_to_linux_libnuma_bitmask(topology, set);
+ bitmask2 = numa_bitmask_alloc(1);
+ assert(numa_bitmask_equal(bitmask, bitmask2));
+ numa_bitmask_free(bitmask);
+ numa_bitmask_free(bitmask2);
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ maxnode = sizeof(mask)*8;
+ hwloc_nodeset_to_linux_libnuma_ulongs(topology, set, &mask, &maxnode);
+ assert(!mask);
+ assert(!maxnode);
+ hwloc_bitmap_free(set);
+
+ /* convert first node (with CPU and memory) between cpuset/nodeset and libnuma */
+ node = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NODE, NULL);
+ while (node && (!node->memory.local_memory || hwloc_bitmap_iszero(node->cpuset)))
+ /* skip nodes with no cpus or no memory to avoid strange libnuma behaviors */
+ node = node->next_sibling;
+ if (node) {
+ /* convert first node between cpuset and libnuma */
+ bitmask = hwloc_cpuset_to_linux_libnuma_bitmask(topology, node->cpuset);
+ assert(numa_bitmask_isbitset(bitmask, node->os_index));
+ numa_bitmask_clearbit(bitmask, node->os_index);
+ bitmask2 = numa_bitmask_alloc(node->os_index + 1);
+ assert(numa_bitmask_equal(bitmask, bitmask2));
+ numa_bitmask_free(bitmask);
+ numa_bitmask_free(bitmask2);
+
+ maxnode = sizeof(mask)*8;
+ hwloc_cpuset_to_linux_libnuma_ulongs(topology, node->cpuset, &mask, &maxnode);
+ if (node->os_index >= sizeof(mask)*8) {
+ assert(!maxnode);
+ assert(!mask);
+ } else {
+ assert(maxnode = node->os_index + 1);
+ assert(mask == (1UL << node->os_index));
+ }
+
+ set = hwloc_bitmap_alloc();
+ bitmask = numa_bitmask_alloc(node->os_index + 1);
+ numa_bitmask_setbit(bitmask, node->os_index);
+ hwloc_cpuset_from_linux_libnuma_bitmask(topology, set, bitmask);
+ numa_bitmask_free(bitmask);
+ assert(hwloc_bitmap_isequal(set, node->cpuset));
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ if (node->os_index >= sizeof(mask)*8) {
+ mask = 0;
+ } else {
+ mask = 1UL << node->os_index;
+ }
+ hwloc_cpuset_from_linux_libnuma_ulongs(topology, set, &mask, node->os_index + 1);
+ assert(hwloc_bitmap_isequal(set, node->cpuset));
+ hwloc_bitmap_free(set);
+
+ /* convert first node between nodeset and libnuma */
+ bitmask = hwloc_nodeset_to_linux_libnuma_bitmask(topology, node->nodeset);
+ assert(numa_bitmask_isbitset(bitmask, node->os_index));
+ numa_bitmask_clearbit(bitmask, node->os_index);
+ bitmask2 = numa_bitmask_alloc(node->os_index + 1);
+ assert(numa_bitmask_equal(bitmask, bitmask2));
+ numa_bitmask_free(bitmask);
+ numa_bitmask_free(bitmask2);
+
+ maxnode = sizeof(mask)*8;
+ hwloc_nodeset_to_linux_libnuma_ulongs(topology, node->nodeset, &mask, &maxnode);
+ if (node->os_index >= sizeof(mask)*8) {
+ assert(!maxnode);
+ assert(!mask);
+ } else {
+ assert(maxnode = node->os_index + 1);
+ assert(mask == (1UL << node->os_index));
+ }
+
+ set = hwloc_bitmap_alloc();
+ bitmask = numa_bitmask_alloc(node->os_index + 1);
+ numa_bitmask_setbit(bitmask, node->os_index);
+ hwloc_nodeset_from_linux_libnuma_bitmask(topology, set, bitmask);
+ numa_bitmask_free(bitmask);
+ assert(hwloc_bitmap_isequal(set, node->nodeset));
+ hwloc_bitmap_free(set);
+
+ set = hwloc_bitmap_alloc();
+ if (node->os_index >= sizeof(mask)*8) {
+ mask = 0;
+ } else {
+ mask = 1UL << node->os_index;
+ }
+ hwloc_nodeset_from_linux_libnuma_ulongs(topology, set, &mask, node->os_index + 1);
+ assert(hwloc_bitmap_isequal(set, node->nodeset));
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_bitmap_free(nomembutcpucpuset);
+ hwloc_bitmap_free(nomembutcpunodeset);
+ hwloc_bitmap_free(nocpubutmemnodeset);
+ hwloc_bitmap_free(nocpunomemnodeset);
+
+ hwloc_topology_destroy(topology);
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/myriexpress.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/myriexpress.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/myriexpress.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,77 @@
+/*
+ * Copyright © 2010 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <myriexpress.h>
+#include <hwloc.h>
+#include <hwloc/myriexpress.h>
+
+/* check the myriexpress helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ mx_return_t ret;
+ unsigned i, count;
+ int err;
+
+ putenv("MX_ERRORS_ARE_FATAL=0");
+
+ ret = mx_init();
+ if (ret != MX_SUCCESS) {
+ fprintf(stderr, "mx_init failed, %s\n", mx_strerror(ret));
+ return 0;
+ }
+
+ mx_get_info(NULL, MX_NIC_COUNT, NULL, 0, &count, sizeof(count));
+ if (ret != MX_SUCCESS) {
+ fprintf(stderr, "mx_get_info MX_NIC_COUNT failed, %s\n", mx_strerror(ret));
+ return 0;
+ }
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ for(i=0; i<count; i++) {
+ mx_endpoint_t ep;
+ char *cpuset_string;
+ hwloc_bitmap_t set;
+
+ ret = mx_open_endpoint(i, MX_ANY_ENDPOINT, 0, NULL, 0, &ep);
+ if (ret != MX_SUCCESS)
+ continue;
+ set = hwloc_bitmap_alloc();
+ err = hwloc_mx_endpoint_get_device_cpuset(topology, ep, set);
+ if (err < 0) {
+ perror("hwloc_mx_endpoint_get_device_cpuset failed");
+ return -1;
+ }
+ hwloc_bitmap_asprintf(&cpuset_string, set);
+ printf("got cpuset %s for endpoint on board #%d\n",
+ cpuset_string, i);
+ free(cpuset_string);
+ hwloc_bitmap_free(set);
+ mx_close_endpoint(ep);
+
+ set = hwloc_bitmap_alloc();
+ err = hwloc_mx_board_get_device_cpuset(topology, i, set);
+ if (err < 0) {
+ perror("hwloc_mx_board_get_device_cpuset failed");
+ return -1;
+ }
+ hwloc_bitmap_asprintf(&cpuset_string, set);
+ printf("got cpuset %s for board #%d\n",
+ cpuset_string, i);
+ free(cpuset_string);
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_topology_destroy(topology);
+
+ mx_finalize();
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/openfabrics-verbs.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/openfabrics-verbs.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/openfabrics-verbs.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include <infiniband/verbs.h>
+#include <hwloc.h>
+#include <hwloc/openfabrics-verbs.h>
+
+/* check the ibverbs helpers */
+
+int main(void)
+{
+ hwloc_topology_t topology;
+ struct ibv_device **dev_list, *dev;
+ int count, i;
+ int err;
+
+ dev_list = ibv_get_device_list(&count);
+ if (!dev_list) {
+ fprintf(stderr, "ibv_get_device_list failed\n");
+ return 0;
+ }
+ printf("ibv_get_device_list found %d devices\n", count);
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ for(i=0; i<count; i++) {
+ hwloc_bitmap_t set;
+ dev = dev_list[i];
+
+ set = hwloc_bitmap_alloc();
+ err = hwloc_ibv_get_device_cpuset(topology, dev, set);
+ if (err < 0) {
+ printf("failed to get cpuset for device %d (%s)\n",
+ i, ibv_get_device_name(dev));
+ } else {
+ char *cpuset_string = NULL;
+ hwloc_bitmap_asprintf(&cpuset_string, set);
+ printf("got cpuset %s for device %d (%s)\n",
+ cpuset_string, i, ibv_get_device_name(dev));
+ free(cpuset_string);
+ }
+ hwloc_bitmap_free(set);
+ }
+
+ hwloc_topology_destroy(topology);
+
+ ibv_free_device_list(dev_list);
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,70 @@
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009, 2011-2012 Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+SRC = $(HWLOC_top_srcdir)/src
+
+if HWLOC_BUILD_TESTS
+if HWLOC_HAVE_LINUX
+check_LTLIBRARIES = libhwloc-ports.la
+endif HWLOC_HAVE_LINUX
+endif HWLOC_BUILD_TESTS
+
+# Note that AC_CONFIG_LINKS sets up the sym links for the files in
+# this directory (back to the $top_srcdir/src directory). So if you
+# need more sym-linked files in here, go edit configure.ac. Note that
+# we have to use sym links in here rather than just directly
+# referencing the files via $HWLOC_top_srcdir/src/foo.c because of
+# dependencies issues when using the Automake option "subdir-objects".
+# We nodist these because they're created by configure.
+nodist_libhwloc_ports_la_SOURCES = \
+ topology.c \
+ traversal.c \
+ topology-synthetic.c \
+ topology-solaris.c \
+ topology-solaris-chiptype.c \
+ topology-aix.c \
+ topology-osf.c \
+ topology-windows.c \
+ topology-darwin.c \
+ topology-freebsd.c \
+ topology-hpux.c
+
+libhwloc_ports_la_SOURCES = \
+ include/windows.h \
+ include/kstat.h \
+ include/picl.h \
+ include/sys/rset.h \
+ include/sys/lgrp_user.h \
+ include/sys/sysctl.h \
+ include/sys/procset.h \
+ include/sys/processor.h \
+ include/sys/thread.h \
+ include/sys/mpctl.h \
+ include/sys/cpuset.h \
+ include/sys/systemcfg.h \
+ include/sys/systeminfo.h \
+ include/radset.h \
+ include/cpuset.h \
+ include/numa.h \
+ include/pthread_np.h
+
+libhwloc_ports_la_CPPFLAGS = \
+ $(HWLOC_CPPFLAGS) \
+ -I$(HWLOC_top_srcdir)/include \
+ -I$(HWLOC_top_srcdir)/tests/ports/include \
+ -DHWLOC_COMPILE_PORTS \
+ -DHWLOC_SOLARIS_SYS -DHAVE_LIBLGRP -DHAVE_LIBKSTAT -DHAVE_LGRP_LATENCY_COOKIE \
+ -DHWLOC_AIX_SYS \
+ -DHWLOC_OSF_SYS \
+ -DHWLOC_WIN_SYS \
+ -DHWLOC_DARWIN_SYS \
+ -DHWLOC_FREEBSD_SYS -DHAVE_SYS_CPUSET_H \
+ -DHWLOC_HPUX_SYS \
+ -DHWLOC_INSIDE_LIBHWLOC
+
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cpuset.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/cpuset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_CPUSET_H
+#define HWLOC_PORT_CPUSET_H
+
+typedef int cpu_cursor_t;
+#define SET_CURSOR_INIT -1
+typedef int cpuid_t;
+#define CPU_NONE -1
+typedef int cpuset_t;
+
+int cpusetcreate(cpuset_t *set);
+int cpuemptyset(cpuset_t set);
+int cpuxorset(cpuset_t set1, cpuset_t set2, cpuset_t res);
+int cpucountset(cpuset_t set);
+int cpuaddset(cpuset_t set, cpuid_t cpuid );
+cpuid_t cpu_foreach(cpuset_t cpuset, int flags, cpu_cursor_t *cursor);
+int cpusetdestroy(cpuset_t *set);
+
+#endif /* HWLOC_PORT_CPUSET_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/kstat.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/kstat.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/kstat.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,46 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_KSTAT_H
+#define HWLOC_PORT_KSTAT_H
+
+#include <inttypes.h>
+
+typedef long kid_t;
+
+#define KSTAT_STRLEN 31
+
+typedef struct kstat {
+ char ks_module[KSTAT_STRLEN];
+ int ks_instance;
+ struct kstat *ks_next;
+} kstat_t;
+
+typedef struct kstat_named {
+ unsigned char data_type;
+ union {
+ char c[16];
+ int32_t i32;
+ uint32_t ui32;
+ } value;
+} kstat_named_t;
+
+typedef struct kstat_ctl {
+ kstat_t *kc_chain;
+} kstat_ctl_t;
+
+#define KSTAT_DATA_CHAR 1
+#define KSTAT_DATA_INT32 1
+#define KSTAT_DATA_UINT32 2
+#define KSTAT_DATA_INT64 3
+#define KSTAT_DATA_UINT64 4
+
+kstat_ctl_t *kstat_open(void);
+kid_t kstat_read(kstat_ctl_t *, kstat_t *, void *);
+void *kstat_data_lookup(kstat_t *, char *);
+int kstat_close(kstat_ctl_t *);
+
+#endif /* HWLOC_PORT_KSTAT_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/numa.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/numa.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/numa.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,29 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_NUMA_H
+#define HWLOC_PORT_NUMA_H
+
+#include "sys/types.h"
+#include "radset.h"
+#include "cpuset.h"
+
+int rad_get_num(void);
+int rad_get_cpus(radid_t rad, cpuset_t cpuset);
+ssize_t rad_get_physmem(radid_t rad);
+
+typedef struct {
+ unsigned long mattr_policy;
+ radid_t mattr_rad;
+ radset_t mattr_radset;
+} memalloc_attr_t;
+
+void *nmmap(void *addr, size_t len, int prot, unsigned long flags, int filedes, off_t off, memalloc_attr_t *attr );
+int nmadvise(const void *addr, long len, int behavior, memalloc_attr_t *attr);
+
+
+
+#endif /* HWLOC_PORT_NUMA_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/picl.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/picl.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/picl.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_PICL_H
+#define HWLOC_PORT_PICL_H
+
+#include <stdint.h>
+#include <string.h>
+
+#define PICL_PROPNAMELEN_MAX 256
+
+typedef uint64_t picl_nodehdl_t;
+typedef uint64_t picl_prophdl_t;
+
+typedef enum {
+ PICL_PTYPE_UNKNOWN,
+ PICL_PTYPE_INT,
+ PICL_PTYPE_UNSIGNED_INT,
+ PICL_PTYPE_TABLE,
+ PICL_PTYPE_CHARSTRING
+} picl_prop_type_t;
+
+typedef struct {
+ picl_prop_type_t type;
+ size_t size;
+ char name[PICL_PROPNAMELEN_MAX];
+} picl_propinfo_t;
+
+typedef enum {
+ PICL_SUCCESS,
+ PICL_WALK_TERMINATE,
+ PICL_ENDOFLIST
+} picl_errno_t;
+
+extern int picl_initialize(void);
+extern int picl_shutdown(void);
+extern int picl_get_root(picl_nodehdl_t *nodehandle);
+extern int picl_get_first_prop(picl_nodehdl_t nodeh, picl_prophdl_t *proph);
+extern int picl_get_next_prop(picl_prophdl_t proph, picl_prophdl_t *nexth);
+extern int picl_get_propinfo(picl_prophdl_t proph, picl_propinfo_t *pi);
+extern int picl_get_propval(picl_prophdl_t proph, void *valbuf, size_t sz);
+extern int picl_get_next_by_row(picl_prophdl_t thish, picl_prophdl_t *proph);
+extern int picl_get_next_by_col(picl_prophdl_t thish, picl_prophdl_t *proph);
+extern int picl_walk_tree_by_class(picl_nodehdl_t rooth, const char *classname, void *c_args, int (*callback_fn)(picl_nodehdl_t hdl, void *args));
+
+#endif /* HWLOC_PORT_PICL_H */
+
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/pthread_np.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/pthread_np.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/pthread_np.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,15 @@
+/*
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_PTHREAD_NP_H
+#define HWLOC_PORT_PTHREAD_NP_H
+
+#if 0
+/* Conflict with Linux' */
+int pthread_getaffinity_np(pthread_t, size_t, cpuset_t *);
+int pthread_setaffinity_np(pthread_t, size_t, const cpuset_t *);
+#endif
+
+#endif /* HWLOC_PORT_PTHREAD_NP_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/radset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/radset.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/radset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,81 @@
+/*
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_RADSET_H
+#define HWLOC_PORT_RADSET_H
+
+#include <limits.h>
+
+typedef int radset_cursor_t;
+typedef int radid_t;
+#define RAD_NONE -1
+typedef struct {
+ int foo;
+} radset_t;
+typedef unsigned int nsgid_t;
+#define NSG_NONE -1
+
+extern int radsetcreate(radset_t *set);
+
+extern int rademptyset(radset_t set);
+extern int radaddset(radset_t set, radid_t radid);
+extern int radismember(radset_t set, radid_t radid);
+extern int rad_foreach(radset_t radset, int flags, radset_cursor_t *cursor);
+
+
+extern int radsetdestroy(radset_t *set);
+
+
+int rad_attach_pid(pid_t pid, radset_t radset, unsigned long flags);
+int pthread_rad_attach(pthread_t thread, radset_t radset, unsigned long flags);
+int rad_detach_pid(pid_t pid);
+int pthread_rad_detach(pthread_t thread);
+
+
+/* (strict) */
+#define RAD_INSIST 0x01
+#define RAD_WAIT 0x08
+int rad_bind_pid(pid_t pid, radset_t radset, unsigned long flags);
+int pthread_rad_bind(pthread_t thread, radset_t radset, unsigned long flags);
+
+typedef union rsrcdescr {
+ radset_t rd_radset;
+ int rd_fd;
+ char *rd_pathname;
+ int rd_shmid;
+ pid_t rd_pid;
+ void *rd_addr;
+ nsgid_t rd_nsg;
+} rsrcdescr_t;
+
+typedef struct numa_attr {
+ unsigned nattr_type;
+#define R_RAD 0
+
+ rsrcdescr_t nattr_descr;
+
+ unsigned long nattr_distance;
+#define RAD_DIST_LOCAL 100
+#define RAD_DIST_REMOTE INT_MAX
+
+ unsigned long nattr_flags;
+} numa_attr_t;
+
+typedef enum memalloc_policy {
+ MPOL_DIRECTED,
+ MPOL_THREAD,
+ MPOL_REPLICATED,
+ MPOL_STRIPPED,
+ MPOL_INVALID
+} memalloc_policy_t;
+#define MPOL_NO_MIGRATE 0x100
+
+#define MADV_CURRENT 1
+#define MADV_INSIST 2
+
+int nloc(numa_attr_t *numa_attr, radset_t radset);
+
+#endif /* HWLOC_PORT_RADSET_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/cpuset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/cpuset.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/cpuset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,31 @@
+/*
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_CPUSET_H
+#define HWLOC_PORT_SYS_CPUSET_H
+
+#include <limits.h>
+
+typedef long cpuset_t;
+typedef int cpulevel_t;
+typedef int cpuwhich_t;
+
+#define CPU_LEVEL_WHICH 3
+#define CPU_WHICH_TID 1
+#define CPU_WHICH_PID 2
+
+#undef CPU_SETSIZE
+#define CPU_SETSIZE (sizeof(cpuset_t) * CHAR_BIT)
+#undef CPU_ZERO
+#define CPU_ZERO(cpuset) (*(cpuset) = 0)
+#undef CPU_SET
+#define CPU_SET(cpu, cpuset) (*(cpuset) |= (1<<(cpu)))
+#undef CPU_ISSET
+#define CPU_ISSET(cpu, cpuset) (*(cpuset) & (1<<(cpu)))
+
+int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t size, cpuset_t *cpuset);
+int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t size, const cpuset_t *cpuset);
+
+#endif /* HWLOC_PORT_SYS_CPUSET_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/lgrp_user.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_LGRP_USER_H
+#define HWLOC_PORT_SYS_LGRP_USER_H
+
+#include <sys/processor.h>
+
+typedef int lgrp_cookie_t;
+#define LGRP_COOKIE_NONE 0
+typedef long lgrp_id_t;
+typedef long long lgrp_mem_size_t;
+
+typedef enum lgrp_content {
+ LGRP_CONTENT_ALL,
+ LGRP_CONTENT_HIERARCHY = LGRP_CONTENT_ALL,
+ LGRP_CONTENT_DIRECT
+} lgrp_content_t;
+
+typedef enum lgrp_view {
+ LGRP_VIEW_CALLER,
+ LGRP_VIEW_OS
+} lgrp_view_t;
+
+typedef enum lgrp_mem_size_flag {
+ LGRP_MEM_SZ_FREE,
+ LGRP_MEM_SZ_INSTALLED
+} lgrp_mem_size_flag_t;
+
+typedef enum lgrp_lat_between {
+ LGRP_LAT_CPU_TO_MEM
+} lgrp_lat_between_t;
+
+typedef enum lgrp_affinity {
+ LGRP_AFF_NONE,
+ LGRP_AFF_WEAK,
+ LGRP_AFF_STRONG
+} lgrp_affinity_t;
+
+lgrp_cookie_t lgrp_init(lgrp_view_t view);
+
+int lgrp_nlgrps(lgrp_cookie_t cookie);
+lgrp_id_t lgrp_root(lgrp_cookie_t cookie);
+int lgrp_cpus(lgrp_cookie_t cookie, lgrp_id_t lgrp, processorid_t *cpuids, unsigned int count, int content);
+int lgrp_children(lgrp_cookie_t cookie, lgrp_id_t parent, lgrp_id_t *lgrp_array, unsigned int lgrp_array_size);
+lgrp_mem_size_t lgrp_mem_size(lgrp_cookie_t cookie, lgrp_id_t lgrp, lgrp_mem_size_flag_t type, lgrp_content_t content);
+int lgrp_latency_cookie(lgrp_cookie_t cookie, lgrp_id_t from, lgrp_id_t to, lgrp_lat_between_t between);
+int lgrp_affinity_set(idtype_t idtype, id_t id, lgrp_id_t lgrp, lgrp_affinity_t aff);
+lgrp_affinity_t lgrp_affinity_get(idtype_t idtype, id_t id, lgrp_id_t lgrp);
+
+int lgrp_fini(lgrp_cookie_t cookie);
+
+/* Should actually be in sys/mman.h, but don't want to interfere with the system one */
+#define MADV_ACCESS_DEFAULT 6
+#define MADV_ACCESS_LWP 7
+#define MADV_ACCESS_MANY 8
+
+#endif /* HWLOC_PORT_SYS_LGRP_USER_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/mpctl.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/mpctl.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/mpctl.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_MPCTL_H
+#define HWLOC_PORT_SYS_MPCTL_H
+
+typedef int spu_t, ldom_t, pthread_spu_t, pthread_ldom_t;
+
+typedef enum mpc_request {
+ MPC_GETNUMSPUS,
+ MPC_GETFIRSTSPU,
+ MPC_GETNEXTSPU,
+
+ MPC_GETNUMSPUS_SYS,
+ MPC_GETFIRSTSPU_SYS,
+ MPC_GETNEXTSPU_SYS,
+
+ MPC_GETCURRENTSTSPU,
+ MPC_SETPROCESS,
+ MPC_SETPROCESS_FORCE,
+ MPC_SETLWP,
+ MPC_SETLWP_FORCE,
+ MPC_SETLWP_UP,
+
+ MPC_SETLDOM,
+ MPC_SETLWPLDOM,
+
+ MPC_GETNUMLDOMS,
+ MPC_GETFIRSTLDOM,
+ MPC_GETNEXTLDOM,
+ MPC_GETNUMLDOMS_SYS,
+ MPC_GETFIRSTLDOM_SYS,
+ MPC_GETNEXTLDOM_SYS,
+
+ MPC_SPUTOLDOM,
+ MPC_LDOMSPUS,
+ MPC_LDOMSPUS_SYS,
+
+ MPC_GETPROCESS_BINDVALUE,
+ MPC_GETLWP_BINDVALUE
+} mpc_request_t;
+
+#define MPC_SPUFLOAT 0
+#define MPC_LDOMFLOAT 1
+#define MPC_SELFPID 2
+#define MPC_SELFLWPPID 3
+
+extern int mpctl(mpc_request_t, spu_t, ...);
+
+#define _SC_CCNUMA_SUPPORT 0
+#define _SC_PSET_SUPPORT 1
+
+int pthread_processor_bind_np(int request, pthread_spu_t *answer, pthread_spu_t spu, pthread_t tid);
+
+int pthread_ldom_bind_np(pthread_ldom_t *answer, pthread_ldom_t ldom, pthread_t tid);
+
+#define PTHREAD_SELFTID_NP 0
+#define PTHREAD_LDOMFLOAT_NP 0
+#define PTHREAD_SPUFLOAT_NP 0
+
+#define PTHREAD_BIND_ADVISORY_NP 0
+#define PTHREAD_BIND_FORCED_NP 1
+
+#endif /* HWLOC_PORT_SYS_MPCTL_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/processor.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/processor.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/processor.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,24 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_PROCESSOR_H
+#define HWLOC_PORT_SYS_PROCESSOR_H
+
+/* Solaris */
+#include <sys/procset.h>
+typedef int processorid_t;
+#define PBIND_NONE -1
+
+extern int processor_bind(idtype_t idtype, id_t id, processorid_t processorid, processorid_t *obind);
+
+/* AIX */
+typedef short cpu_t;
+#define BINDPROCESS 1
+#define BINDTHREAD 2
+#define PROCESSOR_CLASS_ANY ((cpu_t)(-1))
+extern int bindprocessor(int What, int Who, cpu_t Where);
+
+#endif /* HWLOC_PORT_SYS_PROCESSOR_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/procset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/procset.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/procset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,16 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_PROCSET_H
+#define HWLOC_PORT_SYS_PROCSET_H
+
+typedef enum idtype {
+ P_PID,
+ P_LWPID,
+ P_MYID
+} idtype_t;
+
+#endif /* HWLOC_PORT_SYS_PROCSET_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/rset.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/rset.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/rset.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,95 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_RSET_H
+#define HWLOC_PORT_SYS_RSET_H
+
+#include <stdint.h>
+
+#include "thread.h"
+
+typedef unsigned int uint_t;
+typedef void *rsethandle_t;
+
+#define RS_EMPTY 3
+#define RS_ALL 2
+#define RS_PARTITION 3
+
+#define RS_UNION 1
+#define RS_INTERSECTION 2
+#define RS_EXCLUSION 3
+#define RS_COPY 4
+#define RS_FIRST 5
+#define RS_NEXT 6
+#define RS_NEXT_WRAP 7
+#define RS_ISEMPTY 8
+#define RS_ISEQUAL 9
+#define RS_ISCONTAINED 10
+#define RS_TESTRESOURCE 11
+#define RS_ADDRESOURCE 12
+#define RS_DELRESOURCE 13
+
+typedef int rsinfo_t;
+#define R_NUMPROCS 0
+#define R_MAXSDL 3
+#define R_SMPSDL 4
+#define R_MCMSDL 5
+#define R_MAXPROCS 6
+#define R_L2CSDL 11
+#define R_CORESDL 12
+#define R_REF1SDL 13
+
+#define R_PROCS 6
+
+#define R_NADA 0
+#define R_PROCESS 1
+#define R_RSET 2
+#define R_SUBRANGE 3
+#define R_SHM 4
+#define R_FILDES 5
+#define R_THREAD 6
+
+#define P_DEFAULT 0
+#define P_FIRST_TOUCH 1
+#define P_BALANCED 2 /* This is the default */
+
+rsethandle_t rs_alloc (unsigned int flags);
+int rs_numrads(rsethandle_t rset, unsigned int sdl, unsigned int flags);
+int rs_getrad (rsethandle_t rset, rsethandle_t rad, unsigned int sdl, unsigned int index, unsigned int flags);
+int rs_getinfo(rsethandle_t rseth, rsinfo_t info_type, unsigned int flags);
+int rs_op(unsigned int command, rsethandle_t rseth1, rsethandle_t rseth2, unsigned int flags, unsigned int id);
+void rs_free(rsethandle_t rseth);
+
+typedef int rstype_t;
+typedef struct subrange subrange_t;
+
+typedef union {
+ pid_t at_pid;
+ tid_t at_tid;
+ int at_shmid;
+ int at_fd;
+ rsethandle_t at_rset;
+ subrange_t *at_subrange;
+} rsid_t;
+
+struct subrange {
+ uint64_t su_offset;
+ uint64_t su_length;
+ rstype_t su_rstype;
+ unsigned int su_policy;
+ rsid_t su_rsid;
+ uint64_t su_rsoffset;
+ uint64_t su_rslength;
+};
+
+int ra_attachrset (rstype_t rstype, rsid_t rsid, rsethandle_t rset, unsigned int flags);
+int ra_detachrset (rstype_t rstype, rsid_t rsid, unsigned int flags);
+int ra_getrset (rstype_t rstype, rsid_t rsid, unsigned int flags, rsethandle_t rset);
+
+void * ra_mmap(void *addr, off64_t len, int prot, int flags, int fildes, off64_t off, rstype_t rstype, rsid_t rsid, unsigned int att_flags);
+
+
+#endif /* HWLOC_PORT_SYS_RSET_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/sysctl.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/sysctl.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/sysctl.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,13 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_SYSCTL_H
+#define HWLOC_PORT_SYS_SYSCTL_H
+
+extern int sysctl(int *name, int name_len, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
+extern int sysctlbyname(const char *name, void *oldp, size_t *oldlenp, void *newp, size_t newlen);
+
+#endif /* HWLOC_PORT_SYS_SYSCTL_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systemcfg.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systemcfg.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systemcfg.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,17 @@
+/*
+ * Copyright © 2011 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_SYSTEMCFG_H
+#define HWLOC_PORT_SYS_SYSTEMCFG_H
+
+struct {
+ int dcache_size;
+ int dcache_asc;
+ int dcache_line;
+ int L2_cache_size;
+ int L2_cache_asc;
+} _system_configuration;
+
+#endif /* HWLOC_PORT_SYS_SYSTEMCFG_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systeminfo.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systeminfo.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/systeminfo.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,14 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_SYSTEMINFO_H
+#define HWLOC_PORT_SYS_SYSTEMINFO_H
+
+#define SI_HW_PROVIDER 8
+#define SI_PLATFORM 513
+
+extern int sysinfo(int, char *, long);
+
+#endif /* HWLOC_PORT_SYS_SYSTEMINFO_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/thread.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/thread.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/sys/thread.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,18 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_SYS_THREAD_H
+#define HWLOC_PORT_SYS_THREAD_H
+
+typedef long tid_t;
+tid_t thread_self(void);
+struct __pthrdsinfo {
+ tid_t __pi_tid;
+};
+#define PTHRDSINFO_QUERY_TID 0x10
+int pthread_getthrds_np (pthread_t * thread, int mode, struct __pthrdsinfo * buf, int bufsize, void * regbuf, int * regbufsize);
+
+#endif /* HWLOC_PORT_SYS_THREAD_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/ports/include/windows.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,72 @@
+/*
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_PORT_WINDOWS_H
+#define HWLOC_PORT_WINDOWS_H
+
+#include <inttypes.h>
+
+#define DECLARE_HANDLE(n) typedef struct n##__ {int i;} *n
+DECLARE_HANDLE(HINSTANCE);
+typedef HINSTANCE HMODULE;
+typedef int WINBOOL, BOOL;
+typedef int64_t LONGLONG;
+typedef uint64_t DWORDLONG;
+typedef DWORDLONG ULONGLONG, *PULONGLONG;
+typedef unsigned char BYTE, UCHAR;
+typedef unsigned short WORD, USHORT;
+typedef unsigned long ULONG_PTR, DWORD_PTR, DWORD, *PDWORD, *PDWORD_PTR;
+typedef const char *LPCSTR;
+typedef int (*FARPROC)();
+typedef void *PVOID,*LPVOID;
+typedef ULONG_PTR SIZE_T;
+
+/* This is to cope with linux using integers for hwloc_pid_t and hwloc_thread_t
+typedef PVOID HANDLE; */
+typedef int HANDLE;
+
+#ifdef __GNUC__
+#define _ANONYMOUS_UNION __extension__
+#define _ANONYMOUS_STRUCT __extension__
+#else
+#define _ANONYMOUS_UNION
+#define _ANONYMOUS_STRUCT
+#endif /* __GNUC__ */
+#define DUMMYUNIONNAME
+#define WINAPI
+
+#define ANYSIZE_ARRAY 1
+
+#define ERROR_INSUFFICIENT_BUFFER 122L
+
+#define MEM_COMMIT 0x1000
+#define MEM_RESERVE 0x2000
+#define MEM_RELEASE 0x8000
+
+#define PAGE_EXECUTE_READWRITE 0x0040
+
+WINAPI HINSTANCE LoadLibrary(LPCSTR);
+WINAPI void *GetProcAddress(HINSTANCE, LPCSTR);
+WINAPI DWORD GetLastError(void);
+
+DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
+BOOL WINAPI SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask);
+BOOL WINAPI GetProcessAffinityMask(HANDLE hProcess, PDWORD_PTR lpProcessAffinityMask, PDWORD_PTR lpSystemAffinityMask);
+
+HANDLE WINAPI GetCurrentThread(void);
+HANDLE WINAPI GetCurrentProcess(void);
+
+PVOID WINAPI VirtualAlloc(PVOID,DWORD,DWORD,DWORD);
+
+BOOL GetNumaAvailableMemoryNode(UCHAR Node, PULONGLONG AvailableBytes);
+
+typedef struct _SYSTEM_INFO {
+ DWORD dwPageSize;
+} SYSTEM_INFO, *LPSYSTEM_INFO;
+
+void WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo);
+
+#endif /* HWLOC_PORT_WINDOWS_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,36 @@
+all-local:
+ @echo Existing targets: 'needed' and 'useless'
+
+prepare:
+ @echo
+ @echo "###############################"
+ @echo Enabling renaming in headers...
+ @echo
+ sed -e '/^#define HWLOC_SYM_TRANSFORM 0/s/0/1/' \
+ -e '/^#define HWLOC_SYM_PREFIX hwloc_/s/hwloc_/foobar_/1' \
+ -e '/^#define HWLOC_SYM_PREFIX_CAPS HWLOC_/s/HWLOC_/FOOBAR_/2' \
+ -i $(abs_top_builddir)/include/hwloc/autogen/config.h $(abs_top_builddir)/include/private/autogen/config.h
+
+needed: prepare
+ @echo
+ @echo "###########################"
+ @echo Finding missing renaming...
+ @echo
+ cpp $(srcdir)/main.c -I $(abs_top_srcdir)/include -I $(abs_top_builddir)/include \
+ | egrep -i '(^| |\*)hwloc_'
+
+useless: prepare
+ @echo
+ @echo "###########################"
+ @echo Finding useless renaming...
+ @echo
+ grep '^#define' $(abs_top_srcdir)/include/hwloc/rename.h \
+ | awk '{print $$2}' \
+ | egrep -v '(HWLOC_RENAME_H|HWLOC_MUNGE_NAME|HWLOC_NAME)' \
+ | while read name ; do \
+ grep $$name -rwH $(abs_top_srcdir)/include/ \
+ | grep -v rename.h: | grep -v .svn >/dev/null \
+ || echo $$name; \
+ done
+
+EXTRA_DIST = main.c
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/rename/main.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,19 @@
+#define _GNU_SOURCE 1
+#include "sched.h"
+
+#include "hwloc.h"
+
+/* enable those that have the right dependencies on your machine */
+#include "hwloc/glibc-sched.h"
+#include "hwloc/linux-libnuma.h"
+#include "hwloc/linux.h"
+//#include "hwloc/cuda.h"
+//#include "hwloc/cudart.h"
+//#include "hwloc/myriexpress.h"
+#include "hwloc/openfabrics-verbs.h"
+
+#include "private/autogen/config.h"
+#include "private/cpuid.h"
+#include "private/debug.h"
+#include "private/misc.h"
+#include "private/private.h"
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16amd64-8n2c-cpusets.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000f06f" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffef" allowed_cpuset="0x0000f07f" nodeset="0x000000ff" complete_nodeset="0x000000ff" allowed_nodeset="0x0000003e">
+ <info name="DMIBoardVendor" value="TYAN Computer Corp"/>
+ <info name="DMIBoardName" value="S4881 "/>
+ <distances nbobjs="8" relative_depth="1" latency_base="10.000000">
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="8589934592">
+ <object type="Socket" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="8589934592">
+ <object type="Socket" os_index="2" cpuset="0x00000020" complete_cpuset="0x00000030" online_cpuset="0x00000020" allowed_cpuset="0x00000030" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="8589934592">
+ <object type="Socket" os_index="3" cpuset="0x00000040" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="4" cpuset="0x0" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x0" nodeset="0x00000010" complete_nodeset="0x00000010" allowed_nodeset="0x00000010" local_memory="8589934592"/>
+ <object type="NUMANode" os_index="5" cpuset="0x0" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x0" nodeset="0x00000020" complete_nodeset="0x00000020" allowed_nodeset="0x00000020" local_memory="8589934592"/>
+ <object type="NUMANode" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="Socket" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0">
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000040" complete_nodeset="0x00000040" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="Socket" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0" cache_size="65536" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0">
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000080" complete_nodeset="0x00000080" allowed_nodeset="0x0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t-offlines.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000905b" complete_cpuset="0x0001915b" online_cpuset="0x0000905b" allowed_cpuset="0x0000915b">
+ <object type="Socket" os_index="0" cpuset="0x00001011" complete_cpuset="0x00001011" online_cpuset="0x00001011" allowed_cpuset="0x00001011">
+ <object type="Cache" cpuset="0x00001011" complete_cpuset="0x00001011" online_cpuset="0x00001011" allowed_cpuset="0x00001011" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008">
+ <object type="Cache" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000">
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/16em64t-4s2c2t.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x0000ffff" complete_cpuset="0x0000ffff" online_cpuset="0x0000ffff" allowed_cpuset="0x0000ffff">
+ <page_type size="4096" count="8589934592"/>
+ <page_type size="8192" count="0"/>
+ <page_type size="17179869184" count="1"/>
+ <info name="infowithvalue" value="value"/>
+ <info name="infowithoutvalue" value=""/>
+ <object type="Socket" os_index="0" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111">
+ <object type="Cache" cpuset="0x00001111" complete_cpuset="0x00001111" online_cpuset="0x00001111" allowed_cpuset="0x00001111" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000101" complete_cpuset="0x00000101" online_cpuset="0x00000101" allowed_cpuset="0x00000101">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00001010" complete_cpuset="0x00001010" online_cpuset="0x00001010" allowed_cpuset="0x00001010">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010"/>
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222">
+ <object type="Cache" cpuset="0x00002222" complete_cpuset="0x00002222" online_cpuset="0x00002222" allowed_cpuset="0x00002222" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000202" complete_cpuset="0x00000202" online_cpuset="0x00000202" allowed_cpuset="0x00000202">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00002020" complete_cpuset="0x00002020" online_cpuset="0x00002020" allowed_cpuset="0x00002020">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020"/>
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444">
+ <object type="Cache" cpuset="0x00004444" complete_cpuset="0x00004444" online_cpuset="0x00004444" allowed_cpuset="0x00004444" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000404" complete_cpuset="0x00000404" online_cpuset="0x00000404" allowed_cpuset="0x00000404">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00004040" complete_cpuset="0x00004040" online_cpuset="0x00004040" allowed_cpuset="0x00004040">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040"/>
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888">
+ <object type="Cache" cpuset="0x00008888" complete_cpuset="0x00008888" online_cpuset="0x00008888" allowed_cpuset="0x00008888" cache_size="4194304" depth="3" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000808" complete_cpuset="0x00000808" online_cpuset="0x00000808" allowed_cpuset="0x00000808">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="1048576" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080" cache_size="16384" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00008080" complete_cpuset="0x00008080" online_cpuset="0x00008080" allowed_cpuset="0x00008080">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080"/>
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/24em64t-2n6c2t-pci.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/24em64t-2n6c2t-pci.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/24em64t-2n6c2t-pci.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" online_cpuset="0x00ffffff" allowed_cpuset="0x00ffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003">
+ <page_type size="4096" count="0"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="ProLiant SL390s G7"/>
+ <info name="DMIProductVersion" value=""/>
+ <info name="DMIBoardVendor" value="HP"/>
+ <info name="DMIBoardName" value=""/>
+ <info name="DMIBoardVersion" value=""/>
+ <info name="DMIBoardAssetTag" value=" "/>
+ <info name="DMIChassisVendor" value="HP"/>
+ <info name="DMIChassisType" value="25"/>
+ <info name="DMIChassisVersion" value=""/>
+ <info name="DMIChassisAssetTag" value=" "/>
+ <info name="DMIBIOSVendor" value="HP"/>
+ <info name="DMIBIOSVersion" value="P69"/>
+ <info name="DMIBIOSDate" value="10/21/2010"/>
+ <info name="DMISysVendor" value="HP"/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="2.6.27.39-0.3-perfctr"/>
+ <info name="OSVersion" value="#1 SMP 2009-11-23 12:57:38 +0100"/>
+ <info name="HostName" value="mirage004"/>
+ <info name="Architecture" value="x86_64"/>
+ <distances nbobjs="2" relative_depth="1" latency_base="10.000000">
+ <latency value="1.000000"/>
+ <latency value="2.000000"/>
+ <latency value="2.000000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x00555555" complete_cpuset="0x00555555" online_cpuset="0x00555555" allowed_cpuset="0x00555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="19316633600">
+ <page_type size="4096" count="4715975"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="0" cpuset="0x00555555" complete_cpuset="0x00555555" online_cpuset="0x00555555" allowed_cpuset="0x00555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" cpuset="0x00555555" complete_cpuset="0x00555555" online_cpuset="0x00555555" allowed_cpuset="0x00555555" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="12582912" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00001001" complete_cpuset="0x00001001" online_cpuset="0x00001001" allowed_cpuset="0x00001001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00001001" complete_cpuset="0x00001001" online_cpuset="0x00001001" allowed_cpuset="0x00001001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00001001" complete_cpuset="0x00001001" online_cpuset="0x00001001" allowed_cpuset="0x00001001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004004" complete_cpuset="0x00004004" online_cpuset="0x00004004" allowed_cpuset="0x00004004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00004004" complete_cpuset="0x00004004" online_cpuset="0x00004004" allowed_cpuset="0x00004004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="8" cpuset="0x00004004" complete_cpuset="0x00004004" online_cpuset="0x00004004" allowed_cpuset="0x00004004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00010010" complete_cpuset="0x00010010" online_cpuset="0x00010010" allowed_cpuset="0x00010010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00010010" complete_cpuset="0x00010010" online_cpuset="0x00010010" allowed_cpuset="0x00010010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00010010" complete_cpuset="0x00010010" online_cpuset="0x00010010" allowed_cpuset="0x00010010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00040040" complete_cpuset="0x00040040" online_cpuset="0x00040040" allowed_cpuset="0x00040040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00040040" complete_cpuset="0x00040040" online_cpuset="0x00040040" allowed_cpuset="0x00040040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="10" cpuset="0x00040040" complete_cpuset="0x00040040" online_cpuset="0x00040040" allowed_cpuset="0x00040040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00100100" complete_cpuset="0x00100100" online_cpuset="0x00100100" allowed_cpuset="0x00100100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00100100" complete_cpuset="0x00100100" online_cpuset="0x00100100" allowed_cpuset="0x00100100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00100100" complete_cpuset="0x00100100" online_cpuset="0x00100100" allowed_cpuset="0x00100100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00400400" complete_cpuset="0x00400400" online_cpuset="0x00400400" allowed_cpuset="0x00400400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00400400" complete_cpuset="0x00400400" online_cpuset="0x00400400" allowed_cpuset="0x00400400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="9" cpuset="0x00400400" complete_cpuset="0x00400400" online_cpuset="0x00400400" allowed_cpuset="0x00400400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ <object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-0f]">
+ <object type="Bridge" os_index="16" name="Intel Corporation X58 I/O Hub PCI Express Root Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[04-04]" pci_busid="0000:00:01.0" pci_type="0604 [8086:3408] [0000:0000] 13" pci_link_speed="0.400000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 1"/>
+ <object type="PCIDev" os_index="16384" name="Intel Corporation 82576 Gigabit Network Connection" pci_busid="0000:04:00.0" pci_type="0200 [8086:10c9] [003c:003f] 01" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82576 Gigabit Network Connection"/>
+ <object type="OSDev" name="eth0" osdev_type="2">
+ <info name="Address" value="78:e7:d1:21:55:30"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="16385" name="Intel Corporation 82576 Gigabit Network Connection" pci_busid="0000:04:00.1" pci_type="0200 [8086:10c9] [003c:003f] 01" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82576 Gigabit Network Connection"/>
+ <object type="OSDev" name="eth1" osdev_type="2">
+ <info name="Address" value="78:e7:d1:21:55:31"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="80" name="Intel Corporation X58 I/O Hub PCI Express Root Port 5" bridge_type="1-1" depth="0" bridge_pci="0000:[05-05]" pci_busid="0000:00:05.0" pci_type="0604 [8086:340c] [0000:0000] 13" pci_link_speed="2.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 5"/>
+ <object type="PCIDev" os_index="20480" pci_busid="0000:05:00.0" pci_type="0c06 [15b3:6746] [003c:0049] b0" pci_link_speed="2.000000">
+ <info name="PCIVendor" value="Mellanox Technologies"/>
+ <object type="OSDev" name="eth2" osdev_type="2">
+ <info name="Address" value="78:e7:d1:21:55:35"/>
+ </object>
+ <object type="OSDev" name="ib0" osdev_type="2">
+ <info name="Address" value="80:00:00:48:fe:80:00:00:00:00:00:00:78:e7:d1:03:00:21:55:35"/>
+ </object>
+ <object type="OSDev" name="mlx4_0" osdev_type="3"/>
+ </object>
+ </object>
+ <object type="Bridge" os_index="112" name="Intel Corporation X58 I/O Hub PCI Express Root Port 7" bridge_type="1-1" depth="0" bridge_pci="0000:[06-08]" pci_busid="0000:00:07.0" pci_type="0604 [8086:340e] [0000:0000] 13" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 7"/>
+ <object type="PCIDev" os_index="24576" pci_busid="0000:06:00.0" pci_type="0302 [10de:06d2] [00de:0030] a3" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="nVidia Corporation"/>
+ </object>
+ </object>
+ <object type="Bridge" os_index="480" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[01-01]" pci_busid="0000:00:1e.0" pci_type="0604 [8086:244e] [0000:0000] 90" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="PCIDev" os_index="4144" name="ATI Technologies Inc ES1000" pci_busid="0000:01:03.0" pci_type="0300 [1002:515e] [003c:00fb] 02" pci_link_speed="0.200000">
+ <info name="PCIVendor" value="ATI Technologies Inc"/>
+ <info name="PCIDevice" value="ES1000"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="498" name="Intel Corporation 82801JI (ICH10 Family) 4 port SATA IDE Controller" pci_busid="0000:00:1f.2" pci_type="0101 [8086:3a20] [003c:000d] 00" pci_link_speed="0.100000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801JI (ICH10 Family) 4 port SATA IDE Controller"/>
+ <object type="OSDev" name="sda" osdev_type="0"/>
+ </object>
+ <object type="PCIDev" os_index="501" name="Intel Corporation 82801JI (ICH10 Family) 2 port SATA IDE Controller" pci_busid="0000:00:1f.5" pci_type="0101 [8086:3a26] [003c:000d] 00" pci_link_speed="0.100000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801JI (ICH10 Family) 2 port SATA IDE Controller"/>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x00aaaaaa" complete_cpuset="0x00aaaaaa" online_cpuset="0x00aaaaaa" allowed_cpuset="0x00aaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="19327348736">
+ <page_type size="4096" count="4718591"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="1" cpuset="0x00aaaaaa" complete_cpuset="0x00aaaaaa" online_cpuset="0x00aaaaaa" allowed_cpuset="0x00aaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00aaaaaa" complete_cpuset="0x00aaaaaa" online_cpuset="0x00aaaaaa" allowed_cpuset="0x00aaaaaa" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="12582912" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00002002" complete_cpuset="0x00002002" online_cpuset="0x00002002" allowed_cpuset="0x00002002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00002002" complete_cpuset="0x00002002" online_cpuset="0x00002002" allowed_cpuset="0x00002002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00002002" complete_cpuset="0x00002002" online_cpuset="0x00002002" allowed_cpuset="0x00002002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="8" cpuset="0x00008008" complete_cpuset="0x00008008" online_cpuset="0x00008008" allowed_cpuset="0x00008008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00020020" complete_cpuset="0x00020020" online_cpuset="0x00020020" allowed_cpuset="0x00020020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00020020" complete_cpuset="0x00020020" online_cpuset="0x00020020" allowed_cpuset="0x00020020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00020020" complete_cpuset="0x00020020" online_cpuset="0x00020020" allowed_cpuset="0x00020020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00080080" complete_cpuset="0x00080080" online_cpuset="0x00080080" allowed_cpuset="0x00080080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00080080" complete_cpuset="0x00080080" online_cpuset="0x00080080" allowed_cpuset="0x00080080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="10" cpuset="0x00080080" complete_cpuset="0x00080080" online_cpuset="0x00080080" allowed_cpuset="0x00080080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00200200" complete_cpuset="0x00200200" online_cpuset="0x00200200" allowed_cpuset="0x00200200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00200200" complete_cpuset="0x00200200" online_cpuset="0x00200200" allowed_cpuset="0x00200200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00200200" complete_cpuset="0x00200200" online_cpuset="0x00200200" allowed_cpuset="0x00200200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00800800" complete_cpuset="0x00800800" online_cpuset="0x00800800" allowed_cpuset="0x00800800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00800800" complete_cpuset="0x00800800" online_cpuset="0x00800800" allowed_cpuset="0x00800800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="9" cpuset="0x00800800" complete_cpuset="0x00800800" online_cpuset="0x00800800" allowed_cpuset="0x00800800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ <object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="1" bridge_type="0-1" depth="0" bridge_pci="0000:[10-1f]">
+ <object type="Bridge" os_index="65584" name="Intel Corporation X58 I/O Hub PCI Express Root Port 3" bridge_type="1-1" depth="0" bridge_pci="0000:[14-16]" pci_busid="0000:10:03.0" pci_type="0604 [8086:340a] [0000:0000] 13" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 3"/>
+ <object type="PCIDev" os_index="81920" pci_busid="0000:14:00.0" pci_type="0302 [10de:06d2] [00de:0030] a3" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="nVidia Corporation"/>
+ </object>
+ </object>
+ <object type="Bridge" os_index="65648" name="Intel Corporation X58 I/O Hub PCI Express Root Port 7" bridge_type="1-1" depth="0" bridge_pci="0000:[11-13]" pci_busid="0000:10:07.0" pci_type="0604 [8086:340e] [0000:0000] 13" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="X58 I/O Hub PCI Express Root Port 7"/>
+ <object type="PCIDev" os_index="69632" pci_busid="0000:11:00.0" pci_type="0302 [10de:06d2] [00de:0030] a3" pci_link_speed="4.000000">
+ <info name="PCIVendor" value="nVidia Corporation"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/8em64t-2mi2ma2c.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="System" os_index="0">
+ <object type="Group" depth="0">
+ <object type="Machine" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" local_memory="1016368">
+ <page_type size="4096" count="65536"/>
+ <page_type size="1048576" count="1024"/>
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Machine" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" local_memory="1016368">
+ <page_type size="8192" count="1048576"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0F331C"/>
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Group" depth="0">
+ <object type="Machine" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" local_memory="1016368">
+ <page_type size="2048" count="1"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0F331C"/>
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Machine" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" local_memory="1016368">
+ <page_type size="2048" count="2"/>
+ <page_type size="4096" count="65536"/>
+ <page_type size="1048576" count="2048"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0F331C"/>
+ <object type="Socket" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003">
+ <object type="Cache" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" cache_size="2097152" depth="2" cache_linesize="0" cache_associativity="0">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" cache_size="32768" depth="1" cache_linesize="0" cache_associativity="0">
+ <object type="Core" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/96em64t-4n4d3ca2co-pci.xml
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/96em64t-4n4d3ca2co-pci.xml (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/96em64t-4n4d3ca2co-pci.xml 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,845 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_index="0" cpuset="0xffffffff,0xffffffff,0xffffffff" complete_cpuset="0xffffffff,0xffffffff,0xffffffff" online_cpuset="0xffffffff,0xffffffff,0xffffffff" allowed_cpuset="0xffffffff,0xffffffff,0xffffffff" nodeset="0x0000000f" complete_nodeset="0x0000000f" allowed_nodeset="0x0000000f">
+ <page_type size="4096" count="0"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="IBM 3850 M2 / x3950 M2 -[72336SG]-"/>
+ <info name="DMIProductVersion" value=""/>
+ <info name="DMIBoardVendor" value="IBM"/>
+ <info name="DMIBoardName" value="Node1 Processor Card"/>
+ <info name="DMIBoardVersion" value=""/>
+ <info name="DMIBoardAssetTag" value=""/>
+ <info name="DMIChassisVendor" value="IBM"/>
+ <info name="DMIChassisType" value="17"/>
+ <info name="DMIChassisVersion" value=""/>
+ <info name="DMIChassisAssetTag" value=" "/>
+ <info name="DMIBIOSVendor" value="IBM"/>
+ <info name="DMIBIOSVersion" value="-[A3E164AUS-1.11]-"/>
+ <info name="DMIBIOSDate" value="04/01/2009"/>
+ <info name="DMISysVendor" value="IBM"/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="2.6.32-5-amd64"/>
+ <info name="OSVersion" value="#1 SMP Tue Jun 14 09:42:28 UTC 2011"/>
+ <info name="HostName" value="bertha"/>
+ <info name="Architecture" value="x86_64"/>
+ <distances nbobjs="4" relative_depth="1" latency_base="10.000000">
+ <latency value="1.000000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="1.000000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="1.000000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="2.600000"/>
+ <latency value="1.000000"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" online_cpuset="0x00ffffff" allowed_cpuset="0x00ffffff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="51269931008">
+ <page_type size="4096" count="12517073"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="1" cpuset="0x00111111" complete_cpuset="0x00111111" online_cpuset="0x00111111" allowed_cpuset="0x00111111" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" cpuset="0x00111111" complete_cpuset="0x00111111" online_cpuset="0x00111111" allowed_cpuset="0x00111111" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000011" complete_cpuset="0x00000011" online_cpuset="0x00000011" allowed_cpuset="0x00000011" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001100" complete_cpuset="0x00001100" online_cpuset="0x00001100" allowed_cpuset="0x00001100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00110000" complete_cpuset="0x00110000" online_cpuset="0x00110000" allowed_cpuset="0x00110000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="0" cpuset="0x00222222" complete_cpuset="0x00222222" online_cpuset="0x00222222" allowed_cpuset="0x00222222" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" cpuset="0x00222222" complete_cpuset="0x00222222" online_cpuset="0x00222222" allowed_cpuset="0x00222222" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000022" complete_cpuset="0x00000022" online_cpuset="0x00000022" allowed_cpuset="0x00000022" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002200" complete_cpuset="0x00002200" online_cpuset="0x00002200" allowed_cpuset="0x00002200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00220000" complete_cpuset="0x00220000" online_cpuset="0x00220000" allowed_cpuset="0x00220000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00444444" complete_cpuset="0x00444444" online_cpuset="0x00444444" allowed_cpuset="0x00444444" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" cpuset="0x00444444" complete_cpuset="0x00444444" online_cpuset="0x00444444" allowed_cpuset="0x00444444" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000044" complete_cpuset="0x00000044" online_cpuset="0x00000044" allowed_cpuset="0x00000044" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004400" complete_cpuset="0x00004400" online_cpuset="0x00004400" allowed_cpuset="0x00004400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00440000" complete_cpuset="0x00440000" online_cpuset="0x00440000" allowed_cpuset="0x00440000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="3" cpuset="0x00888888" complete_cpuset="0x00888888" online_cpuset="0x00888888" allowed_cpuset="0x00888888" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" cpuset="0x00888888" complete_cpuset="0x00888888" online_cpuset="0x00888888" allowed_cpuset="0x00888888" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00000088" complete_cpuset="0x00000088" online_cpuset="0x00000088" allowed_cpuset="0x00000088" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008800" complete_cpuset="0x00008800" online_cpuset="0x00008800" allowed_cpuset="0x00008800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00880000" complete_cpuset="0x00880000" online_cpuset="0x00880000" allowed_cpuset="0x00880000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="0" bridge_type="0-1" depth="0" bridge_pci="0000:[00-02]">
+ <object type="Bridge" os_index="448" name="Intel Corporation N10/ICH 7 Family PCI Express Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[02-02]" pci_busid="0000:00:1c.0" pci_type="0604 [8086:27d0] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="N10/ICH 7 Family PCI Express Port 1"/>
+ <object type="PCIDev" os_index="8192" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:02:00.0" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth0" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:8e:04"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="8193" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:02:00.1" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth1" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:8e:06"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="480" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[01-01]" pci_busid="0000:00:1e.0" pci_type="0604 [8086:244e] [0000:0000] e1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="PCIDev" os_index="4096" name="ATI Technologies Inc ES1000" pci_busid="0000:01:00.0" pci_type="0300 [1002:515e] [0014:0019] 02" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="ATI Technologies Inc"/>
+ <info name="PCIDevice" value="ES1000"/>
+ <object type="OSDev" name="card0" osdev_type="1"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="498" name="Intel Corporation N10/ICH7 Family SATA IDE Controller" pci_busid="0000:00:1f.2" pci_type="0101 [8086:27c0] [0014:0081] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="N10/ICH7 Family SATA IDE Controller"/>
+ <object type="OSDev" name="sr0" osdev_type="0"/>
+ </object>
+ </object>
+ <object type="Bridge" os_index="1" bridge_type="0-1" depth="0" bridge_pci="0000:[03-04]">
+ <object type="Bridge" os_index="12288" name="IBM CalIOC2 PCI-E Root Port" bridge_type="1-1" depth="0" bridge_pci="0000:[04-04]" pci_busid="0000:03:00.0" pci_type="0604 [1014:0308] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="IBM"/>
+ <info name="PCIDevice" value="CalIOC2 PCI-E Root Port"/>
+ <object type="PCIDev" os_index="16384" name="LSI Logic / Symbios Logic SAS1078 PCI-Express Fusion-MPT SAS" pci_busid="0000:04:00.0" pci_type="0100 [1000:0062] [0014:0066] 04" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="LSI Logic / Symbios Logic"/>
+ <info name="PCIDevice" value="SAS1078 PCI-Express Fusion-MPT SAS"/>
+ <object type="OSDev" name="sda" osdev_type="0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x0000ffff,0xff000000" complete_cpuset="0x0000ffff,0xff000000" online_cpuset="0x0000ffff,0xff000000" allowed_cpuset="0x0000ffff,0xff000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="51271172096">
+ <page_type size="4096" count="12517376"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="4" cpuset="0x00001111,0x11000000" complete_cpuset="0x00001111,0x11000000" online_cpuset="0x00001111,0x11000000" allowed_cpuset="0x00001111,0x11000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00001111,0x11000000" complete_cpuset="0x00001111,0x11000000" online_cpuset="0x00001111,0x11000000" allowed_cpuset="0x00001111,0x11000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x11000000" complete_cpuset="0x11000000" online_cpuset="0x11000000" allowed_cpuset="0x11000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" online_cpuset="0x01000000" allowed_cpuset="0x01000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="28" cpuset="0x10000000" complete_cpuset="0x10000000" online_cpuset="0x10000000" allowed_cpuset="0x10000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000011,0x0" complete_cpuset="0x00000011,0x0" online_cpuset="0x00000011,0x0" allowed_cpuset="0x00000011,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="32" cpuset="0x00000001,0x0" complete_cpuset="0x00000001,0x0" online_cpuset="0x00000001,0x0" allowed_cpuset="0x00000001,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="36" cpuset="0x00000010,0x0" complete_cpuset="0x00000010,0x0" online_cpuset="0x00000010,0x0" allowed_cpuset="0x00000010,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001100,0x0" complete_cpuset="0x00001100,0x0" online_cpuset="0x00001100,0x0" allowed_cpuset="0x00001100,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="40" cpuset="0x00000100,0x0" complete_cpuset="0x00000100,0x0" online_cpuset="0x00000100,0x0" allowed_cpuset="0x00000100,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="44" cpuset="0x00001000,0x0" complete_cpuset="0x00001000,0x0" online_cpuset="0x00001000,0x0" allowed_cpuset="0x00001000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="5" cpuset="0x00002222,0x22000000" complete_cpuset="0x00002222,0x22000000" online_cpuset="0x00002222,0x22000000" allowed_cpuset="0x00002222,0x22000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00002222,0x22000000" complete_cpuset="0x00002222,0x22000000" online_cpuset="0x00002222,0x22000000" allowed_cpuset="0x00002222,0x22000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x22000000" complete_cpuset="0x22000000" online_cpuset="0x22000000" allowed_cpuset="0x22000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" online_cpuset="0x02000000" allowed_cpuset="0x02000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="29" cpuset="0x20000000" complete_cpuset="0x20000000" online_cpuset="0x20000000" allowed_cpuset="0x20000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000022,0x0" complete_cpuset="0x00000022,0x0" online_cpuset="0x00000022,0x0" allowed_cpuset="0x00000022,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="33" cpuset="0x00000002,0x0" complete_cpuset="0x00000002,0x0" online_cpuset="0x00000002,0x0" allowed_cpuset="0x00000002,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="37" cpuset="0x00000020,0x0" complete_cpuset="0x00000020,0x0" online_cpuset="0x00000020,0x0" allowed_cpuset="0x00000020,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002200,0x0" complete_cpuset="0x00002200,0x0" online_cpuset="0x00002200,0x0" allowed_cpuset="0x00002200,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="41" cpuset="0x00000200,0x0" complete_cpuset="0x00000200,0x0" online_cpuset="0x00000200,0x0" allowed_cpuset="0x00000200,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="45" cpuset="0x00002000,0x0" complete_cpuset="0x00002000,0x0" online_cpuset="0x00002000,0x0" allowed_cpuset="0x00002000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="6" cpuset="0x00004444,0x44000000" complete_cpuset="0x00004444,0x44000000" online_cpuset="0x00004444,0x44000000" allowed_cpuset="0x00004444,0x44000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00004444,0x44000000" complete_cpuset="0x00004444,0x44000000" online_cpuset="0x00004444,0x44000000" allowed_cpuset="0x00004444,0x44000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x44000000" complete_cpuset="0x44000000" online_cpuset="0x44000000" allowed_cpuset="0x44000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="26" cpuset="0x04000000" complete_cpuset="0x04000000" online_cpuset="0x04000000" allowed_cpuset="0x04000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="30" cpuset="0x40000000" complete_cpuset="0x40000000" online_cpuset="0x40000000" allowed_cpuset="0x40000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000044,0x0" complete_cpuset="0x00000044,0x0" online_cpuset="0x00000044,0x0" allowed_cpuset="0x00000044,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="34" cpuset="0x00000004,0x0" complete_cpuset="0x00000004,0x0" online_cpuset="0x00000004,0x0" allowed_cpuset="0x00000004,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="38" cpuset="0x00000040,0x0" complete_cpuset="0x00000040,0x0" online_cpuset="0x00000040,0x0" allowed_cpuset="0x00000040,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004400,0x0" complete_cpuset="0x00004400,0x0" online_cpuset="0x00004400,0x0" allowed_cpuset="0x00004400,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="42" cpuset="0x00000400,0x0" complete_cpuset="0x00000400,0x0" online_cpuset="0x00000400,0x0" allowed_cpuset="0x00000400,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="46" cpuset="0x00004000,0x0" complete_cpuset="0x00004000,0x0" online_cpuset="0x00004000,0x0" allowed_cpuset="0x00004000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="7" cpuset="0x00008888,0x88000000" complete_cpuset="0x00008888,0x88000000" online_cpuset="0x00008888,0x88000000" allowed_cpuset="0x00008888,0x88000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" cpuset="0x00008888,0x88000000" complete_cpuset="0x00008888,0x88000000" online_cpuset="0x00008888,0x88000000" allowed_cpuset="0x00008888,0x88000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x88000000" complete_cpuset="0x88000000" online_cpuset="0x88000000" allowed_cpuset="0x88000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="27" cpuset="0x08000000" complete_cpuset="0x08000000" online_cpuset="0x08000000" allowed_cpuset="0x08000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="31" cpuset="0x80000000" complete_cpuset="0x80000000" online_cpuset="0x80000000" allowed_cpuset="0x80000000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000088,0x0" complete_cpuset="0x00000088,0x0" online_cpuset="0x00000088,0x0" allowed_cpuset="0x00000088,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="35" cpuset="0x00000008,0x0" complete_cpuset="0x00000008,0x0" online_cpuset="0x00000008,0x0" allowed_cpuset="0x00000008,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="39" cpuset="0x00000080,0x0" complete_cpuset="0x00000080,0x0" online_cpuset="0x00000080,0x0" allowed_cpuset="0x00000080,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008800,0x0" complete_cpuset="0x00008800,0x0" online_cpuset="0x00008800,0x0" allowed_cpuset="0x00008800,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="43" cpuset="0x00000800,0x0" complete_cpuset="0x00000800,0x0" online_cpuset="0x00000800,0x0" allowed_cpuset="0x00000800,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="PU" os_index="47" cpuset="0x00008000,0x0" complete_cpuset="0x00008000,0x0" online_cpuset="0x00008000,0x0" allowed_cpuset="0x00008000,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="9" bridge_type="0-1" depth="0" bridge_pci="0000:[30-34]">
+ <object type="Bridge" os_index="197056" name="Intel Corporation N10/ICH 7 Family PCI Express Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[32-32]" pci_busid="0000:30:1c.0" pci_type="0604 [8086:27d0] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="N10/ICH 7 Family PCI Express Port 1"/>
+ <object type="PCIDev" os_index="204800" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:32:00.0" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth2" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:88:dc"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="204801" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:32:00.1" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth3" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:88:de"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="197088" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[33-34]" pci_busid="0000:30:1e.0" pci_type="0604 [8086:244e] [0000:0000] e1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="Bridge" os_index="208896" name="IBM CalIOC2 PCI-E Root Port" bridge_type="1-1" depth="1" bridge_pci="0000:[34-34]" pci_busid="0000:33:00.0" pci_type="0604 [1014:0308] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="IBM"/>
+ <info name="PCIDevice" value="CalIOC2 PCI-E Root Port"/>
+ <object type="PCIDev" os_index="212992" name="LSI Logic / Symbios Logic SAS1078 PCI-Express Fusion-MPT SAS" pci_busid="0000:34:00.0" pci_type="0100 [1000:0062] [0014:0066] 04" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="LSI Logic / Symbios Logic"/>
+ <info name="PCIDevice" value="SAS1078 PCI-Express Fusion-MPT SAS"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="2" cpuset="0x000000ff,0xffff0000,0x0" complete_cpuset="0x000000ff,0xffff0000,0x0" online_cpuset="0x000000ff,0xffff0000,0x0" allowed_cpuset="0x000000ff,0xffff0000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" local_memory="51271172096">
+ <page_type size="4096" count="12517376"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="8" cpuset="0x00000011,0x11110000,0x0" complete_cpuset="0x00000011,0x11110000,0x0" online_cpuset="0x00000011,0x11110000,0x0" allowed_cpuset="0x00000011,0x11110000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" cpuset="0x00000011,0x11110000,0x0" complete_cpuset="0x00000011,0x11110000,0x0" online_cpuset="0x00000011,0x11110000,0x0" allowed_cpuset="0x00000011,0x11110000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00110000,0x0" complete_cpuset="0x00110000,0x0" online_cpuset="0x00110000,0x0" allowed_cpuset="0x00110000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="48" cpuset="0x00010000,0x0" complete_cpuset="0x00010000,0x0" online_cpuset="0x00010000,0x0" allowed_cpuset="0x00010000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="52" cpuset="0x00100000,0x0" complete_cpuset="0x00100000,0x0" online_cpuset="0x00100000,0x0" allowed_cpuset="0x00100000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x11000000,0x0" complete_cpuset="0x11000000,0x0" online_cpuset="0x11000000,0x0" allowed_cpuset="0x11000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="56" cpuset="0x01000000,0x0" complete_cpuset="0x01000000,0x0" online_cpuset="0x01000000,0x0" allowed_cpuset="0x01000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="60" cpuset="0x10000000,0x0" complete_cpuset="0x10000000,0x0" online_cpuset="0x10000000,0x0" allowed_cpuset="0x10000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000011,,0x0" complete_cpuset="0x00000011,,0x0" online_cpuset="0x00000011,,0x0" allowed_cpuset="0x00000011,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000001,,0x0" complete_cpuset="0x00000001,,0x0" online_cpuset="0x00000001,,0x0" allowed_cpuset="0x00000001,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000001,,0x0" complete_cpuset="0x00000001,,0x0" online_cpuset="0x00000001,,0x0" allowed_cpuset="0x00000001,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="64" cpuset="0x00000001,,0x0" complete_cpuset="0x00000001,,0x0" online_cpuset="0x00000001,,0x0" allowed_cpuset="0x00000001,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000010,,0x0" complete_cpuset="0x00000010,,0x0" online_cpuset="0x00000010,,0x0" allowed_cpuset="0x00000010,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00000010,,0x0" complete_cpuset="0x00000010,,0x0" online_cpuset="0x00000010,,0x0" allowed_cpuset="0x00000010,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="68" cpuset="0x00000010,,0x0" complete_cpuset="0x00000010,,0x0" online_cpuset="0x00000010,,0x0" allowed_cpuset="0x00000010,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="9" cpuset="0x00000022,0x22220000,0x0" complete_cpuset="0x00000022,0x22220000,0x0" online_cpuset="0x00000022,0x22220000,0x0" allowed_cpuset="0x00000022,0x22220000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" cpuset="0x00000022,0x22220000,0x0" complete_cpuset="0x00000022,0x22220000,0x0" online_cpuset="0x00000022,0x22220000,0x0" allowed_cpuset="0x00000022,0x22220000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00220000,0x0" complete_cpuset="0x00220000,0x0" online_cpuset="0x00220000,0x0" allowed_cpuset="0x00220000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="49" cpuset="0x00020000,0x0" complete_cpuset="0x00020000,0x0" online_cpuset="0x00020000,0x0" allowed_cpuset="0x00020000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="53" cpuset="0x00200000,0x0" complete_cpuset="0x00200000,0x0" online_cpuset="0x00200000,0x0" allowed_cpuset="0x00200000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x22000000,0x0" complete_cpuset="0x22000000,0x0" online_cpuset="0x22000000,0x0" allowed_cpuset="0x22000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="57" cpuset="0x02000000,0x0" complete_cpuset="0x02000000,0x0" online_cpuset="0x02000000,0x0" allowed_cpuset="0x02000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="61" cpuset="0x20000000,0x0" complete_cpuset="0x20000000,0x0" online_cpuset="0x20000000,0x0" allowed_cpuset="0x20000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000022,,0x0" complete_cpuset="0x00000022,,0x0" online_cpuset="0x00000022,,0x0" allowed_cpuset="0x00000022,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000002,,0x0" complete_cpuset="0x00000002,,0x0" online_cpuset="0x00000002,,0x0" allowed_cpuset="0x00000002,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000002,,0x0" complete_cpuset="0x00000002,,0x0" online_cpuset="0x00000002,,0x0" allowed_cpuset="0x00000002,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="65" cpuset="0x00000002,,0x0" complete_cpuset="0x00000002,,0x0" online_cpuset="0x00000002,,0x0" allowed_cpuset="0x00000002,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000020,,0x0" complete_cpuset="0x00000020,,0x0" online_cpuset="0x00000020,,0x0" allowed_cpuset="0x00000020,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00000020,,0x0" complete_cpuset="0x00000020,,0x0" online_cpuset="0x00000020,,0x0" allowed_cpuset="0x00000020,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="69" cpuset="0x00000020,,0x0" complete_cpuset="0x00000020,,0x0" online_cpuset="0x00000020,,0x0" allowed_cpuset="0x00000020,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="10" cpuset="0x00000044,0x44440000,0x0" complete_cpuset="0x00000044,0x44440000,0x0" online_cpuset="0x00000044,0x44440000,0x0" allowed_cpuset="0x00000044,0x44440000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" cpuset="0x00000044,0x44440000,0x0" complete_cpuset="0x00000044,0x44440000,0x0" online_cpuset="0x00000044,0x44440000,0x0" allowed_cpuset="0x00000044,0x44440000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00440000,0x0" complete_cpuset="0x00440000,0x0" online_cpuset="0x00440000,0x0" allowed_cpuset="0x00440000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="50" cpuset="0x00040000,0x0" complete_cpuset="0x00040000,0x0" online_cpuset="0x00040000,0x0" allowed_cpuset="0x00040000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="54" cpuset="0x00400000,0x0" complete_cpuset="0x00400000,0x0" online_cpuset="0x00400000,0x0" allowed_cpuset="0x00400000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x44000000,0x0" complete_cpuset="0x44000000,0x0" online_cpuset="0x44000000,0x0" allowed_cpuset="0x44000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="58" cpuset="0x04000000,0x0" complete_cpuset="0x04000000,0x0" online_cpuset="0x04000000,0x0" allowed_cpuset="0x04000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="62" cpuset="0x40000000,0x0" complete_cpuset="0x40000000,0x0" online_cpuset="0x40000000,0x0" allowed_cpuset="0x40000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000044,,0x0" complete_cpuset="0x00000044,,0x0" online_cpuset="0x00000044,,0x0" allowed_cpuset="0x00000044,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000004,,0x0" complete_cpuset="0x00000004,,0x0" online_cpuset="0x00000004,,0x0" allowed_cpuset="0x00000004,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000004,,0x0" complete_cpuset="0x00000004,,0x0" online_cpuset="0x00000004,,0x0" allowed_cpuset="0x00000004,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="66" cpuset="0x00000004,,0x0" complete_cpuset="0x00000004,,0x0" online_cpuset="0x00000004,,0x0" allowed_cpuset="0x00000004,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000040,,0x0" complete_cpuset="0x00000040,,0x0" online_cpuset="0x00000040,,0x0" allowed_cpuset="0x00000040,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00000040,,0x0" complete_cpuset="0x00000040,,0x0" online_cpuset="0x00000040,,0x0" allowed_cpuset="0x00000040,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="70" cpuset="0x00000040,,0x0" complete_cpuset="0x00000040,,0x0" online_cpuset="0x00000040,,0x0" allowed_cpuset="0x00000040,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="11" cpuset="0x00000088,0x88880000,0x0" complete_cpuset="0x00000088,0x88880000,0x0" online_cpuset="0x00000088,0x88880000,0x0" allowed_cpuset="0x00000088,0x88880000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="Cache" cpuset="0x00000088,0x88880000,0x0" complete_cpuset="0x00000088,0x88880000,0x0" online_cpuset="0x00000088,0x88880000,0x0" allowed_cpuset="0x00000088,0x88880000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00880000,0x0" complete_cpuset="0x00880000,0x0" online_cpuset="0x00880000,0x0" allowed_cpuset="0x00880000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="51" cpuset="0x00080000,0x0" complete_cpuset="0x00080000,0x0" online_cpuset="0x00080000,0x0" allowed_cpuset="0x00080000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="55" cpuset="0x00800000,0x0" complete_cpuset="0x00800000,0x0" online_cpuset="0x00800000,0x0" allowed_cpuset="0x00800000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x88000000,0x0" complete_cpuset="0x88000000,0x0" online_cpuset="0x88000000,0x0" allowed_cpuset="0x88000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="59" cpuset="0x08000000,0x0" complete_cpuset="0x08000000,0x0" online_cpuset="0x08000000,0x0" allowed_cpuset="0x08000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="63" cpuset="0x80000000,0x0" complete_cpuset="0x80000000,0x0" online_cpuset="0x80000000,0x0" allowed_cpuset="0x80000000,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000088,,0x0" complete_cpuset="0x00000088,,0x0" online_cpuset="0x00000088,,0x0" allowed_cpuset="0x00000088,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000008,,0x0" complete_cpuset="0x00000008,,0x0" online_cpuset="0x00000008,,0x0" allowed_cpuset="0x00000008,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x00000008,,0x0" complete_cpuset="0x00000008,,0x0" online_cpuset="0x00000008,,0x0" allowed_cpuset="0x00000008,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="67" cpuset="0x00000008,,0x0" complete_cpuset="0x00000008,,0x0" online_cpuset="0x00000008,,0x0" allowed_cpuset="0x00000008,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00000080,,0x0" complete_cpuset="0x00000080,,0x0" online_cpuset="0x00000080,,0x0" allowed_cpuset="0x00000080,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x00000080,,0x0" complete_cpuset="0x00000080,,0x0" online_cpuset="0x00000080,,0x0" allowed_cpuset="0x00000080,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004">
+ <object type="PU" os_index="71" cpuset="0x00000080,,0x0" complete_cpuset="0x00000080,,0x0" online_cpuset="0x00000080,,0x0" allowed_cpuset="0x00000080,,0x0" nodeset="0x00000004" complete_nodeset="0x00000004" allowed_nodeset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="17" bridge_type="0-1" depth="0" bridge_pci="0000:[60-64]">
+ <object type="Bridge" os_index="393664" name="Intel Corporation N10/ICH 7 Family PCI Express Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[62-62]" pci_busid="0000:60:1c.0" pci_type="0604 [8086:27d0] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="N10/ICH 7 Family PCI Express Port 1"/>
+ <object type="PCIDev" os_index="401408" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:62:00.0" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth4" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:8a:18"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="401409" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:62:00.1" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth5" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:8a:1a"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="393696" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[63-64]" pci_busid="0000:60:1e.0" pci_type="0604 [8086:244e] [0000:0000] e1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="Bridge" os_index="405504" name="IBM CalIOC2 PCI-E Root Port" bridge_type="1-1" depth="1" bridge_pci="0000:[64-64]" pci_busid="0000:63:00.0" pci_type="0604 [1014:0308] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="IBM"/>
+ <info name="PCIDevice" value="CalIOC2 PCI-E Root Port"/>
+ <object type="PCIDev" os_index="409600" name="LSI Logic / Symbios Logic SAS1078 PCI-Express Fusion-MPT SAS" pci_busid="0000:64:00.0" pci_type="0100 [1000:0062] [0014:0066] 04" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="LSI Logic / Symbios Logic"/>
+ <info name="PCIDevice" value="SAS1078 PCI-Express Fusion-MPT SAS"/>
+ <object type="OSDev" name="sdb" osdev_type="0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="3" cpuset="0xffffff00,,0x0" complete_cpuset="0xffffff00,,0x0" online_cpuset="0xffffff00,,0x0" allowed_cpuset="0xffffff00,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" local_memory="51271172096">
+ <page_type size="4096" count="12517376"/>
+ <page_type size="2097152" count="0"/>
+ <object type="Socket" os_index="12" cpuset="0x11111100,,0x0" complete_cpuset="0x11111100,,0x0" online_cpuset="0x11111100,,0x0" allowed_cpuset="0x11111100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" cpuset="0x11111100,,0x0" complete_cpuset="0x11111100,,0x0" online_cpuset="0x11111100,,0x0" allowed_cpuset="0x11111100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00001100,,0x0" complete_cpuset="0x00001100,,0x0" online_cpuset="0x00001100,,0x0" allowed_cpuset="0x00001100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000100,,0x0" complete_cpuset="0x00000100,,0x0" online_cpuset="0x00000100,,0x0" allowed_cpuset="0x00000100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000100,,0x0" complete_cpuset="0x00000100,,0x0" online_cpuset="0x00000100,,0x0" allowed_cpuset="0x00000100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="72" cpuset="0x00000100,,0x0" complete_cpuset="0x00000100,,0x0" online_cpuset="0x00000100,,0x0" allowed_cpuset="0x00000100,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00001000,,0x0" complete_cpuset="0x00001000,,0x0" online_cpuset="0x00001000,,0x0" allowed_cpuset="0x00001000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00001000,,0x0" complete_cpuset="0x00001000,,0x0" online_cpuset="0x00001000,,0x0" allowed_cpuset="0x00001000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="76" cpuset="0x00001000,,0x0" complete_cpuset="0x00001000,,0x0" online_cpuset="0x00001000,,0x0" allowed_cpuset="0x00001000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00110000,,0x0" complete_cpuset="0x00110000,,0x0" online_cpuset="0x00110000,,0x0" allowed_cpuset="0x00110000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00010000,,0x0" complete_cpuset="0x00010000,,0x0" online_cpuset="0x00010000,,0x0" allowed_cpuset="0x00010000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00010000,,0x0" complete_cpuset="0x00010000,,0x0" online_cpuset="0x00010000,,0x0" allowed_cpuset="0x00010000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="80" cpuset="0x00010000,,0x0" complete_cpuset="0x00010000,,0x0" online_cpuset="0x00010000,,0x0" allowed_cpuset="0x00010000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00100000,,0x0" complete_cpuset="0x00100000,,0x0" online_cpuset="0x00100000,,0x0" allowed_cpuset="0x00100000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00100000,,0x0" complete_cpuset="0x00100000,,0x0" online_cpuset="0x00100000,,0x0" allowed_cpuset="0x00100000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="84" cpuset="0x00100000,,0x0" complete_cpuset="0x00100000,,0x0" online_cpuset="0x00100000,,0x0" allowed_cpuset="0x00100000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x11000000,,0x0" complete_cpuset="0x11000000,,0x0" online_cpuset="0x11000000,,0x0" allowed_cpuset="0x11000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x01000000,,0x0" complete_cpuset="0x01000000,,0x0" online_cpuset="0x01000000,,0x0" allowed_cpuset="0x01000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x01000000,,0x0" complete_cpuset="0x01000000,,0x0" online_cpuset="0x01000000,,0x0" allowed_cpuset="0x01000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="88" cpuset="0x01000000,,0x0" complete_cpuset="0x01000000,,0x0" online_cpuset="0x01000000,,0x0" allowed_cpuset="0x01000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x10000000,,0x0" complete_cpuset="0x10000000,,0x0" online_cpuset="0x10000000,,0x0" allowed_cpuset="0x10000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x10000000,,0x0" complete_cpuset="0x10000000,,0x0" online_cpuset="0x10000000,,0x0" allowed_cpuset="0x10000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="92" cpuset="0x10000000,,0x0" complete_cpuset="0x10000000,,0x0" online_cpuset="0x10000000,,0x0" allowed_cpuset="0x10000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="13" cpuset="0x22222200,,0x0" complete_cpuset="0x22222200,,0x0" online_cpuset="0x22222200,,0x0" allowed_cpuset="0x22222200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" cpuset="0x22222200,,0x0" complete_cpuset="0x22222200,,0x0" online_cpuset="0x22222200,,0x0" allowed_cpuset="0x22222200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00002200,,0x0" complete_cpuset="0x00002200,,0x0" online_cpuset="0x00002200,,0x0" allowed_cpuset="0x00002200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000200,,0x0" complete_cpuset="0x00000200,,0x0" online_cpuset="0x00000200,,0x0" allowed_cpuset="0x00000200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000200,,0x0" complete_cpuset="0x00000200,,0x0" online_cpuset="0x00000200,,0x0" allowed_cpuset="0x00000200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="73" cpuset="0x00000200,,0x0" complete_cpuset="0x00000200,,0x0" online_cpuset="0x00000200,,0x0" allowed_cpuset="0x00000200,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00002000,,0x0" complete_cpuset="0x00002000,,0x0" online_cpuset="0x00002000,,0x0" allowed_cpuset="0x00002000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00002000,,0x0" complete_cpuset="0x00002000,,0x0" online_cpuset="0x00002000,,0x0" allowed_cpuset="0x00002000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="77" cpuset="0x00002000,,0x0" complete_cpuset="0x00002000,,0x0" online_cpuset="0x00002000,,0x0" allowed_cpuset="0x00002000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00220000,,0x0" complete_cpuset="0x00220000,,0x0" online_cpuset="0x00220000,,0x0" allowed_cpuset="0x00220000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00020000,,0x0" complete_cpuset="0x00020000,,0x0" online_cpuset="0x00020000,,0x0" allowed_cpuset="0x00020000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00020000,,0x0" complete_cpuset="0x00020000,,0x0" online_cpuset="0x00020000,,0x0" allowed_cpuset="0x00020000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="81" cpuset="0x00020000,,0x0" complete_cpuset="0x00020000,,0x0" online_cpuset="0x00020000,,0x0" allowed_cpuset="0x00020000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00200000,,0x0" complete_cpuset="0x00200000,,0x0" online_cpuset="0x00200000,,0x0" allowed_cpuset="0x00200000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00200000,,0x0" complete_cpuset="0x00200000,,0x0" online_cpuset="0x00200000,,0x0" allowed_cpuset="0x00200000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="85" cpuset="0x00200000,,0x0" complete_cpuset="0x00200000,,0x0" online_cpuset="0x00200000,,0x0" allowed_cpuset="0x00200000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x22000000,,0x0" complete_cpuset="0x22000000,,0x0" online_cpuset="0x22000000,,0x0" allowed_cpuset="0x22000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x02000000,,0x0" complete_cpuset="0x02000000,,0x0" online_cpuset="0x02000000,,0x0" allowed_cpuset="0x02000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x02000000,,0x0" complete_cpuset="0x02000000,,0x0" online_cpuset="0x02000000,,0x0" allowed_cpuset="0x02000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="89" cpuset="0x02000000,,0x0" complete_cpuset="0x02000000,,0x0" online_cpuset="0x02000000,,0x0" allowed_cpuset="0x02000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x20000000,,0x0" complete_cpuset="0x20000000,,0x0" online_cpuset="0x20000000,,0x0" allowed_cpuset="0x20000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x20000000,,0x0" complete_cpuset="0x20000000,,0x0" online_cpuset="0x20000000,,0x0" allowed_cpuset="0x20000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="93" cpuset="0x20000000,,0x0" complete_cpuset="0x20000000,,0x0" online_cpuset="0x20000000,,0x0" allowed_cpuset="0x20000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="14" cpuset="0x44444400,,0x0" complete_cpuset="0x44444400,,0x0" online_cpuset="0x44444400,,0x0" allowed_cpuset="0x44444400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" cpuset="0x44444400,,0x0" complete_cpuset="0x44444400,,0x0" online_cpuset="0x44444400,,0x0" allowed_cpuset="0x44444400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00004400,,0x0" complete_cpuset="0x00004400,,0x0" online_cpuset="0x00004400,,0x0" allowed_cpuset="0x00004400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000400,,0x0" complete_cpuset="0x00000400,,0x0" online_cpuset="0x00000400,,0x0" allowed_cpuset="0x00000400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000400,,0x0" complete_cpuset="0x00000400,,0x0" online_cpuset="0x00000400,,0x0" allowed_cpuset="0x00000400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="74" cpuset="0x00000400,,0x0" complete_cpuset="0x00000400,,0x0" online_cpuset="0x00000400,,0x0" allowed_cpuset="0x00000400,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00004000,,0x0" complete_cpuset="0x00004000,,0x0" online_cpuset="0x00004000,,0x0" allowed_cpuset="0x00004000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00004000,,0x0" complete_cpuset="0x00004000,,0x0" online_cpuset="0x00004000,,0x0" allowed_cpuset="0x00004000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="78" cpuset="0x00004000,,0x0" complete_cpuset="0x00004000,,0x0" online_cpuset="0x00004000,,0x0" allowed_cpuset="0x00004000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00440000,,0x0" complete_cpuset="0x00440000,,0x0" online_cpuset="0x00440000,,0x0" allowed_cpuset="0x00440000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00040000,,0x0" complete_cpuset="0x00040000,,0x0" online_cpuset="0x00040000,,0x0" allowed_cpuset="0x00040000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00040000,,0x0" complete_cpuset="0x00040000,,0x0" online_cpuset="0x00040000,,0x0" allowed_cpuset="0x00040000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="82" cpuset="0x00040000,,0x0" complete_cpuset="0x00040000,,0x0" online_cpuset="0x00040000,,0x0" allowed_cpuset="0x00040000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00400000,,0x0" complete_cpuset="0x00400000,,0x0" online_cpuset="0x00400000,,0x0" allowed_cpuset="0x00400000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00400000,,0x0" complete_cpuset="0x00400000,,0x0" online_cpuset="0x00400000,,0x0" allowed_cpuset="0x00400000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="86" cpuset="0x00400000,,0x0" complete_cpuset="0x00400000,,0x0" online_cpuset="0x00400000,,0x0" allowed_cpuset="0x00400000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x44000000,,0x0" complete_cpuset="0x44000000,,0x0" online_cpuset="0x44000000,,0x0" allowed_cpuset="0x44000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x04000000,,0x0" complete_cpuset="0x04000000,,0x0" online_cpuset="0x04000000,,0x0" allowed_cpuset="0x04000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x04000000,,0x0" complete_cpuset="0x04000000,,0x0" online_cpuset="0x04000000,,0x0" allowed_cpuset="0x04000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="90" cpuset="0x04000000,,0x0" complete_cpuset="0x04000000,,0x0" online_cpuset="0x04000000,,0x0" allowed_cpuset="0x04000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x40000000,,0x0" complete_cpuset="0x40000000,,0x0" online_cpuset="0x40000000,,0x0" allowed_cpuset="0x40000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x40000000,,0x0" complete_cpuset="0x40000000,,0x0" online_cpuset="0x40000000,,0x0" allowed_cpuset="0x40000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="94" cpuset="0x40000000,,0x0" complete_cpuset="0x40000000,,0x0" online_cpuset="0x40000000,,0x0" allowed_cpuset="0x40000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="15" cpuset="0x88888800,,0x0" complete_cpuset="0x88888800,,0x0" online_cpuset="0x88888800,,0x0" allowed_cpuset="0x88888800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="Cache" cpuset="0x88888800,,0x0" complete_cpuset="0x88888800,,0x0" online_cpuset="0x88888800,,0x0" allowed_cpuset="0x88888800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="16777216" depth="3" cache_linesize="64" cache_associativity="16">
+ <object type="Cache" cpuset="0x00008800,,0x0" complete_cpuset="0x00008800,,0x0" online_cpuset="0x00008800,,0x0" allowed_cpuset="0x00008800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00000800,,0x0" complete_cpuset="0x00000800,,0x0" online_cpuset="0x00000800,,0x0" allowed_cpuset="0x00000800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000800,,0x0" complete_cpuset="0x00000800,,0x0" online_cpuset="0x00000800,,0x0" allowed_cpuset="0x00000800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="75" cpuset="0x00000800,,0x0" complete_cpuset="0x00000800,,0x0" online_cpuset="0x00000800,,0x0" allowed_cpuset="0x00000800,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00008000,,0x0" complete_cpuset="0x00008000,,0x0" online_cpuset="0x00008000,,0x0" allowed_cpuset="0x00008000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="1" cpuset="0x00008000,,0x0" complete_cpuset="0x00008000,,0x0" online_cpuset="0x00008000,,0x0" allowed_cpuset="0x00008000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="79" cpuset="0x00008000,,0x0" complete_cpuset="0x00008000,,0x0" online_cpuset="0x00008000,,0x0" allowed_cpuset="0x00008000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00880000,,0x0" complete_cpuset="0x00880000,,0x0" online_cpuset="0x00880000,,0x0" allowed_cpuset="0x00880000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x00080000,,0x0" complete_cpuset="0x00080000,,0x0" online_cpuset="0x00080000,,0x0" allowed_cpuset="0x00080000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x00080000,,0x0" complete_cpuset="0x00080000,,0x0" online_cpuset="0x00080000,,0x0" allowed_cpuset="0x00080000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="83" cpuset="0x00080000,,0x0" complete_cpuset="0x00080000,,0x0" online_cpuset="0x00080000,,0x0" allowed_cpuset="0x00080000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x00800000,,0x0" complete_cpuset="0x00800000,,0x0" online_cpuset="0x00800000,,0x0" allowed_cpuset="0x00800000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="3" cpuset="0x00800000,,0x0" complete_cpuset="0x00800000,,0x0" online_cpuset="0x00800000,,0x0" allowed_cpuset="0x00800000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="87" cpuset="0x00800000,,0x0" complete_cpuset="0x00800000,,0x0" online_cpuset="0x00800000,,0x0" allowed_cpuset="0x00800000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x88000000,,0x0" complete_cpuset="0x88000000,,0x0" online_cpuset="0x88000000,,0x0" allowed_cpuset="0x88000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="3145728" depth="2" cache_linesize="64" cache_associativity="12">
+ <object type="Cache" cpuset="0x08000000,,0x0" complete_cpuset="0x08000000,,0x0" online_cpuset="0x08000000,,0x0" allowed_cpuset="0x08000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="4" cpuset="0x08000000,,0x0" complete_cpuset="0x08000000,,0x0" online_cpuset="0x08000000,,0x0" allowed_cpuset="0x08000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="91" cpuset="0x08000000,,0x0" complete_cpuset="0x08000000,,0x0" online_cpuset="0x08000000,,0x0" allowed_cpuset="0x08000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x80000000,,0x0" complete_cpuset="0x80000000,,0x0" online_cpuset="0x80000000,,0x0" allowed_cpuset="0x80000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="5" cpuset="0x80000000,,0x0" complete_cpuset="0x80000000,,0x0" online_cpuset="0x80000000,,0x0" allowed_cpuset="0x80000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008">
+ <object type="PU" os_index="95" cpuset="0x80000000,,0x0" complete_cpuset="0x80000000,,0x0" online_cpuset="0x80000000,,0x0" allowed_cpuset="0x80000000,,0x0" nodeset="0x00000008" complete_nodeset="0x00000008" allowed_nodeset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="25" bridge_type="0-1" depth="0" bridge_pci="0000:[90-94]">
+ <object type="Bridge" os_index="590272" name="Intel Corporation N10/ICH 7 Family PCI Express Port 1" bridge_type="1-1" depth="0" bridge_pci="0000:[92-92]" pci_busid="0000:90:1c.0" pci_type="0604 [8086:27d0] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="N10/ICH 7 Family PCI Express Port 1"/>
+ <object type="PCIDev" os_index="598016" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:92:00.0" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth6" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:86:18"/>
+ </object>
+ </object>
+ <object type="PCIDev" os_index="598017" name="Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet" pci_busid="0000:92:00.1" pci_type="0200 [14e4:1639] [0014:007c] 20" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Broadcom Corporation"/>
+ <info name="PCIDevice" value="NetXtreme II BCM5709 Gigabit Ethernet"/>
+ <object type="OSDev" name="eth7" osdev_type="2">
+ <info name="Address" value="00:21:5e:c4:86:1a"/>
+ </object>
+ </object>
+ </object>
+ <object type="Bridge" os_index="590304" name="Intel Corporation 82801 PCI Bridge" bridge_type="1-1" depth="0" bridge_pci="0000:[93-94]" pci_busid="0000:90:1e.0" pci_type="0604 [8086:244e] [0000:0000] e1" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="Intel Corporation"/>
+ <info name="PCIDevice" value="82801 PCI Bridge"/>
+ <object type="Bridge" os_index="602112" name="IBM CalIOC2 PCI-E Root Port" bridge_type="1-1" depth="1" bridge_pci="0000:[94-94]" pci_busid="0000:93:00.0" pci_type="0604 [1014:0308] [0000:0000] 01" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="IBM"/>
+ <info name="PCIDevice" value="CalIOC2 PCI-E Root Port"/>
+ <object type="PCIDev" os_index="606208" name="LSI Logic / Symbios Logic SAS1078 PCI-Express Fusion-MPT SAS" pci_busid="0000:94:00.0" pci_type="0100 [1000:0062] [0014:0066] 04" pci_link_speed="0.000000">
+ <info name="PCIVendor" value="LSI Logic / Symbios Logic"/>
+ <info name="PCIDevice" value="SAS1078 PCI-Express Fusion-MPT SAS"/>
+ <object type="OSDev" name="sdc" osdev_type="0"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,27 @@
+# Copyright © 2009 inria. All rights reserved.
+# Copyright © 2009-2010 Université Bordeaux 1
+# Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+# Add your XML input files here.
+xml_inputs = \
+ 16amd64-8n2c-cpusets.xml \
+ 16em64t-4s2c2t.xml \
+ 16em64t-4s2c2t-offlines.xml \
+ 24em64t-2n6c2t-pci.xml \
+ 8em64t-2mi2ma2c.xml \
+ 96em64t-4n4d3ca2co-pci.xml
+
+# Only run the tests if we're building standalone, because the tests
+# call hwloc executables.
+if HWLOC_BUILD_TESTS
+TESTS = $(xml_inputs)
+endif HWLOC_BUILD_TESTS
+
+EXTRA_DIST = $(xml_inputs)
+
+TESTS_ENVIRONMENT = $(HWLOC_top_builddir)/tests/xml/test-topology.sh
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/test-topology.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/test-topology.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/test-topology.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,86 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2011 Université Bordeaux 1
+# Copyright © 2010 Cisco Systems, Inc. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+# Check the conformance of `lstopo' for all the XML
+# hierarchies available here. Return true on success.
+
+HWLOC_top_builddir="@HWLOC_top_builddir@"
+HWLOC_top_srcdir="@HWLOC_top_srcdir@"
+lstopo="@HWLOC_top_builddir@/utils/lstopo"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+error()
+{
+ echo $@ 2>&1
+}
+
+if [ ! -x "$lstopo" ]
+then
+ error "Could not find executable file \`$lstopo'."
+ exit 1
+fi
+
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/lstopo_xml.output.xml"
+
+set -e
+
+do_run()
+{
+ $lstopo --if xml --input "$1" --of xml "$file"
+
+ if [ "$HWLOC_UPDATE_TEST_TOPOLOGY_OUTPUT" != 1 ]
+ then
+ diff @HWLOC_DIFF_U@ @HWLOC_DIFF_W@ "$1" "$file"
+ else
+ if ! diff "$1" "$file" >/dev/null
+ then
+ cp -f "$file" "$1"
+ echo "Updated $1"
+ fi
+ fi
+
+ if [ -n "@XMLLINT@" ]
+ then
+ cp -f "$HWLOC_top_srcdir"/src/hwloc.dtd "$tmp/"
+ @XMLLINT@ --valid "$file" > /dev/null
+ fi
+
+ rm "$file"
+}
+
+export HWLOC_NO_LIBXML_IMPORT
+export HWLOC_NO_LIBXML_EXPORT
+
+echo "Importing with default parser and reexporting with minimalistic implementation..."
+HWLOC_NO_LIBXML_IMPORT=0
+HWLOC_NO_LIBXML_EXPORT=1
+do_run "$1"
+echo "Importing with minimalistic parser and reexporting with default implementation..."
+HWLOC_NO_LIBXML_IMPORT=1
+HWLOC_NO_LIBXML_EXPORT=0
+do_run "$1"
+
+rm -rf "$tmp"
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xml/test-topology.sh.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xmlbuffer.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xmlbuffer.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/tests/xmlbuffer.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2010 inria. All rights reserved.
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <hwloc.h>
+
+static int one_test(void)
+{
+ hwloc_topology_t topology;
+ int size1, size2;
+ char *buf1, *buf2;
+ int err = 0;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_IO);
+ hwloc_topology_load(topology);
+ assert(hwloc_topology_is_thissystem(topology));
+ hwloc_topology_export_xmlbuffer(topology, &buf1, &size1);
+ hwloc_topology_destroy(topology);
+ printf("exported to buffer %p length %d\n", buf1, size1);
+
+ hwloc_topology_init(&topology);
+ assert(!hwloc_topology_set_xmlbuffer(topology, buf1, size1));
+ hwloc_topology_load(topology);
+ assert(!hwloc_topology_is_thissystem(topology));
+ hwloc_topology_export_xmlbuffer(topology, &buf2, &size2);
+ hwloc_topology_destroy(topology);
+ printf("re-exported to buffer %p length %d\n", buf2, size2);
+
+ if (strcmp(buf1, buf2)) {
+ printf("### First exported buffer is:\n");
+ printf("%s", buf1);
+ printf("### End of first export buffer\n");
+ printf("### Second exported buffer is:\n");
+ printf("%s", buf2);
+ printf("### End of second export buffer\n");
+ err = 1;
+ }
+
+ hwloc_free_xmlbuffer(topology, buf1);
+ hwloc_free_xmlbuffer(topology, buf2);
+
+ return err;
+}
+
+int main(void)
+{
+ int err;
+
+ printf("using default import and export\n");
+ putenv("HWLOC_NO_LIBXML_IMPORT=0");
+ putenv("HWLOC_NO_LIBXML_EXPORT=0");
+ err = one_test();
+ if (err < 0)
+ return err;
+
+ printf("using minimalistic import and default export\n");
+ putenv("HWLOC_NO_LIBXML_IMPORT=1");
+ putenv("HWLOC_NO_LIBXML_EXPORT=0");
+ err = one_test();
+ if (err < 0)
+ return err;
+
+ printf("using default import and minimalistic export\n");
+ putenv("HWLOC_NO_LIBXML_IMPORT=0");
+ putenv("HWLOC_NO_LIBXML_EXPORT=1");
+ err = one_test();
+ if (err < 0)
+ return err;
+
+ printf("using minimalistic import and export\n");
+ putenv("HWLOC_NO_LIBXML_IMPORT=1");
+ putenv("HWLOC_NO_LIBXML_EXPORT=1");
+ err = one_test();
+ if (err < 0)
+ return err;
+
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.am
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.am (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/Makefile.am 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,105 @@
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009-2011 Université Bordeaux 1
+# Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+#
+# See COPYING in top-level directory.
+
+AM_CFLAGS = $(HWLOC_CFLAGS)
+AM_CPPFLAGS = $(HWLOC_CPPFLAGS)
+AM_LDFLAGS = $(HWLOC_LDFLAGS)
+
+LDADD = $(HWLOC_top_builddir)/src/libhwloc.la
+
+EXTRA_DIST = test-hwloc-assembler.input1 test-hwloc-assembler.input2 test-hwloc-assembler.output test-hwloc-calc.output test-hwloc-distances.output test-hwloc-distrib.output test-hwloc-ls.output
+
+noinst_HEADERS = misc.h
+
+# Only build the utilities if we're building in standalone mode
+if HWLOC_BUILD_UTILS
+bin_PROGRAMS = lstopo hwloc-assembler hwloc-calc hwloc-bind hwloc-distances hwloc-distrib hwloc-ps
+endif
+
+lstopo_SOURCES = lstopo.h lstopo.c lstopo-color.c lstopo-text.c lstopo-draw.c lstopo-fig.c lstopo-xml.c
+if HWLOC_HAVE_CAIRO
+lstopo_SOURCES += lstopo-cairo.c
+endif
+if HWLOC_HAVE_WINDOWS
+lstopo_SOURCES += lstopo-windows.c
+endif
+lstopo_CFLAGS = $(HWLOC_CAIRO_CFLAGS) $(HWLOC_LIBXML2_CFLAGS) $(HWLOC_PCI_CFLAGS)
+lstopo_LDADD = $(LDADD) $(HWLOC_CAIRO_LIBS) -lm $(HWLOC_TERMCAP_LIBS) $(HWLOC_X11_LIBS)
+if HWLOC_BUILD_UTILS
+if HWLOC_HAVE_WINDOWS
+bin_PROGRAMS += lstopo-win
+lstopo_win_SOURCES = $(lstopo_SOURCES)
+lstopo_win_CFLAGS = $(lstopo_CFLAGS) -mwindows
+lstopo_win_LDADD = $(lstopo_LDADD)
+endif
+endif
+
+hwloc_calc_SOURCES = hwloc-calc.c hwloc-calc.h
+
+bin_SCRIPTS = hwloc-assembler-remote
+
+# Only run the tests if we're building standalone, because the tests
+# call hwloc executables.
+if HWLOC_BUILD_TESTS
+if !HWLOC_HAVE_MINGW32
+TESTS = test-hwloc-assembler.sh test-hwloc-calc.sh test-hwloc-distances.sh test-hwloc-distrib.sh test-hwloc-ls.sh
+endif !HWLOC_HAVE_MINGW32
+endif HWLOC_BUILD_TESTS
+
+# Only install man pages if we're building in standalone mode
+if HWLOC_BUILD_UTILS
+man7_pages = hwloc.7
+EXTRA_DIST += $(man7_pages:.7=.7in)
+nodist_man_MANS = $(man7_pages)
+
+man1_pages = lstopo.1 hwloc-bind.1 hwloc-calc.1 hwloc-distances.1 hwloc-distrib.1 hwloc-ps.1 hwloc-assembler.1 hwloc-assembler-remote.1
+EXTRA_DIST += $(man1_pages:.1=.1in)
+nodist_man_MANS += $(man1_pages)
+
+# Only install the gather-topology page if we're on Linux, but we need
+# to include it in the tarball, regardless of what OS we're building
+# on.
+hgt_page = hwloc-gather-topology.1
+EXTRA_DIST += $(hgt_page:.1=.1in)
+if HWLOC_HAVE_LINUX
+nodist_man_MANS += $(hgt_page)
+endif HWLOC_HAVE_LINUX
+
+.1in.1:
+ @ echo Creating $@ man page...
+ @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+ -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+ -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ > $@ < $<
+
+.3in.3:
+ @ echo Creating $@ man page...
+ @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+ -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+ -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ > $@ < $<
+
+.7in.7:
+ @ echo Creating $@ man page...
+ @ $(SED) -e 's/#PACKAGE_NAME#/@PACKAGE_NAME@/g' \
+ -e 's/#PACKAGE_VERSION#/@PACKAGE_VERSION@/g' \
+ -e 's/#HWLOC_DATE#/@HWLOC_RELEASE_DATE@/g' \
+ > $@ < $<
+
+install-exec-hook: install-man
+ rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-mask$(EXEEXT)
+ cd $(DESTDIR)$(bindir) && $(LN_S) lstopo$(EXEEXT) hwloc-ls$(EXEEXT) && $(LN_S) lstopo$(EXEEXT) hwloc-info$(EXEEXT) && $(LN_S) hwloc-calc$(EXEEXT) hwloc-mask$(EXEEXT)
+ rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1 $(DESTDIR)$(man1dir)/hwloc-mask.1
+ cd $(DESTDIR)$(man1dir) && $(LN_S) lstopo.1 hwloc-ls.1 && $(LN_S) lstopo.1 hwloc-info.1 && $(LN_S) hwloc-calc.1 hwloc-mask.1
+ $(SED) -e 's/abs_top_builddir\/utils/bindir/' -e '/abs_top_builddir/d' $(DESTDIR)$(bindir)/hwloc-assembler-remote > $(DESTDIR)$(bindir)/hwloc-assembler-remote.tmp && mv -f $(DESTDIR)$(bindir)/hwloc-assembler-remote.tmp $(DESTDIR)$(bindir)/hwloc-assembler-remote
+
+uninstall-local:
+ rm -f $(DESTDIR)$(bindir)/hwloc-ls$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-info$(EXEEXT) $(DESTDIR)$(bindir)/hwloc-mask$(EXEEXT)
+ rm -f $(DESTDIR)$(man1dir)/hwloc-ls.1 $(DESTDIR)$(man1dir)/hwloc-info.1 $(DESTDIR)$(man1dir)/hwloc-mask.1
+
+distclean-local:
+ rm -f $(nodist_man_MANS)
+endif
Deleted: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/README
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/README 2012-02-25 00:51:02 UTC (rev 9526)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/README 2012-02-25 00:52:55 UTC (rev 9527)
@@ -1,4 +0,0 @@
-The contents of this directory have been deleted from the MPICH2 repository.
-Because we build hwloc in "embedded" mode, these directories cause problems with
-the tarballs resulting from "make dist". The directory itself is left in place
-to keep automake happy and hold this README.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,80 @@
+.\" -*- nroff -*-
+.\" Copyright © 2011 inria. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-ASSEMBLER-REMOTE "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-assembler-remote \- Assemble multiple remote host topologies
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.B hwloc-assembler-remote
+[\fIoptions\fR]
+output.xml
+host1 host2
+\fR...
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.TP
+\fB\-\-ssh <ssh>\fR
+Use the given ssh command (and options) to connect to remote hosts.
+.TP
+\fB\-\-lstopo\-path <path>\fR
+Use the given path as the remote lstopo command when gathering remote topologies.
+By default, lstopo is taken from the PATH environment variable.
+.TP
+\fB\-\-lstopo\-opts <opts>\fR
+Pass the given lstopo options when gathering remote topologies.
+.TP
+\fB\-\-show\fR
+Display the resulting topology before exit.
+.TP
+\fB\-v \-\-verbose\fR
+Verbose messages.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-assembler-remote is a frontend to hwloc-assembler.
+It takes care of retrieving the remote nodes' topologies
+before assembling them with hwloc-assembler.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+To assemble three nodes topologies:
+
+ $ hwloc-assembler-remote output.xml host1 host2 host3
+
+.PP
+To assemble the topology of a multi-process MPI job defined
+as a machinefile:
+
+ $ hwloc-assembler-remote output.xml `cat machinefile | sort | uniq`
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-assembler-remote returns 0.
+.
+.PP
+hwloc-assembler-remote will return nonzero if any kind of error occurs, such as
+(but not limited to) failure to parse the command line.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-assembler(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler-remote.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,121 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2011 inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+bindir="@bindir@"
+# this will be changed into $bindir/lstopo during make install
+locallstopo="$abs_top_builddir/utils/lstopo"
+assembler="$abs_top_builddir/utils/hwloc-assembler"
+
+force=0
+show=0
+ssh=ssh
+remotelstopo=lstopo
+remotelstopoopts=
+inputs=
+inputopts=
+failedhosts=
+output=
+
+error()
+{
+ echo $@ 2>&1
+}
+
+usage()
+{
+ echo "$0 |options] <output> <host1> <host2> ..."
+ echo " Gathers the topology of remote hosts and assembles them into the"
+ echo " <output> XML topology."
+ echo "Options:"
+ echo " --ssh <ssh> Use the given ssh command (and options) to connect to remote hosts"
+ echo " --lstopo-path <path> Use the given path as the remote lstopo command"
+ echo " --lstopo-opts <opts> Pass the given lstopo options when gathering remote topologies"
+ echo " --show Display the resulting topology before exit"
+ echo " -f --force Ignore failure to load a remote host topology"
+}
+
+while test $# -gt 0 ; do
+ case "$1" in
+ --ssh)
+ ssh="$2"
+ shift
+ ;;
+ --lstopo-path)
+ remotelstopo="$2"
+ shift
+ ;;
+ --lstopo-opts)
+ remotelstopoopts="$2"
+ shift
+ ;;
+ -s|--show)
+ show=1
+ ;;
+ -f|--force)
+ force=1
+ ;;
+ -h)
+ usage
+ exit 0
+ ;;
+ --*)
+ error "Unrecognized option: $1"
+ usage
+ exit 1
+ ;;
+ *)
+ if test -z "$output" ; then
+ output="$1"
+ else
+ file=`mktemp --tmpdir hwloc-assembler-remote.$1.XXXXXXXX.xml`
+ echo -n "Exporting host $1 topology to $file ..."
+ if "$ssh" "$1" "$remotelstopo" "$remotelstopoopts" -.xml > $file ; then
+ echo "done"
+ inputs="$inputs $file"
+ inputopts="$inputopts --name $1 $file"
+ else
+ echo "failed!"
+ rm "$file"
+ failedhosts="$failedhosts $1"
+ test $force -eq 0 && exit -1;
+ fi
+ fi
+ ;;
+ esac
+ shift
+done
+
+if test -z "$output" ; then
+ error "Missing output filename"
+ rm -f $inputs
+ usage
+ exit 1
+fi
+
+test $force -eq 1 && assembleropts="$assembleropts -f"
+
+echo "$assembler" $assembleropts "$output" $inputopts
+"$assembler" $assembleropts "$output" $inputopts
+ret=$?
+
+rm -f $inputs
+
+if test $ret -eq 0 ; then
+ echo "Assembled into $output"
+else
+ echo "Failed to assemble into $output"
+fi
+
+if test -n "$failedhosts" ; then
+ error "Failed to contact hosts:$failedhosts"
+fi
+
+if test $ret -eq 0 -a $show -eq 1 ; then "$locallstopo" -i "$output" ; fi
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,79 @@
+.\" -*- nroff -*-
+.\" Copyright © 2011 inria. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-ASSEMBLER "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-assembler \- Assemble multiple XML topologies
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.B hwloc-assembler
+[\fIoptions\fR]
+output.xml
+[--name <name1>] input1.xml
+[--name <name2>] input2.xml
+\fR...
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.TP
+\fB\-n \-\-name <name>\fR
+Set <name> in the \fIAssemblerName\fR info attribute of the next
+input topology root to ease identification within the final global
+topology.
+.TP
+\fB\-f \-\-force\fR
+Ignore errors while reading input files.
+.TP
+\fB\-v \-\-verbose\fR
+Verbose messages.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-assembler combines the input XML topologies and exports the
+resulting global topologies to a new XML file.
+All inputs are inserting as children of the global root object.
+.
+Each input topology root is annotated with info attributes
+before insertion.
+\fIAssemblerIndex\fR is set to the index within the list of inputs.
+\fIAssemblerName\fR is set to the name given with \fB--name\fR if any.
+.
+hwloc-assembler-remote offers a frontend for assembling remote nodes
+topologies without having to manually gather and transfer each of them.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+To assemble two nodes topologies:
+
+ $ hwloc-assembler output.xml --name host1 host1.xml --name host2 host2.xml
+.
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-assembler returns 0.
+.
+.PP
+hwloc-assembler will return nonzero if any kind of error occurs, such as
+(but not limited to) failure to parse the command line.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-assembler-remote(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-assembler.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,128 @@
+/*
+ * Copyright © 2011 inria. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+static void usage(char *name, FILE *where)
+{
+ fprintf (where, "Usage: %s [options] <output>.xml [-n <name1] <input1>.xml [-n name2] <input2>.xml ...\n", name);
+ fprintf (where, "Options:\n");
+ fprintf (where, " -v --verbose Show verbose messages\n");
+ fprintf (where, " -f --force Ignore errors while reading input files\n");
+ fprintf (where, " -n --name <name> Set the name of the next input topology\n");
+}
+
+int main(int argc, char *argv[])
+{
+ hwloc_topology_t topology;
+ char *callname;
+ char *output;
+ int verbose = 0;
+ int force = 0;
+ int opt;
+ int i, j;
+
+ callname = strrchr(argv[0], '/');
+ if (!callname)
+ callname = argv[0];
+ else
+ callname++;
+ argc--;
+ argv++;
+
+ while (argc >= 1) {
+ opt = 0;
+ if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose")) {
+ verbose++;
+ } else if (!strcmp(argv[0], "-f") || !strcmp(argv[0], "--force")) {
+ force = 1;
+ } else if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) {
+ usage(callname, stdout);
+ exit(EXIT_SUCCESS);
+ } else if (!strcmp(argv[0], "--")) {
+ argc--;
+ argv++;
+ break;
+ } else if (*argv[0] == '-') {
+ fprintf(stderr, "Unrecognized option: %s\n", argv[0]);
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ } else
+ break;
+ argc -= opt+1;
+ argv += opt+1;
+ }
+
+ if (!argc) {
+ fprintf(stderr, "Missing output file name\n");
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ output = argv[0];
+ argc--;
+ argv++;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_custom(topology);
+
+ for(i=0, j=0; i<argc; i++, j++) {
+ hwloc_topology_t input;
+ hwloc_obj_t root;
+ char index[10];
+ char *name = NULL;
+
+ if (!strcmp(argv[i], "-n") || !strcmp(argv[i], "--name")) {
+ if (i+2 >= argc) {
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ name = argv[i+1];
+ i+=2;
+ }
+
+ if (verbose) {
+ if (name)
+ printf("Importing XML topology %s with name %s ...\n", argv[i], name);
+ else
+ printf("Importing XML topology %s ...\n", argv[i]);
+ }
+
+ hwloc_topology_init(&input);
+ if (hwloc_topology_set_xml(input, argv[i])) {
+ fprintf(stderr, "Failed to set source XML file %s (%s)\n", argv[i], strerror(errno));
+ hwloc_topology_destroy(input);
+ if (force)
+ continue;
+ else
+ return EXIT_FAILURE;
+ }
+ hwloc_topology_load(input);
+
+ root = hwloc_get_root_obj(input);
+ hwloc_obj_add_info(root, "AssemblerName", name ? name : argv[i]);
+ snprintf(index, sizeof(index), "%d", j);
+ hwloc_obj_add_info(root, "AssemblerIndex", index);
+
+ hwloc_custom_insert_topology(topology, hwloc_get_root_obj(topology), input, NULL);
+ hwloc_topology_destroy(input);
+ }
+
+ if (verbose)
+ printf("Assembling global topology...\n");
+ hwloc_topology_load(topology);
+ if (hwloc_topology_export_xml(topology, output) < 0) {
+ fprintf(stderr, "Failed to export XML to %s (%s)\n", output, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ hwloc_topology_destroy(topology);
+ if (verbose)
+ printf("Exported topology to XML file %s\n", output);
+ return 0;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,219 @@
+.\" -*- nroff -*-
+.\" Copyright © 2009-2010 inria. All rights reserved.
+.\" Copyright © 2010 Université of Bordeaux
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-BIND "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-bind \- Launch a command that is bound to specific processors
+and/or memory.
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-bind
+[\fIoptions\fR] \fI<location1> [<location2> [...] ] [--] <command> \fR...
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+See below for a description of valid <location> formats.
+.TP 10
+\fB\-\-cpubind\fR
+Use following arguments for CPU binding (default).
+.TP
+\fB\-\-membind\fR
+Use following arguments for memory binding.
+If \fB\-\-mempolicy\fR is not also given,
+the default policy is bind.
+.TP
+\fB\-\-mempolicy\fR <policy>
+Change the memory binding policy.
+The available policies are default, firsttouch, bind, interleave
+replicate and nexttouch.
+This option is only meaningful when an actual binding is also given
+with \fB\-\-membind\fR.
+If \fB\-\-membind\fR is given without \fB\-\-mempolicy\fR,
+the default policy is bind.
+.TP
+\fB\-\-get\fR
+Report the current bindings.
+When combined with \fB\-\-membind\fR, report the memory binding
+instead of CPU binding.
+.TP
+\fB\-\-get-last-cpu-location\fR
+Report the last processors where the process ran.
+Note that the result may already be outdated when reported since
+the operating system may move the process to other processors
+at any time according to the binding.
+This option cannot be combined with \fB\-\-membind\fR.
+.TP
+\fB\-\-single\fR
+Bind on a single CPU to prevent migration.
+.TP
+\fB\-\-strict\fR
+Require strict binding.
+.TP
+\fB\-\-get\fR
+Retrieve the current process binding
+.TP
+\fB\-\-pid\fR <pid>
+Operate on pid <pid>
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+take OS/physical indexes instead of logical indexes
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+take logical indexes instead of physical/OS indexes (default)
+.TP
+\fB\-\-taskset\fR
+Display CPU set strings in the format recognized by the taskset command-line
+program instead of hwloc-specific CPU set string format.
+This option has no impact on the format of input CPU set strings,
+both formats are always accepted.
+.TP
+\fB\-v\fR
+Verbose output.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-bind execs an executable (with optional command line arguments)
+that is bound to the specified location (or list of locations). Upon
+successful execution, hwloc-bind simply sets bindings and then execs
+the executable over itself.
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page. Most of the concepts described in
+hwloc(7) directly apply to the hwloc-bind utility.
+.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-bind's operation is best described through several examples.
+More details about how locations are specified on the hwloc-bind
+command line are described in hwloc(7).
+.
+.PP
+To run the echo command on the first logical processor of the second
+socket:
+
+ hwloc-bind socket:1.pu:0 -- echo hello
+
+which is exactly equivalent to
+
+ hwloc-bind socket:1.pu:0 echo hello
+
+To bind the "echo" command to the first core of the second socket and
+the second core of the first socket:
+
+ hwloc-bind socket:1.core:0 socket:0.core:1 echo hello
+
+Note that binding the "echo" command to multiple processors is
+probably meaningless (because "echo" is likely implemented as a
+single-threaded application); these examples just serve to show what
+hwloc-bind can do.
+.
+.PP
+To run on the first three sockets on the second and third nodes:
+
+ hwloc-bind node:1-2.socket:0:3 echo hello
+
+which is also equivalent to:
+
+ hwloc-bind node:1-2.socket:0-2 echo hello
+
+Note that if you attempt to bind to objects that do not exist,
+hwloc-bind will not warn unless
+.I -v
+was specified.
+
+To run on processor with physical index 2 in socket with physical index 1:
+
+ hwloc-bind --physical socket:1.core:2 echo hello
+
+To run on odd cores within even sockets:
+
+ hwloc-bind socket:even.core:odd echo hello
+
+To run on the first socket, except on its second and fifth cores:
+
+ hwloc-bind socket:0 ~socket:0.core:1 ~socket:0.core:4 echo hello
+
+To run anywhere except on the first socket:
+
+ hwloc-bind all ~socket:0 echo hello
+
+To run on a core near the network interface named eth0:
+
+ hwloc-bind os=eth0 echo hello
+
+To run on a core near the PCI device whose bus ID is 0000:01:02.0:
+
+ hwloc-bind pci=0000:01:02.0 echo hello
+
+To bind memory on second memory node and run on first node (when supported by the OS):
+
+ hwloc-bind --cpubind node:1 --membind node:0 echo hello
+
+The --get option can report current bindings. This example shows
+nesting hwloc-bind invocations to set a binding and then report it:
+
+ hwloc-bind node:1.socket:2 hwloc-bind --get
+
+On one of the hwloc developer's machines, this example
+.
+reports "0x00004444,0x44000000". The mask reported on your machine
+may be different.
+.
+.PP
+Locations may also be specified as a hex bit mask (typically generated
+by hwloc-calc). For example:
+
+ hwloc-bind 0x00004444,0x44000000 echo hello
+ hwloc-bind `hwloc-calc node:1.socket:2` echo hello
+
+Memory binding may also be reported:
+
+ hwloc-bind --membind node:1 --mempolicy interleave -- hwloc-bind --get --membind
+
+This returns a string describing the memory binding, such as "0x000000f0
+(interleave)". Note that if the system does not contain any NUMA
+nodes, the reported string will indicate that the process is bound to
+the entire system memory (e.g., "0xf...f").
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-bind execs the command over itself.
+The return value is therefore whatever the return value of the command
+is.
+.
+.PP
+hwloc-bind will return nonzero if any kind of error occurs, such as
+(but not limited to): failure to parse the command line, failure to
+retrieve process bindings, or lack of a command to execute.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-calc(1), hwloc-distrib(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-bind.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,317 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/private.h>
+#include <hwloc-calc.h>
+#include <hwloc.h>
+
+#include <unistd.h>
+#include <errno.h>
+
+static void usage(FILE *where)
+{
+ fprintf(where, "Usage: hwloc-bind [options] <location> -- command ...\n");
+ fprintf(where, " <location> may be a space-separated list of cpusets or objects\n");
+ fprintf(where, " as supported by the hwloc-calc utility, e.g:\n");
+ hwloc_calc_locations_usage(where);
+ fprintf(where, "Options:\n");
+ fprintf(where, " --cpubind Use following arguments for cpu binding (default)\n");
+ fprintf(where, " --membind Use following arguments for memory binding\n");
+ fprintf(where, " --mempolicy <default|firsttouch|bind|interleave|replicate|nexttouch>\n"
+ " Change policy that --membind applies (default is bind)\n");
+ fprintf(where, " -l --logical Take logical object indexes (default)\n");
+ fprintf(where, " -p --physical Take physical object indexes\n");
+ fprintf(where, " --single Bind on a single CPU to prevent migration\n");
+ fprintf(where, " --strict Require strict binding\n");
+ fprintf(where, " --get Retrieve current process binding\n");
+ fprintf(where, " --get-last-cpu-location\n"
+ " Retrieve the last processors where the current process ran\n");
+ fprintf(where, " --pid <pid> Operate on process <pid>\n");
+ fprintf(where, " --taskset Use taskset-specific format when displaying cpuset strings\n");
+ fprintf(where, " -v Show verbose messages\n");
+ fprintf(where, " --version Report version and exit\n");
+}
+
+int main(int argc, char *argv[])
+{
+ hwloc_topology_t topology;
+ unsigned depth;
+ hwloc_bitmap_t cpubind_set, membind_set;
+ int cpubind = 1; /* membind if 0 */
+ int get_binding = 0;
+ int get_last_cpu_location = 0;
+ int single = 0;
+ int verbose = 0;
+ int logical = 1;
+ int taskset = 0;
+ int cpubind_flags = 0;
+ hwloc_membind_policy_t membind_policy = HWLOC_MEMBIND_BIND;
+ int membind_flags = 0;
+ int opt;
+ int ret;
+ hwloc_pid_t pid = 0;
+ char **orig_argv = argv;
+
+ cpubind_set = hwloc_bitmap_alloc();
+ membind_set = hwloc_bitmap_alloc();
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_IO);
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+
+ /* skip argv[0], handle options */
+ argv++;
+ argc--;
+
+ while (argc >= 1) {
+ if (!strcmp(argv[0], "--")) {
+ argc--;
+ argv++;
+ break;
+ }
+
+ opt = 0;
+
+ if (*argv[0] == '-') {
+ if (!strcmp(argv[0], "-v")) {
+ verbose = 1;
+ goto next;
+ }
+ else if (!strcmp(argv[0], "--help")) {
+ usage(stdout);
+ return EXIT_SUCCESS;
+ }
+ else if (!strcmp(argv[0], "--single")) {
+ single = 1;
+ goto next;
+ }
+ else if (!strcmp(argv[0], "--strict")) {
+ cpubind_flags |= HWLOC_CPUBIND_STRICT;
+ membind_flags |= HWLOC_MEMBIND_STRICT;
+ goto next;
+ }
+ else if (!strcmp(argv[0], "--pid")) {
+ if (argc < 2) {
+ usage (stderr);
+ exit(EXIT_FAILURE);
+ }
+ pid = atoi(argv[1]);
+ opt = 1;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--version")) {
+ printf("%s %s\n", orig_argv[0], VERSION);
+ exit(EXIT_SUCCESS);
+ }
+ if (!strcmp(argv[0], "-l") || !strcmp(argv[0], "--logical")) {
+ logical = 1;
+ goto next;
+ }
+ if (!strcmp(argv[0], "-p") || !strcmp(argv[0], "--physical")) {
+ logical = 0;
+ goto next;
+ }
+ if (!strcmp(argv[0], "--taskset")) {
+ taskset = 1;
+ goto next;
+ }
+ else if (!strncmp (argv[0], "--get-last-cpu-location", 10)) {
+ get_last_cpu_location = 1;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--get")) {
+ get_binding = 1;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--cpubind")) {
+ cpubind = 1;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--membind")) {
+ cpubind = 0;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--mempolicy")) {
+ if (!strncmp(argv[1], "default", 2))
+ membind_policy = HWLOC_MEMBIND_DEFAULT;
+ else if (!strncmp(argv[1], "firsttouch", 2))
+ membind_policy = HWLOC_MEMBIND_FIRSTTOUCH;
+ else if (!strncmp(argv[1], "bind", 2))
+ membind_policy = HWLOC_MEMBIND_BIND;
+ else if (!strncmp(argv[1], "interleave", 2))
+ membind_policy = HWLOC_MEMBIND_INTERLEAVE;
+ else if (!strncmp(argv[1], "replicate", 2))
+ membind_policy = HWLOC_MEMBIND_REPLICATE;
+ else if (!strncmp(argv[1], "nexttouch", 2))
+ membind_policy = HWLOC_MEMBIND_NEXTTOUCH;
+ else {
+ fprintf(stderr, "Unrecognized memory binding policy %s\n", argv[1]);
+ usage (stderr);
+ exit(EXIT_FAILURE);
+ }
+ opt = 1;
+ goto next;
+ }
+
+ fprintf (stderr, "Unrecognized option: %s\n", argv[0]);
+ usage(stderr);
+ return EXIT_FAILURE;
+ }
+
+ ret = hwloc_calc_process_arg(topology, depth, argv[0], logical,
+ cpubind ? cpubind_set : membind_set,
+ verbose);
+ if (ret < 0) {
+ if (verbose)
+ fprintf(stderr, "assuming the command starts at %s\n", argv[0]);
+ break;
+ }
+
+ next:
+ argc -= opt+1;
+ argv += opt+1;
+ }
+
+ if (get_binding || get_last_cpu_location) {
+ char *s;
+ const char *policystr = NULL;
+ int err;
+ if (cpubind) {
+ if (get_last_cpu_location) {
+ if (pid)
+ err = hwloc_get_proc_last_cpu_location(topology, pid, cpubind_set, 0);
+ else
+ err = hwloc_get_last_cpu_location(topology, cpubind_set, 0);
+ } else {
+ if (pid)
+ err = hwloc_get_proc_cpubind(topology, pid, cpubind_set, 0);
+ else
+ err = hwloc_get_cpubind(topology, cpubind_set, 0);
+ }
+ if (err) {
+ const char *errmsg = strerror(errno);
+ if (pid)
+ fprintf(stderr, "hwloc_get_proc_%s %ld failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", (long) pid, errno, errmsg);
+ else
+ fprintf(stderr, "hwloc_get_%s failed (errno %d %s)\n", get_last_cpu_location ? "last_cpu_location" : "cpubind", errno, errmsg);
+ return EXIT_FAILURE;
+ }
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&s, cpubind_set);
+ else
+ hwloc_bitmap_asprintf(&s, cpubind_set);
+ } else {
+ hwloc_membind_policy_t policy;
+ if (pid)
+ err = hwloc_get_proc_membind(topology, pid, membind_set, &policy, 0);
+ else
+ err = hwloc_get_membind(topology, membind_set, &policy, 0);
+ if (err) {
+ const char *errmsg = strerror(errno);
+ if (pid)
+ fprintf(stderr, "hwloc_get_proc_membind %ld failed (errno %d %s)\n", (long) pid, errno, errmsg);
+ else
+ fprintf(stderr, "hwloc_get_membind failed (errno %d %s)\n", errno, errmsg);
+ return EXIT_FAILURE;
+ }
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&s, membind_set);
+ else
+ hwloc_bitmap_asprintf(&s, membind_set);
+ switch (policy) {
+ case HWLOC_MEMBIND_DEFAULT: policystr = "default"; break;
+ case HWLOC_MEMBIND_FIRSTTOUCH: policystr = "firsttouch"; break;
+ case HWLOC_MEMBIND_BIND: policystr = "bind"; break;
+ case HWLOC_MEMBIND_INTERLEAVE: policystr = "interleave"; break;
+ case HWLOC_MEMBIND_REPLICATE: policystr = "replicate"; break;
+ case HWLOC_MEMBIND_NEXTTOUCH: policystr = "nexttouch"; break;
+ default: fprintf(stderr, "unknown memory policy %d\n", policy); assert(0); break;
+ }
+ }
+ if (policystr)
+ printf("%s (%s)\n", s, policystr);
+ else
+ printf("%s\n", s);
+ free(s);
+ return EXIT_SUCCESS;
+ }
+
+ if (!hwloc_bitmap_iszero(membind_set)) {
+ if (verbose) {
+ char *s;
+ hwloc_bitmap_asprintf(&s, membind_set);
+ fprintf(stderr, "binding on memory set %s\n", s);
+ free(s);
+ }
+ if (single)
+ hwloc_bitmap_singlify(membind_set);
+ if (pid)
+ ret = hwloc_set_proc_membind(topology, pid, membind_set, membind_policy, membind_flags);
+ else
+ ret = hwloc_set_membind(topology, membind_set, membind_policy, membind_flags);
+ if (ret) {
+ int bind_errno = errno;
+ const char *errmsg = strerror(bind_errno);
+ char *s;
+ hwloc_bitmap_asprintf(&s, membind_set);
+ if (pid)
+ fprintf(stderr, "hwloc_set_proc_membind %s %ld failed (errno %d %s)\n", s, (long) pid, bind_errno, errmsg);
+ else
+ fprintf(stderr, "hwloc_set_membind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
+ free(s);
+ }
+ }
+
+ if (!hwloc_bitmap_iszero(cpubind_set)) {
+ if (verbose) {
+ char *s;
+ hwloc_bitmap_asprintf(&s, cpubind_set);
+ fprintf(stderr, "binding on cpu set %s\n", s);
+ free(s);
+ }
+ if (single)
+ hwloc_bitmap_singlify(cpubind_set);
+ if (pid)
+ ret = hwloc_set_proc_cpubind(topology, pid, cpubind_set, cpubind_flags);
+ else
+ ret = hwloc_set_cpubind(topology, cpubind_set, cpubind_flags);
+ if (ret) {
+ int bind_errno = errno;
+ const char *errmsg = strerror(bind_errno);
+ char *s;
+ hwloc_bitmap_asprintf(&s, cpubind_set);
+ if (pid)
+ fprintf(stderr, "hwloc_set_proc_cpubind %s %ld failed (errno %d %s)\n", s, (long) pid, bind_errno, errmsg);
+ else
+ fprintf(stderr, "hwloc_set_cpubind %s failed (errno %d %s)\n", s, bind_errno, errmsg);
+ free(s);
+ }
+ }
+
+ hwloc_bitmap_free(cpubind_set);
+ hwloc_bitmap_free(membind_set);
+
+ hwloc_topology_destroy(topology);
+
+ if (pid)
+ return EXIT_SUCCESS;
+
+ if (0 == argc) {
+ fprintf(stderr, "%s: nothing to do!\n", orig_argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ ret = execvp(argv[0], argv);
+ if (ret) {
+ fprintf(stderr, "%s: Failed to launch executable \"%s\"\n",
+ orig_argv[0], argv[0]);
+ perror("execvp");
+ }
+ return EXIT_FAILURE;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,265 @@
+.\" -*- nroff -*-
+.\" Copyright © 2010 inria. All rights reserved.
+.\" Copyright © 2009 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-CALC "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-calc \- Operate on cpu mask strings and objects
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-calc
+[\fIoptions\fR] \fI<location1> [<location2> [...] ]
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+.TP 10
+\fB\-p\fR \fB\-\-physical\fR
+Use OS/physical indexes instead of logical indexes for both input and output.
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+Use logical indexes instead of physical/OS indexes for both input and output (default).
+.TP
+\fB\-\-pi\fR \fB\-\-physical\-input\fR
+Use OS/physical indexes instead of logical indexes for input.
+.TP
+\fB\-\-li\fR \fB\-\-logical\-input\fR
+Use logical indexes instead of physical/OS indexes for input (default).
+.TP
+\fB\-\-po\fR \fB\-\-physical\-input\fR
+Use OS/physical indexes instead of logical indexes for output.
+.TP
+\fB\-\-lo\fR \fB\-\-logical\-output\fR
+Use logical indexes instead of physical/OS indexes for output (default).
+.TP
+\fB\-N \-\-number-of <type|depth>\fR
+Report the number of objects of the given type or depth that intersect the CPU set.
+This is convenient for finding how many cores, NUMA nodes or PUs are available
+in a machine.
+.TP
+\fB\-I \-\-intersect <type|depth>\fR
+Find the list of objects of the given type or depth that intersect the CPU set and
+report the comma-separated list of their indexes instead of the cpu mask string.
+This may be used for determining the list of objects above or below the input
+objects.
+When combined with \fB\-\-physical\fR, the list is convenient to pass to external
+tools such as taskset or numactl \fB\-\-physcpubind\fR or \fB\-\-membind\fR.
+This is different from \-\-largest since the latter requires that all reported
+objects are strictly included inside the input objects.
+.TP
+\fB\-H \-\-hierarchical <type1>.<type2>...\fR
+Find the list of objects of type <type2> that intersect the CPU set and
+report the space-separated list of their hierarchical indexes with respect
+to <type1>, <type2>, etc.
+For instance, if \fIsocket.core\fR is given, the output would be
+\fISocket:1.Core:2 Socket:2.Core:3\fR if the input contains the third
+core of the second socket and the fourth core of the third socket.
+.TP
+\fB\-\-largest\fR
+Report (in a human readable format) the list of largest objects which exactly
+include all input objects.
+None of these output objects intersect each other, and the sum of them is
+exactly equivalent to the input. No largest object is included in the input
+This is different from \-\-intersect where reported objects may not be
+strictly included in the input.
+.TP
+\fB\-\-sep <sep>\fR
+Change the field separator in the output.
+By default, a space is used to separate output objects
+(for instance when \fB\-\-hierarchical\fR or \fB\-\-largest\fR is given)
+while a comma is used to separate indexes
+(for instance when \fB\-\-intersect\fR is given).
+.TP
+\fB\-\-single\fR
+Singlify the output to a single CPU.
+.TP
+\fB\-\-taskset\fR
+Display CPU set strings in the format recognized by the taskset command-line
+program instead of hwloc-specific CPU set string format.
+This option has no impact on the format of input CPU set strings,
+both formats are always accepted.
+.TP
+\fB\-\-restrict\fR <cpuset>
+Restrict the topology to the given cpuset.
+.TP
+\fB\-i\fR <file>, \fB\-\-input\fR <file>
+Read topology from XML file <file> (instead of discovering the
+topology on the local machine). If <file> is "\-", the standard input
+is used. XML support must have been compiled in to hwloc for this
+option to be usable.
+.TP
+\fB\-i\fR <directory>, \fB\-\-input\fR <directory>
+Read topology from the chroot specified by <directory> (instead of
+discovering the topology on the local machine). This option is
+generally only available on Linux. The chroot was usually created
+by gathering another machine topology with hwloc-gather-topology.
+.TP
+\fB\-i\fR <specification>, \fB\-\-input\fR <specification>
+Simulate a fake hierarchy (instead of discovering the topology on the
+local machine). If <specification> is "node:2 pu:3", the topology will
+contain two NUMA nodes with 3 processing units in each of them.
+The <specification> string must end with a number of PUs.
+.TP
+\fB\-\-if\fR <format>, \fB\-\-input\-format\fR <format>
+Enforce the input in the given format, among \fBxml\fR, \fBfsroot\fR
+and \fBsynthetic\fR.
+.TP
+\fB\-v\fR
+Verbose output.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-calc generates and manipulates CPU mask strings or objects.
+Both input and output may be either objects (with physical or logical
+indexes), CPU lists (with physical or logical indexes), or CPU mask strings
+(always physically indexed).
+.
+.PP
+If objects or CPU mask strings are given on the command-line,
+they are combined and a single output is printed.
+If no object or CPU mask strings are given on the command-line,
+the program will read the standard input.
+It will combine multiple objects or CPU mask strings that are
+given on the same line of the standard input line with spaces
+as separators.
+Different input lines will be processed separately.
+.
+.PP
+Command-line arguments and options are processed in order.
+For instance, it means that changing the type of input indexes
+with \fB\-\-li\fR or changing the input topology with \fB\-i\fR
+only affects the processing the following arguments.
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page. Most of the concepts described in
+hwloc(7) directly apply to the hwloc-calc utility.
+.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-calc's operation is best described through several examples.
+.
+.PP
+To display the (physical) CPU mask corresponding to the second socket:
+
+ $ hwloc-calc socket:1
+ 0x000000f0
+
+To display the (physical) CPU mask corresponding to the third socket, excluding
+its even numbered logical processors:
+
+ $ hwloc-calc socket:2 ~PU:even
+ 0x00000c00
+
+To combine two (physical) CPU masks:
+
+ $ hwloc-calc 0x0000ffff 0xff000000
+ 0xff00ffff
+
+To display the list of logical numbers of processors included in the second
+socket:
+
+ $ hwloc-calc --intersect PU socket:1
+ 4,5,6,7
+
+To bind GNU OpenMP threads logically over the whole machine, we need to use
+physical number output instead:
+
+ $ export GOMP_CPU_AFFINITY=`hwloc-calc --physical --intersect PU machine:0`
+ $ echo $GOMP_CPU_AFFINITY
+ 0,2,1,3
+
+To display the list of NUMA nodes, by physical indexes, that intersect a given (physical) CPU mask:
+
+ $ hwloc-calc --physical --intersect NUMAnode 0xf0f0f0f0
+ 0,2
+
+To display the physical index of a processor given by its logical index:
+
+ $ hwloc-calc PU:2 --physical-output --intersect PU
+ 3
+
+To display the set of CPUs near network interface eth0:
+
+ $ hwloc-calc os=eth0
+ 0x00005555
+
+To display the indexes of sockets near PCI device whose bus ID is 0000:01:02.0:
+
+ $ hwloc-calc pci=0000:01:02.0 --intersect Socket
+ 1
+
+To display the list of per-socket cores that intersect the input:
+
+ $ hwloc-calc 0x00003c00 --hierarchical socket.core
+ Socket:2.Core:1 Socket:3.Core:0
+
+To display the (physical) CPU mask of the entire topology except the third socket:
+
+ $ hwloc-calc all ~socket:3
+ 0x0000f0ff
+
+To combine both physical and logical indexes as input:
+
+ $ hwloc-calc PU:2 --physical-input PU:3
+ 0x0000000c
+
+To synthetize a set of cores into largest objects on a 2-node 2-socket 2-core machine:
+
+ $ hwloc-calc core:0 --largest
+ Core:0
+ $ hwloc-calc core:0-1 --largest
+ Socket:0
+ $ hwloc-calc core:4-7 --largest
+ NUMANode:1
+ $ hwloc-calc core:2-6 --largest
+ Socket:1 Socket:2 Core:6
+ $ hwloc-calc socket:2 --largest
+ Socket:2
+ $ hwloc-calc socket:2-3 --largest
+ NUMANode:1
+
+To get the set of first threads of all cores:
+
+ $ hwloc-calc core:all.pu:0
+
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-calc displays the (physical) CPU mask string,
+(physical or logical) object list, or (physical or logical) object number list.
+The return value is 0.
+.
+.
+.PP
+hwloc-calc will return nonzero if any kind of error occurs, such as
+(but not limited to): failure to parse the command line.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), hwloc-gather-topology(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,474 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/private.h>
+#include <hwloc-calc.h>
+#include <hwloc.h>
+
+#include "misc.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+{
+ fprintf(where, "Usage: hwloc-calc [options] <location> ...\n");
+ fprintf(where, " <location> may be a space-separated list of cpusets or objects\n");
+ fprintf(where, " as supported by the hwloc-bind utility, e.g:\n");
+ hwloc_calc_locations_usage(where);
+ fprintf(where, "Conversion options:\n");
+ fprintf(where, " [default] Report the combined input locations as a CPU set\n");
+ fprintf(where, " --number-of <type|depth>\n"
+ " -N <type|depth> Report the number of objects intersecting the CPU set\n");
+ fprintf(where, " --intersect <type|depth>\n"
+ " -I <type|depth> Report the indexes of object intersecting the CPU set\n");
+ fprintf(where, " --hierarchical <type1>.<type2>...\n"
+ " -H <type1>.<type2>... Find the list of objects intersecting the CPU set and\n"
+ " display them as hierarchical combinations such as\n"
+ " type1:index1.type2:index2...\n");
+ fprintf(where, " --largest Report the list of largest objects in the CPU set\n");
+ fprintf(where, "Formatting options:\n");
+ fprintf(where, " -l --logical Use logical object indexes (default)\n");
+ fprintf(where, " -p --physical Use physical object indexes\n");
+ fprintf(where, " --li --logical-input Use logical indexes for input (default)\n");
+ fprintf(where, " --lo --logical-output Use logical indexes for output (default)\n");
+ fprintf(where, " --pi --physical-input Use physical indexes for input\n");
+ fprintf(where, " --po --physical-output Use physical indexes for output\n");
+ fprintf(where, " --sep <sep> Use separator <sep> in the output\n");
+ fprintf(where, " --taskset Use taskset-specific format when displaying cpuset strings\n");
+ fprintf(where, " --single Singlify the output to a single CPU\n");
+ fprintf(where, "Input topology options:\n");
+ fprintf(where, " --restrict <cpuset> Restrict the topology to processors listed in <cpuset>\n");
+ hwloc_utils_input_format_usage(where, 10);
+ fprintf(where, "Miscellaneous options:\n");
+ fprintf(where, " -v Show verbose messages\n");
+ fprintf(where, " --version Report version and exit\n");
+}
+
+static int verbose = 0;
+static int logicali = 1;
+static int logicalo = 1;
+static int numberofdepth = -1;
+static int intersectdepth = -1;
+static int hiernblevels = 0;
+static int *hierdepth = NULL;
+static int showobjs = 0;
+static int singlify = 0;
+static int taskset = 0;
+
+static void
+hwloc_calc_hierarch_output(hwloc_topology_t topology, const char *prefix, const char *sep, hwloc_bitmap_t set, int level)
+{
+ hwloc_obj_t obj, prev = NULL;
+ unsigned logi = 0;
+ while ((obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, hierdepth[level], prev)) != NULL) {
+ char string[256];
+ char type[32];
+ hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
+ snprintf(string, sizeof(string), "%s%s%s:%u", prefix, level ? "." : "", type, logicalo ? logi : obj->os_index);
+ if (prev)
+ printf("%s", sep);
+ if (level != hiernblevels - 1) {
+ hwloc_bitmap_t new = hwloc_bitmap_dup(set);
+ hwloc_bitmap_and(new, new, obj->cpuset);
+ hwloc_calc_hierarch_output(topology, string, sep, new, level+1);
+ hwloc_bitmap_free(new);
+ } else {
+ printf("%s", string);
+ }
+ prev = obj;
+ logi++;
+ }
+}
+
+static int
+hwloc_calc_output(hwloc_topology_t topology, const char *sep, hwloc_bitmap_t set)
+{
+ if (singlify)
+ hwloc_bitmap_singlify(set);
+
+ if (showobjs) {
+ hwloc_bitmap_t remaining = hwloc_bitmap_dup(set);
+ int first = 1;
+ if (!sep)
+ sep = " ";
+ while (!hwloc_bitmap_iszero(remaining)) {
+ char type[64];
+ unsigned idx;
+ hwloc_obj_t obj = hwloc_get_first_largest_obj_inside_cpuset(topology, remaining);
+ if (!obj) {
+ fprintf(stderr, "No object included in this cpuset\n");
+ return EXIT_FAILURE;
+ }
+ hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
+ idx = logicalo ? obj->logical_index : obj->os_index;
+ if (idx == (unsigned) -1)
+ printf("%s%s", first ? "" : sep, type);
+ else
+ printf("%s%s:%u", first ? "" : sep, type, idx);
+ hwloc_bitmap_andnot(remaining, remaining, obj->cpuset);
+ first = 0;
+ }
+ printf("\n");
+ hwloc_bitmap_free(remaining);
+ } else if (numberofdepth != -1) {
+ unsigned nb = 0;
+ hwloc_obj_t obj = NULL;
+ while ((obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, numberofdepth, obj)) != NULL)
+ nb++;
+ printf("%u\n", nb);
+ } else if (intersectdepth != -1) {
+ hwloc_obj_t proc, prev = NULL;
+ if (!sep)
+ sep = ",";
+ while ((proc = hwloc_get_next_obj_covering_cpuset_by_depth(topology, set, intersectdepth, prev)) != NULL) {
+ if (prev)
+ printf("%s", sep);
+ printf("%u", logicalo ? proc->logical_index : proc->os_index);
+ prev = proc;
+ }
+ printf("\n");
+ } else if (hiernblevels) {
+ if (!sep)
+ sep = " ";
+ hwloc_calc_hierarch_output(topology, "", sep, set, 0);
+ printf("\n");
+ } else {
+ char *string = NULL;
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&string, set);
+ else
+ hwloc_bitmap_asprintf(&string, set);
+ printf("%s\n", string);
+ free(string);
+ }
+ return EXIT_SUCCESS;
+}
+
+static int hwloc_calc_type_depth(const char *string, hwloc_obj_type_t *typep, int *depthp)
+{
+ hwloc_obj_type_t type = hwloc_obj_type_of_string(string);
+ int depth = -1;
+ if (type == (hwloc_obj_type_t) -1) {
+ char *endptr;
+ depth = strtoul(string, &endptr, 0);
+ if (*endptr)
+ return -1;
+ }
+ *depthp = depth;
+ *typep = type;
+ return 0;
+}
+
+static int hwloc_calc_check_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type, int *depthp, const char *caller)
+{
+ if (type != (hwloc_obj_type_t) -1) {
+ int depth = hwloc_get_type_depth(topology, type);
+ if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+ fprintf(stderr, "unavailable %s type %s\n", caller, hwloc_obj_type_string(type));
+ return -1;
+ } else if (depth == HWLOC_TYPE_DEPTH_MULTIPLE) {
+ fprintf(stderr, "cannot use %s type %s with multiple depth, please use the relevant depth directly\n", caller, hwloc_obj_type_string(type));
+ return -1;
+ }
+ *depthp = depth;
+ }
+ return 0;
+}
+
+int main(int argc, char *argv[])
+{
+ hwloc_topology_t topology;
+ char *input = NULL;
+ enum hwloc_utils_input_format input_format = HWLOC_UTILS_INPUT_DEFAULT;
+ int input_changed = 0;
+ unsigned depth;
+ hwloc_bitmap_t set;
+ int cmdline_args = 0;
+ char **orig_argv = argv;
+ hwloc_obj_type_t numberoftype = (hwloc_obj_type_t) -1;
+ hwloc_obj_type_t intersecttype = (hwloc_obj_type_t) -1;
+ hwloc_obj_type_t *hiertype = NULL;
+ char *callname;
+ char *outsep = NULL;
+ int opt;
+ int i;
+ int err;
+ int ret = EXIT_SUCCESS;
+
+ /* enable verbose backends */
+ putenv("HWLOC_XML_VERBOSE=1");
+ putenv("HWLOC_SYNTHETIC_VERBOSE=1");
+
+ callname = argv[0];
+
+ set = hwloc_bitmap_alloc();
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_set_flags(topology, HWLOC_TOPOLOGY_FLAG_WHOLE_IO);
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+
+ while (argc >= 2) {
+ if (*argv[1] == '-') {
+ if (!strcmp(argv[1], "-v")) {
+ verbose = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--help")) {
+ usage(callname, stdout);
+ return EXIT_SUCCESS;
+ }
+ if (!strcmp (argv[1], "--restrict")) {
+ hwloc_bitmap_t restrictset;
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ restrictset = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(restrictset, argv[2]);
+ err = hwloc_topology_restrict (topology, restrictset, 0);
+ if (err) {
+ perror("Restricting the topology");
+ /* fallthrough */
+ }
+ hwloc_bitmap_free(restrictset);
+ argv++;
+ argc--;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--number-of") || !strcmp(argv[1], "-N")) {
+ if (argc <= 2) {
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ if (hwloc_calc_type_depth(argv[2], &numberoftype, &numberofdepth) < 0) {
+ fprintf(stderr, "unrecognized --number-of type or depth %s\n", argv[2]);
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ argv++;
+ argc--;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--intersect") || !strcmp(argv[1], "-I")) {
+ if (argc <= 2) {
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ if (hwloc_calc_type_depth(argv[2], &intersecttype, &intersectdepth) < 0) {
+ fprintf(stderr, "unrecognized --intersect type or depth %s\n", argv[2]);
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ argv++;
+ argc--;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--hierarchical") || !strcmp(argv[1], "-H")) {
+ char *tmp, *next;
+ if (argc <= 2) {
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ hiernblevels = 1;
+ tmp = argv[2];
+ while (1) {
+ tmp = strchr(tmp, '.');
+ if (!tmp)
+ break;
+ tmp++;
+ hiernblevels++;
+ }
+ hiertype = malloc(hiernblevels * sizeof(hwloc_obj_type_t));
+ hierdepth = malloc(hiernblevels * sizeof(int));
+ tmp = argv[2];
+ for(i=0; i<hiernblevels; i++) {
+ next = strchr(tmp, '.');
+ if (next)
+ *next = '\0';
+ if (hwloc_calc_type_depth(tmp, &hiertype[i], &hierdepth[i]) < 0) {
+ fprintf(stderr, "unrecognized --hierarchical type or depth %s\n", tmp);
+ usage(callname, stderr);
+ return EXIT_SUCCESS;
+ }
+ tmp = next+1;
+ }
+ argv++;
+ argc--;
+ goto next;
+ }
+ if (!strcasecmp(argv[1], "--pulist") || !strcmp(argv[1], "--proclist")) {
+ /* backward compat with 1.0 */
+ intersecttype = HWLOC_OBJ_PU;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--nodelist")) {
+ /* backward compat with 1.0 */
+ intersecttype = HWLOC_OBJ_NODE;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--largest") || !strcmp(argv[1], "--objects") /* backward compat with 1.0 */) {
+ showobjs = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--version")) {
+ printf("%s %s\n", orig_argv[0], VERSION);
+ exit(EXIT_SUCCESS);
+ }
+ if (!strcmp(argv[1], "-l") || !strcmp(argv[1], "--logical")) {
+ logicali = 1;
+ logicalo = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--li") || !strcmp(argv[1], "--logical-input")) {
+ logicali = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--lo") || !strcmp(argv[1], "--logical-output")) {
+ logicalo = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "-p") || !strcmp(argv[1], "--physical")) {
+ logicali = 0;
+ logicalo = 0;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--pi") || !strcmp(argv[1], "--physical-input")) {
+ logicali = 0;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--po") || !strcmp(argv[1], "--physical-output")) {
+ logicalo = 0;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--sep")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ outsep = argv[2];
+ argv++;
+ argc--;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--single")) {
+ singlify = 1;
+ goto next;
+ }
+ if (!strcmp(argv[1], "--taskset")) {
+ taskset = 1;
+ goto next;
+ }
+ if (hwloc_utils_lookup_input_option(argv+1, argc, &opt,
+ &input, &input_format,
+ callname)) {
+ argv += opt;
+ argc -= opt;
+ input_changed = 1;
+ goto next;
+ }
+
+ fprintf (stderr, "Unrecognized option: %s\n", argv[1]);
+ usage(callname, stderr);
+ return EXIT_FAILURE;
+ }
+
+ if (input_changed && input) {
+ /* only update the input when actually using it */
+ err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ if (err)
+ return err;
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ input_changed = 0;
+ }
+
+ cmdline_args++;
+ if (hwloc_calc_process_arg(topology, depth, argv[1], logicali, set, verbose) < 0)
+ fprintf(stderr, "ignored unrecognized argument %s\n", argv[1]);
+
+ next:
+ argc--;
+ argv++;
+ }
+
+ if (hwloc_calc_check_type_depth(topology, numberoftype, &numberofdepth, "--number-of") < 0)
+ goto out;
+
+ if (hwloc_calc_check_type_depth(topology, intersecttype, &intersectdepth, "--intersect") < 0)
+ goto out;
+
+ for(i=0; i<hiernblevels; i++)
+ if (hwloc_calc_check_type_depth(topology, hiertype[i], &hierdepth[i], "--hierarchical") < 0)
+ goto out;
+
+ if (cmdline_args) {
+ /* process command-line arguments */
+ ret = hwloc_calc_output(topology, outsep, set);
+
+ } else {
+ /* process stdin arguments line-by-line */
+#define HWLOC_CALC_LINE_LEN 64
+ size_t len = HWLOC_CALC_LINE_LEN;
+ char * line = malloc(len);
+
+ if (input_changed && input) {
+ /* only update the input when actually using it */
+ err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ if (err)
+ return err;
+ hwloc_topology_load(topology);
+ depth = hwloc_topology_get_depth(topology);
+ input_changed = 0;
+ }
+
+ while (1) {
+ char *current, *tmpline;
+
+ /* stop if line is empty */
+ if (!fgets(line, len, stdin))
+ break;
+
+ /* keep reading until we get EOL */
+ tmpline = line;
+ while (!strchr(tmpline, '\n')) {
+ line = realloc(line, len*2);
+ tmpline = line + len-1;
+ if (!fgets(tmpline, len+1, stdin))
+ break;
+ len *= 2;
+ }
+
+ /* parse now that we got everything */
+ current = line;
+ hwloc_bitmap_zero(set);
+ while (1) {
+ char *token = strtok(current, " \n");
+ if (!token)
+ break;
+ current = NULL;
+ if (hwloc_calc_process_arg(topology, depth, token, logicali, set, verbose) < 0)
+ fprintf(stderr, "ignored unrecognized argument %s\n", argv[1]);
+ }
+ hwloc_calc_output(topology, outsep, set);
+ }
+ free(line);
+ }
+
+ out:
+ hwloc_topology_destroy(topology);
+
+ hwloc_bitmap_free(set);
+
+ free(hierdepth);
+ free(hiertype);
+
+ return ret;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-calc.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,618 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#ifndef HWLOC_CALC_H
+#define HWLOC_CALC_H
+
+#include <private/private.h>
+#include <private/misc.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <ctype.h>
+#include <assert.h>
+
+typedef enum hwloc_calc_append_mode_e {
+ HWLOC_CALC_APPEND_ADD,
+ HWLOC_CALC_APPEND_CLR,
+ HWLOC_CALC_APPEND_AND,
+ HWLOC_CALC_APPEND_XOR
+} hwloc_calc_append_mode_t;
+
+static __hwloc_inline int
+hwloc_calc_append_cpuset(hwloc_bitmap_t set, hwloc_const_bitmap_t newset,
+ hwloc_calc_append_mode_t mode, int verbose)
+{
+ char *s1, *s2;
+ hwloc_bitmap_asprintf(&s1, newset);
+ hwloc_bitmap_asprintf(&s2, set);
+ switch (mode) {
+ case HWLOC_CALC_APPEND_ADD:
+ if (verbose)
+ fprintf(stderr, "adding %s to %s\n",
+ s1, s2);
+ hwloc_bitmap_or(set, set, newset);
+ break;
+ case HWLOC_CALC_APPEND_CLR:
+ if (verbose)
+ fprintf(stderr, "clearing %s from %s\n",
+ s1, s2);
+ hwloc_bitmap_andnot(set, set, newset);
+ break;
+ case HWLOC_CALC_APPEND_AND:
+ if (verbose)
+ fprintf(stderr, "and'ing %s from %s\n",
+ s1, s2);
+ hwloc_bitmap_and(set, set, newset);
+ break;
+ case HWLOC_CALC_APPEND_XOR:
+ if (verbose)
+ fprintf(stderr, "xor'ing %s from %s\n",
+ s1, s2);
+ hwloc_bitmap_xor(set, set, newset);
+ break;
+ default:
+ assert(0);
+ }
+ free(s1);
+ free(s2);
+ return 0;
+}
+
+static __hwloc_inline hwloc_obj_t __hwloc_attribute_pure
+hwloc_calc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_bitmap_t rootset,
+ unsigned depth, unsigned i, int logical)
+{
+ if (logical) {
+ return hwloc_get_obj_inside_cpuset_by_depth(topology, rootset, depth, i);
+ } else {
+ hwloc_obj_t obj = NULL;
+ while ((obj = hwloc_get_next_obj_inside_cpuset_by_depth(topology, rootset, depth, obj)) != NULL) {
+ if (obj->os_index == i)
+ return obj;
+ }
+ return NULL;
+ }
+}
+
+/* extended version of hwloc_obj_type_of_string()
+ *
+ * matches L2, L3Cache and Group4, and return the corresponding depth attribute if depthattrp isn't NULL.
+ * only looks at the beginning of the string to allow truncated type names.
+ */
+static __hwloc_inline int
+hwloc_obj_type_sscanf(const char *string, hwloc_obj_type_t *typep, int *depthattrp)
+{
+ hwloc_obj_type_t type = (hwloc_obj_type_t) -1;
+ int depthattr = -1;
+
+ /* types without depthattr */
+ if (!strncasecmp(string, "system", 2)) {
+ type = HWLOC_OBJ_SYSTEM;
+ } else if (!hwloc_strncasecmp(string, "machine", 2)) {
+ type = HWLOC_OBJ_MACHINE;
+ } else if (!hwloc_strncasecmp(string, "node", 1)) {
+ type = HWLOC_OBJ_NODE;
+ } else if (!hwloc_strncasecmp(string, "socket", 2)) {
+ type = HWLOC_OBJ_SOCKET;
+ } else if (!hwloc_strncasecmp(string, "core", 2)) {
+ type = HWLOC_OBJ_CORE;
+ } else if (!hwloc_strncasecmp(string, "pu", 2) || !hwloc_strncasecmp(string, "proc", 2) /* backward compat with 0.9 */) {
+ type = HWLOC_OBJ_PU;
+ } else if (!hwloc_strncasecmp(string, "misc", 2)) {
+ type = HWLOC_OBJ_MISC;
+ } else if (!hwloc_strncasecmp(string, "pci", 2)) {
+ type = HWLOC_OBJ_PCI_DEVICE;
+ } else if (!hwloc_strncasecmp(string, "os", 2)) {
+ type = HWLOC_OBJ_OS_DEVICE;
+
+ /* types with depthattr */
+ } else if (!hwloc_strncasecmp(string, "cache", 2)) {
+ type = HWLOC_OBJ_CACHE;
+ } else if ((string[0] == 'l' || string[0] == 'L') && string[1] >= '0' && string[1] <= '9') {
+ type = HWLOC_OBJ_CACHE;
+ depthattr = atoi(string+1);
+ } else if (!hwloc_strncasecmp(string, "group", 1)) {
+ int length;
+ type = HWLOC_OBJ_GROUP;
+ length = strcspn(string, "0123456789");
+ if (string[length] != '\0')
+ depthattr = atoi(string+length);
+ } else
+ return -1;
+
+ *typep = type;
+ if (depthattrp)
+ *depthattrp = depthattr;
+
+ return 0;
+}
+
+static __hwloc_inline int
+hwloc_calc_depth_of_type(hwloc_topology_t topology, hwloc_obj_type_t type, int depthattr, int verbose)
+{
+ int depth;
+ int i;
+
+ if (depthattr == -1) {
+ hwloc_obj_type_t realtype;
+ /* matched a type without depth attribute, try to get the depth from the type if it exists and is unique */
+ if (type == HWLOC_OBJ_PCI_DEVICE || type == HWLOC_OBJ_OS_DEVICE || type == HWLOC_OBJ_BRIDGE)
+ return -1;
+ depth = hwloc_get_type_or_above_depth(topology, type);
+ if (depth == HWLOC_TYPE_DEPTH_MULTIPLE) {
+ fprintf(stderr, "type %s has multiple possible depths\n", hwloc_obj_type_string(type));
+ return -1;
+ } else if (depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+ fprintf(stderr, "type %s isn't available\n", hwloc_obj_type_string(type));
+ return -1;
+ }
+ realtype = hwloc_get_depth_type(topology, depth);
+ if (type != realtype && verbose)
+ fprintf(stderr, "using type %s (depth %d) instead of %s\n",
+ hwloc_obj_type_string(realtype), depth, hwloc_obj_type_string(type));
+ return depth;
+
+ } else {
+ /* matched a type with a depth attribute, look at the first object of each level to find the depth */
+ assert(type == HWLOC_OBJ_CACHE || type == HWLOC_OBJ_GROUP);
+ for(i=0; ; i++) {
+ hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, i, 0);
+ if (!obj) {
+ fprintf(stderr, "type %s with custom depth %d does not exists\n", hwloc_obj_type_string(type), depthattr);
+ return -1;
+ }
+ if (obj->type == type
+ && ((type == HWLOC_OBJ_CACHE && (unsigned) depthattr == obj->attr->cache.depth)
+ || (type == HWLOC_OBJ_GROUP && (unsigned) depthattr == obj->attr->group.depth))) {
+ return i;
+ }
+ }
+ }
+
+ /* cannot come here, we'll exit above first */
+ return -1;
+}
+
+static __hwloc_inline int
+hwloc_calc_parse_depth_prefix(hwloc_topology_t topology, unsigned topodepth,
+ const char *string, size_t typelen,
+ hwloc_obj_type_t *typep,
+ int verbose)
+{
+ char typestring[20+1]; /* large enough to store all type names, even with a depth attribute */
+ hwloc_obj_type_t type;
+ int depthattr;
+ int depth;
+ char *end;
+ int err;
+
+ if (typelen >= sizeof(typestring)) {
+ fprintf(stderr, "invalid type name %s\n", string);
+ return -1;
+ }
+ strncpy(typestring, string, typelen);
+ typestring[typelen] = '\0';
+
+ /* try to match a type name */
+ err = hwloc_obj_type_sscanf(typestring, &type, &depthattr);
+ if (!err) {
+ *typep = type;
+ return hwloc_calc_depth_of_type(topology, type, depthattr, verbose);
+ }
+
+ /* try to match a numeric depth */
+ depth = strtol(string, &end, 0);
+ if (end != &string[typelen]) {
+ fprintf(stderr, "invalid type name %s\n", string);
+ return -1;
+ }
+ if ((unsigned) depth >= topodepth) {
+ fprintf(stderr, "ignoring invalid depth %u\n", depth);
+ return -1;
+ }
+ *typep = (hwloc_obj_type_t) -1;
+ return depth;
+}
+
+static __hwloc_inline int
+hwloc_calc_parse_range(const char *string,
+ int *firstp, int *amountp, int *stepp, int *wrapp,
+ const char **dotp)
+{
+ const char *dash, *dot, *colon;
+ int first, amount, step, wrap;
+
+ dot = strchr(string, '.');
+ *dotp = dot;
+
+ if (!isdigit(*string)) {
+ if (!strncmp(string, "all", 3)) {
+ *firstp = 0;
+ *amountp = -1;
+ *stepp = 1;
+ *wrapp = 0;
+ return 0;
+ } else if (!strncmp(string, "odd", 3)) {
+ *firstp = 1;
+ *amountp = -1;
+ *stepp = 2;
+ *wrapp = 0;
+ return 0;
+ } else if (!strncmp(string, "even", 4)) {
+ *firstp = 0;
+ *amountp = -1;
+ *stepp = 2;
+ *wrapp = 0;
+ return 0;
+ } else
+ return -1;
+ }
+
+ first = atoi(string);
+ amount = 1;
+ step = 1;
+ wrap = 0;
+
+ dash = strchr(string, '-');
+ if (dash && (dash < dot || !dot)) {
+ if (*(dash+1) == '\0')
+ amount = -1;
+ else
+ amount = atoi(dash+1)-first+1;
+ } else {
+ colon = strchr(string, ':');
+ if (colon && (colon < dot || !dot)) {
+ amount = atoi(colon+1);
+ wrap = 1;
+ }
+ }
+
+ *firstp = first;
+ *amountp = amount;
+ *stepp = step;
+ *wrapp = wrap;
+ return 0;
+}
+
+static __hwloc_inline int
+hwloc_calc_append_object_range(hwloc_topology_t topology, unsigned topodepth,
+ hwloc_const_bitmap_t rootset, int depth,
+ const char *string, /* starts with indexes following the colon */
+ int logical, hwloc_bitmap_t set, int verbose)
+{
+ hwloc_obj_t obj;
+ unsigned width;
+ const char *dot, *nextsep;
+ int nextdepth;
+ int first, wrap, amount, step;
+ unsigned i,j;
+ int err;
+
+ err = hwloc_calc_parse_range(string,
+ &first, &amount, &step, &wrap,
+ &dot);
+ if (err < 0)
+ return -1;
+ assert(amount != -1 || !wrap);
+
+ if (dot) {
+ /* parse the next string before calling ourself recursively */
+ size_t typelen;
+ hwloc_obj_type_t type;
+ const char *nextstring = dot+1;
+ typelen = strspn(nextstring, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
+ if (!typelen || nextstring[typelen] != ':')
+ return -1;
+ nextsep = &nextstring[typelen];
+
+ nextdepth = hwloc_calc_parse_depth_prefix(topology, topodepth,
+ nextstring, typelen,
+ &type,
+ verbose);
+ if (nextdepth < 0)
+ return -1;
+ }
+
+ width = hwloc_get_nbobjs_inside_cpuset_by_depth(topology, rootset, depth);
+ if (amount == -1)
+ amount = (width-first+step-1)/step;
+
+ for(i=first, j=0; j<(unsigned)amount; i+=step, j++) {
+ if (wrap && i>=width)
+ i = 0;
+
+ obj = hwloc_calc_get_obj_inside_cpuset_by_depth(topology, rootset, depth, i, logical);
+ if (verbose || !obj) {
+ char *s;
+ hwloc_bitmap_asprintf(&s, rootset);
+ if (obj)
+ printf("using object #%u depth %u below cpuset %s\n",
+ i, depth, s);
+ else
+ fprintf(stderr, "object #%u depth %u below cpuset %s does not exist\n",
+ i, depth, s);
+ free(s);
+ }
+ if (obj) {
+ if (dot) {
+ hwloc_calc_append_object_range(topology, topodepth, obj->cpuset, nextdepth, nextsep+1, logical, set, verbose);
+ } else {
+ /* add to the temporary cpuset
+ * and let the caller add/clear/and/xor for the actual final cpuset depending on cmdline options
+ */
+ hwloc_calc_append_cpuset(set, obj->cpuset, HWLOC_CALC_APPEND_ADD, verbose);
+ }
+ }
+ }
+
+ return 0;
+}
+
+static __hwloc_inline int
+hwloc_calc_append_iodev(hwloc_bitmap_t set, hwloc_obj_t obj,
+ hwloc_calc_append_mode_t mode, int verbose)
+{
+ while (obj && !obj->cpuset)
+ obj = obj->parent;
+ if (!obj)
+ /* do nothing */
+ return 0;
+ hwloc_calc_append_cpuset(set, obj->cpuset, mode, verbose);
+ return 0;
+}
+
+static __hwloc_inline hwloc_obj_t
+hwloc_calc_find_next_pci_object(hwloc_topology_t topology, int vendor, int device,
+ hwloc_obj_t prev, unsigned index_, int wrap)
+{
+ unsigned i = 0;
+ hwloc_obj_t obj = prev;
+ while (1) {
+ obj = hwloc_get_next_pcidev(topology, obj);
+ if (obj == prev)
+ break; /* don't reuse the same object, even if wrap==1 */
+ if (!obj) {
+ if (!wrap)
+ break;
+ wrap = 0; /* wrap only once per call, to avoid infinite loops */
+ obj = hwloc_get_next_pcidev(topology, NULL);
+ if (!obj)
+ break;
+ }
+ if ((vendor == -1 || (int) obj->attr->pcidev.vendor_id == vendor)
+ && (device == -1 || (int) obj->attr->pcidev.device_id == device))
+ if (++i == index_)
+ return obj;
+ }
+ return NULL;
+}
+
+static __hwloc_inline int
+hwloc_calc_append_pci_object_range(hwloc_topology_t topology, const char *string, hwloc_bitmap_t set, int verbose)
+{
+ hwloc_obj_t obj;
+ int vendor, device;
+ const char *current, *dot;
+ char *endp;
+ int first, wrap, amount, step;
+ int err, i, oldi, j;
+
+ current = string;
+
+ /* try to match by vendor:device */
+ vendor = strtoul(current, &endp, 16);
+ if (*endp != ':')
+ goto failedvendordevice;
+ if (endp == current)
+ vendor = -1;
+ current = endp+1;
+
+ device = strtoul(current, &endp, 16);
+ if (*endp != ':' && *endp != '\0')
+ goto failedvendordevice;
+ if (endp == current)
+ device = -1;
+
+ if (*endp == '\0') {
+ /* assume it's :0 */
+ first = 0;
+ step = 1;
+ amount = 1;
+ wrap = 0;
+ } else {
+ current = endp+1;
+ err = hwloc_calc_parse_range(current,
+ &first, &amount, &step, &wrap,
+ &dot);
+ if (err < 0 || dot)
+ goto failedvendordevice;
+ }
+
+ obj = NULL;
+ for(oldi=-1, i=first, j=0; j<amount || amount == -1; oldi=i, i+=step, j++) {
+ obj = hwloc_calc_find_next_pci_object(topology, vendor, device, obj, i-oldi, wrap);
+ if (obj) {
+ if (verbose)
+ printf("using matching PCI object #%d bus id %04x:%02x:%02x.%01x\n", i,
+ obj->attr->pcidev.domain, obj->attr->pcidev.bus, obj->attr->pcidev.dev, obj->attr->pcidev.func);
+ hwloc_calc_append_iodev(set, obj, HWLOC_CALC_APPEND_ADD, verbose);
+ } else {
+ if (amount != -1)
+ fprintf(stderr, "no matching PCI object #%d\n", i);
+ break;
+ }
+ }
+ return 0;
+
+ failedvendordevice:
+ /* TODO: more matching variants? vendor/device names? class?
+ * but we don't want some ugly and unmaintainable code
+ */
+
+ fprintf(stderr, "invalid PCI device %s\n", string);
+ return -1;
+}
+
+static __hwloc_inline int
+hwloc_calc_process_arg(hwloc_topology_t topology, unsigned topodepth,
+ const char *arg, int logical, hwloc_bitmap_t set,
+ int verbose)
+{
+ hwloc_calc_append_mode_t mode = HWLOC_CALC_APPEND_ADD;
+ size_t typelen;
+ int err;
+
+ if (*arg == '~') {
+ mode = HWLOC_CALC_APPEND_CLR;
+ arg++;
+ } else if (*arg == 'x') {
+ mode = HWLOC_CALC_APPEND_AND;
+ arg++;
+ } else if (*arg == '^') {
+ mode = HWLOC_CALC_APPEND_XOR;
+ arg++;
+ }
+
+ if (!strcmp(arg, "all") || !strcmp(arg, "root"))
+ return hwloc_calc_append_cpuset(set, hwloc_topology_get_topology_cpuset(topology), mode, verbose);
+
+ /* try to match a type/depth followed by a special character */
+ typelen = strspn(arg, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
+ if (typelen && (arg[typelen] == ':' || arg[typelen] == '=')) {
+ const char *sep = &arg[typelen];
+ hwloc_obj_type_t type;
+ int depth;
+ hwloc_bitmap_t newset;
+
+ depth = hwloc_calc_parse_depth_prefix(topology, topodepth,
+ arg, typelen,
+ &type,
+ verbose);
+ if (depth < 0) {
+ /* if we didn't find a depth but found a type, handle special cases */
+ hwloc_obj_t obj = NULL;
+ if (*sep == ':' && type == HWLOC_OBJ_PCI_DEVICE) {
+ /* FIXME: change to another syntax? */
+ /* agregate the whole range in newset before applying it to set */
+ newset = hwloc_bitmap_alloc();
+ err = hwloc_calc_append_pci_object_range(topology, sep+1, newset, verbose);
+ if (!err)
+ err = hwloc_calc_append_cpuset(set, newset, mode, verbose);
+ hwloc_bitmap_free(newset);
+ return err;
+ } else if (*sep == '=' && type == HWLOC_OBJ_PCI_DEVICE) {
+ /* try to match a busid */
+ obj = hwloc_get_pcidev_by_busidstring(topology, sep+1);
+ if (obj)
+ return hwloc_calc_append_iodev(set, obj, mode, verbose);
+ fprintf(stderr, "invalid PCI device %s\n", sep+1);
+ return -1;
+ } else if (*sep == '=' && type == HWLOC_OBJ_OS_DEVICE) {
+ /* try to match a OS device name */
+ while ((obj = hwloc_get_next_osdev(topology, obj)) != NULL) {
+ if (!strcmp(obj->name, sep+1))
+ return hwloc_calc_append_iodev(set, obj, mode, verbose);
+ }
+ fprintf(stderr, "invalid OS device %s\n", sep+1);
+ return -1;
+ } else
+ return -1;
+ }
+
+ /* look at indexes following this type/depth */
+ /* agregate the whole range in newset before applying it to set */
+ newset = hwloc_bitmap_alloc();
+ err = hwloc_calc_append_object_range(topology, topodepth, hwloc_topology_get_complete_cpuset(topology), depth, sep+1, logical, newset, verbose);
+ if (!err)
+ err = hwloc_calc_append_cpuset(set, newset, mode, verbose);
+ hwloc_bitmap_free(newset);
+
+ } else {
+ /* try to match a cpuset */
+ char *tmp = (char*) arg;
+ hwloc_bitmap_t newset;
+ int taskset = ( strchr(tmp, ',') == NULL );
+
+ /* check the infinite prefix */
+ if (strncasecmp(tmp, "0xf...f,", 7+!taskset) == 0) {
+ tmp += 7+!taskset;
+ if (0 == *tmp) {
+ err = -1;
+ goto out;
+ }
+ }
+
+ if (taskset) {
+ /* check that the remaining is 0x followed by a huge hexadecimal number */
+ if (strncasecmp(tmp, "0x", 2) != 0) {
+ err = -1;
+ goto out;
+ }
+ tmp += 2;
+ if (0 == *tmp) {
+ err = -1;
+ goto out;
+ }
+ if (strlen(tmp) != strspn(tmp, "0123456789abcdefABCDEF")) {
+ err = -1;
+ goto out;
+ }
+
+ } else {
+ /* check that the remaining is a comma-separated list of hexadecimal integer with 0x as an optional prefix */
+ while (1) {
+ char *next = strchr(tmp, ',');
+ size_t len;
+ if (strncasecmp(tmp, "0x", 2) == 0) {
+ tmp += 2;
+ if (',' == *tmp || 0 == *tmp) {
+ err = -1;
+ goto out;
+ }
+ }
+ len = next ? (size_t) (next-tmp) : strlen(tmp);
+ if (len != strspn(tmp, "0123456789abcdefABCDEF")) {
+ err = -1;
+ goto out;
+ }
+ if (!next)
+ break;
+ tmp = next+1;
+ }
+ }
+
+ newset = hwloc_bitmap_alloc();
+ if (taskset)
+ hwloc_bitmap_taskset_sscanf(newset, arg);
+ else
+ hwloc_bitmap_sscanf(newset, arg);
+ err = hwloc_calc_append_cpuset(set, newset, mode, verbose);
+ hwloc_bitmap_free(newset);
+ }
+
+ out:
+ return err;
+}
+
+static __hwloc_inline void
+hwloc_calc_locations_usage(FILE *where)
+{
+ fprintf (where, " core:2-3 for the second and third core\n");
+ fprintf (where, " node:1.pu:2 the third PU of the second NUMA node\n");
+ fprintf (where, " 0x12345678 a CPU set given a bitmask string\n");
+ fprintf (where, " os=eth0 the operating system device named eth0\n");
+ fprintf (where, " pci=0000:01:02.0 the PCI device with the given bus ID\n");
+ fprintf (where, " with prefix ~ to remove, ^ for xor and x for intersection\n");
+ fprintf (where, " (see Location Specification in hwloc(7) for details).\n");
+}
+
+#endif /* HWLOC_CALC_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,106 @@
+.\" -*- nroff -*-
+.\" Copyright © 2011 inria. All rights reserved.
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-DISTANCES "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-distances \- Displays distance matrices
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.B hwloc-distances
+[\fIoptions\fR]
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+Display hwloc logical indexes (default) instead of physical/OS indexes.
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+Display OS/physical indexes instead of hwloc logical indexes.
+.TP
+\fB\-i\fR <file>, \fB\-\-input\fR <file>
+Read topology from XML file <file> (instead of discovering the
+topology on the local machine). If <file> is "\-", the standard input
+is used. XML support must have been compiled in to hwloc for this
+option to be usable.
+.TP
+\fB\-i\fR <directory>, \fB\-\-input\fR <directory>
+Read topology from the chroot specified by <directory> (instead of
+discovering the topology on the local machine). This option is
+generally only available on Linux. The chroot was usually created
+by gathering another machine topology with hwloc-gather-topology.
+.TP
+\fB\-i\fR <specification>, \fB\-\-input\fR <specification>
+Simulate a fake hierarchy (instead of discovering the topology on the
+local machine). If <specification> is "node:2 pu:3", the topology will
+contain two NUMA nodes with 3 processing units in each of them.
+The <specification> string must end with a number of PUs.
+.TP
+\fB\-\-if\fR <format>, \fB\-\-input\-format\fR <format>
+Enforce the input in the given format, among \fBxml\fR, \fBfsroot\fR
+and \fBsynthetic\fR.
+.TP
+\fB\-\-restrict\fR <cpuset>
+Restrict the topology to the given cpuset.
+.TP
+\fB\-v\fR
+Verbose messages.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-distances displays also distance matrices attached to the topology.
+A breadth-first traversal of the topology is performed starting from
+the root to find all distance matrices.
+.
+.PP
+.B NOTE:
+lstopo may also display distance matrices in its verbose textual output.
+However lstopo only prints matrices that cover the entire topology while
+hwloc-distances also displays matrices that ignore part of the topology.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+On a quad-socket opteron machine:
+
+ $ hwloc-distances
+ Latency matrix between 4 NUMANodes (depth 2) by logical indexes:
+ index 0 1 2 3
+ 0 1.000 1.600 2.200 2.200
+ 1 1.600 1.000 2.200 2.200
+ 2 2.200 2.200 1.000 1.600
+ 3 2.200 2.200 1.600 1.000
+.
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-distances returns 0.
+.
+.PP
+hwloc-distances will return nonzero if any kind of error occurs, such as
+(but not limited to) failure to parse the command line.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distances.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,159 @@
+/*
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/private.h>
+#include <hwloc.h>
+
+#include "misc.h"
+
+#include <unistd.h>
+
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+{
+ fprintf(where, "Usage: hwloc-distances [options] number\n");
+ fprintf (where, "\nFormatting options:\n");
+ fprintf (where, " -l --logical Display hwloc logical object indexes\n");
+ fprintf (where, " (default for console output)\n");
+ fprintf (where, " -p --physical Display physical object indexes\n");
+ fprintf (where, " (default for graphical output)\n");
+ fprintf(where, "Input topology options:\n");
+ fprintf(where, " --restrict <set> Restrict the topology to processors listed in <set>\n");
+ hwloc_utils_input_format_usage(where, 0);
+ fprintf(where, "Miscellaneous options:\n");
+ fprintf(where, " -v Show verbose messages\n");
+ fprintf(where, " --version Report version and exit\n");
+}
+
+int main(int argc, char *argv[])
+{
+ char *callname;
+ char *input = NULL;
+ enum hwloc_utils_input_format input_format = HWLOC_UTILS_INPUT_DEFAULT;
+ char *restrictstring = NULL;
+ hwloc_topology_t topology;
+ unsigned i, depth;
+ int logical = 1;
+ int verbose = 0;
+ int opt;
+ int err;
+
+ /* enable verbose backends */
+ putenv("HWLOC_XML_VERBOSE=1");
+ putenv("HWLOC_SYNTHETIC_VERBOSE=1");
+
+ hwloc_topology_init(&topology);
+
+ /* skip argv[0], handle options */
+ callname = argv[0];
+ argv++;
+ argc--;
+
+ while (argc >= 1) {
+ if (!strcmp(argv[0], "--")) {
+ argc--;
+ argv++;
+ break;
+ }
+
+ if (*argv[0] == '-') {
+ if (!strcmp(argv[0], "--help")) {
+ usage(callname, stdout);
+ return EXIT_SUCCESS;
+ }
+ if (!strcmp(argv[0], "-v")) {
+ verbose++;
+ goto next;
+ }
+ if (!strcmp (argv[0], "-l") || !strcmp (argv[0], "--logical")) {
+ logical = 1;
+ goto next;
+ }
+ if (!strcmp (argv[0], "-p") || !strcmp (argv[0], "--physical")) {
+ logical = 0;
+ goto next;
+ }
+ if (hwloc_utils_lookup_input_option(argv, argc, &opt,
+ &input, &input_format,
+ callname)) {
+ argv += opt;
+ argc -= opt;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--restrict")) {
+ if (argc <= 2) {
+ usage (callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ restrictstring = strdup(argv[1]);
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--version")) {
+ printf("%s %s\n", callname, VERSION);
+ exit(EXIT_SUCCESS);
+ }
+
+ fprintf (stderr, "Unrecognized option: %s\n", argv[0]);
+ usage(callname, stderr);
+ return EXIT_FAILURE;
+ }
+
+ next:
+ argc--;
+ argv++;
+ }
+
+ if (input) {
+ err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ if (err)
+ return err;
+ }
+ hwloc_topology_load(topology);
+
+ if (restrictstring) {
+ hwloc_bitmap_t restrictset = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(restrictset, restrictstring);
+ err = hwloc_topology_restrict (topology, restrictset, 0);
+ if (err) {
+ perror("Restricting the topology");
+ /* fallthrough */
+ }
+ hwloc_bitmap_free(restrictset);
+ free(restrictstring);
+ }
+
+ depth = hwloc_topology_get_depth(topology);
+ for(i=0; i<depth; i++) {
+ unsigned nbobjs, j;
+ nbobjs = hwloc_get_nbobjs_by_depth(topology, i);
+ for(j=0; j<nbobjs; j++) {
+ hwloc_obj_t obj = hwloc_get_obj_by_depth(topology, i, j);
+ unsigned k;
+ char roottypestring[32];
+ hwloc_obj_type_snprintf (roottypestring, sizeof(roottypestring), obj, 0);
+ for(k=0; k<obj->distances_count; k++) {
+ struct hwloc_distances_s *distances = obj->distances[k];
+ if (!distances->latency)
+ continue;
+ printf("Latency matrix between %u %ss (depth %u) by %s indexes (below %s%s%u):\n",
+ distances->nbobjs,
+ hwloc_obj_type_string(hwloc_get_depth_type(topology, i+distances->relative_depth)),
+ i+distances->relative_depth,
+ logical ? "logical" : "physical",
+ roottypestring,
+ logical ? " L#" : " P#",
+ logical ? obj->logical_index : obj->os_index);
+ hwloc_utils_print_distance_matrix(topology, obj, distances->nbobjs, distances->relative_depth, distances->latency, logical);
+ }
+ }
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,167 @@
+.\" -*- nroff -*-
+.\" Copyright © 2010 inria. All rights reserved.
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-DISTRIB "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-distrib \- Build a number of cpu masks distributed on the system
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.B hwloc-distrib
+[\fIoptions\fR] \fI<integer>\fR
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.TP
+\fB\-\-single\fR
+Singlify each output to a single CPU.
+.TP
+\fB\-\-taskset\fR
+Show CPU set strings in the format recognized by the taskset command-line
+program instead of hwloc-specific CPU set string format.
+.TP
+\fB\-v\fR
+Verbose messages.
+.TP
+\fB\-i\fR <file>, \fB\-\-input\fR <file>
+Read topology from XML file <file> (instead of discovering the
+topology on the local machine). If <file> is "\-", the standard input
+is used. XML support must have been compiled in to hwloc for this
+option to be usable.
+.TP
+\fB\-i\fR <directory>, \fB\-\-input\fR <directory>
+Read topology from the chroot specified by <directory> (instead of
+discovering the topology on the local machine). This option is
+generally only available on Linux. The chroot was usually created
+by gathering another machine topology with hwloc-gather-topology.
+.TP
+\fB\-i\fR <specification>, \fB\-\-input\fR <specification>
+Simulate a fake hierarchy (instead of discovering the topology on the
+local machine). If <specification> is "node:2 pu:3", the topology will
+contain two NUMA nodes with 3 processing units in each of them.
+The <specification> string must end with a number of PUs.
+.TP
+\fB\-\-if\fR <format>, \fB\-\-input\-format\fR <format>
+Enforce the input in the given format, among \fBxml\fR, \fBfsroot\fR
+and \fBsynthetic\fR.
+.TP
+\fB\-\-ignore\fR <type>
+Ignore all objects of type <type> in the topology.
+.TP
+\fB\-\-from\fR <type>
+Distribute starting from objects of the given type instead of from
+the top of the topology hierarchy, i.e. ignoring the structure given by objects
+above.
+.TP
+\fB\-\-top\fR <type>
+Distribute down to objects of the given type instead of down to the bottom of
+the topology hierarchy, i.e. ignoring the structure given by objects below.
+This may be useful if some latitude is desired for the binding, e.g. just bind
+on sockets and not to precise cores or caches.
+.TP
+\fB\-\-at\fR <type>
+Distribute among objects of the given type. This is equivalent to specifying
+both \fB\-\-from\fR and \fB\-\-to\fR at the same time.
+.TP
+\fB\-\-restrict\fR <cpuset>
+Restrict the topology to the given cpuset.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc-distrib generates a series of CPU masks corresponding to a distribution of
+a given number of elements over the topology of the machine. The distribution
+is done recursively from the top of the hierarchy (or from the level specified
+by option \fB\-\-from\fR) down to the bottom of the hierarchy (or down to the
+level specified by option \fB\-\-to\fR, or until only one element remains),
+splitting the number of elements at each encountered hierarchy level not ignored
+by options \fB\-\-ignore\fR.
+
+This can e.g. be used to distribute a set of processes hierarchically according
+to the topology of a machine. These masks can be used with hwloc-bind(1).
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page. Most of the concepts described in
+hwloc(7) directly apply to the hwloc-bind utility.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+hwloc-distrib's operation is best described through several examples.
+.
+.PP
+If 4 processes have to be distributed across a machine, their CPU masks
+may be obtained with:
+
+ $ hwloc-distrib 4
+ 0x0000000f
+ 0x00000f00
+ 0x000000f0
+ 0x0000f000
+
+To distribute only among the second socket, the topology should be restricted:
+
+ $ hwloc-distrib --restrict $(hwloc-calc socket:1) 4
+ 0x00000010
+ 0x00000020
+ 0x00000040
+ 0x00000080
+
+To get a single processor of each CPU masks (prevent migration in case
+of binding)
+
+ $ hwloc-distrib 4 --single
+ 0x00000001
+ 0x00000100
+ 0x00000010
+ 0x00001000
+
+Each output line may be converted independently with hwloc-calc:
+
+ $ hwloc-distrib 4 --single | hwloc-calc --taskset
+ 0x1
+ 0x100
+ 0x10
+ 0x1000
+
+To convert the output into a list of processors that may be passed to
+dplace -c inside a mpirun command line:
+
+ $ hwloc-distrib 4 --single | xargs hwloc-calc --pulist
+ 0,8,4,16
+.
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, hwloc-distrib displays one or more CPU mask
+strings. The return value is 0.
+.
+.
+.PP
+hwloc-distrib will return nonzero if any kind of error occurs, such as
+(but not limited to) failure to parse the command line.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), hwloc-gather-topology(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-distrib.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,260 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/private.h>
+#include <hwloc.h>
+
+#include "misc.h"
+
+#include <unistd.h>
+
+void usage(const char *callname __hwloc_attribute_unused, FILE *where)
+{
+ fprintf(where, "Usage: hwloc-distrib [options] number\n");
+ fprintf(where, "Distribution options:\n");
+ fprintf(where, " --ignore <type> Ignore objects of the given type\n");
+ fprintf(where, " --from <type> Distribute starting from objects of the given type\n");
+ fprintf(where, " --to <type> Distribute down to objects of the given type\n");
+ fprintf(where, " --at <type> Distribute among objects of the given type\n");
+ fprintf(where, "Input topology options:\n");
+ fprintf(where, " --restrict <set> Restrict the topology to processors listed in <set>\n");
+ hwloc_utils_input_format_usage(where, 0);
+ fprintf(where, "Formatting options:\n");
+ fprintf(where, " --single Singlify each output to a single CPU\n");
+ fprintf(where, " --taskset Show taskset-specific cpuset strings\n");
+ fprintf(where, "Miscellaneous options:\n");
+ fprintf(where, " -v Show verbose messages\n");
+ fprintf(where, " --version Report version and exit\n");
+}
+
+int main(int argc, char *argv[])
+{
+ long n = -1;
+ char *callname;
+ char *input = NULL;
+ enum hwloc_utils_input_format input_format = HWLOC_UTILS_INPUT_DEFAULT;
+ int taskset = 0;
+ int singlify = 0;
+ int verbose = 0;
+ char *restrictstring = NULL;
+ hwloc_obj_type_t from_type = (hwloc_obj_type_t) -1, to_type = (hwloc_obj_type_t) -1;
+ char **orig_argv = argv;
+ hwloc_topology_t topology;
+ int opt;
+ int err;
+
+ /* enable verbose backends */
+ putenv("HWLOC_XML_VERBOSE=1");
+ putenv("HWLOC_SYNTHETIC_VERBOSE=1");
+
+ hwloc_topology_init(&topology);
+
+ /* skip argv[0], handle options */
+ callname = argv[0];
+ argv++;
+ argc--;
+
+ while (argc >= 1) {
+ if (!strcmp(argv[0], "--")) {
+ argc--;
+ argv++;
+ break;
+ }
+
+ if (*argv[0] == '-') {
+ if (!strcmp(argv[0], "--single")) {
+ singlify = 1;
+ goto next;
+ }
+ if (!strcmp(argv[0], "--taskset")) {
+ taskset = 1;
+ goto next;
+ }
+ if (!strcmp(argv[0], "-v")) {
+ verbose = 1;
+ goto next;
+ }
+ if (!strcmp(argv[0], "--help")) {
+ usage(callname, stdout);
+ return EXIT_SUCCESS;
+ }
+ if (hwloc_utils_lookup_input_option(argv, argc, &opt,
+ &input, &input_format,
+ callname)) {
+ argv += opt;
+ argc -= opt;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--ignore")) {
+ if (argc <= 2) {
+ usage(callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ hwloc_topology_ignore_type(topology, hwloc_obj_type_of_string(argv[1]));
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--from")) {
+ if (argc <= 2) {
+ usage(callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ from_type = hwloc_obj_type_of_string(argv[1]);
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--to")) {
+ if (argc <= 2) {
+ usage(callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ to_type = hwloc_obj_type_of_string(argv[1]);
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--at")) {
+ if (argc <= 2) {
+ usage(callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ from_type = to_type = hwloc_obj_type_of_string(argv[1]);
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--restrict")) {
+ if (argc <= 2) {
+ usage (callname, stdout);
+ exit(EXIT_FAILURE);
+ }
+ restrictstring = strdup(argv[1]);
+ argc--;
+ argv++;
+ goto next;
+ }
+ else if (!strcmp (argv[0], "--version")) {
+ printf("%s %s\n", orig_argv[0], VERSION);
+ exit(EXIT_SUCCESS);
+ }
+
+ fprintf (stderr, "Unrecognized option: %s\n", argv[0]);
+ usage(callname, stderr);
+ return EXIT_FAILURE;
+ }
+
+ if (n != -1) {
+ fprintf(stderr,"duplicate number\n");
+ usage(callname, stderr);
+ return EXIT_FAILURE;
+ }
+ n = atol(argv[0]);
+
+ next:
+ argc--;
+ argv++;
+ }
+
+ if (n == -1) {
+ fprintf(stderr,"need a number\n");
+ usage(callname, stderr);
+ return EXIT_FAILURE;
+ }
+
+ if (verbose)
+ fprintf(stderr, "distributing %ld\n", n);
+
+ {
+ unsigned i;
+ int from_depth, to_depth;
+ unsigned chunks;
+ hwloc_bitmap_t *cpuset;
+
+ cpuset = malloc(n * sizeof(hwloc_bitmap_t));
+
+ if (input) {
+ err = hwloc_utils_enable_input_format(topology, input, input_format, verbose, callname);
+ if (err)
+ return err;
+ }
+ hwloc_topology_load(topology);
+
+ if (restrictstring) {
+ hwloc_bitmap_t restrictset = hwloc_bitmap_alloc();
+ hwloc_bitmap_sscanf(restrictset, restrictstring);
+ err = hwloc_topology_restrict (topology, restrictset, 0);
+ if (err) {
+ perror("Restricting the topology");
+ /* fallthrough */
+ }
+ hwloc_bitmap_free(restrictset);
+ free(restrictstring);
+ }
+
+ if (from_type == (hwloc_obj_type_t) -1) {
+ from_depth = 0;
+ } else {
+ from_depth = hwloc_get_type_depth(topology, from_type);
+ if (from_depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+ fprintf(stderr, "unavailable type %s to distribute among, ignoring\n", hwloc_obj_type_string(from_type));
+ from_depth = 0;
+ } else if (from_depth == HWLOC_TYPE_DEPTH_MULTIPLE) {
+ fprintf(stderr, "multiple depth for type %s to distribute among, ignoring\n", hwloc_obj_type_string(from_type));
+ from_depth = 0;
+ }
+ }
+
+ if (to_type == (hwloc_obj_type_t) -1) {
+ to_depth = INT_MAX;
+ } else {
+ to_depth = hwloc_get_type_depth(topology, to_type);
+ if (to_depth == HWLOC_TYPE_DEPTH_UNKNOWN) {
+ fprintf(stderr, "unavailable type %s to distribute among, ignoring\n", hwloc_obj_type_string(to_type));
+ to_depth = INT_MAX;
+ } else if (to_depth == HWLOC_TYPE_DEPTH_MULTIPLE) {
+ fprintf(stderr, "multiple depth for type %s to distribute among, ignoring\n", hwloc_obj_type_string(to_type));
+ to_depth = INT_MAX;
+ }
+ }
+
+ chunks = hwloc_get_nbobjs_by_depth(topology, from_depth);
+ {
+ hwloc_obj_t *roots;
+
+ roots = malloc(chunks * sizeof(hwloc_obj_t));
+
+ for (i = 0; i < chunks; i++)
+ roots[i] = hwloc_get_obj_by_depth(topology, from_depth, i);
+
+ hwloc_distributev(topology, roots, chunks, cpuset, n, to_depth);
+
+ for (i = 0; (long) i < n; i++) {
+ char *str = NULL;
+ if (singlify)
+ hwloc_bitmap_singlify(cpuset[i]);
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&str, cpuset[i]);
+ else
+ hwloc_bitmap_asprintf(&str, cpuset[i]);
+ printf("%s\n", str);
+ free(str);
+ hwloc_bitmap_free(cpuset[i]);
+ }
+
+ free(roots);
+ }
+
+ free(cpuset);
+ }
+
+ hwloc_topology_destroy(topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-gather-topology.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-gather-topology.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-gather-topology.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,124 @@
+.\" -*- nroff -*-
+.\" Copyright © 2010 Jirka Hladky
+.\" Copyright © 2010-2011 inria. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-GATHER-TOPOLOGY "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-gather-topology \- Saves the relevant Linux topology files
+and the lstopo output for later (possibly offline) usage.
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-gather-topology [\fIoptions\fR] \fI<path>\fR
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+\fB\-h\fR \fB\-\-help\fR
+display help message and exit
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+\fBhwloc-gather-topology\fR saves all the relevant topology files into an
+archive (\fB<path>.tar.bz2\fR) and the lstopo output (\fB<path>.output\fR).
+The utility for example stores the \fB/proc/cpuinfo\fR file and the entire
+\fB/sys/devices/system/node/\fR directory tree.
+.
+.PP
+These files can be used later to explore the machine topology offline.
+Once the tarball has been extracted, it may for instance be given to
+some hwloc command-line utilities through their \fB\-\-input\fR option.
+It is also possible to override the default topology that the hwloc
+library will read by setting the extracted path in the \fBHWLOC_FSROOT\fR
+environment variable.
+.
+.PP
+Both archive and lstopo output may also be submitted to hwloc developers
+to debug issues remotely.
+.
+.PP
+\fBhwloc-gather-topology\fR is a Linux specific tool, it is not installed
+on other operating systems.
+.
+.PP
+.B NOTE:
+It is highly recommended that you read the hwloc(7) overview page
+before reading this man page.
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.PP
+To store topology information to be used later (possibly on
+a different host) please run:
+
+ hwloc-gather-topology /tmp/myhost
+
+It will store all relevant topology files in the \fB/tmp/myhost.tar.bz2\fR
+archive and the lstopo output in the \fB/tmp/myhost.output\fR file.
+.
+These files can be transferred on another host for later/offline
+analysis and/or as the input to various hwloc utilities.
+.PP
+To use these data with hwloc utilities you have to unpack
+\fBmyhost.tar.bz2\fR archive first:
+
+ tar jxvf /tmp/myhost.tar.bz2
+
+A new directory named \fBmyhost\fR now contains all topology files.
+Then you ask various hwloc utilities to use this topology instead
+of the one of the real machine by passing \fB\-\-input myhost\fR.
+To display the topology just run:
+
+ lstopo --input ./myhost
+
+It is not necessary that the topology is extracted in the current
+directory, absolute or relative paths are also supported:
+
+ lstopo --input /path/to/remote/host/extracted/topology/
+
+To see how hwloc would distribute 8 parallel jobs on the original host:
+
+ hwloc-distrib --input myhost --single 8
+
+To get the corresponding physical indexes in the previous command:
+
+ hwloc-calc --input myhost --po --li --proclist $(hwloc-distrib --input myhost --single 8)
+
+Any program may actually override the default topology with a given
+archived one even if it does not have a \fB\-\-input\fR option.
+The \fBHWLOC_FSROOT\fR environment variable should be used to do so:
+
+ HWLOC_FSROOT=myhost hwloc-calc --po --li --proclist $(hwloc-distrib --single 8)
+
+All these commands will produce the same output as if executed
+directly on the host on which the topology information was
+originally gathered by the \fBhwloc-gather-topology\fR script.
+.
+.\" **************************
+.\" Return value section
+.\" **************************
+.SH RETURN VALUE
+Upon successful execution, \fBhwloc-gather-topology\fR will exit with the code 0.
+.
+.PP
+\fBhwloc-gather-topology\fR will return nonzero exit status if any kind of error occurs,
+such as (but not limited to) failure to create the archive or output file.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-calc(1), hwloc-distrib(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,72 @@
+.\" -*- nroff -*-
+.\" Copyright © 2010 inria. All rights reserved.
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC-PS "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc-ps \- List currently-running processes that are bound.
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B hwloc-ps
+[\fIoptions\fR]
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+.TP 10
+\fB\-a\fR
+list all processes, even those that are not bound to any
+specific part of the machine.
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+report OS/physical indexes instead of logical indexes
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+report logical indexes instead of physical/OS indexes (default)
+.TP
+\fB\-c\fR \fB\-\-cpuset\fR
+show process bindings as cpusets instead of objects.
+.TP
+\fB\-\-whole\-system\fR
+Do not consider administration limitations.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+By default, hwloc-ps lists only those currently-running processes that
+are bound; it displays their their identifier, command-line and
+binding. The binding may be reported as objects or cpusets.
+.
+By default, process bindings are restricted to the currently available
+topology. If some processes are bound to processors that are not available
+to the current process, they are ignored unless \fB\-\-whole\-system\fR
+is given.
+.
+The output is a plain list. If you wish to annotate the hierarchical
+topology with processes so as to see how they are actual distributed
+on the machine, you might want to use lstopo --ps instead (which also
+only shows processes that are bound).
+.
+.PP
+The
+.I -a
+switch can be used to show
+.I all
+processes, if desired.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc(7), lstopo(1), hwloc-calc(1), hwloc-distrib(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc-ps.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,179 @@
+/*
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <fcntl.h>
+
+static void usage(char *name, FILE *where)
+{
+ fprintf (where, "Usage: %s [ options ] ...\n", name);
+ fprintf (where, "Options:\n");
+ fprintf (where, " -a Show all processes, including those that are not bound\n");
+ fprintf (where, " -l --logical Use logical object indexes (default)\n");
+ fprintf (where, " -p --physical Use physical object indexes\n");
+ fprintf (where, " -c --cpuset Show cpuset instead of objects\n");
+ fprintf (where, " --whole-system Do not consider administration limitations\n");
+}
+
+int main(int argc, char *argv[])
+{
+ const struct hwloc_topology_support *support;
+ hwloc_topology_t topology;
+ hwloc_obj_t root;
+ hwloc_bitmap_t cpuset;
+ unsigned long flags = 0;
+ int logical = 1;
+ int show_cpuset = 0;
+ DIR *dir;
+ struct dirent *dirent;
+ int show_all = 0;
+ char *callname;
+ int err;
+ int opt;
+
+ callname = strrchr(argv[0], '/');
+ if (!callname)
+ callname = argv[0];
+ else
+ callname++;
+
+ while (argc >= 2) {
+ opt = 0;
+ if (!strcmp(argv[1], "-a"))
+ show_all = 1;
+ else if (!strcmp(argv[1], "-l") || !strcmp(argv[1], "--logical")) {
+ logical = 1;
+ } else if (!strcmp(argv[1], "-p") || !strcmp(argv[1], "--physical")) {
+ logical = 0;
+ } else if (!strcmp(argv[1], "-c") || !strcmp(argv[1], "--cpuset")) {
+ show_cpuset = 1;
+ } else if (!strcmp (argv[1], "--whole-system")) {
+ flags |= HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM;
+ } else {
+ fprintf (stderr, "Unrecognized option: %s\n", argv[1]);
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ argc -= opt+1;
+ argv += opt+1;
+ }
+
+ err = hwloc_topology_init(&topology);
+ if (err)
+ goto out;
+
+ hwloc_topology_set_flags(topology, flags);
+
+ err = hwloc_topology_load(topology);
+ if (err)
+ goto out_with_topology;
+
+ root = hwloc_get_root_obj(topology);
+
+ support = hwloc_topology_get_support(topology);
+
+ if (!support->cpubind->get_thisproc_cpubind)
+ goto out_with_topology;
+
+ dir = opendir("/proc");
+ if (!dir)
+ goto out_with_topology;
+
+ cpuset = hwloc_bitmap_alloc();
+ if (!cpuset)
+ goto out_with_dir;
+
+ while ((dirent = readdir(dir))) {
+ long pid;
+ char *end;
+ char name[64] = "";
+ char *cpuset_str = NULL;
+
+ pid = strtol(dirent->d_name, &end, 10);
+ if (*end)
+ /* Not a number */
+ continue;
+
+#ifdef HWLOC_LINUX_SYS
+ {
+ unsigned pathlen = 6 + strlen(dirent->d_name) + 1 + 7 + 1;
+ char *path;
+ int file;
+ ssize_t n;
+
+ path = malloc(pathlen);
+ snprintf(path, pathlen, "/proc/%s/cmdline", dirent->d_name);
+ file = open(path, O_RDONLY);
+ free(path);
+
+ if (file >= 0) {
+ n = read(file, name, sizeof(name) - 1);
+ close(file);
+
+ if (n <= 0)
+ /* Ignore kernel threads and errors */
+ continue;
+
+ name[n] = 0;
+ }
+ }
+#endif /* HWLOC_LINUX_SYS */
+
+ if (hwloc_get_proc_cpubind(topology, pid, cpuset, 0))
+ continue;
+
+ hwloc_bitmap_and(cpuset, cpuset, hwloc_topology_get_topology_cpuset(topology));
+ if (hwloc_bitmap_iszero(cpuset))
+ continue;
+
+ if (hwloc_bitmap_isequal(cpuset, root->cpuset) && !show_all)
+ continue;
+
+ printf("%ld\t", pid);
+
+ if (show_cpuset) {
+ hwloc_bitmap_asprintf(&cpuset_str, cpuset);
+ printf("%s", cpuset_str);
+ } else {
+ hwloc_bitmap_t remaining = hwloc_bitmap_dup(cpuset);
+ int first = 1;
+ while (!hwloc_bitmap_iszero(remaining)) {
+ char type[64];
+ unsigned idx;
+ hwloc_obj_t obj = hwloc_get_first_largest_obj_inside_cpuset(topology, remaining);
+ hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
+ idx = logical ? obj->logical_index : obj->os_index;
+ if (idx == (unsigned) -1)
+ printf("%s%s", first ? "" : " ", type);
+ else
+ printf("%s%s:%u", first ? "" : " ", type, idx);
+ hwloc_bitmap_andnot(remaining, remaining, obj->cpuset);
+ first = 0;
+ }
+ hwloc_bitmap_free(remaining);
+ }
+
+ printf("\t\t%s\n", name);
+ free(cpuset_str);
+ }
+
+ err = 0;
+ hwloc_bitmap_free(cpuset);
+
+ out_with_dir:
+ closedir(dir);
+ out_with_topology:
+ hwloc_topology_destroy(topology);
+ out:
+ return err;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc.7in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc.7in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/hwloc.7in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,320 @@
+.\" -*- nroff -*-
+.\" Copyright © 2010 inria. All rights reserved.
+.\" Copyright © 2010 Université of Bordeaux
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH HWLOC "7" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+hwloc - General information about hwloc ("hardware locality").
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+hwloc provides command line tools and a C API to obtain the
+hierarchical map of key computing elements, such as: NUMA memory
+nodes, shared caches, processor sockets, processor cores, and
+processor "threads". hwloc also gathers various attributes such as
+cache and memory information, and is portable across a variety of
+different operating systems and platforms.
+.
+.
+.SS Definitions
+Hwloc has some specific definitions for terms that are used in this
+man page and other hwloc documentation.
+.
+.TP 5
+.B Hwloc CPU set:
+A set of processors included in an hwloc object, expressed as a bitmask
+indexed by the physical numbers of the CPUs (as announced by the OS).
+The hwloc definition
+of "CPU set" does not carry any the same connotations as Linux's "CPU
+set" (e.g., process affinity, etc.).
+.
+.TP
+.B Linux CPU set:
+See http://www.mjmwired.net/kernel/Documentation/cpusets.txt for a
+discussion of Linux CPU sets. A
+super-short-ignoring-many-details description (taken from that page)
+is:
+.
+.\" Force a paragraph break, but keep the indentation
+.TP
+\
+.
+ "Cpusets provide a mechanism for assigning a set of CPUs and Memory
+Nodes to a set of tasks."
+.
+.TP
+.B Linux Cgroup:
+See http://www.mjmwired.net/kernel/Documentation/cgroups.txt for a
+discussion of Linux control groups. A
+super-short-ignoring-many-details description (taken from that page)
+is:
+.
+.\" Force a paragraph break, but keep the indentation
+.TP
+\
+ "Control Groups provide a mechanism for aggregating/partitioning sets
+of tasks, and all their future children, into hierarchical groups
+with specialized behaviour."
+.
+.PP
+To be clear, hwloc supports all of the above concepts. It is simply
+worth noting that they are 3 different things.
+.
+.SS Location Specification
+.
+Locations refer to specific regions within a topology. Before reading
+the rest of this man page, it may be useful to read lstopo(1) and/or
+run lstopo on your machine to see the reported topology tree. Seeing
+and understanding a topology tree will definitely help in
+understanding the concepts that are discussed below.
+.
+.PP
+Locations can be specified in multiple ways:
+.
+.TP 10
+.B Tuples:
+Tuples of hwloc "objects" and associated indexes can be specified in
+the form
+.IR object:index .
+Hwloc objects represent types of mapped items (e.g., sockets, cores,
+etc.) in a topology tree; indexes are non-negative integers that
+specify a unique physical object in a topology tree. Both concepts
+are described in detail, below.
+.\" Force a paragraph break, but keep the indentation.
+.TP
+\
+Chaining multiple tuples together in the more general form
+.I object1:index[.object2:index2[...]]
+is permissable. While the first tuple's object may appear anywhere in
+the topology, the Nth tuple's object must have a shallower topology
+depth than the (N+1)th tuple's object. Put simply: as you move right
+in a tuple chain, objects must go deeper in the topology tree.
+When using logical indexes (which is the default),
+indexes specified in chained tuples are relative to the scope of the
+parent object. For example, "socket:0.core:1" refers to the second
+core in the first socket.
+When using OS/physical indexes, the first object matching the given
+index is used.
+.
+.TP
+.B Hex:
+Locations can also be specified as hexidecimal bitmasks prefixed
+.
+with "0x". Commas must be used to separate the hex digits into blocks
+of 8, such as "0xffc0140,0x00020110".
+.
+Leading zeros in each block do not need to be specified.
+.
+For example, "0xffc0140,0x20110" is equivalent to the prior example,
+and "0x0000000f" is exactly equivalent to "0xf". Intermediate blocks
+of 8 digits that are all zeoro can be left empty; "0xff0,,0x13" is
+equivalent to "0xff0,0x00000000,0x13".
+.
+If the location is prefixed with the special string "0xf...f", then
+all unspecified bits are set (as if the set were infinite). For
+example, "0xf...f,0x1" sets both the first bit and all bits starting
+with the 33rd. The string "0xf...f" -- with no other specified values
+-- sets all bits.
+.
+.TP
+.B I/O devices:
+Locations may also be a PCI or OS object.
+The corresponding value is the set of CPUs that are close to the
+physical device.
+For example, "pci=02:03.1" is equivalent to the set of processors
+that are close to the hostbridge above PCI device with bus ID "02:03.1".
+"os=eth0" is equivalent to all processors close to the network
+interface whose software name is "eth0".
+.
+.PP
+Multiple locations can be specified on the hwloc-bind command line
+(delimited by whitespace); the first token of the execution command is
+assumed to either follow "--" (if specified) or the first token that
+is unrecognized as a location.
+.
+.PP
+By default, if multiple locations are specified, they are added,
+meaning that the binding will be wider in the sense that the process
+may run on more objects.
+.
+.PP
+If prefixed with "~", the given location
+will be cleared instead of added to the current list of locations. If
+prefixed with "x", the given location will be and'ed instead of added
+to the current list. If prefixed with "^", the given location will be
+xor'ed.
+.
+.PP
+"all" and "root" are a special location consisting in the entire
+current topology.
+.
+More complex operations may be performed by using
+.IR hwloc-calc
+to compute intermediate values.
+.
+.SS Hwloc Objects
+.
+.PP
+Objects can be any of the following strings
+.
+(listed from "biggest" to "smallest"):
+.
+.TP 10
+.B machine
+A set of processors and memory.
+.
+.TP
+.B node
+A NUMA node; a set of processors around memory which the processors
+can directly access.
+.
+.TP
+.B socket
+Typically a physical package or chip, it is a grouping of one or more
+processors.
+.
+.TP
+.B core
+A single, physical processing unit which may still contain multiple
+logical processors, such as hardware threads.
+.
+.TP
+.B pu
+Short for
+.I processor unit
+(not
+.IR process !).
+The smallest physical execution unit that hwloc recognizes. For
+example, there may be multiple PUs on a core (e.g.,
+hardware threads).
+.PP
+The additional
+.B system
+type can be used when several machines form an overall single system image
+(SSI), such as Kerrighed.
+.
+.PP
+Finally, note that an object can be denoted by its numeric "depth" in
+the topology graph.
+.
+.SS Hwloc Indexes
+Indexes are integer values that uniquely specify a given object of a
+specific type. Indexes can be expressed either as
+.I logical
+values or
+.I physical
+values. Most hwloc utilities accept logical indexes by default.
+Passing
+.B --physical
+switches to physical/OS indexes.
+Both logical and physical indexes are described on this man page.
+.
+.PP
+.I Logical
+indexes are relative to the object order in the output from the
+lstopo command. They always start with 0 and increment by 1 for each
+successive object.
+.
+.PP
+.I Physical
+indexes are how the operating system refers to objects. Note that
+while physical indexes are non-negative integer values, the hardware
+and/or operating system may choose arbitrary values -- they may not
+start with 0, and successive objects may not have consecutive values.
+.
+.PP
+For example, if the first few lines of lstopo -p output are the
+following:
+.
+
+ Machine (47GB)
+ NUMANode P#0 (24GB) + Socket P#0 + L3 (12MB)
+ L2 (256KB) + L1 (32KB) + Core P#0 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#1 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#2 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#8 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#9 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#10 + PU P#0
+ NUMANode P#1 (24GB) + Socket P#1 + L3 (12MB)
+ L2 (256KB) + L1 (32KB) + Core P#0 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#1 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#2 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#8 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#9 + PU P#0
+ L2 (256KB) + L1 (32KB) + Core P#10 + PU P#0
+
+In this example, the first core on the second socket is logically
+number 6 (i.e., logically the 7th core, starting from 0). Its
+physical index is 0, but note that another core
+.I also
+has a physical index of 0. Hence, physical indexes may only be
+relevant within the scope of their parent (or set of ancestors).
+In this example, to uniquely identify logical core 6 with
+physical indexes, you must specify (at a minimum) both a socket and a
+core: socket 1, core 0.
+.PP
+Index values, regardless of whether they are logical or physical, can
+be expressed in several different forms (where X, Y, and N are
+positive integers):
+.
+.TP 10
+.B X
+The object with index value X.
+.
+.TP
+.B X-Y
+All the objects with index values >= X and <= Y.
+.
+.TP
+.B X-
+All the objects with index values >= X.
+.
+.TP
+.B X:N
+N objects starting with index X, possibly wrapping around the end of
+the level.
+.
+.TP
+.B all
+A special index value indicating all valid index values.
+.
+.TP
+.B odd
+A special index value indicating all valid odd index values.
+.
+.TP
+.B even
+A special index value indicating all valid even index values.
+.
+.PP
+.IR REMEMBER :
+hwloc's command line tools accept
+.I logical
+indexes for location values by default.
+Use
+.BR --physical " and " --logical
+to switch from one mode to another.
+.
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+Hwloc's command line tool documentation: lstopo(1), hwloc-bind(1),
+hwloc-calc(1), hwloc-distrib(1), hwloc-ps(1).
+.
+.PP
+Hwloc has many C API functions, each of which have their own man page.
+Some top-level man pages are also provided, grouping similar functions
+together. A few good places to start might include:
+hwlocality_objects(3), hwlocality_types(3), hwlocality_creation(3),
+hwlocality_cpuset(3), hwlocality_information(3), and
+hwlocality_binding(3).
+.
+.PP
+For a listing of all available hwloc man pages, look at all "hwloc*"
+files in the man1 and man3 directories.
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-cairo.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,529 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+
+#ifdef HWLOC_HAVE_CAIRO
+#include <cairo.h>
+
+#if CAIRO_HAS_PDF_SURFACE
+#include <cairo-pdf.h>
+#endif /* CAIRO_HAS_PDF_SURFACE */
+
+#if CAIRO_HAS_PS_SURFACE
+#include <cairo-ps.h>
+#endif /* CAIRO_HAS_PS_SURFACE */
+
+#if CAIRO_HAS_SVG_SURFACE
+#include <cairo-svg.h>
+#endif /* CAIRO_HAS_SVG_SURFACE */
+
+#ifndef HWLOC_HAVE_X11
+/* In case X11 headers aren't availble, forcefully disable Cairo/Xlib. */
+# undef CAIRO_HAS_XLIB_SURFACE
+# define CAIRO_HAS_XLIB_SURFACE 0
+#endif
+
+#if CAIRO_HAS_XLIB_SURFACE
+#include <cairo-xlib.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/cursorfont.h>
+/* Avoid Xwindow's definition conflict with Windows' use for fields names. */
+#undef Status
+#endif /* CAIRO_HAS_XLIB_SURFACE */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+#include "lstopo.h"
+
+#if (CAIRO_HAS_XLIB_SURFACE + CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE)
+/* Cairo methods */
+static void
+topo_cairo_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
+{
+ cairo_t *c = output;
+ cairo_rectangle(c, x, y, width, height);
+ cairo_set_source_rgb(c, (float)r / 255, (float) g / 255, (float) b / 255);
+ cairo_fill(c);
+
+ cairo_rectangle(c, x, y, width, height);
+ cairo_set_source_rgb(c, 0, 0, 0);
+ cairo_set_line_width(c, 1);
+ cairo_stroke(c);
+}
+
+static void
+topo_cairo_line(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+{
+ cairo_t *c = output;
+ cairo_move_to(c, x1, y1);
+ cairo_set_source_rgb(c, (float) r / 255, (float) g / 255, (float) b / 255);
+ cairo_set_line_width(c, 1);
+ cairo_line_to(c, x2, y2);
+ cairo_stroke(c);
+}
+
+static void
+topo_cairo_text(void *output, int r, int g, int b, int size, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
+{
+ cairo_t *c = output;
+ cairo_move_to(c, x, y + size);
+ cairo_set_font_size(c, size);
+ cairo_set_source_rgb(c, (float)r / 255, (float) g / 255, (float) b / 255);
+ cairo_show_text(c, text);
+}
+
+#if (CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE)
+static cairo_status_t
+topo_cairo_write(void *closure, const unsigned char *data, unsigned int length)
+{
+ if (fwrite(data, length, 1, closure) < 1)
+ return CAIRO_STATUS_WRITE_ERROR;
+ return CAIRO_STATUS_SUCCESS;
+}
+#endif /* (CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE) */
+
+static void
+topo_cairo_paint(struct draw_methods *methods, int logical, int legend, hwloc_topology_t topology, cairo_surface_t *cs)
+{
+ cairo_t *c;
+ c = cairo_create(cs);
+ output_draw(methods, logical, legend, topology, c);
+ cairo_show_page(c);
+ cairo_destroy(c);
+}
+
+static void null_declare_color (void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused) {}
+#endif /* (CAIRO_HAS_XLIB_SURFACE + CAIRO_HAS_PNG_FUNCTIONS + CAIRO_HAS_PDF_SURFACE + CAIRO_HAS_PS_SURFACE + CAIRO_HAS_SVG_SURFACE) */
+
+
+#if CAIRO_HAS_XLIB_SURFACE
+/* X11 back-end */
+
+struct display {
+ Display *dpy;
+ int scr;
+ cairo_surface_t *cs;
+ Window top, win;
+ Cursor hand;
+ unsigned int orig_fontsize, orig_gridsize;
+ int screen_width, screen_height; /** visible part size */
+ int last_screen_width, last_screen_height; /** last visible part size */
+ int width, height; /** total normal display size */
+ int x, y; /** top left corner of the visible part */
+};
+
+static void
+x11_create(struct display *disp, int width, int height)
+{
+ disp->win = XCreateSimpleWindow(disp->dpy, disp->top, 0, 0, width, height, 0, WhitePixel(disp->dpy, disp->scr), WhitePixel(disp->dpy, disp->scr));
+ disp->hand = XCreateFontCursor(disp->dpy, XC_fleur);
+ XDefineCursor(disp->dpy, disp->win, disp->hand);
+ XSelectInput(disp->dpy, disp->win,
+ KeyPressMask |
+ ButtonPressMask | ButtonReleaseMask |
+ PointerMotionMask |
+ ExposureMask);
+ XMapWindow(disp->dpy, disp->win);
+ disp->cs = cairo_xlib_surface_create(disp->dpy, disp->win, DefaultVisual(disp->dpy, disp->scr), width, height);
+
+}
+
+static void
+x11_destroy(struct display *disp)
+{
+ cairo_surface_destroy(disp->cs);
+ XDestroyWindow(disp->dpy, disp->win);
+}
+
+static void *
+x11_start(void *output __hwloc_attribute_unused, int width, int height)
+{
+ Display *dpy;
+ Window root, top;
+ int scr;
+ Screen *screen;
+ int screen_width = width, screen_height = height;
+ struct display *disp;
+
+ if (!(dpy = XOpenDisplay(NULL))) {
+ fprintf(stderr, "couldn't connect to X\n");
+ exit(EXIT_FAILURE);
+ }
+
+ disp = malloc(sizeof(*disp));
+ disp->dpy = dpy;
+ disp->scr = scr = DefaultScreen(dpy);
+
+ screen = ScreenOfDisplay(dpy, scr);
+ if (screen_width >= screen->width)
+ screen_width = screen->width;
+ if (screen_height >= screen->height)
+ screen_height = screen->height;
+ disp->screen_width = screen_width;
+ disp->screen_height = screen_height;
+ disp->width = width;
+ disp->height = height;
+ disp->orig_fontsize = fontsize;
+ disp->orig_gridsize = gridsize;
+ disp->x = 0;
+ disp->y = 0;
+
+ root = RootWindow(dpy, scr);
+ disp->top = top = XCreateSimpleWindow(dpy, root, 0, 0, screen_width, screen_height, 0, WhitePixel(dpy, scr), WhitePixel(dpy, scr));
+ XSelectInput(dpy,top, StructureNotifyMask);
+ XMapWindow(dpy, top);
+
+ x11_create(disp, width, height);
+
+ return disp;
+}
+
+static struct draw_methods x11_draw_methods = {
+ x11_start,
+ null_declare_color,
+ topo_cairo_box,
+ topo_cairo_line,
+ topo_cairo_text,
+};
+
+/** Clip coordinates of the visible part. */
+static void
+move_x11(struct display *disp, int logical, int legend, hwloc_topology_t topology)
+{
+ if (disp->width <= disp->screen_width) {
+ disp->x = 0;
+ } else {
+ if (disp->x < 0)
+ disp->x = 0;
+ if (disp->x >= disp->width - disp->screen_width)
+ disp->x = disp->width - disp->screen_width;
+ }
+
+ if (disp->height <= disp->screen_height) {
+ disp->y = 0;
+ } else {
+ if (disp->y < 0)
+ disp->y = 0;
+ if (disp->y >= disp->height - disp->screen_height)
+ disp->y = disp->height - disp->screen_height;
+ }
+
+ if (disp->screen_width > disp->width && disp->screen_height > disp->height
+ && (disp->screen_width != disp->last_screen_width
+ || disp->screen_height != disp->last_screen_height)) {
+ disp->last_screen_width = disp->screen_width;
+ disp->last_screen_height = disp->screen_height;
+ fontsize = disp->orig_fontsize;
+ gridsize = disp->orig_gridsize;
+ if (disp->screen_width > disp->width) {
+ fontsize = disp->orig_fontsize * disp->screen_width / disp->width;
+ gridsize = disp->orig_gridsize * disp->screen_width / disp->width;
+ }
+ if (disp->screen_height > disp->height) {
+ unsigned int new_fontsize = disp->orig_fontsize * disp->screen_height / disp->height;
+ unsigned int new_gridsize = disp->orig_gridsize * disp->screen_height / disp->height;
+ if (new_fontsize < fontsize)
+ fontsize = new_fontsize;
+ if (new_gridsize < gridsize)
+ gridsize = new_gridsize;
+ }
+
+ x11_destroy(disp);
+ x11_create(disp, disp->screen_width, disp->screen_height);
+ topo_cairo_paint(&x11_draw_methods, logical, legend, topology, disp->cs);
+ }
+}
+
+void
+output_x11(hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ struct display *disp = output_draw_start(&x11_draw_methods, logical, legend, topology, NULL);
+ int finish = 0;
+ int state = 0;
+ int x = 0, y = 0; /* shut warning down */
+ int lastx = disp->x, lasty = disp->y;
+
+ topo_cairo_paint(&x11_draw_methods, logical, legend, topology, disp->cs);
+
+ while (!finish) {
+ XEvent e;
+ if (!XEventsQueued(disp->dpy, QueuedAfterFlush)) {
+ /* No pending event, flush moving windows before waiting for next event */
+ if (disp->x != lastx || disp->y != lasty) {
+ XMoveWindow(disp->dpy, disp->win, -disp->x, -disp->y);
+ lastx = disp->x;
+ lasty = disp->y;
+ }
+ }
+ XNextEvent(disp->dpy, &e);
+ switch (e.type) {
+ case Expose:
+ if (e.xexpose.count < 1)
+ topo_cairo_paint(&x11_draw_methods, logical, legend, topology, disp->cs);
+ break;
+ case MotionNotify:
+ if (state) {
+ disp->x -= e.xmotion.x_root - x;
+ disp->y -= e.xmotion.y_root - y;
+ x = e.xmotion.x_root;
+ y = e.xmotion.y_root;
+ move_x11(disp, logical, legend, topology);
+ }
+ break;
+ case ConfigureNotify:
+ disp->screen_width = e.xconfigure.width;
+ disp->screen_height = e.xconfigure.height;
+ move_x11(disp, logical, legend, topology);
+ if (disp->x != lastx || disp->y != lasty)
+ XMoveWindow(disp->dpy, disp->win, -disp->x, -disp->y);
+ break;
+ case ButtonPress:
+ if (e.xbutton.button == Button1) {
+ state = 1;
+ x = e.xbutton.x_root;
+ y = e.xbutton.y_root;
+ }
+ break;
+ case ButtonRelease:
+ if (e.xbutton.button == Button1)
+ state = 0;
+ break;
+ case MappingNotify:
+ XRefreshKeyboardMapping(&e.xmapping);
+ break;
+ case KeyPress: {
+ KeySym keysym;
+ XLookupString(&e.xkey, NULL, 0, &keysym, NULL);
+ switch (keysym) {
+ case XK_q:
+ case XK_Q:
+ case XK_Escape:
+ finish = 1;
+ break;
+ case XK_Left:
+ disp->x -= disp->screen_width/10;
+ move_x11(disp, logical, legend, topology);
+ break;
+ case XK_Right:
+ disp->x += disp->screen_width/10;
+ move_x11(disp, logical, legend, topology);
+ break;
+ case XK_Up:
+ disp->y -= disp->screen_height/10;
+ move_x11(disp, logical, legend, topology);
+ break;
+ case XK_Down:
+ disp->y += disp->screen_height/10;
+ move_x11(disp, logical, legend, topology);
+ break;
+ case XK_Page_Up:
+ if (e.xkey.state & ControlMask) {
+ disp->x -= disp->screen_width;
+ move_x11(disp, logical, legend, topology);
+ } else {
+ disp->y -= disp->screen_height;
+ move_x11(disp, logical, legend, topology);
+ }
+ break;
+ case XK_Page_Down:
+ if (e.xkey.state & ControlMask) {
+ disp->x += disp->screen_width;
+ move_x11(disp, logical, legend, topology);
+ } else {
+ disp->y += disp->screen_height;
+ move_x11(disp, logical, legend, topology);
+ }
+ break;
+ case XK_Home:
+ disp->x = 0;
+ disp->y = 0;
+ move_x11(disp, logical, legend, topology);
+ break;
+ case XK_End:
+ disp->x = INT_MAX;
+ disp->y = INT_MAX;
+ move_x11(disp, logical, legend, topology);
+ break;
+ }
+ break;
+ }
+ }
+ }
+ x11_destroy(disp);
+ XDestroyWindow(disp->dpy, disp->top);
+ XFreeCursor(disp->dpy, disp->hand);
+ XCloseDisplay(disp->dpy);
+ free(disp);
+}
+#endif /* CAIRO_HAS_XLIB_SURFACE */
+
+
+#if CAIRO_HAS_PNG_FUNCTIONS
+/* PNG back-end */
+static void *
+png_start(void *output __hwloc_attribute_unused, int width, int height)
+{
+ return cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+}
+
+static struct draw_methods png_draw_methods = {
+ png_start,
+ null_declare_color,
+ topo_cairo_box,
+ topo_cairo_line,
+ topo_cairo_text,
+};
+
+void
+output_png(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output = open_file(filename, "w");
+ cairo_surface_t *cs;
+
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+
+ cs = output_draw_start(&png_draw_methods, logical, legend, topology, output);
+
+ topo_cairo_paint(&png_draw_methods, logical, legend, topology, cs);
+ cairo_surface_write_to_png_stream(cs, topo_cairo_write, output);
+ cairo_surface_destroy(cs);
+
+ if (output != stdout)
+ fclose(output);
+}
+#endif /* CAIRO_HAS_PNG_FUNCTIONS */
+
+
+#if CAIRO_HAS_PDF_SURFACE
+/* PDF back-end */
+static void *
+pdf_start(void *output, int width, int height)
+{
+ return cairo_pdf_surface_create_for_stream(topo_cairo_write, output, width, height);
+}
+
+static struct draw_methods pdf_draw_methods = {
+ pdf_start,
+ null_declare_color,
+ topo_cairo_box,
+ topo_cairo_line,
+ topo_cairo_text,
+};
+
+void
+output_pdf(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output = open_file(filename, "w");
+ cairo_surface_t *cs;
+
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+
+ cs = output_draw_start(&pdf_draw_methods, logical, legend, topology, output);
+
+ topo_cairo_paint(&pdf_draw_methods, logical, legend, topology, cs);
+ cairo_surface_flush(cs);
+ cairo_surface_destroy(cs);
+
+ if (output != stdout)
+ fclose(output);
+}
+#endif /* CAIRO_HAS_PDF_SURFACE */
+
+
+#if CAIRO_HAS_PS_SURFACE
+/* PS back-end */
+static void *
+ps_start(void *output, int width, int height)
+{
+ return cairo_ps_surface_create_for_stream(topo_cairo_write, output, width, height);
+}
+
+static struct draw_methods ps_draw_methods = {
+ ps_start,
+ null_declare_color,
+ topo_cairo_box,
+ topo_cairo_line,
+ topo_cairo_text,
+};
+
+void
+output_ps(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output = open_file(filename, "w");
+ cairo_surface_t *cs;
+
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+
+ cs = output_draw_start(&ps_draw_methods, logical, legend, topology, output);
+
+ topo_cairo_paint(&ps_draw_methods, logical, legend, topology, cs);
+ cairo_surface_flush(cs);
+ cairo_surface_destroy(cs);
+
+ if (output != stdout)
+ fclose(output);
+}
+#endif /* CAIRO_HAS_PS_SURFACE */
+
+
+#if CAIRO_HAS_SVG_SURFACE
+/* SVG back-end */
+static void *
+svg_start(void *output, int width, int height)
+{
+ return cairo_svg_surface_create_for_stream(topo_cairo_write, output, width, height);
+}
+
+static struct draw_methods svg_draw_methods = {
+ svg_start,
+ null_declare_color,
+ topo_cairo_box,
+ topo_cairo_line,
+ topo_cairo_text,
+};
+
+void
+output_svg(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output;
+ cairo_surface_t *cs;
+
+ output = open_file(filename, "w");
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+
+ cs = output_draw_start(&svg_draw_methods, logical, legend, topology, output);
+
+ topo_cairo_paint(&svg_draw_methods, logical, legend, topology, cs);
+ cairo_surface_flush(cs);
+ cairo_surface_destroy(cs);
+
+ if (output != stdout)
+ fclose(output);
+}
+#endif /* CAIRO_HAS_SVG_SURFACE */
+
+#endif /* CAIRO */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-color.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-color.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-color.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * See COPYING in top-level directory.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "lstopo.h"
+
+static struct color {
+ int r, g, b;
+} *colors;
+
+static int numcolors;
+
+static int
+find_color(int r, int g, int b)
+{
+ int i;
+
+ for (i = 0; i < numcolors; i++)
+ if (colors[i].r == r && colors[i].g == g && colors[i].b == b)
+ return i;
+
+ return -1;
+}
+
+int
+rgb_to_color(int r, int g, int b)
+{
+ int color = find_color(r, g, b);
+
+ if (color != -1)
+ return color;
+
+ fprintf(stderr, "color #%02x%02x%02x not declared\n", r, g, b);
+ exit(EXIT_FAILURE);
+}
+
+int
+declare_color(int r, int g, int b)
+{
+ int color = find_color(r, g, b);
+
+ if (color != -1)
+ return color;
+
+ color = numcolors++;
+ colors = realloc(colors, sizeof(*colors) * (numcolors));
+ colors[color].r = r;
+ colors[color].g = g;
+ colors[color].b = b;
+
+ return color;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-draw.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,1012 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <private/private.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <time.h>
+
+#include "lstopo.h"
+
+#define EPOXY_R_COLOR 0xe7
+#define EPOXY_G_COLOR 0xff
+#define EPOXY_B_COLOR 0xb5
+
+#define DARK_EPOXY_R_COLOR ((EPOXY_R_COLOR * 100) / 110)
+#define DARK_EPOXY_G_COLOR ((EPOXY_G_COLOR * 100) / 110)
+#define DARK_EPOXY_B_COLOR ((EPOXY_B_COLOR * 100) / 110)
+
+#define DARKER_EPOXY_R_COLOR ((DARK_EPOXY_R_COLOR * 100) / 110)
+#define DARKER_EPOXY_G_COLOR ((DARK_EPOXY_G_COLOR * 100) / 110)
+#define DARKER_EPOXY_B_COLOR ((DARK_EPOXY_B_COLOR * 100) / 110)
+
+#define SOCKET_R_COLOR 0xde
+#define SOCKET_G_COLOR 0xde
+#define SOCKET_B_COLOR 0xde
+
+#define MEMORY_R_COLOR 0xef
+#define MEMORY_G_COLOR 0xdf
+#define MEMORY_B_COLOR 0xde
+
+#define CORE_R_COLOR 0xbe
+#define CORE_G_COLOR 0xbe
+#define CORE_B_COLOR 0xbe
+
+#define THREAD_R_COLOR 0xff
+#define THREAD_G_COLOR 0xff
+#define THREAD_B_COLOR 0xff
+
+#define RUNNING_R_COLOR 0
+#define RUNNING_G_COLOR 0xff
+#define RUNNING_B_COLOR 0
+
+#define FORBIDDEN_R_COLOR 0xff
+#define FORBIDDEN_G_COLOR 0
+#define FORBIDDEN_B_COLOR 0
+
+#define OFFLINE_R_COLOR 0
+#define OFFLINE_G_COLOR 0
+#define OFFLINE_B_COLOR 0
+
+#define CACHE_R_COLOR 0xff
+#define CACHE_G_COLOR 0xff
+#define CACHE_B_COLOR 0xff
+
+#define MACHINE_R_COLOR EPOXY_R_COLOR
+#define MACHINE_G_COLOR EPOXY_G_COLOR
+#define MACHINE_B_COLOR EPOXY_B_COLOR
+
+#define NODE_R_COLOR DARK_EPOXY_R_COLOR
+#define NODE_G_COLOR DARK_EPOXY_G_COLOR
+#define NODE_B_COLOR DARK_EPOXY_B_COLOR
+
+#define SYSTEM_R_COLOR 0xff
+#define SYSTEM_G_COLOR 0xff
+#define SYSTEM_B_COLOR 0xff
+
+#define MISC_R_COLOR 0xff
+#define MISC_G_COLOR 0xff
+#define MISC_B_COLOR 0xff
+
+#define PCI_DEVICE_R_COLOR DARKER_EPOXY_R_COLOR
+#define PCI_DEVICE_G_COLOR DARKER_EPOXY_G_COLOR
+#define PCI_DEVICE_B_COLOR DARKER_EPOXY_B_COLOR
+
+#define OS_DEVICE_R_COLOR 0xde
+#define OS_DEVICE_G_COLOR 0xde
+#define OS_DEVICE_B_COLOR 0xde
+
+#define BRIDGE_R_COLOR 0xff
+#define BRIDGE_G_COLOR 0xff
+#define BRIDGE_B_COLOR 0xff
+
+/* preferred width/height compromise */
+#define RATIO (4.f/3.f)
+
+/* PCI object height: just a box */
+#define PCI_HEIGHT (fontsize ? gridsize + fontsize + gridsize : gridsize)
+
+/* do we prefer ratio1 over ratio2? */
+static int prefer_ratio(float ratio1, float ratio2) {
+ float _ratio1 = (ratio1) / RATIO;
+ float _ratio2 = (ratio2) / RATIO;
+ if (_ratio1 < 1)
+ _ratio1 = 1/_ratio1;
+ if (_ratio2 < 1)
+ _ratio2 = 1/_ratio2;
+ return _ratio1 < _ratio2;
+}
+
+static void* null_start(void *output, int width __hwloc_attribute_unused, int height __hwloc_attribute_unused) { return output; }
+static void null_declare_color(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused) { }
+static void null_box(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x __hwloc_attribute_unused, unsigned width __hwloc_attribute_unused, unsigned y __hwloc_attribute_unused, unsigned height __hwloc_attribute_unused) { }
+static void null_line(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1 __hwloc_attribute_unused, unsigned y1_arg __hwloc_attribute_unused, unsigned x2 __hwloc_attribute_unused, unsigned y2 __hwloc_attribute_unused) { }
+static void null_text(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, int size __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x __hwloc_attribute_unused, unsigned y __hwloc_attribute_unused, const char *text __hwloc_attribute_unused) { }
+
+static struct draw_methods null_draw_methods = {
+ null_start,
+ null_declare_color,
+ null_box,
+ null_line,
+ null_text,
+};
+
+/*
+ * foo_draw functions take a OBJ, computes which size it needs, recurse into
+ * sublevels with null_draw_methods to recursively compute the needed size
+ * without actually drawing anything, then draw things about OBJ (chip draw,
+ * cache size information etc) at (X,Y), recurse into sublevels again to
+ * actually draw things, and return in RETWIDTH and RETHEIGHT the amount of
+ * space that the drawing took.
+ *
+ * For generic detailed comments, see the node_draw function.
+ *
+ * border is added around the objects
+ * separator is added between objects
+ */
+
+typedef void (*foo_draw)(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t obj, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight);
+
+static foo_draw get_type_fun(hwloc_obj_type_t type);
+
+/*
+ * Helper to recurse into sublevels, either horizontally or vertically
+ * Updates caller's totwidth/myheight and maxwidth/maxheight
+ * Needs textwidth, topology, output, depth, x and y
+ */
+
+#define RECURSE_BEGIN(obj, border) do { \
+ hwloc_obj_t *subobjs = obj->children; \
+ unsigned numsubobjs = obj->arity; \
+ unsigned width, height; \
+ unsigned maxwidth __hwloc_attribute_unused, maxheight __hwloc_attribute_unused; \
+ maxwidth = maxheight = 0; \
+ totwidth = (border) + mywidth; \
+ totheight = (border) + myheight; \
+ if (numsubobjs) { \
+ unsigned i; \
+
+#define RECURSE_FOR() \
+ /* Iterate over subobjects */ \
+ for (i = 0; i < numsubobjs; i++) { \
+
+ /* Recursive call */
+#define RECURSE_CALL_FUN(methods) \
+ get_type_fun(subobjs[i]->type)(topology, methods, logical, subobjs[i], output, depth-1, x + totwidth, &width, y + totheight, &height) \
+
+#define RECURSE_END_HORIZ(separator, border) \
+ /* Add the subobject's width and separator */ \
+ totwidth += width + (separator); \
+ /* Update maximum height */ \
+ if (height > maxheight) \
+ maxheight = height; \
+ } \
+ \
+ /* Remove spurious separator on the right */ \
+ totwidth -= (separator); \
+ \
+ /* Make sure there is width for the heading text */ \
+ /* Add subobjects height */ \
+ totheight += maxheight; \
+ /* And add border below */ \
+ totheight += (border); \
+ /* Add border on the right */ \
+ totwidth += (border); \
+ } \
+ if (totwidth < textwidth) \
+ totwidth = textwidth; \
+ /* Update returned values */ \
+ *retwidth = totwidth; \
+ *retheight = totheight; \
+} while(0)
+
+#define RECURSE_END_VERT(separator, border) \
+ /* Add the subobject's height and separator */ \
+ totheight += height + (separator); \
+ if (width > maxwidth) \
+ /* Update maximum width */ \
+ maxwidth = width; \
+ } \
+ /* Remove spurious separator at the bottom */ \
+ totheight -= (separator); \
+ /* Add subobjects width */ \
+ totwidth += maxwidth; \
+ /* And add border on the right */ \
+ totwidth += (border); \
+ /* Add border at the bottom */ \
+ totheight = totheight + (border); \
+ } \
+ \
+ /* Make sure there is width for the heading text */ \
+ if (totwidth < textwidth) \
+ totwidth = textwidth; \
+ /* Update returned values */ \
+ *retwidth = totwidth; \
+ *retheight = totheight; \
+} while(0)
+
+/* Pack objects horizontally */
+#define RECURSE_HORIZ(obj, methods, separator, border) \
+ RECURSE_BEGIN(obj, border) \
+ RECURSE_FOR() \
+ RECURSE_CALL_FUN(methods); \
+ RECURSE_END_HORIZ(separator, border)
+
+/* Pack objects vertically */
+#define RECURSE_VERT(obj, methods, separator, border) \
+ RECURSE_BEGIN(obj, border) \
+ RECURSE_FOR() \
+ RECURSE_CALL_FUN(methods); \
+ RECURSE_END_VERT(separator, border)
+
+#define RECURSE_RECT_BEGIN(obj, methods, separator, border) \
+RECURSE_BEGIN(obj, border) \
+ /* Total width for subobjects */ \
+ unsigned obj_totwidth = 0, obj_totheight = 0; \
+ /* Total area for subobjects */ \
+ unsigned area = 0; \
+ unsigned rows, columns; \
+ RECURSE_FOR() \
+ RECURSE_CALL_FUN(&null_draw_methods); \
+ obj_totwidth += width + (separator); \
+ obj_totheight += height + (separator); \
+ area += (width + (separator)) * (height + (separator)); \
+ } \
+ if (force_orient[obj->type] == LSTOPO_ORIENT_HORIZ) { \
+ rows = 1; \
+ columns = numsubobjs; \
+ } else if (force_orient[obj->type] == LSTOPO_ORIENT_VERT) { \
+ columns = 1; \
+ rows = numsubobjs; \
+ } else { \
+ unsigned found = 0; \
+ /* Try to find a fitting rectangle */ \
+ for (rows = floor(sqrt(numsubobjs)); rows >= ceil(pow(numsubobjs,0.33)) && rows > 1; rows--) { \
+ columns = numsubobjs / rows; \
+ if (columns > 1 && columns * rows == numsubobjs) { \
+ found = 1; \
+ break; \
+ } \
+ } \
+ if (!found) { \
+ /* Average object size */ \
+ unsigned obj_avgwidth = obj_totwidth / numsubobjs; \
+ unsigned obj_avgheight = obj_totheight / numsubobjs; \
+ /* Ideal total height for spreading that area with RATIO */ \
+ float idealtotheight = (float) sqrt(area/RATIO); \
+ float under_ratio, over_ratio; \
+ /* approximation of number of rows */ \
+ rows = idealtotheight / obj_avgheight; \
+ columns = rows ? (numsubobjs + rows - 1) / rows : 1; \
+ /* Ratio obtained by underestimation */ \
+ under_ratio = (float) (columns * obj_avgwidth) / (rows * obj_avgheight); \
+ \
+ /* try to overestimate too */ \
+ rows++; \
+ columns = (numsubobjs + rows - 1) / rows; \
+ /* Ratio obtained by overestimation */ \
+ over_ratio = (float) (columns * obj_avgwidth) / (rows * obj_avgheight); \
+ /* Did we actually preferred underestimation? (good row/column fit or good ratio) */ \
+ if (rows > 1 && prefer_ratio(under_ratio, over_ratio)) { \
+ rows--; \
+ columns = (numsubobjs + rows - 1) / rows; \
+ } \
+ } \
+ } \
+ \
+ maxheight = 0; \
+ RECURSE_FOR() \
+ /* Newline? */ \
+ if (i && i%columns == 0) { \
+ totwidth = (border) + mywidth; \
+ /* Add the same height to all rows */ \
+ totheight += maxheight + (separator); \
+ maxheight = 0; \
+ } \
+
+#define RECURSE_RECT_END(obj, methods, separator, border) \
+ if (totwidth + width + (separator) > maxwidth) \
+ maxwidth = totwidth + width + (separator); \
+ totwidth += width + (separator); \
+ /* Update maximum height */ \
+ if (height > maxheight) \
+ maxheight = height; \
+ } \
+ /* Remove spurious separator on the right */ \
+ maxwidth -= (separator); \
+ /* Compute total width */ \
+ totwidth = maxwidth + (border); \
+ /* Add the last row's height and border at the bottom */ \
+ totheight += maxheight + (border); \
+ } \
+ /* Make sure there is width for the heading text */ \
+ if (totwidth < textwidth) \
+ totwidth = textwidth; \
+ /* Update returned values */ \
+ *retwidth = totwidth; \
+ *retheight = totheight; \
+} while(0)
+
+/* Pack objects in a grid */
+#define RECURSE_RECT(obj, methods, separator, border) do {\
+ if (obj->arity && obj->children[0]->type == HWLOC_OBJ_NODE) { \
+ /* Nodes shouldn't be put with an arbitrary geometry, as NUMA distances may not be that way */ \
+ int pvert = prefer_vert(topology, logical, level, output, depth, x, y, separator); \
+ if (pvert) \
+ RECURSE_VERT(level, methods, separator, border); \
+ else \
+ RECURSE_HORIZ(level, methods, separator, border); \
+ } else {\
+ RECURSE_RECT_BEGIN(obj, methods, separator, border) \
+ RECURSE_CALL_FUN(methods); \
+ RECURSE_RECT_END(obj, methods, separator, border); \
+ } \
+} while (0)
+
+/* Dynamic programming */
+
+/* Per-object data: width and height of drawing for this object and sub-objects */
+struct dyna_save {
+ unsigned width;
+ unsigned height;
+ unsigned fontsize;
+ unsigned gridsize;
+};
+
+/* Save the computed size */
+#define DYNA_SAVE() do { \
+ if (!level->userdata) { \
+ struct dyna_save *save = malloc(sizeof(*save)); \
+ save->width = *retwidth; \
+ save->height = *retheight; \
+ save->fontsize = fontsize; \
+ save->gridsize = gridsize; \
+ level->userdata = save; \
+ } \
+} while (0)
+
+/* Check whether we already computed the size and we are not actually drawing, in that case return it */
+#define DYNA_CHECK() do { \
+ if (level->userdata && methods == &null_draw_methods) { \
+ struct dyna_save *save = level->userdata; \
+ if (save->fontsize == fontsize && save->gridsize == gridsize) { \
+ *retwidth = save->width; \
+ *retheight = save->height; \
+ } \
+ free(level->userdata); \
+ level->userdata = NULL; \
+ return; \
+ } \
+} while (0)
+
+static int
+prefer_vert(hwloc_topology_t topology, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y, unsigned separator)
+{
+ float horiz_ratio, vert_ratio;
+ unsigned textwidth = 0;
+ unsigned mywidth = 0, myheight = 0;
+ unsigned totwidth, *retwidth = &totwidth, totheight, *retheight = &totheight;
+ RECURSE_HORIZ(level, &null_draw_methods, separator, 0);
+ horiz_ratio = (float)totwidth / totheight;
+ RECURSE_VERT(level, &null_draw_methods, separator, 0);
+ vert_ratio = (float)totwidth / totheight;
+ return force_orient[level->type] == LSTOPO_ORIENT_VERT || (force_orient[level->type] != LSTOPO_ORIENT_HORIZ && prefer_ratio(vert_ratio, horiz_ratio));
+}
+
+static int
+lstopo_obj_snprintf(char *text, size_t textlen, hwloc_obj_t obj, int logical)
+{
+ unsigned idx = logical ? obj->logical_index : obj->os_index;
+ const char *indexprefix = logical ? " L#" : " P#";
+ char typestr[32];
+ char indexstr[32]= "";
+ char attrstr[256];
+ int attrlen;
+ hwloc_obj_type_snprintf(typestr, sizeof(typestr), obj, 0);
+ if (idx != (unsigned)-1 && obj->depth != 0
+ && obj->type != HWLOC_OBJ_PCI_DEVICE
+ && (obj->type != HWLOC_OBJ_BRIDGE || obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST))
+ snprintf(indexstr, sizeof(indexstr), "%s%u", indexprefix, idx);
+ attrlen = hwloc_obj_attr_snprintf(attrstr, sizeof(attrstr), obj, " ", 0);
+ if (attrlen > 0)
+ return snprintf(text, textlen, "%s%s (%s)", typestr, indexstr, attrstr);
+ else
+ return snprintf(text, textlen, "%s%s", typestr, indexstr);
+}
+
+static void
+pci_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned textwidth = gridsize;
+ unsigned textheight = (fontsize ? (fontsize + gridsize) : 0);
+ unsigned myheight = textheight;
+ unsigned mywidth = 0;
+ unsigned totwidth, totheight;
+ char text[64];
+ int n;
+
+ DYNA_CHECK();
+
+ if (fontsize) {
+ n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ textwidth = (n * fontsize * 3) / 4;
+ }
+
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ methods->box(output, PCI_DEVICE_R_COLOR, PCI_DEVICE_G_COLOR, PCI_DEVICE_B_COLOR, depth, x, *retwidth, y, *retheight);
+
+ if (fontsize)
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+os_device_draw(hwloc_topology_t topology __hwloc_attribute_unused, struct draw_methods *methods, int logical __hwloc_attribute_unused, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned textwidth = 0;
+ unsigned totheight = gridsize;
+ unsigned totwidth = gridsize;
+ int n;
+
+ if (fontsize) {
+ n = strlen(level->name);
+ textwidth = (n * fontsize * 3) / 4;
+ totheight = gridsize + fontsize + gridsize;
+ totwidth = gridsize + textwidth + gridsize;
+ }
+
+ *retwidth = totwidth;
+ *retheight = totheight;
+
+ methods->box(output, OS_DEVICE_R_COLOR, OS_DEVICE_G_COLOR, OS_DEVICE_B_COLOR, depth, x, *retwidth, y, *retheight);
+
+ if (fontsize)
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+}
+
+static void
+bridge_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned textwidth = 0;
+ unsigned myheight = 0;
+ /* Room for square, left link and speed */
+ unsigned speedwidth = fontsize ? fontsize + gridsize : 0;
+ unsigned mywidth = 2*gridsize + gridsize + speedwidth;
+ unsigned totwidth, totheight;
+
+ DYNA_CHECK();
+
+ RECURSE_VERT(level, &null_draw_methods, gridsize, 0);
+
+ /* Square and left link */
+ methods->box(output, BRIDGE_R_COLOR, BRIDGE_G_COLOR, BRIDGE_B_COLOR, depth, x, gridsize, y + PCI_HEIGHT/2 - gridsize/2, gridsize);
+ methods->line(output, 0, 0, 0, depth, x + gridsize, y + PCI_HEIGHT/2, x + 2*gridsize, y + PCI_HEIGHT/2);
+
+ if (level->arity > 0) {
+ unsigned bottom = 0, top = 0;
+ RECURSE_BEGIN(level, 0);
+ RECURSE_FOR()
+ unsigned center;
+ RECURSE_CALL_FUN(methods);
+
+ /* Line to PCI device */
+ center = y + totheight + PCI_HEIGHT / 2;
+ if (!top)
+ top = center;
+ bottom = center;
+ methods->line(output, 0, 0, 0, depth, x + 2*gridsize, center, x + 2*gridsize + gridsize + speedwidth, center);
+
+ /* Negotiated link speed */
+ if (fontsize) {
+ float speed = 0.;
+ if (subobjs[i]->type == HWLOC_OBJ_PCI_DEVICE)
+ speed = subobjs[i]->attr->pcidev.linkspeed;
+ if (subobjs[i]->type == HWLOC_OBJ_BRIDGE && subobjs[i]->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_PCI)
+ speed = subobjs[i]->attr->bridge.upstream.pci.linkspeed;
+ if (speed != 0.) {
+ char text[4];
+ snprintf(text, sizeof(text), "%0.1f", subobjs[i]->attr->pcidev.linkspeed);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + 2*gridsize + gridsize, y + totheight, text);
+ }
+ }
+ RECURSE_END_VERT(gridsize, 0);
+
+ /* Vertical line */
+ methods->line(output, 0, 0, 0, depth, x + 2*gridsize, top, x + 2*gridsize, bottom);
+ } else
+ RECURSE_VERT(level, methods, gridsize, 0);
+
+ /* Empty bridges still need some room */
+ if (*retheight < PCI_HEIGHT)
+ *retheight = PCI_HEIGHT;
+
+ DYNA_SAVE();
+}
+
+static void
+pu_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned textwidth = fontsize ? 6*fontsize : gridsize;
+ unsigned mywidth = 0, totwidth;
+
+ DYNA_CHECK();
+
+ RECURSE_RECT(level, &null_draw_methods, 0, gridsize);
+
+ if (hwloc_bitmap_isset(level->online_cpuset, level->os_index))
+ if (!hwloc_bitmap_isset(level->allowed_cpuset, level->os_index))
+ methods->box(output, FORBIDDEN_R_COLOR, FORBIDDEN_G_COLOR, FORBIDDEN_B_COLOR, depth, x, *retwidth, y, *retheight);
+ else {
+ hwloc_bitmap_t bind = hwloc_bitmap_alloc();
+ if (pid != (hwloc_pid_t) -1 && pid != 0)
+ hwloc_get_proc_cpubind(topology, pid, bind, 0);
+ else if (pid == 0)
+ hwloc_get_cpubind(topology, bind, 0);
+ if (bind && hwloc_bitmap_isset(bind, level->os_index))
+ methods->box(output, RUNNING_R_COLOR, RUNNING_G_COLOR, RUNNING_B_COLOR, depth, x, *retwidth, y, *retheight);
+ else
+ methods->box(output, THREAD_R_COLOR, THREAD_G_COLOR, THREAD_B_COLOR, depth, x, *retwidth, y, *retheight);
+ hwloc_bitmap_free(bind);
+ }
+ else
+ methods->box(output, OFFLINE_R_COLOR, OFFLINE_G_COLOR, OFFLINE_B_COLOR, depth, x, *retwidth, y, *retheight);
+
+ if (fontsize) {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ if (hwloc_bitmap_isset(level->online_cpuset, level->os_index))
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ else
+ methods->text(output, 0xff, 0xff, 0xff, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ RECURSE_RECT(level, methods, 0, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+cache_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = gridsize + (fontsize ? (fontsize + gridsize) : 0) + gridsize, totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = fontsize ? ((logical ? level->logical_index : level->os_index) == (unsigned) -1 ? 8*fontsize : 10*fontsize) : 0;
+ /* Do not separate objects when in L1 (SMT) */
+ unsigned separator = level->attr->cache.depth > 1 ? gridsize : 0;
+
+ DYNA_CHECK();
+
+ RECURSE_RECT(level, &null_draw_methods, separator, 0);
+
+ methods->box(output, CACHE_R_COLOR, CACHE_G_COLOR, CACHE_B_COLOR, depth, x, totwidth, y, myheight - gridsize);
+
+ if (fontsize) {
+ char text[64];
+
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ RECURSE_RECT(level, methods, separator, 0);
+
+ DYNA_SAVE();
+}
+
+static void
+core_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = 5*fontsize;
+
+ DYNA_CHECK();
+
+ RECURSE_RECT(level, &null_draw_methods, 0, gridsize);
+
+ methods->box(output, CORE_R_COLOR, CORE_G_COLOR, CORE_B_COLOR, depth, x, totwidth, y, totheight);
+
+ if (fontsize) {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ RECURSE_RECT(level, methods, 0, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+socket_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = 6*fontsize;
+
+ DYNA_CHECK();
+
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ methods->box(output, SOCKET_R_COLOR, SOCKET_G_COLOR, SOCKET_B_COLOR, depth, x, totwidth, y, totheight);
+
+ if (fontsize) {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+node_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ /* Reserve room for the heading memory box and separator */
+ unsigned myheight = (fontsize ? (gridsize + fontsize) : 0) + gridsize + gridsize;
+ /* Currently filled height */
+ unsigned totheight;
+ /* Nothing on the left */
+ unsigned mywidth = 0;
+ /* Currently filled width */
+ unsigned totwidth;
+ /* Width of the heading text, thus minimal width */
+ unsigned textwidth = 16*fontsize;
+
+ /* Check whether dynamic programming can save us time */
+ DYNA_CHECK();
+
+ /* Compute the size needed by sublevels */
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ /* Draw the epoxy box */
+ methods->box(output, NODE_R_COLOR, NODE_G_COLOR, NODE_B_COLOR, depth, x, totwidth, y, totheight);
+ /* Draw the memory box */
+ methods->box(output, MEMORY_R_COLOR, MEMORY_G_COLOR, MEMORY_B_COLOR, depth-1, x + gridsize, totwidth - 2 * gridsize, y + gridsize, myheight - gridsize);
+
+ if (fontsize) {
+ char text[64];
+ /* Output text */
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-2, x + 2 * gridsize, y + 2 * gridsize, text);
+ }
+
+ /* Restart, now really drawing sublevels */
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ /* Save result for dynamic programming */
+ DYNA_SAVE();
+}
+
+static void
+machine_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = 8*fontsize;
+
+ DYNA_CHECK();
+
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ methods->box(output, MACHINE_R_COLOR, MACHINE_G_COLOR, MACHINE_B_COLOR, depth, x, totwidth, y, totheight);
+
+ if (fontsize) {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
+}
+
+#define NETWORK_DRAW_BEGIN() do { \
+ /* network of machines, either horizontal or vertical */ \
+ if (vert) { \
+ mywidth += gridsize; \
+ RECURSE_VERT(level, &null_draw_methods, gridsize, gridsize); \
+ } else \
+ RECURSE_HORIZ(level, &null_draw_methods, gridsize, gridsize); \
+} while(0)
+
+#define NETWORK_DRAW_END() do { \
+ if (vert) { \
+ unsigned top = 0, bottom = 0; \
+ unsigned center; \
+ RECURSE_BEGIN(level, gridsize) \
+ RECURSE_FOR() \
+ RECURSE_CALL_FUN(methods); \
+ center = y + totheight + height / 2; \
+ if (!top) \
+ top = center; \
+ bottom = center; \
+ methods->line(output, 0, 0, 0, depth, x + mywidth, center, x + mywidth + gridsize, center); \
+ RECURSE_END_VERT(gridsize, gridsize); \
+ \
+ methods->line(output, 0, 0, 0, depth, x + mywidth, top, x + mywidth, bottom); \
+ } else { \
+ unsigned left = 0, right = 0; \
+ unsigned center; \
+ RECURSE_BEGIN(level, gridsize) \
+ RECURSE_FOR() \
+ RECURSE_CALL_FUN(methods); \
+ center = x + totwidth + width / 2; \
+ if (!left) \
+ left = center; \
+ right = center; \
+ methods->line(output, 0, 0, 0, depth, center, y + myheight, center, y + myheight + gridsize); \
+ RECURSE_END_HORIZ(gridsize, gridsize); \
+ \
+ methods->line(output, 0, 0, 0, depth, left, y + myheight, right, y + myheight); \
+ } \
+} while(0)
+
+static void
+system_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = 10*fontsize;
+ int vert = prefer_vert(topology, logical, level, output, depth, x, y, gridsize);
+
+ DYNA_CHECK();
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_BEGIN();
+ else
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ methods->box(output, SYSTEM_R_COLOR, SYSTEM_G_COLOR, SYSTEM_B_COLOR, depth, x, totwidth, y, totheight);
+
+ if (fontsize) {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_END();
+ else
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+group_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = level->name ? strlen(level->name) * fontsize : 6*fontsize;
+ int vert = prefer_vert(topology, logical, level, output, depth, x, y, gridsize);
+
+ DYNA_CHECK();
+
+#if 0
+ if (fontsize) {
+ n = lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ textwidth = (n * fontsize * 3) / 4;
+ }
+#endif
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_BEGIN();
+ else
+ RECURSE_RECT(level, &null_draw_methods, gridsize, gridsize);
+
+ methods->box(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR, depth, x, totwidth, y, totheight);
+
+ if (fontsize) {
+ if (level->name) {
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+ } else {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+ }
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_END();
+ else
+ RECURSE_RECT(level, methods, gridsize, gridsize);
+
+ DYNA_SAVE();
+}
+
+static void
+misc_draw(hwloc_topology_t topology, struct draw_methods *methods, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight)
+{
+ unsigned boxheight = gridsize + (fontsize ? (fontsize + gridsize) : 0);
+ unsigned myheight = boxheight + (level->arity?gridsize:0), totheight;
+ unsigned mywidth = 0, totwidth;
+ unsigned textwidth = level->name ? strlen(level->name) * fontsize : 6*fontsize;
+ int vert = prefer_vert(topology, logical, level, output, depth, x, y, gridsize);
+
+ DYNA_CHECK();
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_BEGIN();
+ else
+ RECURSE_HORIZ(level, &null_draw_methods, gridsize, 0);
+
+ methods->box(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR, depth, x, totwidth, y, boxheight);
+
+ if (fontsize) {
+ if (level->name) {
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, level->name);
+ } else {
+ char text[64];
+ lstopo_obj_snprintf(text, sizeof(text), level, logical);
+ methods->text(output, 0, 0, 0, fontsize, depth-1, x + gridsize, y + gridsize, text);
+ }
+ }
+
+ if (level->arity > 1 && (level->children[0]->type == HWLOC_OBJ_MACHINE || !level->children[0]->cpuset))
+ NETWORK_DRAW_END();
+ else
+ RECURSE_HORIZ(level, methods, gridsize, 0);
+
+ DYNA_SAVE();
+}
+
+static void
+fig(hwloc_topology_t topology, struct draw_methods *methods, int logical, int legend, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y)
+{
+ unsigned totwidth, totheight, offset;
+ time_t t;
+ char text[128];
+ char hostname[128] = "";
+ unsigned long hostname_size = sizeof(hostname);
+
+ system_draw(topology, methods, logical, level, output, depth, x, &totwidth, y, &totheight);
+
+ if (totwidth < 20*fontsize)
+ totwidth = 20*fontsize;
+
+ if (legend) {
+ /* Display the hostname, but only if we're showing *this*
+ system */
+ if (hwloc_topology_is_thissystem(topology)) {
+#ifdef HWLOC_WIN_SYS
+ GetComputerName(hostname, &hostname_size);
+#else
+ gethostname(hostname, hostname_size);
+#endif
+ }
+ if (*hostname) {
+ snprintf(text, sizeof(text), "Host: %s", hostname);
+ methods->box(output, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize*4 + fontsize*3);
+ methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize, text);
+ offset = gridsize + fontsize;
+ } else {
+ methods->box(output, 0xff, 0xff, 0xff, depth, 0, totwidth, totheight, gridsize*3 + fontsize*2);
+ offset = 0;
+ }
+
+ /* Display whether we're showing physical or logical IDs */
+ snprintf(text, sizeof(text), "Indexes: %s", logical ? "logical" : "physical");
+ methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset, text);
+
+ /* Display timestamp */
+ t = time(NULL);
+#ifdef HAVE_STRFTIME
+ {
+ struct tm *tmp;
+ tmp = localtime(&t);
+ strftime(text, sizeof(text), "Date: %c", tmp);
+ }
+#else /* HAVE_STRFTIME */
+ {
+ char *date;
+ int n;
+ date = ctime(&t);
+ n = strlen(date);
+ if (n && date[n-1] == '\n') {
+ date[n-1] = 0;
+ }
+ snprintf(text, sizeof(text), "Date: %s", date);
+ }
+#endif /* HAVE_STRFTIME */
+ methods->text(output, 0, 0, 0, fontsize, depth, gridsize, totheight + gridsize + offset + fontsize + gridsize, text);
+ }
+}
+
+/*
+ * given a type, return a pointer FUN to the function that draws it.
+ */
+static foo_draw
+get_type_fun(hwloc_obj_type_t type)
+{
+ switch (type) {
+ case HWLOC_OBJ_SYSTEM: return system_draw;
+ case HWLOC_OBJ_MACHINE: return machine_draw;
+ case HWLOC_OBJ_NODE: return node_draw;
+ case HWLOC_OBJ_SOCKET: return socket_draw;
+ case HWLOC_OBJ_CACHE: return cache_draw;
+ case HWLOC_OBJ_CORE: return core_draw;
+ case HWLOC_OBJ_PU: return pu_draw;
+ case HWLOC_OBJ_GROUP: return group_draw;
+ case HWLOC_OBJ_PCI_DEVICE: return pci_device_draw;
+ case HWLOC_OBJ_OS_DEVICE: return os_device_draw;
+ case HWLOC_OBJ_BRIDGE: return bridge_draw;
+ default:
+ case HWLOC_OBJ_MISC: return misc_draw;
+ case HWLOC_OBJ_TYPE_MAX: assert(0);
+ }
+}
+
+/*
+ * Dummy drawing methods to get the bounding box.
+ */
+
+struct coords {
+ unsigned x;
+ unsigned y;
+};
+
+static void
+getmax_box(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
+{
+ struct coords *coords = output;
+
+ if (x > coords->x)
+ coords->x = x;
+ if (x + width > coords->x)
+ coords->x = x + width;
+ if (y > coords->y)
+ coords->y = y;
+ if (y + height > coords->y)
+ coords->y = y + height;
+}
+
+static void
+getmax_line(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1_arg, unsigned y1_arg, unsigned x2_arg, unsigned y2_arg)
+{
+ struct coords *coords = output;
+
+ if (x1_arg > coords->x)
+ coords->x = x1_arg;
+ if (x2_arg > coords->x)
+ coords->x = x2_arg;
+ if (y1_arg > coords->y)
+ coords->y = y1_arg;
+ if (y2_arg > coords->y)
+ coords->y = y2_arg;
+}
+
+static struct draw_methods getmax_draw_methods = {
+ null_start,
+ null_declare_color,
+ getmax_box,
+ getmax_line,
+ null_text,
+};
+
+void *
+output_draw_start(struct draw_methods *methods, int logical, int legend, hwloc_topology_t topology, void *output)
+{
+ struct coords coords = { 0, 0 };
+ fig(topology, &getmax_draw_methods, logical, legend, hwloc_get_root_obj(topology), &coords, 100, 0, 0);
+ output = methods->start(output, coords.x, coords.y);
+ methods->declare_color(output, 0, 0, 0);
+ methods->declare_color(output, NODE_R_COLOR, NODE_G_COLOR, NODE_B_COLOR);
+ methods->declare_color(output, SOCKET_R_COLOR, SOCKET_G_COLOR, SOCKET_B_COLOR);
+ methods->declare_color(output, MEMORY_R_COLOR, MEMORY_G_COLOR, MEMORY_B_COLOR);
+ methods->declare_color(output, CORE_R_COLOR, CORE_G_COLOR, CORE_B_COLOR);
+ methods->declare_color(output, THREAD_R_COLOR, THREAD_G_COLOR, THREAD_B_COLOR);
+ methods->declare_color(output, RUNNING_R_COLOR, RUNNING_G_COLOR, RUNNING_B_COLOR);
+ methods->declare_color(output, FORBIDDEN_R_COLOR, FORBIDDEN_G_COLOR, FORBIDDEN_B_COLOR);
+ methods->declare_color(output, OFFLINE_R_COLOR, OFFLINE_G_COLOR, OFFLINE_B_COLOR);
+ methods->declare_color(output, CACHE_R_COLOR, CACHE_G_COLOR, CACHE_B_COLOR);
+ methods->declare_color(output, MACHINE_R_COLOR, MACHINE_G_COLOR, MACHINE_B_COLOR);
+ methods->declare_color(output, SYSTEM_R_COLOR, SYSTEM_G_COLOR, SYSTEM_B_COLOR);
+ methods->declare_color(output, MISC_R_COLOR, MISC_G_COLOR, MISC_B_COLOR);
+ methods->declare_color(output, PCI_DEVICE_R_COLOR, PCI_DEVICE_G_COLOR, PCI_DEVICE_B_COLOR);
+ methods->declare_color(output, BRIDGE_R_COLOR, BRIDGE_G_COLOR, BRIDGE_B_COLOR);
+ return output;
+}
+
+void
+output_draw(struct draw_methods *methods, int logical, int legend, hwloc_topology_t topology, void *output)
+{
+ fig(topology, methods, logical, legend, hwloc_get_root_obj(topology), output, 100, 0, 0);
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-fig.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,132 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "lstopo.h"
+
+/* .fig back-end. */
+
+#define FIG_FACTOR 20
+
+static void *
+fig_start(void *output_, int width __hwloc_attribute_unused, int height __hwloc_attribute_unused)
+{
+ FILE *output = output_;
+ fprintf(output, "#FIG 3.2 Produced by hwloc's lstopo\n");
+ fprintf(output, "Landscape\n");
+ fprintf(output, "Center\n");
+ fprintf(output, "Inches\n");
+ fprintf(output, "letter\n");
+ fprintf(output, "100.00\n"); /* magnification */
+ fprintf(output, "Single\n"); /* single page */
+ fprintf(output, "-2\n"); /* no transparent color */
+ fprintf(output, "1200 2\n"); /* 1200 ppi resolution, upper left origin */
+ return output;
+}
+
+static int __hwloc_attribute_const
+rgb_to_fig(int r, int g, int b)
+{
+ if (r == 0xff && g == 0xff && b == 0xff)
+ return 7;
+
+ if (!r && !g && !b)
+ return 0;
+
+ return 32 + rgb_to_color(r, g, b);
+}
+
+static void
+fig_declare_color(void *output_, int r, int g, int b)
+{
+ FILE *output = output_;
+ int color;
+
+ if (r == 0xff && g == 0xff && b == 0xff)
+ return;
+
+ if (!r && !g && !b)
+ return;
+
+ color = declare_color(r, g, b);
+
+ fprintf(output, "0 %d #%02x%02x%02x\n", 32 + color, r, g, b);
+}
+
+static void
+fig_box(void *output_, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height)
+{
+ FILE *output = output_;
+ x *= FIG_FACTOR;
+ y *= FIG_FACTOR;
+ width *= FIG_FACTOR;
+ height *= FIG_FACTOR;
+ fprintf(output, "2 2 0 1 0 %d %u -1 20 0.0 0 0 -1 0 0 5\n\t", rgb_to_fig(r, g, b), depth);
+ fprintf(output, " %u %u", x, y);
+ fprintf(output, " %u %u", x + width, y);
+ fprintf(output, " %u %u", x + width, y + height);
+ fprintf(output, " %u %u", x, y + height);
+ fprintf(output, " %u %u", x, y);
+ fprintf(output, "\n");
+}
+
+static void
+fig_line(void *output_, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+{
+ FILE *output = output_;
+ x1 *= FIG_FACTOR;
+ y1 *= FIG_FACTOR;
+ x2 *= FIG_FACTOR;
+ y2 *= FIG_FACTOR;
+ fprintf(output, "2 1 0 1 0 %d %u -1 -1 0.0 0 0 -1 0 0 2\n\t", rgb_to_fig(r, g, b), depth);
+ fprintf(output, " %u %u", x1, y1);
+ fprintf(output, " %u %u", x2, y2);
+ fprintf(output, "\n");
+}
+
+static void
+fig_text(void *output_, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text)
+{
+ FILE *output = output_;
+ unsigned len = strlen(text);
+ int color = rgb_to_fig(r, g, b);
+ x *= FIG_FACTOR;
+ y *= FIG_FACTOR;
+ size = (size * 16) / 10;
+ fprintf(output, "4 0 %d %u -1 0 %d 0.0 4 %d %u %u %u %s\\001\n", color, depth, size, size * 10, len * size * 10, x, y + size * 10, text);
+}
+
+static struct draw_methods fig_draw_methods = {
+ fig_start,
+ fig_declare_color,
+ fig_box,
+ fig_line,
+ fig_text,
+};
+
+void
+output_fig (hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output = open_file(filename, "w");
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+
+ output = output_draw_start(&fig_draw_methods, logical, legend, topology, output);
+ output_draw(&fig_draw_methods, logical, legend, topology, output);
+
+ if (output != stdout)
+ fclose(output);
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-text.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,795 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2012 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#ifdef HAVE_SETLOCALE
+#include <locale.h>
+#endif /* HAVE_SETLOCALE */
+
+#ifdef HAVE_NL_LANGINFO
+#include <langinfo.h>
+#endif /* HAVE_NL_LANGINFO */
+
+#ifdef HAVE_PUTWC
+#include <wchar.h>
+#endif /* HAVE_PUTWC */
+
+#ifdef HWLOC_HAVE_LIBTERMCAP
+#ifdef HWLOC_USE_NCURSES
+# include <ncurses.h>
+#else
+# include <curses.h>
+#endif
+#include <term.h>
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+
+#include "lstopo.h"
+#include "misc.h"
+
+#define indent(output, i) \
+ fprintf (output, "%*s", (int) i, "");
+
+/*
+ * Console fashion text output
+ */
+
+static void
+output_console_obj (hwloc_obj_t l, FILE *output, int logical, int verbose_mode)
+{
+ char type[32], *attr, phys[32] = "";
+ unsigned idx = logical ? l->logical_index : l->os_index;
+ const char *indexprefix = logical ? " L#" : " P#";
+ if (show_cpuset < 2) {
+ int len;
+ if (l->type == HWLOC_OBJ_MISC && l->name)
+ fprintf(output, "%s", l->name);
+ else {
+ hwloc_obj_type_snprintf (type, sizeof(type), l, verbose_mode-1);
+ fprintf(output, "%s", type);
+ }
+ if (l->depth != 0 && idx != (unsigned)-1
+ && l->type != HWLOC_OBJ_PCI_DEVICE
+ && (l->type != HWLOC_OBJ_BRIDGE || l->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST))
+ fprintf(output, "%s%u", indexprefix, idx);
+ if (logical && l->os_index != (unsigned) -1 &&
+ (verbose_mode >= 2 || l->type == HWLOC_OBJ_PU || l->type == HWLOC_OBJ_NODE))
+ snprintf(phys, sizeof(phys), "P#%u", l->os_index);
+ len = hwloc_obj_attr_snprintf (NULL, 0, l, " ", verbose_mode-1);
+ attr = malloc(len+1);
+ *attr = '\0';
+ hwloc_obj_attr_snprintf (attr, len+1, l, " ", verbose_mode-1);
+ if (*phys || *attr) {
+ const char *separator = *phys != '\0' && *attr!= '\0' ? " " : "";
+ fprintf(output, " (%s%s%s)",
+ phys, separator, attr);
+ }
+ free(attr);
+ if ((l->type == HWLOC_OBJ_OS_DEVICE || verbose_mode >= 2) && l->name && l->type != HWLOC_OBJ_MISC)
+ fprintf(output, " \"%s\"", l->name);
+ }
+ if (!l->cpuset)
+ return;
+ if (show_cpuset == 1)
+ fprintf(output, " cpuset=");
+ if (show_cpuset) {
+ char *cpusetstr;
+ if (taskset)
+ hwloc_bitmap_taskset_asprintf(&cpusetstr, l->cpuset);
+ else
+ hwloc_bitmap_asprintf(&cpusetstr, l->cpuset);
+ fprintf(output, "%s", cpusetstr);
+ free(cpusetstr);
+ }
+}
+
+/* Recursively output topology in a console fashion */
+static void
+output_topology (hwloc_topology_t topology, hwloc_obj_t l, hwloc_obj_t parent, FILE *output, int i, int logical, int verbose_mode)
+{
+ unsigned x;
+ int group_identical = (verbose_mode <= 1) && !show_cpuset;
+ if (group_identical
+ && parent && parent->arity == 1
+ && l->cpuset && parent->cpuset && hwloc_bitmap_isequal(l->cpuset, parent->cpuset)) {
+ /* in non-verbose mode, merge objects with their parent is they are exactly identical */
+ fprintf(output, " + ");
+ } else {
+ if (parent)
+ fprintf(output, "\n");
+ indent (output, 2*i);
+ i++;
+ }
+ output_console_obj(l, output, logical, verbose_mode);
+ if (l->arity || (!i && !l->arity))
+ {
+ for (x=0; x<l->arity; x++)
+ output_topology (topology, l->children[x], l, output, i, logical, verbose_mode);
+ }
+}
+
+/* Recursive so that multiple depth types are properly shown */
+static void
+output_only (hwloc_topology_t topology, hwloc_obj_t l, FILE *output, int logical, int verbose_mode)
+{
+ unsigned x;
+ if (show_only == l->type) {
+ output_console_obj (l, output, logical, verbose_mode);
+ fprintf (output, "\n");
+ }
+ for (x=0; x<l->arity; x++)
+ output_only (topology, l->children[x], output, logical, verbose_mode);
+}
+
+void output_console(hwloc_topology_t topology, const char *filename, int logical, int legend __hwloc_attribute_unused, int verbose_mode)
+{
+ unsigned topodepth;
+ FILE *output;
+
+ if (!filename || !strcmp(filename, "-"))
+ output = stdout;
+ else {
+ output = open_file(filename, "w");
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+ }
+
+ topodepth = hwloc_topology_get_depth(topology);
+
+ /*
+ * if verbose_mode == 0, only print the summary.
+ * if verbose_mode == 1, only print the topology tree.
+ * if verbose_mode > 1, print both.
+ */
+
+ if (show_only != (hwloc_obj_type_t)-1) {
+ if (verbose_mode > 1)
+ fprintf(output, "Only showing %s objects\n", hwloc_obj_type_string(show_only));
+ output_only (topology, hwloc_get_root_obj(topology), output, logical, verbose_mode);
+ } else if (verbose_mode >= 1) {
+ output_topology (topology, hwloc_get_root_obj(topology), NULL, output, 0, logical, verbose_mode);
+ fprintf(output, "\n");
+ }
+
+ if (verbose_mode > 1 || !verbose_mode) {
+ unsigned depth, nbobjs;
+ for (depth = 0; depth < topodepth; depth++) {
+ hwloc_obj_type_t type = hwloc_get_depth_type (topology, depth);
+ nbobjs = hwloc_get_nbobjs_by_depth (topology, depth);
+ indent(output, depth);
+ fprintf (output, "depth %u:\t%u %s%s (type #%u)\n",
+ depth, nbobjs, hwloc_obj_type_string (type), nbobjs>1?"s":"", type);
+ }
+ nbobjs = hwloc_get_nbobjs_by_depth (topology, HWLOC_TYPE_DEPTH_BRIDGE);
+ if (nbobjs)
+ fprintf (output, "Special depth %d:\t%u %s%s (type #%u)\n",
+ HWLOC_TYPE_DEPTH_BRIDGE, nbobjs, "Bridge", nbobjs>1?"s":"", HWLOC_OBJ_BRIDGE);
+ nbobjs = hwloc_get_nbobjs_by_depth (topology, HWLOC_TYPE_DEPTH_PCI_DEVICE);
+ if (nbobjs)
+ fprintf (output, "Special depth %d:\t%u %s%s (type #%u)\n",
+ HWLOC_TYPE_DEPTH_PCI_DEVICE, nbobjs, "PCI Device", nbobjs>1?"s":"", HWLOC_OBJ_PCI_DEVICE);
+ nbobjs = hwloc_get_nbobjs_by_depth (topology, HWLOC_TYPE_DEPTH_OS_DEVICE);
+ if (nbobjs)
+ fprintf (output, "Special depth %d:\t%u %s%s (type #%u)\n",
+ HWLOC_TYPE_DEPTH_OS_DEVICE, nbobjs, "OS Device", nbobjs>1?"s":"", HWLOC_OBJ_OS_DEVICE);
+ }
+
+ if (verbose_mode > 1) {
+ const struct hwloc_distances_s * distances;
+ unsigned depth;
+
+ for (depth = 0; depth < topodepth; depth++) {
+ distances = hwloc_get_whole_distance_matrix_by_depth(topology, depth);
+ if (!distances || !distances->latency)
+ continue;
+ printf("latency matrix between %ss (depth %u) by %s indexes:\n",
+ hwloc_obj_type_string(hwloc_get_depth_type(topology, depth)),
+ depth,
+ logical ? "logical" : "physical");
+ hwloc_utils_print_distance_matrix(topology, hwloc_get_root_obj(topology), distances->nbobjs, depth, distances->latency, logical);
+ }
+ }
+
+ if (verbose_mode > 1) {
+ hwloc_const_bitmap_t complete = hwloc_topology_get_complete_cpuset(topology);
+ hwloc_const_bitmap_t topo = hwloc_topology_get_topology_cpuset(topology);
+ hwloc_const_bitmap_t online = hwloc_topology_get_online_cpuset(topology);
+ hwloc_const_bitmap_t allowed = hwloc_topology_get_allowed_cpuset(topology);
+
+ if (complete && !hwloc_bitmap_isequal(topo, complete)) {
+ hwloc_bitmap_t unknown = hwloc_bitmap_alloc();
+ char *unknownstr;
+ hwloc_bitmap_copy(unknown, complete);
+ hwloc_bitmap_andnot(unknown, unknown, topo);
+ hwloc_bitmap_asprintf(&unknownstr, unknown);
+ fprintf (output, "%d processors not represented in topology: %s\n", hwloc_bitmap_weight(unknown), unknownstr);
+ free(unknownstr);
+ hwloc_bitmap_free(unknown);
+ }
+ if (complete && !hwloc_bitmap_isequal(online, complete)) {
+ hwloc_bitmap_t offline = hwloc_bitmap_alloc();
+ char *offlinestr;
+ hwloc_bitmap_copy(offline, complete);
+ hwloc_bitmap_andnot(offline, offline, online);
+ hwloc_bitmap_asprintf(&offlinestr, offline);
+ fprintf (output, "%d processors offline: %s\n", hwloc_bitmap_weight(offline), offlinestr);
+ free(offlinestr);
+ hwloc_bitmap_free(offline);
+ }
+ if (complete && !hwloc_bitmap_isequal(allowed, online)) {
+ if (!hwloc_bitmap_isincluded(online, allowed)) {
+ hwloc_bitmap_t forbidden = hwloc_bitmap_alloc();
+ char *forbiddenstr;
+ hwloc_bitmap_copy(forbidden, online);
+ hwloc_bitmap_andnot(forbidden, forbidden, allowed);
+ hwloc_bitmap_asprintf(&forbiddenstr, forbidden);
+ fprintf(output, "%d processors online but not allowed: %s\n", hwloc_bitmap_weight(forbidden), forbiddenstr);
+ free(forbiddenstr);
+ hwloc_bitmap_free(forbidden);
+ }
+ if (!hwloc_bitmap_isincluded(allowed, online)) {
+ hwloc_bitmap_t potential = hwloc_bitmap_alloc();
+ char *potentialstr;
+ hwloc_bitmap_copy(potential, allowed);
+ hwloc_bitmap_andnot(potential, potential, online);
+ hwloc_bitmap_asprintf(&potentialstr, potential);
+ fprintf(output, "%d processors allowed but not online: %s\n", hwloc_bitmap_weight(potential), potentialstr);
+ free(potentialstr);
+ hwloc_bitmap_free(potential);
+ }
+ }
+ if (!hwloc_topology_is_thissystem(topology))
+ fprintf (output, "Topology not from this system\n");
+ }
+
+ if (output != stdout)
+ fclose(output);
+}
+
+void output_synthetic(hwloc_topology_t topology, const char *filename, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output;
+ hwloc_obj_t obj = hwloc_get_root_obj(topology);
+ int arity;
+
+ if (!filename || !strcmp(filename, "-"))
+ output = stdout;
+ else {
+ output = open_file(filename, "w");
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+ }
+
+ if (!obj->symmetric_subtree) {
+ fprintf(stderr, "Cannot output assymetric topology in synthetic format\n");
+ return;
+ }
+
+ arity = obj->arity;
+ while (arity) {
+ obj = obj->first_child;
+ fprintf(output, "%s:%u ", hwloc_obj_type_string(obj->type), arity);
+ arity = obj->arity;
+ }
+ fprintf(output, "\n");
+}
+
+/*
+ * Pretty text output
+ */
+
+/* Uses unicode bars if available */
+#ifdef HAVE_PUTWC
+typedef wchar_t character;
+#define PRIchar "lc"
+#define putcharacter(c,f) putwc(c,f)
+#else /* HAVE_PUTWC */
+typedef unsigned char character;
+#define PRIchar "c"
+#define putcharacter(c,f) putc(c,f)
+#endif /* HAVE_PUTWC */
+
+#ifdef HWLOC_HAVE_LIBTERMCAP
+static int myputchar(int c) {
+ return putcharacter(c, stdout);
+}
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+
+/* Off-screen rendering buffer */
+struct cell {
+ character c;
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ int fr, fg, fb;
+ int br, bg, bb;
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+};
+
+struct display {
+ struct cell **cells;
+ int width;
+ int height;
+ int utf8;
+};
+
+/* Allocate the off-screen buffer */
+static void *
+text_start(void *output __hwloc_attribute_unused, int width, int height)
+{
+ int j, i;
+ struct display *disp = malloc(sizeof(*disp));
+ /* terminals usually have narrow characters, so let's make them wider */
+ width /= (gridsize/2);
+ height /= gridsize;
+ disp->cells = malloc(height * sizeof(*disp->cells));
+ disp->width = width;
+ disp->height = height;
+ for (j = 0; j < height; j++) {
+ disp->cells[j] = calloc(width, sizeof(**disp->cells));
+ for (i = 0; i < width; i++)
+ disp->cells[j][i].c = ' ';
+ }
+#ifdef HAVE_NL_LANGINFO
+ disp->utf8 = !strcmp(nl_langinfo(CODESET), "UTF-8");
+#endif /* HAVE_NL_LANGINFO */
+ return disp;
+}
+
+#ifdef HWLOC_HAVE_LIBTERMCAP
+/* Standard terminfo strings */
+static char *initc = NULL, *initp = NULL;
+
+/* Set text color to bright white or black according to the background */
+static int set_textcolor(int rr, int gg, int bb)
+{
+ if (!initc && !initp && rr + gg + bb < 2) {
+ if (enter_bold_mode)
+ tputs(enter_bold_mode, 1, myputchar);
+ return 7;
+ } else {
+ if (exit_attribute_mode)
+ tputs(exit_attribute_mode, 1, myputchar);
+ return 0;
+ }
+}
+
+static void
+set_color(int fr, int fg, int fb, int br, int bg, int bb)
+{
+ char *toput;
+ int color, textcolor;
+
+ if (initc || initp) {
+ /* Can set rgb color, easy */
+ textcolor = rgb_to_color(fr, fg, fb) + 16;
+ color = rgb_to_color(br, bg, bb) + 16;
+ } else {
+ /* Magic trigger: it seems to separate colors quite well */
+ int brr = br >= 0xe0;
+ int bgg = bg >= 0xe0;
+ int bbb = bb >= 0xe0;
+
+ if (set_a_background)
+ /* ANSI colors */
+ color = (brr << 0) | (bgg << 1) | (bbb << 2);
+ else
+ /* Legacy colors */
+ color = (brr << 2) | (bgg << 1) | (bbb << 0);
+ textcolor = set_textcolor(brr, bgg, bbb);
+ }
+
+ /* And now output magic string to TTY */
+ if (set_a_foreground) {
+ /* foreground */
+ if ((toput = tparm(set_a_foreground, textcolor, 0, 0, 0, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ /* background */
+ if ((toput = tparm(set_a_background, color, 0, 0, 0, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ } else if (set_foreground) {
+ /* foreground */
+ if ((toput = tparm(set_foreground, textcolor, 0, 0, 0, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ /* background */
+ if ((toput = tparm(set_background, color, 0, 0, 0, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ } else if (set_color_pair) {
+ /* pair */
+ if ((toput = tparm(set_color_pair, color, 0, 0, 0, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ }
+}
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+
+/* We we can, allocate rgb colors */
+static void
+text_declare_color(void *output __hwloc_attribute_unused, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused)
+{
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ int color = declare_color(r, g, b);
+ /* Yes, values seem to range from 0 to 1000 inclusive */
+ int rr = (r * 1001) / 256;
+ int gg = (g * 1001) / 256;
+ int bb = (b * 1001) / 256;
+ char *toput;
+
+ if (initc) {
+ if ((toput = tparm(initc, color + 16, rr, gg, bb, 0, 0, 0, 0, 0)))
+ tputs(toput, 1, myputchar);
+ } else if (initp) {
+ if ((toput = tparm(initp, color + 16, 0, 0, 0, rr, gg, bb, 0, 0)))
+ tputs(toput, 1, myputchar);
+ }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+}
+
+/* output text, erasing any previous content */
+static void
+put(struct display *disp, int x, int y, character c, int fr __hwloc_attribute_unused, int fg __hwloc_attribute_unused, int fb __hwloc_attribute_unused, int br __hwloc_attribute_unused, int bg __hwloc_attribute_unused, int bb __hwloc_attribute_unused)
+{
+ if (x >= disp->width || y >= disp->height) {
+ /* fprintf(stderr, "%"PRIchar" overflowed to (%d,%d)\n", c, x, y); */
+ return;
+ }
+ disp->cells[y][x].c = c;
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ if (fr != -1) {
+ disp->cells[y][x].fr = fr;
+ disp->cells[y][x].fg = fg;
+ disp->cells[y][x].fb = fb;
+ }
+ if (br != -1) {
+ disp->cells[y][x].br = br;
+ disp->cells[y][x].bg = bg;
+ disp->cells[y][x].bb = bb;
+ }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+}
+
+/* Where bars of a character go to */
+enum {
+ up = (1<<0),
+ down = (1<<1),
+ left = (1<<2),
+ right = (1<<3)
+};
+
+/* Convert a bar character into its directions */
+static int
+to_directions(struct display *disp, character c)
+{
+#ifdef HAVE_PUTWC
+ if (disp->utf8) {
+ switch (c) {
+ case L'\x250c': return down|right;
+ case L'\x2510': return down|left;
+ case L'\x2514': return up|right;
+ case L'\x2518': return up|left;
+ case L'\x2500': return left|right;
+ case L'\x2502': return down|up;
+ case L'\x2577': return down;
+ case L'\x2575': return up;
+ case L'\x2576': return right;
+ case L'\x2574': return left;
+ case L'\x251c': return down|up|right;
+ case L'\x2524': return down|up|left;
+ case L'\x252c': return down|left|right;
+ case L'\x2534': return up|left|right;
+ case L'\x253c': return down|up|left|right;
+ default: return 0;
+ }
+ } else
+#endif /* HAVE_PUTWC */
+ {
+ switch (c) {
+ case L'-': return left|right;
+ case L'|': return down|up;
+ case L'/':
+ case L'\\':
+ case L'+': return down|up|left|right;
+ default: return 0;
+ }
+ }
+}
+
+/* Produce a bar character given the wanted directions */
+static character
+from_directions(struct display *disp, int direction)
+{
+#ifdef HAVE_PUTWC
+ if (disp->utf8) {
+ switch (direction) {
+ case down|right: return L'\x250c';
+ case down|left: return L'\x2510';
+ case up|right: return L'\x2514';
+ case up|left: return L'\x2518';
+ case left|right: return L'\x2500';
+ case down|up: return L'\x2502';
+ case down: return L'\x2577';
+ case up: return L'\x2575';
+ case right: return L'\x2576';
+ case left: return L'\x2574';
+ case down|up|right: return L'\x251c';
+ case down|up|left: return L'\x2524';
+ case down|left|right: return L'\x252c';
+ case up|left|right: return L'\x2534';
+ case down|up|left|right: return L'\x253c';
+ default: return L' ';
+ };
+ } else
+#endif /* HAVE_PUTWC */
+ {
+ switch (direction) {
+ case down|right: return '/';
+ case down|left: return '\\';
+ case up|right: return '\\';
+ case up|left: return '/';
+ case left|right: return '-';
+ case down|up: return '|';
+ case down: return '|';
+ case up: return '|';
+ case right: return '-';
+ case left: return '-';
+ case down|up|right: return '+';
+ case down|up|left: return '+';
+ case down|left|right: return '+';
+ case up|left|right: return '+';
+ case down|up|left|right: return '+';
+ default: return ' ';
+ };
+ }
+}
+
+/* output bars, merging with existing bars: `andnot' are removed, `or' are added */
+static void
+merge(struct display *disp, int x, int y, int or, int andnot, int r, int g, int b)
+{
+ character current;
+ int directions;
+ if (x >= disp->width || y >= disp->height) {
+ /* fprintf(stderr, "|%x &~%x overflowed to (%d,%d)\n", or, andnot, x, y); */
+ return;
+ }
+ current = disp->cells[y][x].c;
+ directions = (to_directions(disp, current) & ~andnot) | or;
+ put(disp, x, y, from_directions(disp, directions), -1, -1, -1, r, g, b);
+}
+
+/* Now we can implement the standard drawing helpers */
+static void
+text_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned width, unsigned y1, unsigned height)
+{
+ struct display *disp = output;
+ unsigned i, j;
+ unsigned x2, y2;
+ x1 /= (gridsize/2);
+ width /= (gridsize/2);
+ y1 /= gridsize;
+ height /= gridsize;
+ x2 = x1 + width - 1;
+ y2 = y1 + height - 1;
+
+ /* Corners */
+ merge(disp, x1, y1, down|right, 0, r, g, b);
+ merge(disp, x2, y1, down|left, 0, r, g, b);
+ merge(disp, x1, y2, up|right, 0, r, g, b);
+ merge(disp, x2, y2, up|left, 0, r, g, b);
+
+ for (i = 1; i < width - 1; i++) {
+ /* upper line */
+ merge(disp, x1 + i, y1, left|right, down, r, g, b);
+ /* lower line */
+ merge(disp, x1 + i, y2, left|right, up, r, g, b);
+ }
+ for (j = 1; j < height - 1; j++) {
+ /* left line */
+ merge(disp, x1, y1 + j, up|down, right, r, g, b);
+ /* right line */
+ merge(disp, x2, y1 + j, up|down, left, r, g, b);
+ }
+ for (j = y1 + 1; j < y2; j++) {
+ for (i = x1 + 1; i < x2; i++) {
+ put(disp, i, j, ' ', -1, -1, -1, r, g, b);
+ }
+ }
+}
+
+static void
+text_line(void *output, int r __hwloc_attribute_unused, int g __hwloc_attribute_unused, int b __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+{
+ struct display *disp = output;
+ unsigned i, j, z;
+ x1 /= (gridsize/2);
+ y1 /= gridsize;
+ x2 /= (gridsize/2);
+ y2 /= gridsize;
+
+ /* Canonicalize coordinates */
+ if (x1 > x2) {
+ z = x1;
+ x1 = x2;
+ x2 = z;
+ }
+ if (y1 > y2) {
+ z = y1;
+ y1 = y2;
+ y2 = z;
+ }
+
+ /* vertical/horizontal should be enough, but should mix with existing
+ * characters for better output ! */
+
+ if (x1 == x2) {
+ /* Vertical */
+ if (y1 == y2) {
+ /* Hu ?! That's a point, let's do nothing... */
+ } else {
+ /* top */
+ merge(disp, x1, y1, down, 0, -1, -1, -1);
+ /* bottom */
+ merge(disp, x1, y2, up, 0, -1, -1, -1);
+ }
+ for (j = y1 + 1; j < y2; j++)
+ merge(disp, x1, j, down|up, 0, -1, -1, -1);
+ } else if (y1 == y2) {
+ /* Horizontal */
+ /* left */
+ merge(disp, x1, y1, right, 0, -1, -1, -1);
+ /* right */
+ merge(disp, x2, y1, left, 0, -1, -1, -1);
+ for (i = x1 + 1; i < x2; i++)
+ merge(disp, i, y1, left|right, 0, -1, -1, -1);
+ } else {
+ /* Unsupported, sorry */
+ }
+}
+
+static void
+text_text(void *output, int r, int g, int b, int size __hwloc_attribute_unused, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
+{
+ struct display *disp = output;
+ x /= (gridsize/2);
+ y /= gridsize;
+
+#if defined(HAVE_PUTWC) && !defined(__MINGW32__)
+ {
+ size_t len = strlen(text) + 1;
+ wchar_t *wbuf = malloc(len * sizeof(wchar_t)), *wtext;
+ swprintf(wbuf, len, L"%s", text);
+ for (wtext = wbuf ; *wtext; wtext++)
+ put(disp, x++, y, *wtext, r, g, b, -1, -1, -1);
+ free(wbuf);
+ }
+#else
+ for ( ; *text; text++)
+ put(disp, x++, y, *text, r, g, b, -1, -1, -1);
+#endif
+}
+
+static struct draw_methods text_draw_methods = {
+ text_start,
+ text_declare_color,
+ text_box,
+ text_line,
+ text_text,
+};
+
+void output_text(hwloc_topology_t topology, const char *filename, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ FILE *output;
+ struct display *disp;
+ int i, j;
+ int lfr, lfg, lfb; /* Last foreground color */
+ int lbr, lbg, lbb; /* Last background color */
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ int term = 0;
+ char *tmp;
+#endif
+
+ if (!filename || !strcmp(filename, "-"))
+ output = stdout;
+ else {
+ output = open_file(filename, "w");
+ if (!output) {
+ fprintf(stderr, "Failed to open %s for writing (%s)\n", filename, strerror(errno));
+ return;
+ }
+ }
+
+ /* Try to use utf-8 characters */
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_ALL, "");
+#endif /* HAVE_SETLOCALE */
+
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ /* If we are outputing to a tty, use colors */
+ if (output == stdout && isatty(STDOUT_FILENO)) {
+ term = !setupterm(NULL, STDOUT_FILENO, NULL);
+
+ if (term) {
+ /* reset colors */
+ if (orig_colors)
+ tputs(orig_colors, 1, myputchar);
+
+ /* Get terminfo(5) strings */
+ initp = initialize_pair;
+ if (max_pairs <= 16 || !initp || !set_color_pair) {
+ /* Can't use max_pairs to define our own colors */
+ initp = NULL;
+ if (max_colors > 16)
+ if (can_change)
+ initc = initialize_color;
+ }
+ /* Prevent a trivial compiler warning because the param of
+ tgetflag is (char*), not (const char*). */
+ tmp = strdup("lhs");
+ if (tgetflag(tmp)) {
+ /* Sorry, I'm lazy to convert colors and I don't know any terminal
+ * using LHS anyway */
+ initc = initp = 0;
+ }
+ free(tmp);
+ }
+ }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+
+ disp = output_draw_start(&text_draw_methods, logical, legend, topology, output);
+ output_draw(&text_draw_methods, logical, legend, topology, disp);
+
+ lfr = lfg = lfb = -1;
+ lbr = lbg = lbb = -1;
+ for (j = 0; j < disp->height; j++) {
+ for (i = 0; i < disp->width; i++) {
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ if (term) {
+ /* TTY output, use colors */
+ int fr = disp->cells[j][i].fr;
+ int fg = disp->cells[j][i].fg;
+ int fb = disp->cells[j][i].fb;
+ int br = disp->cells[j][i].br;
+ int bg = disp->cells[j][i].bg;
+ int bb = disp->cells[j][i].bb;
+
+ /* Avoid too much work for the TTY */
+ if (fr != lfr || fg != lfg || fb != lfb
+ || br != lbr || bg != lbg || bb != lbb) {
+ set_color(fr, fg, fb, br, bg, bb);
+ lfr = fr;
+ lfg = fg;
+ lfb = fb;
+ lbr = br;
+ lbg = bg;
+ lbb = bb;
+ }
+ }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+ putcharacter(disp->cells[j][i].c, output);
+ }
+#ifdef HWLOC_HAVE_LIBTERMCAP
+ /* Keep the rest of the line as default */
+ if (term && orig_pair) {
+ lfr = lfg = lfb = -1;
+ lbr = lbg = lbb = -1;
+ tputs(orig_pair, 1, myputchar);
+ }
+#endif /* HWLOC_HAVE_LIBTERMCAP */
+ putcharacter('\n', output);
+ }
+
+ if (output != stdout)
+ fclose(output);
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-windows.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,304 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <hwloc.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <windows.h>
+#include <windowsx.h>
+
+#include "lstopo.h"
+
+/* windows back-end. */
+
+static struct color {
+ int r, g, b;
+ HGDIOBJ brush;
+} *colors;
+
+static int numcolors;
+
+static HGDIOBJ
+rgb_to_brush(int r, int g, int b)
+{
+ int i;
+
+ for (i = 0; i < numcolors; i++)
+ if (colors[i].r == r && colors[i].g == g && colors[i].b == b)
+ return colors[i].brush;
+
+ fprintf(stderr, "color #%02x%02x%02x not declared\n", r, g, b);
+ exit(EXIT_FAILURE);
+}
+
+struct draw_methods windows_draw_methods;
+
+static hwloc_topology_t the_topology;
+static int the_logical;
+static int the_legend;
+static int state, control;
+static int x, y, x_delta, y_delta;
+static int finish;
+static int the_width, the_height;
+static int win_width, win_height;
+static unsigned int the_fontsize, the_gridsize;
+
+static void
+windows_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height);
+
+static LRESULT CALLBACK
+WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
+{
+ int redraw = 0;
+ switch (message) {
+ case WM_PAINT: {
+ HDC hdc;
+ PAINTSTRUCT ps;
+ hdc = BeginPaint(hwnd, &ps);
+ windows_box(&ps, 0xff, 0xff, 0xff, 0, 0, win_width, 0, win_height);
+ output_draw(&windows_draw_methods, the_logical, the_legend, the_topology, &ps);
+ EndPaint(hwnd, &ps);
+ break;
+ }
+ case WM_LBUTTONDOWN:
+ state = 1;
+ x = GET_X_LPARAM(lparam);
+ y = GET_Y_LPARAM(lparam);
+ break;
+ case WM_LBUTTONUP:
+ state = 0;
+ break;
+ case WM_MOUSEMOVE:
+ if (!(wparam & MK_LBUTTON))
+ state = 0;
+ if (state) {
+ int new_x = GET_X_LPARAM(lparam);
+ int new_y = GET_Y_LPARAM(lparam);
+ x_delta -= new_x - x;
+ y_delta -= new_y - y;
+ x = new_x;
+ y = new_y;
+ redraw = 1;
+ }
+ break;
+ case WM_KEYDOWN:
+ switch (wparam) {
+ case 'q':
+ case 'Q':
+ case VK_ESCAPE:
+ finish = 1;
+ break;
+ case VK_LEFT:
+ x_delta -= win_width/10;
+ redraw = 1;
+ break;
+ case VK_RIGHT:
+ x_delta += win_width/10;
+ redraw = 1;
+ break;
+ case VK_UP:
+ y_delta -= win_height/10;
+ redraw = 1;
+ break;
+ case VK_DOWN:
+ y_delta += win_height/10;
+ redraw = 1;
+ break;
+ case VK_PRIOR:
+ if (control) {
+ x_delta -= win_width;
+ redraw = 1;
+ } else {
+ y_delta -= win_height;
+ redraw = 1;
+ }
+ break;
+ case VK_NEXT:
+ if (control) {
+ x_delta += win_width;
+ redraw = 1;
+ } else {
+ y_delta += win_height;
+ redraw = 1;
+ }
+ break;
+ case VK_HOME:
+ x_delta = 0;
+ y_delta = 0;
+ redraw = 1;
+ break;
+ case VK_END:
+ x_delta = INT_MAX;
+ y_delta = INT_MAX;
+ redraw = 1;
+ break;
+ case VK_CONTROL:
+ control = 1;
+ break;
+ }
+ break;
+ case WM_KEYUP:
+ switch (wparam) {
+ case VK_CONTROL:
+ control = 0;
+ break;
+ }
+ break;
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ return 0;
+ case WM_SIZE:
+ win_width = LOWORD(lparam);
+ win_height = HIWORD(lparam);
+ redraw = 1;
+ break;
+ }
+ if (redraw) {
+ if (x_delta > the_width - win_width)
+ x_delta = the_width - win_width;
+ if (y_delta > the_height - win_height)
+ y_delta = the_height - win_height;
+ if (x_delta < 0)
+ x_delta = 0;
+ if (y_delta < 0)
+ y_delta = 0;
+ if (win_width > the_width && win_height > the_height) {
+ fontsize = the_fontsize;
+ gridsize = the_gridsize;
+ if (win_width > the_width) {
+ fontsize = the_fontsize * win_width / the_width;
+ gridsize = the_gridsize * win_width / the_width;
+ }
+ if (win_height > the_height) {
+ unsigned int new_fontsize = the_fontsize * win_height / the_height;
+ unsigned int new_gridsize = the_gridsize * win_height / the_height;
+ if (new_fontsize < fontsize)
+ fontsize = new_fontsize;
+ if (new_gridsize < gridsize)
+ gridsize = new_gridsize;
+ }
+ }
+ RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
+ }
+ return DefWindowProc(hwnd, message, wparam, lparam);
+}
+
+static void *
+windows_start(void *output_ __hwloc_attribute_unused, int width, int height)
+{
+ WNDCLASS wndclass = {
+ .hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH),
+ .hCursor = LoadCursor(NULL, IDC_SIZEALL),
+ .hIcon = LoadIcon(NULL, IDI_APPLICATION),
+ .lpfnWndProc = WndProc,
+ .lpszClassName = "lstopo",
+ };
+ HWND toplevel;
+
+ win_width = width + 2*GetSystemMetrics(SM_CXSIZEFRAME);
+ win_height = height + 2*GetSystemMetrics(SM_CYSIZEFRAME) + GetSystemMetrics(SM_CYCAPTION);
+
+ if (win_width > GetSystemMetrics(SM_CXFULLSCREEN))
+ win_width = GetSystemMetrics(SM_CXFULLSCREEN);
+
+ if (win_height > GetSystemMetrics(SM_CYFULLSCREEN))
+ win_height = GetSystemMetrics(SM_CYFULLSCREEN);
+
+ RegisterClass(&wndclass);
+ toplevel = CreateWindow("lstopo", "lstopo", WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ win_width, win_height, NULL, NULL, NULL, NULL);
+
+ the_width = width;
+ the_height = height;
+
+ the_fontsize = fontsize;
+ the_gridsize = gridsize;
+
+ ShowWindow(toplevel, SW_SHOWDEFAULT);
+
+ return toplevel;
+}
+
+static void
+windows_declare_color(void *output_ __hwloc_attribute_unused, int r, int g, int b)
+{
+ HBRUSH brush;
+ COLORREF color = RGB(r, g, b);
+
+ brush = CreateSolidBrush(color);
+ if (!brush) {
+ fprintf(stderr,"Could not allocate color %02x%02x%02x\n", r, g, b);
+ exit(EXIT_FAILURE);
+ }
+
+ colors = realloc(colors, sizeof(*colors) * (numcolors + 1));
+ colors[numcolors].r = r;
+ colors[numcolors].g = g;
+ colors[numcolors].b = b;
+ colors[numcolors].brush = (HGDIOBJ) brush;
+ numcolors++;
+}
+
+static void
+windows_box(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned width, unsigned y, unsigned height)
+{
+ PAINTSTRUCT *ps = output;
+ SelectObject(ps->hdc, rgb_to_brush(r, g, b));
+ SetBkColor(ps->hdc, RGB(r, g, b));
+ Rectangle(ps->hdc, x - x_delta, y - y_delta, x + width - x_delta, y + height - y_delta);
+}
+
+static void
+windows_line(void *output, int r, int g, int b, unsigned depth __hwloc_attribute_unused, unsigned x1, unsigned y1, unsigned x2, unsigned y2)
+{
+ PAINTSTRUCT *ps = output;
+ SelectObject(ps->hdc, rgb_to_brush(r, g, b));
+ MoveToEx(ps->hdc, x1 - x_delta, y1 - y_delta, NULL);
+ LineTo(ps->hdc, x2 - x_delta, y2 - y_delta);
+}
+
+static void
+windows_text(void *output, int r, int g, int b, int size, unsigned depth __hwloc_attribute_unused, unsigned x, unsigned y, const char *text)
+{
+ PAINTSTRUCT *ps = output;
+ HFONT font;
+ SetTextColor(ps->hdc, RGB(r, g, b));
+ font = CreateFont(size, 0, 0, 0, 0, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, NULL);
+ SelectObject(ps->hdc, (HGDIOBJ) font);
+ TextOut(ps->hdc, x - x_delta, y - y_delta, text, strlen(text));
+ DeleteObject(font);
+}
+
+struct draw_methods windows_draw_methods = {
+ windows_start,
+ windows_declare_color,
+ windows_box,
+ windows_line,
+ windows_text,
+};
+
+void
+output_windows (hwloc_topology_t topology, const char *filename __hwloc_attribute_unused, int logical, int legend, int verbose_mode __hwloc_attribute_unused)
+{
+ HWND toplevel;
+ the_topology = topology;
+ the_logical = logical;
+ the_legend = legend;
+ toplevel = output_draw_start(&windows_draw_methods, logical, legend, topology, NULL);
+ UpdateWindow(toplevel);
+ MSG msg;
+ while (!finish && GetMessage(&msg, NULL, 0, 0)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo-xml.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,25 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+
+#include <hwloc.h>
+#include <string.h>
+
+#include "lstopo.h"
+
+void output_xml(hwloc_topology_t topology, const char *filename, int logical __hwloc_attribute_unused, int legend __hwloc_attribute_unused, int verbose_mode __hwloc_attribute_unused)
+{
+ if (!filename || !strcasecmp(filename, "-.xml"))
+ filename = "-";
+
+ if (hwloc_topology_export_xml(topology, filename) < 0) {
+ fprintf(stderr, "Failed to export XML to %s (%s)\n", filename, strerror(errno));
+ return;
+ }
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.1in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,395 @@
+.\" -*- nroff -*-
+.\" Copyright © 2009-2011 inria. All rights reserved.
+.\" Copyright © 2009-2010 Université of Bordeaux
+.\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
+.\" See COPYING in top-level directory.
+.TH LSTOPO "1" "#HWLOC_DATE#" "#PACKAGE_VERSION#" "#PACKAGE_NAME#"
+.SH NAME
+lstopo \- Show the topology of the system (note that hwloc-bind(1)
+provides a detailed explanation of the hwloc system; it should be read
+before reading this man page).
+.
+.\" **************************
+.\" Synopsis Section
+.\" **************************
+.SH SYNOPSIS
+.
+.B lstopo
+[ \fIoptions \fR]... [ \fIfilename \fR]
+.
+.\" **************************
+.\" Options Section
+.\" **************************
+.SH OPTIONS
+.
+.TP
+\fB\-\-of\fR <format>, \fB\-\-output\-format\fR <format>
+Enforce the output in the given format.
+See the OUTPUT FORMATS section below.
+.TP
+\fB\-i\fR <file>, \fB\-\-input\fR <file>
+Read topology from XML file <file> (instead of discovering the
+topology on the local machine). If <file> is "\-", the standard input
+is used. XML support must have been compiled in to hwloc for this
+option to be usable.
+.TP
+\fB\-i\fR <directory>, \fB\-\-input\fR <directory>
+Read topology from the chroot specified by <directory> (instead of
+discovering the topology on the local machine). This option is
+generally only available on Linux. The chroot was usually created
+by gathering another machine topology with hwloc-gather-topology.
+.TP
+\fB\-i\fR <specification>, \fB\-\-input\fR <specification>
+Simulate a fake hierarchy (instead of discovering the topology on the
+local machine). If <specification> is "node:2 pu:3", the topology will
+contain two NUMA nodes with 3 processing units in each of them.
+The <specification> string must end with a number of PUs.
+.TP
+\fB\-\-if\fR <format>, \fB\-\-input\-format\fR <format>
+Enforce the input in the given format, among \fBxml\fR, \fBfsroot\fR
+and \fBsynthetic\fR.
+.TP
+\fB\-v\fR \fB\-\-verbose\fR
+Include additional detail.
+.TP
+\fB\-s\fR \fB\-\-silent\fR
+Reduce the amount of details to show.
+.TP
+\fB\-l\fR \fB\-\-logical\fR
+Display hwloc logical indexes instead of physical/OS indexes (default for console output).
+These indexes are prefixed with "L#".
+The physical indexes of some objects (PU and Node by default, all
+objects if verbose) will appear as object attribute "P#...".
+.TP
+\fB\-p\fR \fB\-\-physical\fR
+Display OS/physical indexes instead of hwloc logical indexes (default for graphical output).
+These indexes are prefixed with "P#" instead of "L#" in the console output.
+.TP
+\fB\-c\fR \fB\-\-cpuset\fR
+Display the cpuset of each object.
+.TP
+\fB\-C\fR \fB\-\-cpuset\-only\fR
+Only display the cpuset of each object; do not display anything else
+about the object.
+.TP
+\fB\-\-taskset\fR
+Show CPU set strings in the format recognized by the taskset command-line
+program instead of hwloc-specific CPU set string format.
+This option should be combined with \fB\-\-cpuset\fR or \fB\-\-cpuset\-only\fR,
+otherwise it will imply \fB\-\-cpuset\fR.
+.TP
+\fB\-\-only\fR <type>
+Only show objects of the given type in the textual output.
+.TP
+\fB\-\-ignore\fR <type>
+Ignore all objects of type <type> in the topology.
+.TP
+\fB\-\-no\-caches\fR
+Do not show caches.
+.TP
+\fB\-\-no\-useless\-caches\fR
+Do not show caches which do not have a hierarchical impact.
+.TP
+\fB\-\-whole\-system\fR
+Do not consider administration limitations.
+.TP
+\fB\-\-merge\fR
+Do not show levels that do not have a hierarchical impact.
+.TP
+\fB\-\-restrict\fR <cpuset>
+Restrict the topology to the given cpuset.
+.TP
+\fB\-\-restrict\fR binding
+Restrict the topology to the current process binding.
+This option requires the use of the actual current machine topology
+(or any other topology with \fB\-\-thissystem\fR or with
+HWLOC_THISSYSTEM set to 1 in the environment).
+.TP
+\fB\-\-no\-io\fB
+Do not show any I/O device or bridge.
+By default, common devices (GPUs, NICs, block devices, ...) and
+interesting bridges are shown.
+.TP
+\fB\-\-no\-bridges\fB
+Do not show any I/O bridge except hostbridges.
+By default, common devices (GPUs, NICs, block devices, ...) and
+interesting bridges are shown.
+.TP
+\fB\-\-whole\-io\fB
+Show all I/O devices and bridges.
+By default, only common devices (GPUs, NICs, block devices, ...) and
+interesting bridges are shown.
+.TP
+\fB\-\-thissystem\fR
+Assume that the selected backend provides the topology for the
+system on which we are running.
+This is useful when using \fB\-\-restrict\fR binding and loading
+a custom topology such as an XML file.
+.TP
+\fB\-\-pid\fR <pid>
+Detect topology as seen by process <pid>, i.e. as if process <pid> did the
+discovery itself, and show its current binding. Note that this can for instance
+change the set of allowed processors. If 0 is given as pid, the current binding for the lstopo process will be shown.
+.TP
+\fB\-\-ps\fR \fB\-\-top\fR
+Show existing processes as misc objects in the output. To avoid uselessly
+cluttering the output, only processes that are restricted to some part of the
+machine are shown. On Linux, kernel threads are not shown.
+If many processes appear, the output may become hard to read anyway,
+making the hwloc-ps program more practical.
+.TP
+\fB\-\-fontsize\fR <size>
+Set size of text font.
+.TP
+\fB\-\-gridsize\fR <size>
+Set size of margin between elements.
+.TP
+\fB\-\-horiz\fR, \fB\-\-horiz\fR=<type1,...>
+Horizontal graphical layout instead of nearly 4/3 ratio.
+If a comma-separated list of types is given, the layout only
+applies to the corresponding containers.
+.TP
+\fB\-\-vert\fR, \fB\-\-vert\fR=<type1,...>
+Vertical graphical layout instead of nearly 4/3 ratio.
+If a comma-separated list of types is given, the layout only
+applies to the corresponding containers.
+.TP
+\fB\-\-no\-legend\fR
+Remove the text legend at the bottom.
+.TP
+\fB\-\-version\fR
+Report version and exit.
+.
+.\" **************************
+.\" Description Section
+.\" **************************
+.SH DESCRIPTION
+.
+lstopo is capable of displaying a topological map of the system in a
+variety of different output formats. If no filename is specified and
+the DISPLAY environment variable is set, lstopo displays the map in a
+graphical window. If no filename is specified and the DISPLAY
+environment variable is
+.I not
+set, a text summary is displayed.
+.
+.PP
+The filename specified directly implies the output format that will be
+used; see the OUTPUT FORMATS section, below. Output formats that
+support color will indicate specific characteristics about individual
+CPUs by their color; see the COLORS section, below.
+.
+.\" **************************
+.\" Output Formats Section
+.\" **************************
+.SH OUTPUT FORMATS
+.
+.PP
+The filename on the command line usually determines the format of the output.
+There are a few filenames that indicate specific output formats and
+devices (e.g., a filename of "-" will output a text summary to
+stdout), but most filenames indicate the desired output format by
+their suffix (e.g., "topo.png" will output a PNG-format file).
+.PP
+The format of the output may also be changed with "\-\-of".
+For instance, "\-\-of pdf" will generate a PDF-format file on the standard
+output, while "\-\-of fig toto" will output a Xfig-format file named "toto".
+
+.PP
+The list of currently supported formats is given below. Any of them may
+be used with "\-\-of" or as a filename suffix.
+.TP
+.B default
+Send the output to a window or to the console depending on the environment.
+.TP
+.B console
+Send a text summary to stdout.
+.
+.TP
+.B txt
+Output an ASCII art representation of the map.
+If outputting to stdout and if colors are supported on the terminal,
+the output will be colorized.
+.
+.TP
+.B fig
+Output a representation of the map that can be loaded in Xfig.
+.
+.TP
+.B pdf
+If lstopo was compiled with the proper
+support, lstopo outputs a PDF representation of the map.
+.
+.TP
+.B ps
+If lstopo was compiled with the proper
+support, lstopo outputs a Postscript representation of the map.
+.
+.TP
+.B png
+If lstopo was compiled with the proper
+support, lstopo outputs a PNG representation of the map.
+.
+.TP
+.B svg
+If lstopo was compiled with the proper
+support, lstopo outputs an SVG representation of the map.
+.
+.TP
+.B synthetic
+If the topology is symmetric, lstopo outputs a synthetic description
+string. This output may be reused as an input synthetic topology
+description later.
+.
+.TP
+.B xml
+If lstopo was compiled with the proper
+support, lstopo outputs an XML representation of the map.
+It may be reused later, even on another machine, with lstopo \-\-input,
+the HWLOC_XMLFILE environment variable, or the hwloc_topology_set_xml()
+function.
+
+.PP
+The following special names may be used:
+.TP
+.B \-
+Send a text summary to stdout.
+.
+.TP
+.B /dev/stdout
+Send a text summary to stdout. It is effectively the same as
+specifying "\-".
+.
+.TP
+.B \-.<format>
+If the entire filename is "\-.<format>", lstopo behaves as if
+"\-\-of <format> -" was given, which means a file of the given format
+is sent to the standard output.
+
+.PP
+See the output of "lstopo \-\-help" for a specific list of what
+graphical output formats are supported in your hwloc installation.
+.
+.\" **************************
+.\" Colors Section
+.\" **************************
+.SH COLORS
+Individual CPUs are colored in the semi-graphical and graphical output
+formats to indicate different characteristics:
+.TP
+Green
+The CPU is in the current CPU binding mask.
+.TP
+White
+The CPU is in the allowed set (see below), but it is not in the
+current CPU binding mask.
+.TP
+Red
+The CPU is not in the allowed set (see below).
+.TP
+Black
+The CPU is offline (not all OS's support displaying offline CPUs).
+.
+.PP
+The "allowed set" is the set of CPUs to which the current process is
+allowed to bind. The allowed set is usually either inherited from the
+parent process or set by administrative qpolicies on the system. Linux
+cpusets are one example of limiting the allowed set for a process and
+its children to be less than the full set of CPUs on the system.
+.PP
+Different processes may therefore have different CPUs in the allowed
+set. Hence, invoking lstopo in different contexts and/or as different
+users may display different colors for the same individual CPUs (e.g.,
+running lstopo in one context may show a specific CPU as red, but
+running lstopo in a different context may show the same CPU as white).
+.
+.\" **************************
+.\" Layout Section
+.\" **************************
+.SH LAYOUT
+In its graphical output, lstopo uses simple rectangular heuristics
+to try to achieve a 4/3 ratio between width and height. However,
+in the particular case of NUMA nodes, the layout is always a flat
+rectangle, to avoid letting the user believe any particular NUMA
+topology (lstopo is not able to render that yet).
+.
+.\" **************************
+.\" Examples Section
+.\" **************************
+.SH EXAMPLES
+.
+To display the machine topology in textual mode:
+
+ lstopo -
+
+To display the machine topology in pseudo-graphical mode:
+
+ lstopo -.txt
+
+To display in graphical mode (assuming that the DISPLAY environment
+variable is set to a relevant value):
+
+ lstopo
+
+To export the topology to a PNG file:
+
+ lstopo file.png
+
+To export an XML file on a machine and later display the corresponding
+graphical output on another machine:
+
+ machine1$ lstopo file.xml
+ <transfer file.xml from machine1 to machine2>
+ machine2$ lstopo --input file.xml
+
+To save the current machine topology to XML and later reload it faster
+while still considering it as the current machine:
+
+ $ lstopo file.xml
+ <...>
+ $ lstopo --input file.xml --thissystem
+
+To restrict an XML topology to only physical processors 0, 1, 4 and 5:
+
+ lstopo --input file.xml --restrict 0x33 newfile.xml
+
+To restrict an XML topology to only numa node whose logical index is 1:
+
+ lstopo --input file.xml --restrict $(hwloc-calc --input file.xml node:1) newfile.xml
+
+To display a summary of the topology:
+
+ lstopo -s
+
+To get more details about the topology:
+
+ lstopo -v
+
+To only show cores:
+
+ lstopo --only core
+
+To show cpusets:
+
+ lstopo --cpuset
+
+To only show the cpusets of sockets:
+
+ lstopo --only socket --cpuset-only
+
+Simulate a fake hierarchy; this example shows with 2 NUMA nodes of 2
+processor units:
+
+ lstopo --input "n:2 2"
+
+To count the number of logical processors in the system
+
+ lstopo --only pu | wc -l
+.\" **************************
+.\" See also section
+.\" **************************
+.SH SEE ALSO
+.
+.ft R
+hwloc-bind(1), hwloc-ps(1), hwloc-gather-topology(1)
+.sp
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.c 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,661 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2011 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+#ifdef HWLOC_LINUX_SYS
+#include <hwloc/linux.h>
+#endif /* HWLOC_LINUX_SYS */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#ifdef HWLOC_HAVE_CAIRO
+#include <cairo.h>
+#endif
+
+#ifdef HAVE_SETLOCALE
+#include <locale.h>
+#endif
+
+#include "lstopo.h"
+#include "misc.h"
+
+int logical = -1;
+hwloc_obj_type_t show_only = (hwloc_obj_type_t) -1;
+int show_cpuset = 0;
+int taskset = 0;
+unsigned int fontsize = 10;
+unsigned int gridsize = 10;
+enum lstopo_orient_e force_orient[HWLOC_OBJ_TYPE_MAX];
+unsigned int legend = 1;
+unsigned int top = 0;
+hwloc_pid_t pid = (hwloc_pid_t) -1;
+
+FILE *open_file(const char *filename, const char *mode)
+{
+ const char *extn;
+
+ if (!filename)
+ return stdout;
+
+ extn = strrchr(filename, '.');
+ if (filename[0] == '-' && extn == filename + 1)
+ return stdout;
+
+ return fopen(filename, mode);
+}
+
+static hwloc_obj_t insert_task(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const char * name)
+{
+ hwloc_obj_t obj;
+
+ hwloc_bitmap_and(cpuset, cpuset, hwloc_topology_get_topology_cpuset(topology));
+ if (hwloc_bitmap_iszero(cpuset))
+ return NULL;
+
+ /* try to insert at exact position */
+ obj = hwloc_topology_insert_misc_object_by_cpuset(topology, cpuset, name);
+ if (!obj) {
+ /* try to insert in a larger parent */
+ char *s;
+ hwloc_bitmap_asprintf(&s, cpuset);
+ obj = hwloc_get_obj_covering_cpuset(topology, cpuset);
+ if (obj) {
+ obj = hwloc_topology_insert_misc_object_by_parent(topology, obj, name);
+ fprintf(stderr, "Inserted process `%s' below parent larger than cpuset %s\n", name, s);
+ } else {
+ fprintf(stderr, "Failed to insert process `%s' with cpuset %s\n", name, s);
+ }
+ free(s);
+ }
+
+ return obj;
+}
+
+static void add_process_objects(hwloc_topology_t topology)
+{
+ hwloc_obj_t root;
+ hwloc_bitmap_t cpuset;
+#ifdef HWLOC_LINUX_SYS
+ hwloc_bitmap_t task_cpuset;
+#endif /* HWLOC_LINUX_SYS */
+ DIR *dir;
+ struct dirent *dirent;
+ const struct hwloc_topology_support *support;
+
+ root = hwloc_get_root_obj(topology);
+
+ support = hwloc_topology_get_support(topology);
+
+ if (!support->cpubind->get_thisproc_cpubind)
+ return;
+
+ dir = opendir("/proc");
+ if (!dir)
+ return;
+ cpuset = hwloc_bitmap_alloc();
+#ifdef HWLOC_LINUX_SYS
+ task_cpuset = hwloc_bitmap_alloc();
+#endif /* HWLOC_LINUX_SYS */
+
+ while ((dirent = readdir(dir))) {
+ long local_pid;
+ char *end;
+ char name[64];
+ int proc_cpubind;
+
+ local_pid = strtol(dirent->d_name, &end, 10);
+ if (*end)
+ /* Not a number */
+ continue;
+
+ snprintf(name, sizeof(name), "%ld", local_pid);
+
+ proc_cpubind = hwloc_get_proc_cpubind(topology, local_pid, cpuset, 0) != -1;
+
+#ifdef HWLOC_LINUX_SYS
+ {
+ /* Get the process name */
+ char *path;
+ unsigned pathlen = 6 + strlen(dirent->d_name) + 1 + 7 + 1;
+ char cmd[64], *c;
+ int file;
+ ssize_t n;
+
+ path = malloc(pathlen);
+ snprintf(path, pathlen, "/proc/%s/cmdline", dirent->d_name);
+ file = open(path, O_RDONLY);
+ free(path);
+
+ if (file >= 0) {
+ n = read(file, cmd, sizeof(cmd) - 1);
+ close(file);
+
+ if (n <= 0)
+ /* Ignore kernel threads and errors */
+ continue;
+
+ cmd[n] = 0;
+ if ((c = strchr(cmd, ' ')))
+ *c = 0;
+ snprintf(name, sizeof(name), "%ld %s", local_pid, cmd);
+ }
+ }
+
+ {
+ /* Get threads */
+ char *path;
+ unsigned pathlen = 6+strlen(dirent->d_name) + 1 + 4 + 1;
+ DIR *task_dir;
+ struct dirent *task_dirent;
+
+ path = malloc(pathlen);
+ snprintf(path, pathlen, "/proc/%s/task", dirent->d_name);
+ task_dir = opendir(path);
+ free(path);
+
+ if (task_dir) {
+ while ((task_dirent = readdir(task_dir))) {
+ long local_tid;
+ char *task_end;
+ char task_name[64];
+
+ local_tid = strtol(task_dirent->d_name, &task_end, 10);
+ if (*task_end)
+ /* Not a number, or the main task */
+ continue;
+
+ if (hwloc_linux_get_tid_cpubind(topology, local_tid, task_cpuset))
+ continue;
+
+ if (proc_cpubind && hwloc_bitmap_isequal(task_cpuset, cpuset))
+ continue;
+
+ snprintf(task_name, sizeof(task_name), "%s %li", name, local_tid);
+
+ insert_task(topology, task_cpuset, task_name);
+ }
+ closedir(task_dir);
+ }
+ }
+#endif /* HWLOC_LINUX_SYS */
+
+ if (!proc_cpubind)
+ continue;
+
+ if (hwloc_bitmap_isincluded(root->cpuset, cpuset))
+ continue;
+
+ insert_task(topology, cpuset, name);
+ }
+
+ hwloc_bitmap_free(cpuset);
+#ifdef HWLOC_LINUX_SYS
+ hwloc_bitmap_free(task_cpuset);
+#endif /* HWLOC_LINUX_SYS */
+ closedir(dir);
+}
+
+void usage(const char *name, FILE *where)
+{
+ fprintf (where, "Usage: %s [ options ] ... [ filename.format ]\n\n", name);
+ fprintf (where, "See lstopo(1) for more details.\n\n");
+ fprintf (where, "Supported output file formats: console, txt, fig"
+#ifdef HWLOC_HAVE_CAIRO
+#if CAIRO_HAS_PDF_SURFACE
+ ", pdf"
+#endif /* CAIRO_HAS_PDF_SURFACE */
+#if CAIRO_HAS_PS_SURFACE
+ ", ps"
+#endif /* CAIRO_HAS_PS_SURFACE */
+#if CAIRO_HAS_PNG_FUNCTIONS
+ ", png"
+#endif /* CAIRO_HAS_PNG_FUNCTIONS */
+#if CAIRO_HAS_SVG_SURFACE
+ ", svg"
+#endif /* CAIRO_HAS_SVG_SURFACE */
+#endif /* HWLOC_HAVE_CAIRO */
+ ", xml, synthetic"
+ "\n");
+ fprintf (where, "\nFormatting options:\n");
+ fprintf (where, " -l --logical Display hwloc logical object indexes\n");
+ fprintf (where, " (default for console output)\n");
+ fprintf (where, " -p --physical Display physical object indexes\n");
+ fprintf (where, " (default for graphical output)\n");
+ fprintf (where, "Output options:\n");
+ fprintf (where, " --output-format <format>\n");
+ fprintf (where, " --of <format> Force the output to use the given format\n");
+ fprintf (where, "Textual output options:\n");
+ fprintf (where, " --only <type> Only show objects of the given type in the textual output\n");
+ fprintf (where, " -v --verbose Include additional details\n");
+ fprintf (where, " -s --silent Reduce the amount of details to show\n");
+ fprintf (where, " -c --cpuset Show the cpuset of each object\n");
+ fprintf (where, " -C --cpuset-only Only show the cpuset of each object\n");
+ fprintf (where, " --taskset Show taskset-specific cpuset strings\n");
+ fprintf (where, "Object filtering options:\n");
+ fprintf (where, " --ignore <type> Ignore objects of the given type\n");
+ fprintf (where, " --no-caches Do not show caches\n");
+ fprintf (where, " --no-useless-caches Do not show caches which do not have a hierarchical\n"
+ " impact\n");
+ fprintf (where, " --merge Do not show levels that do not have a hierarchical\n"
+ " impact\n");
+ fprintf (where, " --restrict <cpuset> Restrict the topology to processors listed in <cpuset>\n");
+ fprintf (where, " --restrict binding Restrict the topology to the current process binding\n");
+#ifdef HWLOC_HAVE_LIBPCI
+ fprintf (where, " --no-io Do not show any I/O device or bridge\n");
+ fprintf (where, " --no-bridges Do not any I/O bridge except hostbridges\n");
+ fprintf (where, " --whole-io Show all I/O devices and bridges\n");
+#endif
+ fprintf (where, "Input options:\n");
+ hwloc_utils_input_format_usage(where, 6);
+ fprintf (where, " --thissystem Assume that the input topology provides the topology\n"
+ " for the system on which we are running\n");
+ fprintf (where, " --pid <pid> Detect topology as seen by process <pid>\n");
+ fprintf (where, " --whole-system Do not consider administration limitations\n");
+ fprintf (where, "Graphical output options:\n");
+ fprintf (where, " --fontsize 10 Set size of text font\n");
+ fprintf (where, " --gridsize 10 Set size of margin between elements\n");
+ fprintf (where, " --horiz[=<type,...>] Horizontal graphical layout instead of nearly 4/3 ratio\n");
+ fprintf (where, " --vert[=<type,...>] Vertical graphical layout instead of nearly 4/3 ratio\n");
+ fprintf (where, " --no-legend Remove the text legend at the bottom\n");
+ fprintf (where, "Miscellaneous options:\n");
+ fprintf (where, " --ps --top Display processes within the hierarchy\n");
+ fprintf (where, " --version Report version and exit\n");
+}
+
+enum output_format {
+ LSTOPO_OUTPUT_DEFAULT,
+ LSTOPO_OUTPUT_CONSOLE,
+ LSTOPO_OUTPUT_SYNTHETIC,
+ LSTOPO_OUTPUT_TEXT,
+ LSTOPO_OUTPUT_FIG,
+ LSTOPO_OUTPUT_PNG,
+ LSTOPO_OUTPUT_PDF,
+ LSTOPO_OUTPUT_PS,
+ LSTOPO_OUTPUT_SVG,
+ LSTOPO_OUTPUT_XML
+};
+
+static enum output_format
+parse_output_format(const char *name, char *callname)
+{
+ if (!strncasecmp(name, "default", 3))
+ return LSTOPO_OUTPUT_DEFAULT;
+ else if (!strncasecmp(name, "console", 3))
+ return LSTOPO_OUTPUT_CONSOLE;
+ else if (!strcasecmp(name, "synthetic"))
+ return LSTOPO_OUTPUT_SYNTHETIC;
+ else if (!strcasecmp(name, "txt"))
+ return LSTOPO_OUTPUT_TEXT;
+ else if (!strcasecmp(name, "fig"))
+ return LSTOPO_OUTPUT_FIG;
+ else if (!strcasecmp(name, "png"))
+ return LSTOPO_OUTPUT_PNG;
+ else if (!strcasecmp(name, "pdf"))
+ return LSTOPO_OUTPUT_PDF;
+ else if (!strcasecmp(name, "ps"))
+ return LSTOPO_OUTPUT_PS;
+ else if (!strcasecmp(name, "svg"))
+ return LSTOPO_OUTPUT_SVG;
+ else if (!strcasecmp(name, "xml"))
+ return LSTOPO_OUTPUT_XML;
+
+ fprintf(stderr, "file format `%s' not supported\n", name);
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+}
+
+#define LSTOPO_VERBOSE_MODE_DEFAULT 1
+
+int
+main (int argc, char *argv[])
+{
+ int err;
+ int verbose_mode = LSTOPO_VERBOSE_MODE_DEFAULT;
+ hwloc_topology_t topology;
+ const char *filename = NULL;
+ unsigned long flags = HWLOC_TOPOLOGY_FLAG_IO_DEVICES | HWLOC_TOPOLOGY_FLAG_IO_BRIDGES;
+ int merge = 0;
+ int ignorecache = 0;
+ char * callname;
+ char * input = NULL;
+ enum hwloc_utils_input_format input_format = HWLOC_UTILS_INPUT_DEFAULT;
+ enum output_format output_format = LSTOPO_OUTPUT_DEFAULT;
+ char *restrictstring = NULL;
+ int opt;
+ unsigned i;
+
+ for(i=0; i<HWLOC_OBJ_TYPE_MAX; i++)
+ force_orient[i] = LSTOPO_ORIENT_NONE;
+ force_orient[HWLOC_OBJ_PU] = LSTOPO_ORIENT_HORIZ;
+ force_orient[HWLOC_OBJ_CACHE] = LSTOPO_ORIENT_HORIZ;
+ force_orient[HWLOC_OBJ_NODE] = LSTOPO_ORIENT_HORIZ;
+
+ /* enable verbose backends */
+ putenv("HWLOC_XML_VERBOSE=1");
+ putenv("HWLOC_SYNTHETIC_VERBOSE=1");
+
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_ALL, "");
+#endif
+
+ callname = strrchr(argv[0], '/');
+ if (!callname)
+ callname = argv[0];
+ else
+ callname++;
+
+ err = hwloc_topology_init (&topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ while (argc >= 2)
+ {
+ opt = 0;
+ if (!strcmp (argv[1], "-v") || !strcmp (argv[1], "--verbose")) {
+ verbose_mode++;
+ } else if (!strcmp (argv[1], "-s") || !strcmp (argv[1], "--silent")) {
+ verbose_mode--;
+ } else if (!strcmp (argv[1], "-h") || !strcmp (argv[1], "--help")) {
+ usage(callname, stdout);
+ exit(EXIT_SUCCESS);
+ } else if (!strcmp (argv[1], "-l") || !strcmp (argv[1], "--logical"))
+ logical = 1;
+ else if (!strcmp (argv[1], "-p") || !strcmp (argv[1], "--physical"))
+ logical = 0;
+ else if (!strcmp (argv[1], "-c") || !strcmp (argv[1], "--cpuset"))
+ show_cpuset = 1;
+ else if (!strcmp (argv[1], "-C") || !strcmp (argv[1], "--cpuset-only"))
+ show_cpuset = 2;
+ else if (!strcmp (argv[1], "--taskset")) {
+ taskset = 1;
+ if (!show_cpuset)
+ show_cpuset = 1;
+ } else if (!strcmp (argv[1], "--only")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ show_only = hwloc_obj_type_of_string(argv[2]);
+ opt = 1;
+ }
+ else if (!strcmp (argv[1], "--ignore")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ hwloc_topology_ignore_type(topology, hwloc_obj_type_of_string(argv[2]));
+ opt = 1;
+ }
+ else if (!strcmp (argv[1], "--no-caches"))
+ ignorecache = 2;
+ else if (!strcmp (argv[1], "--no-useless-caches"))
+ ignorecache = 1;
+ else if (!strcmp (argv[1], "--whole-system"))
+ flags |= HWLOC_TOPOLOGY_FLAG_WHOLE_SYSTEM;
+ else if (!strcmp (argv[1], "--no-io"))
+ flags &= ~(HWLOC_TOPOLOGY_FLAG_IO_DEVICES | HWLOC_TOPOLOGY_FLAG_IO_BRIDGES);
+ else if (!strcmp (argv[1], "--no-bridges"))
+ flags &= ~(HWLOC_TOPOLOGY_FLAG_IO_BRIDGES);
+ else if (!strcmp (argv[1], "--whole-io"))
+ flags |= HWLOC_TOPOLOGY_FLAG_WHOLE_IO;
+ else if (!strcmp (argv[1], "--merge"))
+ merge = 1;
+ else if (!strcmp (argv[1], "--thissystem"))
+ flags |= HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM;
+ else if (!strcmp (argv[1], "--restrict")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ restrictstring = strdup(argv[2]);
+ opt = 1;
+ }
+
+ else if (!strcmp (argv[1], "--horiz"))
+ for(i=0; i<HWLOC_OBJ_TYPE_MAX; i++)
+ force_orient[i] = LSTOPO_ORIENT_HORIZ;
+ else if (!strcmp (argv[1], "--vert"))
+ for(i=0; i<HWLOC_OBJ_TYPE_MAX; i++)
+ force_orient[i] = LSTOPO_ORIENT_VERT;
+ else if (!strncmp (argv[1], "--horiz=", 8)
+ || !strncmp (argv[1], "--vert=", 7)) {
+ enum lstopo_orient_e orient = (argv[1][2] == 'h') ? LSTOPO_ORIENT_HORIZ : LSTOPO_ORIENT_VERT;
+ char *tmp = argv[1] + ((argv[1][2] == 'h') ? 8 : 7);
+ while (tmp) {
+ char *end = strchr(tmp, ',');
+ hwloc_obj_type_t type;
+ if (end)
+ *end = '\0';
+ type = hwloc_obj_type_of_string(tmp);
+ if (type != (hwloc_obj_type_t) -1)
+ force_orient[type] = orient;
+ if (!end)
+ break;
+ tmp = end+1;
+ }
+ }
+
+ else if (!strcmp (argv[1], "--fontsize")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ fontsize = atoi(argv[2]);
+ opt = 1;
+ }
+ else if (!strcmp (argv[1], "--gridsize")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ gridsize = atoi(argv[2]);
+ opt = 1;
+ }
+ else if (!strcmp (argv[1], "--no-legend")) {
+ legend = 0;
+ }
+
+ else if (hwloc_utils_lookup_input_option(argv+1, argc-1, &opt,
+ &input, &input_format,
+ callname)) {
+ /* nothing to do anymore */
+
+ } else if (!strcmp (argv[1], "--pid")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ pid = atoi(argv[2]); opt = 1;
+ } else if (!strcmp (argv[1], "--ps") || !strcmp (argv[1], "--top"))
+ top = 1;
+ else if (!strcmp (argv[1], "--version")) {
+ printf("%s %s\n", callname, VERSION);
+ exit(EXIT_SUCCESS);
+ } else if (!strcmp (argv[1], "--output-format") || !strcmp (argv[1], "--of")) {
+ if (argc <= 2) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ output_format = parse_output_format(argv[2], callname);
+ opt = 1;
+ } else {
+ if (filename) {
+ fprintf (stderr, "Unrecognized option: %s\n", argv[1]);
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ } else
+ filename = argv[1];
+ }
+ argc -= opt+1;
+ argv += opt+1;
+ }
+
+ if (show_only != (hwloc_obj_type_t)-1)
+ merge = 0;
+
+ hwloc_topology_set_flags(topology, flags);
+
+ if (ignorecache > 1) {
+ hwloc_topology_ignore_type(topology, HWLOC_OBJ_CACHE);
+ } else if (ignorecache) {
+ hwloc_topology_ignore_type_keep_structure(topology, HWLOC_OBJ_CACHE);
+ }
+ if (merge)
+ hwloc_topology_ignore_all_keep_structure(topology);
+
+ if (input) {
+ err = hwloc_utils_enable_input_format(topology, input, input_format, verbose_mode > 1, callname);
+ if (err)
+ return err;
+ }
+
+ if (pid != (hwloc_pid_t) -1 && pid != 0) {
+ if (hwloc_topology_set_pid(topology, pid)) {
+ perror("Setting target pid");
+ return EXIT_FAILURE;
+ }
+ }
+
+ err = hwloc_topology_load (topology);
+ if (err)
+ return EXIT_FAILURE;
+
+ if (top)
+ add_process_objects(topology);
+
+ if (restrictstring) {
+ hwloc_bitmap_t restrictset = hwloc_bitmap_alloc();
+ if (!strcmp (restrictstring, "binding")) {
+ if (pid != (hwloc_pid_t) -1 && pid != 0)
+ hwloc_get_proc_cpubind(topology, pid, restrictset, HWLOC_CPUBIND_PROCESS);
+ else
+ hwloc_get_cpubind(topology, restrictset, HWLOC_CPUBIND_PROCESS);
+ } else {
+ hwloc_bitmap_sscanf(restrictset, restrictstring);
+ }
+ err = hwloc_topology_restrict (topology, restrictset, 0);
+ if (err) {
+ perror("Restricting the topology");
+ /* fallthrough */
+ }
+ hwloc_bitmap_free(restrictset);
+ free(restrictstring);
+ }
+
+ if (!filename && !strcmp(callname,"hwloc-info")) {
+ /* behave kind-of plpa-info */
+ filename = "-";
+ verbose_mode--;
+ }
+
+ /* if the output format wasn't enforced, look at the filename */
+ if (filename && output_format == LSTOPO_OUTPUT_DEFAULT) {
+ if (!strcmp(filename, "-")
+ || !strcmp(filename, "/dev/stdout")) {
+ output_format = LSTOPO_OUTPUT_CONSOLE;
+ } else {
+ char *dot = strrchr(filename, '.');
+ if (dot)
+ output_format = parse_output_format(dot+1, callname);
+ }
+ }
+
+ /* if the output format wasn't enforced, think a bit about what the user probably want */
+ if (output_format == LSTOPO_OUTPUT_DEFAULT) {
+ if (show_cpuset
+ || show_only != (hwloc_obj_type_t)-1
+ || verbose_mode != LSTOPO_VERBOSE_MODE_DEFAULT)
+ output_format = LSTOPO_OUTPUT_CONSOLE;
+ }
+
+ if (logical == -1) {
+ if (output_format == LSTOPO_OUTPUT_CONSOLE)
+ logical = 1;
+ else if (output_format != LSTOPO_OUTPUT_DEFAULT)
+ logical = 0;
+ }
+
+ switch (output_format) {
+ case LSTOPO_OUTPUT_DEFAULT:
+#ifdef HWLOC_HAVE_CAIRO
+#if CAIRO_HAS_XLIB_SURFACE && defined HWLOC_HAVE_X11
+ if (getenv("DISPLAY")) {
+ if (logical == -1)
+ logical = 0;
+ output_x11(topology, NULL, logical, legend, verbose_mode);
+ } else
+#endif /* CAIRO_HAS_XLIB_SURFACE */
+#endif /* HWLOC_HAVE_CAIRO */
+#ifdef HWLOC_WIN_SYS
+ {
+ if (logical == -1)
+ logical = 0;
+ output_windows(topology, NULL, logical, legend, verbose_mode);
+ }
+#else
+ {
+ if (logical == -1)
+ logical = 1;
+ output_console(topology, NULL, logical, legend, verbose_mode);
+ }
+#endif
+ break;
+
+ case LSTOPO_OUTPUT_CONSOLE:
+ output_console(topology, filename, logical, legend, verbose_mode);
+ break;
+ case LSTOPO_OUTPUT_SYNTHETIC:
+ output_synthetic(topology, filename, logical, legend, verbose_mode);
+ break;
+ case LSTOPO_OUTPUT_TEXT:
+ output_text(topology, filename, logical, legend, verbose_mode);
+ break;
+ case LSTOPO_OUTPUT_FIG:
+ output_fig(topology, filename, logical, legend, verbose_mode);
+ break;
+#ifdef HWLOC_HAVE_CAIRO
+# if CAIRO_HAS_PNG_FUNCTIONS
+ case LSTOPO_OUTPUT_PNG:
+ output_png(topology, filename, logical, legend, verbose_mode);
+ break;
+# endif /* CAIRO_HAS_PNG_FUNCTIONS */
+# if CAIRO_HAS_PDF_SURFACE
+ case LSTOPO_OUTPUT_PDF:
+ output_pdf(topology, filename, logical, legend, verbose_mode);
+ break;
+# endif /* CAIRO_HAS_PDF_SURFACE */
+# if CAIRO_HAS_PS_SURFACE
+ case LSTOPO_OUTPUT_PS:
+ output_ps(topology, filename, logical, legend, verbose_mode);
+ break;
+#endif /* CAIRO_HAS_PS_SURFACE */
+#if CAIRO_HAS_SVG_SURFACE
+ case LSTOPO_OUTPUT_SVG:
+ output_svg(topology, filename, logical, legend, verbose_mode);
+ break;
+#endif /* CAIRO_HAS_SVG_SURFACE */
+#endif /* HWLOC_HAVE_CAIRO */
+ case LSTOPO_OUTPUT_XML:
+ output_xml(topology, filename, logical, legend, verbose_mode);
+ break;
+ default:
+ fprintf(stderr, "file format not supported\n");
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+
+ hwloc_topology_destroy (topology);
+
+ return EXIT_SUCCESS;
+}
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/lstopo.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2010 Université Bordeaux 1
+ * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#ifndef UTILS_LSTOPO_H
+#define UTILS_LSTOPO_H
+
+#include <hwloc.h>
+
+extern hwloc_obj_type_t show_only;
+extern int show_cpuset;
+extern int taskset;
+extern hwloc_pid_t pid;
+
+typedef void output_method (struct hwloc_topology *topology, const char *output, int logical, int legend, int verbose_mode);
+
+FILE *open_file(const char *filename, const char *mode) __hwloc_attribute_malloc;
+
+extern output_method output_console, output_synthetic, output_text, output_x11, output_fig, output_png, output_pdf, output_ps, output_svg, output_windows, output_xml;
+
+struct draw_methods {
+ void* (*start) (void *output, int width, int height);
+ void (*declare_color) (void *output, int r, int g, int b);
+ void (*box) (void *output, int r, int g, int b, unsigned depth, unsigned x, unsigned width, unsigned y, unsigned height);
+ void (*line) (void *output, int r, int g, int b, unsigned depth, unsigned x1, unsigned y1, unsigned x2, unsigned y2);
+ void (*text) (void *output, int r, int g, int b, int size, unsigned depth, unsigned x, unsigned y, const char *text);
+};
+
+extern unsigned int gridsize, fontsize;
+
+enum lstopo_orient_e {
+ LSTOPO_ORIENT_NONE = 0,
+ LSTOPO_ORIENT_HORIZ,
+ LSTOPO_ORIENT_VERT
+};
+/* orientation of children within an object of the given type */
+extern enum lstopo_orient_e force_orient[];
+
+extern void *output_draw_start(struct draw_methods *draw_methods, int logical, int legend, struct hwloc_topology *topology, void *output);
+extern void output_draw(struct draw_methods *draw_methods, int logical, int legend, struct hwloc_topology *topology, void *output);
+
+int rgb_to_color(int r, int g, int b) __hwloc_attribute_const;
+int declare_color(int r, int g, int b);
+
+#endif /* UTILS_LSTOPO_H */
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/misc.h
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/misc.h (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/misc.h 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,229 @@
+/*
+ * Copyright © 2009 CNRS
+ * Copyright © 2009-2010 inria. All rights reserved.
+ * Copyright © 2009-2011 Université Bordeaux 1
+ * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
+ * See COPYING in top-level directory.
+ */
+
+#include <private/autogen/config.h>
+#include <hwloc.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <assert.h>
+
+extern void usage(const char *name, FILE *where);
+
+static __hwloc_inline void
+hwloc_utils_input_format_usage(FILE *where, int addspaces)
+{
+ fprintf (where, " --input <XML file>\n");
+ fprintf (where, " -i <XML file> %*sRead topology from XML file <path>\n",
+ addspaces, " ");
+#ifdef HWLOC_LINUX_SYS
+ fprintf (where, " --input <directory>\n");
+ fprintf (where, " -i <directory> %*sRead topology from chroot containing the /proc and /sys\n",
+ addspaces, " ");
+ fprintf (where, " %*sof another system\n",
+ addspaces, " ");
+#endif
+ fprintf (where, " --input \"n:2 2\"\n");
+ fprintf (where, " -i \"n:2 2\" %*sSimulate a fake hierarchy, here with 2 NUMA nodes of 2\n",
+ addspaces, " ");
+ fprintf (where, " %*sprocessors\n",
+ addspaces, " ");
+ fprintf (where, " --input-format <format>\n");
+ fprintf (where, " --if <format> %*sEnforce input format among "
+ "xml, "
+#ifdef HWLOC_LINUX_SYS
+ "fsroot, "
+#endif
+ "synthetic\n",
+ addspaces, " ");
+}
+
+enum hwloc_utils_input_format {
+ HWLOC_UTILS_INPUT_DEFAULT,
+ HWLOC_UTILS_INPUT_XML,
+ HWLOC_UTILS_INPUT_FSROOT,
+ HWLOC_UTILS_INPUT_SYNTHETIC
+};
+
+static __hwloc_inline enum hwloc_utils_input_format
+hwloc_utils_parse_input_format(const char *name, const char *callname)
+{
+ if (!strncasecmp(name, "default", 3))
+ return HWLOC_UTILS_INPUT_DEFAULT;
+ else if (!strncasecmp(name, "xml", 1))
+ return HWLOC_UTILS_INPUT_XML;
+ else if (!strncasecmp(name, "fsroot", 1))
+ return HWLOC_UTILS_INPUT_FSROOT;
+ else if (!strncasecmp(name, "synthetic", 1))
+ return HWLOC_UTILS_INPUT_SYNTHETIC;
+
+ fprintf(stderr, "input format `%s' not supported\n", name);
+ usage(callname, stderr);
+ exit(EXIT_FAILURE);
+}
+
+static __hwloc_inline int
+hwloc_utils_lookup_input_option(char *argv[], int argc, int *consumed_opts,
+ char **inputp, enum hwloc_utils_input_format *input_formatp,
+ const char *callname)
+{
+ if (!strcmp (argv[0], "--input")
+ || !strcmp (argv[0], "-i")) {
+ if (argc <= 1) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ if (strlen(argv[1]))
+ *inputp = argv[1];
+ else
+ *inputp = NULL;
+ *consumed_opts = 1;
+ return 1;
+ }
+ else if (!strcmp (argv[0], "--input-format")
+ || !strcmp (argv[0], "--if")) {
+ if (argc <= 1) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ *input_formatp = hwloc_utils_parse_input_format (argv[1], callname);
+ *consumed_opts = 1;
+ return 1;
+ }
+
+ /* backward compat with 1.0 */
+ else if (!strcmp (argv[0], "--synthetic")) {
+ if (argc <= 1) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ *inputp = argv[1];
+ *input_formatp = HWLOC_UTILS_INPUT_SYNTHETIC;
+ *consumed_opts = 1;
+ return 1;
+ } else if (!strcmp (argv[0], "--xml")) {
+ if (argc <= 1) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ *inputp = argv[1];
+ *input_formatp = HWLOC_UTILS_INPUT_XML;
+ *consumed_opts = 1;
+ return 1;
+ } else if (!strcmp (argv[0], "--fsys-root")) {
+ if (argc <= 1) {
+ usage (callname, stderr);
+ exit(EXIT_FAILURE);
+ }
+ *inputp = argv[1];
+ *input_formatp = HWLOC_UTILS_INPUT_FSROOT;
+ *consumed_opts = 1;
+ return 1;
+ }
+
+ return 0;
+}
+
+static __hwloc_inline int
+hwloc_utils_enable_input_format(struct hwloc_topology *topology,
+ const char *input,
+ enum hwloc_utils_input_format input_format,
+ int verbose, const char *callname)
+{
+ if (input_format == HWLOC_UTILS_INPUT_DEFAULT) {
+ struct stat inputst;
+ int err;
+ err = stat(input, &inputst);
+ if (err < 0) {
+ if (verbose)
+ printf("assuming `%s' is a synthetic topology description\n", input);
+ input_format = HWLOC_UTILS_INPUT_SYNTHETIC;
+ } else if (S_ISDIR(inputst.st_mode)) {
+ if (verbose)
+ printf("assuming `%s' is a file-system root\n", input);
+ input_format = HWLOC_UTILS_INPUT_FSROOT;
+ } else if (S_ISREG(inputst.st_mode)) {
+ if (verbose)
+ printf("assuming `%s' is a XML file\n", input);
+ input_format = HWLOC_UTILS_INPUT_XML;
+ } else {
+ fprintf (stderr, "Unrecognized input file: %s\n", input);
+ usage (callname, stderr);
+ }
+ }
+
+ switch (input_format) {
+ case HWLOC_UTILS_INPUT_XML:
+ if (!strcmp(input, "-"))
+ input = "/dev/stdin";
+ if (hwloc_topology_set_xml(topology, input)) {
+ perror("Setting source XML file");
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case HWLOC_UTILS_INPUT_FSROOT:
+#ifdef HWLOC_LINUX_SYS
+ if (hwloc_topology_set_fsroot(topology, input)) {
+ perror("Setting source filesystem root");
+ return EXIT_FAILURE;
+ }
+#else /* HWLOC_LINUX_SYS */
+ fprintf(stderr, "This installation of hwloc does not support changing the file-system root, sorry.\n");
+ exit(EXIT_FAILURE);
+#endif /* HWLOC_LINUX_SYS */
+ break;
+
+ case HWLOC_UTILS_INPUT_SYNTHETIC:
+ if (hwloc_topology_set_synthetic(topology, input)) {
+ perror("Setting synthetic topology description");
+ return EXIT_FAILURE;
+ }
+ break;
+
+ case HWLOC_UTILS_INPUT_DEFAULT:
+ assert(0);
+ }
+
+ return 0;
+}
+
+static __hwloc_inline void
+hwloc_utils_print_distance_matrix(hwloc_topology_t topology, hwloc_obj_t root, unsigned nbobjs, unsigned reldepth, float *matrix, int logical)
+{
+ hwloc_obj_t objj, obji;
+ unsigned i, j;
+
+ /* column header */
+ printf(" index");
+ for(j=0, objj=NULL; j<nbobjs; j++) {
+ objj = hwloc_get_next_obj_inside_cpuset_by_depth(topology, root->cpuset, root->depth+reldepth, objj);
+ printf(" % 5d",
+ (int) (logical ? objj->logical_index : objj->os_index));
+ }
+ printf("\n");
+
+ /* each line */
+ for(i=0, obji=NULL; i<nbobjs; i++) {
+ obji = hwloc_get_next_obj_inside_cpuset_by_depth(topology, root->cpuset, root->depth+reldepth, obji);
+ /* row header */
+ printf(" % 5d",
+ (int) (logical ? obji->logical_index : obji->os_index));
+
+ /* row values */
+ for(j=0, objj=NULL; j<nbobjs; j++) {
+ objj = hwloc_get_next_obj_inside_cpuset_by_depth(topology, root->cpuset, root->depth+reldepth, objj);
+ for(j=0; j<nbobjs; j++)
+ printf(" %2.3f", matrix[i*nbobjs+j]);
+ printf("\n");
+ }
+ }
+}
+
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input1
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input1 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input1 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" name="machine1" local_memory="4014239744">
+ <page_type size="4096" count="980039"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="Latitude E6410"/>
+ <info name="DMIProductVersion" value="0001"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0667CC"/>
+ <info name="DMIBoardVersion" value="A00"/>
+ <info name="DMIBoardAssetTag" value=" "/>
+ <info name="DMIChassisVendor" value="Dell Inc."/>
+ <info name="DMIChassisType" value="9"/>
+ <info name="DMIChassisVersion" value=" "/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Inc."/>
+ <info name="DMIBIOSVersion" value="A03"/>
+ <info name="DMIBIOSDate" value="05/28/2010"/>
+ <info name="DMISysVendor" value="Dell Inc."/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.0.0-1-amd64"/>
+ <info name="OSVersion" value="#1 SMP Sun Jul 24 02:24:44 UTC 2011"/>
+ <info name="HostName" value="rhododendron"/>
+ <info name="Architecture" value="x86_64"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f">
+ <object type="Cache" os_level="-1" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" os_level="-1" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" os_level="-1" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input2
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input2 (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.input2 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="Machine" os_level="-1" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" online_cpuset="0x00ffffff" allowed_cpuset="0x00ffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" name="machine2">
+ <info name="Backend" value="Synthetic"/>
+ <distances nbobjs="2" relative_depth="1" latency_base="5.290000">
+ <latency value="4.347826"/>
+ <latency value="14.782610"/>
+ <latency value="1.000000"/>
+ <latency value="4.347826"/>
+ </distances>
+ <object type="NUMANode" os_level="-1" os_index="0" cpuset="0x00000fff" complete_cpuset="0x00000fff" online_cpuset="0x00000fff" allowed_cpuset="0x00000fff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="1073741824">
+ <page_type size="4096" count="262144"/>
+ <object type="Socket" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="4" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="5" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_level="-1" os_index="1" cpuset="0x00fff000" complete_cpuset="0x00fff000" online_cpuset="0x00fff000" allowed_cpuset="0x00fff000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="1073741824">
+ <page_type size="4096" count="262144"/>
+ <object type="Socket" os_level="-1" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="8" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="9" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_level="-1" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_level="-1" os_index="10" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_level="-1" os_index="11" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_level="-1" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_level="-1" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_level="-1" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE topology SYSTEM "hwloc.dtd">
+<topology>
+ <object type="System" os_index="0">
+ <object type="Machine" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" name="machine1" local_memory="4014239744">
+ <page_type size="4096" count="980039"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="Latitude E6410"/>
+ <info name="DMIProductVersion" value="0001"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0667CC"/>
+ <info name="DMIBoardVersion" value="A00"/>
+ <info name="DMIBoardAssetTag" value=" "/>
+ <info name="DMIChassisVendor" value="Dell Inc."/>
+ <info name="DMIChassisType" value="9"/>
+ <info name="DMIChassisVersion" value=" "/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Inc."/>
+ <info name="DMIBIOSVersion" value="A03"/>
+ <info name="DMIBIOSDate" value="05/28/2010"/>
+ <info name="DMISysVendor" value="Dell Inc."/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.0.0-1-amd64"/>
+ <info name="OSVersion" value="#1 SMP Sun Jul 24 02:24:44 UTC 2011"/>
+ <info name="HostName" value="rhododendron"/>
+ <info name="Architecture" value="x86_64"/>
+ <info name="AssemblerName" value="input1"/>
+ <info name="AssemblerIndex" value="0"/>
+ <object type="Socket" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f">
+ <object type="Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Machine" os_index="0" cpuset="0x00ffffff" complete_cpuset="0x00ffffff" online_cpuset="0x00ffffff" allowed_cpuset="0x00ffffff" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" name="machine2">
+ <info name="Backend" value="Synthetic"/>
+ <info name="AssemblerName" value="input2"/>
+ <info name="AssemblerIndex" value="1"/>
+ <distances nbobjs="2" relative_depth="1" latency_base="5.290000">
+ <latency value="4.347826"/>
+ <latency value="14.782610"/>
+ <latency value="1.000000"/>
+ <latency value="4.347826"/>
+ </distances>
+ <object type="NUMANode" os_index="0" cpuset="0x00000fff" complete_cpuset="0x00000fff" online_cpuset="0x00000fff" allowed_cpuset="0x00000fff" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" local_memory="1073741824">
+ <page_type size="4096" count="262144"/>
+ <object type="Socket" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="0" cpuset="0x00000003" complete_cpuset="0x00000003" online_cpuset="0x00000003" allowed_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_index="1" cpuset="0x0000000c" complete_cpuset="0x0000000c" online_cpuset="0x0000000c" allowed_cpuset="0x0000000c" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="1" cpuset="0x000000f0" complete_cpuset="0x000000f0" online_cpuset="0x000000f0" allowed_cpuset="0x000000f0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="2" cpuset="0x00000030" complete_cpuset="0x00000030" online_cpuset="0x00000030" allowed_cpuset="0x00000030" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="4" cpuset="0x00000010" complete_cpuset="0x00000010" online_cpuset="0x00000010" allowed_cpuset="0x00000010" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="5" cpuset="0x00000020" complete_cpuset="0x00000020" online_cpuset="0x00000020" allowed_cpuset="0x00000020" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_index="3" cpuset="0x000000c0" complete_cpuset="0x000000c0" online_cpuset="0x000000c0" allowed_cpuset="0x000000c0" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="6" cpuset="0x00000040" complete_cpuset="0x00000040" online_cpuset="0x00000040" allowed_cpuset="0x00000040" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="7" cpuset="0x00000080" complete_cpuset="0x00000080" online_cpuset="0x00000080" allowed_cpuset="0x00000080" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="2" cpuset="0x00000f00" complete_cpuset="0x00000f00" online_cpuset="0x00000f00" allowed_cpuset="0x00000f00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="4" cpuset="0x00000300" complete_cpuset="0x00000300" online_cpuset="0x00000300" allowed_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" online_cpuset="0x00000100" allowed_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" online_cpuset="0x00000200" allowed_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ <object type="Core" os_index="5" cpuset="0x00000c00" complete_cpuset="0x00000c00" online_cpuset="0x00000c00" allowed_cpuset="0x00000c00" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001">
+ <object type="Cache" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="10" cpuset="0x00000400" complete_cpuset="0x00000400" online_cpuset="0x00000400" allowed_cpuset="0x00000400" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ <object type="Cache" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="11" cpuset="0x00000800" complete_cpuset="0x00000800" online_cpuset="0x00000800" allowed_cpuset="0x00000800" nodeset="0x00000001" complete_nodeset="0x00000001" allowed_nodeset="0x00000001"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="NUMANode" os_index="1" cpuset="0x00fff000" complete_cpuset="0x00fff000" online_cpuset="0x00fff000" allowed_cpuset="0x00fff000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" local_memory="1073741824">
+ <page_type size="4096" count="262144"/>
+ <object type="Socket" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="3" cpuset="0x0000f000" complete_cpuset="0x0000f000" online_cpuset="0x0000f000" allowed_cpuset="0x0000f000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="6" cpuset="0x00003000" complete_cpuset="0x00003000" online_cpuset="0x00003000" allowed_cpuset="0x00003000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="12" cpuset="0x00001000" complete_cpuset="0x00001000" online_cpuset="0x00001000" allowed_cpuset="0x00001000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="13" cpuset="0x00002000" complete_cpuset="0x00002000" online_cpuset="0x00002000" allowed_cpuset="0x00002000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_index="7" cpuset="0x0000c000" complete_cpuset="0x0000c000" online_cpuset="0x0000c000" allowed_cpuset="0x0000c000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="14" cpuset="0x00004000" complete_cpuset="0x00004000" online_cpuset="0x00004000" allowed_cpuset="0x00004000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="15" cpuset="0x00008000" complete_cpuset="0x00008000" online_cpuset="0x00008000" allowed_cpuset="0x00008000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="4" cpuset="0x000f0000" complete_cpuset="0x000f0000" online_cpuset="0x000f0000" allowed_cpuset="0x000f0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="8" cpuset="0x00030000" complete_cpuset="0x00030000" online_cpuset="0x00030000" allowed_cpuset="0x00030000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" online_cpuset="0x00010000" allowed_cpuset="0x00010000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" online_cpuset="0x00020000" allowed_cpuset="0x00020000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_index="9" cpuset="0x000c0000" complete_cpuset="0x000c0000" online_cpuset="0x000c0000" allowed_cpuset="0x000c0000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="18" cpuset="0x00040000" complete_cpuset="0x00040000" online_cpuset="0x00040000" allowed_cpuset="0x00040000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="19" cpuset="0x00080000" complete_cpuset="0x00080000" online_cpuset="0x00080000" allowed_cpuset="0x00080000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Socket" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="5" cpuset="0x00f00000" complete_cpuset="0x00f00000" online_cpuset="0x00f00000" allowed_cpuset="0x00f00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="4194304" depth="2" cache_linesize="32" cache_associativity="4">
+ <object type="Core" os_index="10" cpuset="0x00300000" complete_cpuset="0x00300000" online_cpuset="0x00300000" allowed_cpuset="0x00300000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="20" cpuset="0x00100000" complete_cpuset="0x00100000" online_cpuset="0x00100000" allowed_cpuset="0x00100000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="21" cpuset="0x00200000" complete_cpuset="0x00200000" online_cpuset="0x00200000" allowed_cpuset="0x00200000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ <object type="Core" os_index="11" cpuset="0x00c00000" complete_cpuset="0x00c00000" online_cpuset="0x00c00000" allowed_cpuset="0x00c00000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002">
+ <object type="Cache" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="22" cpuset="0x00400000" complete_cpuset="0x00400000" online_cpuset="0x00400000" allowed_cpuset="0x00400000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ <object type="Cache" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002" cache_size="32768" depth="1" cache_linesize="32" cache_associativity="4">
+ <object type="PU" os_index="23" cpuset="0x00800000" complete_cpuset="0x00800000" online_cpuset="0x00800000" allowed_cpuset="0x00800000" nodeset="0x00000002" complete_nodeset="0x00000002" allowed_nodeset="0x00000002"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object type="Machine" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" name="machine1" local_memory="4014239744">
+ <page_type size="4096" count="980039"/>
+ <page_type size="2097152" count="0"/>
+ <info name="DMIProductName" value="Latitude E6410"/>
+ <info name="DMIProductVersion" value="0001"/>
+ <info name="DMIBoardVendor" value="Dell Inc."/>
+ <info name="DMIBoardName" value="0667CC"/>
+ <info name="DMIBoardVersion" value="A00"/>
+ <info name="DMIBoardAssetTag" value=" "/>
+ <info name="DMIChassisVendor" value="Dell Inc."/>
+ <info name="DMIChassisType" value="9"/>
+ <info name="DMIChassisVersion" value=" "/>
+ <info name="DMIChassisAssetTag" value=""/>
+ <info name="DMIBIOSVendor" value="Dell Inc."/>
+ <info name="DMIBIOSVersion" value="A03"/>
+ <info name="DMIBIOSDate" value="05/28/2010"/>
+ <info name="DMISysVendor" value="Dell Inc."/>
+ <info name="Backend" value="Linux"/>
+ <info name="OSName" value="Linux"/>
+ <info name="OSRelease" value="3.0.0-1-amd64"/>
+ <info name="OSVersion" value="#1 SMP Sun Jul 24 02:24:44 UTC 2011"/>
+ <info name="HostName" value="rhododendron"/>
+ <info name="Architecture" value="x86_64"/>
+ <info name="AssemblerName" value="input1again"/>
+ <info name="AssemblerIndex" value="2"/>
+ <object type="Socket" os_index="0" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f">
+ <object type="Cache" cpuset="0x0000000f" complete_cpuset="0x0000000f" online_cpuset="0x0000000f" allowed_cpuset="0x0000000f" cache_size="4194304" depth="3" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="0" cpuset="0x00000005" complete_cpuset="0x00000005" online_cpuset="0x00000005" allowed_cpuset="0x00000005">
+ <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" online_cpuset="0x00000001" allowed_cpuset="0x00000001"/>
+ <object type="PU" os_index="2" cpuset="0x00000004" complete_cpuset="0x00000004" online_cpuset="0x00000004" allowed_cpuset="0x00000004"/>
+ </object>
+ </object>
+ </object>
+ <object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="262144" depth="2" cache_linesize="64" cache_associativity="8">
+ <object type="Cache" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a" cache_size="32768" depth="1" cache_linesize="64" cache_associativity="8">
+ <object type="Core" os_index="2" cpuset="0x0000000a" complete_cpuset="0x0000000a" online_cpuset="0x0000000a" allowed_cpuset="0x0000000a">
+ <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" online_cpuset="0x00000002" allowed_cpuset="0x00000002"/>
+ <object type="PU" os_index="3" cpuset="0x00000008" complete_cpuset="0x00000008" online_cpuset="0x00000008" allowed_cpuset="0x00000008"/>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+ </object>
+</topology>
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,38 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009-2011 inria. All rights reserved.
+# Copyright © 2009, 2011 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+assembler="$abs_top_builddir/utils/hwloc-assembler"
+abs_top_srcdir="@abs_top_srcdir@"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/test-hwloc-assembler.output"
+
+set -e
+
+$assembler $file \
+ --name input1 $abs_top_srcdir/utils/test-hwloc-assembler.input1 \
+ --name input2 $abs_top_srcdir/utils/test-hwloc-assembler.input2 \
+ --name input1again $abs_top_srcdir/utils/test-hwloc-assembler.input1
+diff @HWLOC_DIFF_U@ $abs_top_srcdir/utils/test-hwloc-assembler.output "$file"
+rm -rf "$tmp"
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-assembler.sh.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,48 @@
+0xffffffff,0xffffffff
+0xffffffffffffffff
+
+0x0000000f
+0x00000f0c
+0x0000800a
+
+0x55555555,0x55555555
+0xffffffff,0x0
+0xffff0000,0x0
+0xc0000000,0x000000ff
+0x66666666,0x66666666
+0x10101010,0x10101010
+0x8000c000,0x000ee0c0
+
+4
+4
+16
+
+0
+1
+2,3
+
+NUMANode:0.PU:0 NUMANode:0.PU:1
+NUMANode:0.Core:0fooNUMANode:0.Core:1
+Core:0.PU:0 Core:1.PU:0 Core:1.PU:1 Core:1.PU:2
+NUMANode:0.Core:0.PU:0 NUMANode:0.Core:1.PU:0 NUMANode:0.Core:1.PU:1 NUMANode:0.Core:1.PU:2
+
+Core:3 NUMANode:1 Core:8 PU:36 PU:37
+PU:22_PU:23_Core:6_Core:7_NUMANode:2
+
+0x00400000
+22
+
+33,34,35,36,37
+1foo2
+
+0x0000000b
+0x0000ff0f
+0x0000e03f
+
+0x00000001
+0xf0000000,0x0000000f
+0xffff0000,0x0000ffff
+0x0000000f
+0x00000001
+0x00000001,,0x0
+0xffffffff,0xffffffff
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,81 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2011 inria. All rights reserved.
+# Copyright © 2009, 2011 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+calc="$abs_top_builddir/utils/hwloc-calc"
+abs_top_srcdir="@abs_top_srcdir@"
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/test-hwloc-calc.output"
+
+set -e
+(
+ $calc --if synthetic --input "node:4 core:4 pu:4" root
+ $calc --if synthetic --input "node:4 core:4 pu:4" all --taskset
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" 0xf
+ $calc --if synthetic --input "node:4 core:4 pu:4" 0xf ~0x3 0xff0 '^0xf0'
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:0 pu:15 ~pu:0 '^pu:2'
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:even
+ $calc --if synthetic --input "node:4 core:4 pu:4" node:2-
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:12-
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:62:10
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:all.pu:1:2
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:odd.pu:0
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:6:2 core:3-4.pu:1-3 node:2.pu:14:2 node:3.core:3.pu:3
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" root --number-of node
+ $calc --if synthetic --input "node:4 core:4 pu:4" node:2 -N core
+ $calc --if synthetic --input "node:4 core:4 pu:4" node:2 -N 3
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" root --intersect Machine
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:4-7 -I NUMANode
+ $calc --if synthetic --input "node:4 core:4 pu:4" core:10-15 -I 1
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:2-3 --hierarchical node.pu
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:3-6 -H node.core --sep foo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:3-6 -H core.pu
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:11:4 -H node.core.pu
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:12-37 --largest
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:22-47 --largest --sep "_"
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:22-47 --single
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:22-47 --single --pulist
+ echo
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:33-37 --pulist --po
+ $calc --if synthetic --input "node:4 core:4 pu:4" pu:30-37 --nodelist --po --sep foo
+ echo
+ $calc --if synthetic --input "group:2 cache:2 pu:1" group:0 cache:3
+ $calc --if synthetic --input "group:2 group:2 cache:2 cache:2 pu:1" Group2:1 Group1:0
+ $calc --if synthetic --input "group:2 group:2 cache:2 cache:2 pu:1" l2:0-2 L1cache:13:3
+ echo
+ cat << EOF | $calc --if synthetic --input "node:4 core:4 pu:4"
+pu:0
+core:0 core:15
+node:0 node:3
+0x0001 0x00002 0x000004 0x000000000008
+0x0000000000000000000000000000000000000000000000000000000000000000000000000000001
+0x1,0x0,0x0
+root
+EOF
+) > "$file"
+diff @HWLOC_DIFF_U@ $abs_top_srcdir/utils/test-hwloc-calc.output "$file"
+rm -rf "$tmp"
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-calc.sh.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,53 @@
+
+Latency matrix between 2 Sockets (depth 1) by physical indexes (below Machine P#0):
+ index 0 1
+ 0 780000.000 1520000.000
+ 1 15200.000 1.000
+
+Latency matrix between 16 PUs (depth 4) by logical indexes (below Machine L#0):
+ index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ 0 1.000 2.000 2.000 2.000 4.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 1 2.000 1.000 2.000 2.000 4.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 2 2.000 2.000 1.000 2.000 4.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 3 2.000 2.000 2.000 1.000 4.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 4 4.000 4.000 4.000 4.000 1.000 2.000 2.000 2.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 5 4.000 4.000 4.000 4.000 2.000 1.000 2.000 2.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 6 4.000 4.000 4.000 4.000 2.000 2.000 1.000 2.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 7 4.000 4.000 4.000 4.000 2.000 2.000 2.000 1.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 8 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 1.000 2.000 2.000 2.000 4.000 4.000 4.000 4.000
+ 9 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 2.000 1.000 2.000 2.000 4.000 4.000 4.000 4.000
+ 10 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 2.000 2.000 1.000 2.000 4.000 4.000 4.000 4.000
+ 11 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 2.000 2.000 2.000 1.000 4.000 4.000 4.000 4.000
+ 12 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 4.000 1.000 2.000 2.000 2.000
+ 13 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 4.000 2.000 1.000 2.000 2.000
+ 14 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 4.000 2.000 2.000 1.000 2.000
+ 15 8.000 8.000 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 4.000 2.000 2.000 2.000 1.000
+
+Latency matrix between 4 Cores (depth 2) by physical indexes (below Machine P#0):
+ index 0 1 2 3
+ 0 1.000 4.000 8.000 8.000
+ 1 4.000 1.000 8.000 8.000
+ 2 8.000 8.000 1.000 4.000
+ 3 8.000 8.000 4.000 1.000
+Latency matrix between 12 PUs (depth 4) by physical indexes (below Group0 P#4294967295):
+ index 0 2 4 1 3 5 6 8 10 7 9 11
+ 0 1.000 2.000 2.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 2 2.000 1.000 2.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 4 2.000 2.000 1.000 4.000 4.000 4.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 1 4.000 4.000 4.000 1.000 2.000 2.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 3 4.000 4.000 4.000 2.000 1.000 2.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 5 4.000 4.000 4.000 2.000 2.000 1.000 8.000 8.000 8.000 8.000 8.000 8.000
+ 6 8.000 8.000 8.000 8.000 8.000 8.000 1.000 2.000 2.000 4.000 4.000 4.000
+ 8 8.000 8.000 8.000 8.000 8.000 8.000 2.000 1.000 2.000 4.000 4.000 4.000
+ 10 8.000 8.000 8.000 8.000 8.000 8.000 2.000 2.000 1.000 4.000 4.000 4.000
+ 7 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 1.000 2.000 2.000
+ 9 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 2.000 1.000 2.000
+ 11 8.000 8.000 8.000 8.000 8.000 8.000 4.000 4.000 4.000 2.000 2.000 1.000
+
+Latency matrix between 4 NUMANodes (depth 3) by logical indexes (below Machine L#1):
+ index 4 5 6 7
+ 4 1.000 4.000 8.000 8.000
+ 5 4.000 1.000 8.000 8.000
+ 6 8.000 8.000 1.000 4.000
+ 7 8.000 8.000 4.000 1.000
+
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distances.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,63 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2011 inria. All rights reserved.
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+distances="$abs_top_builddir/utils/hwloc-distances"
+abs_top_srcdir="@abs_top_srcdir@"
+
+# make sure we use default numeric formats
+LANG=C
+LC_ALL=C
+export LANG LC_ALL
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/test-hwloc-distances.output"
+
+set -e
+(
+ $distances -i "pu:4"
+ echo
+
+ HWLOC_Socket_DISTANCES=0,1:23.4,45.6,0.456,0.00003
+ export HWLOC_Socket_DISTANCES
+ $distances -i "sock:2 pu:2" -p
+ HWLOC_Socket_DISTANCES=none
+ echo
+
+ HWLOC_PU_DISTANCES=0-15:2*2*4
+ export HWLOC_PU_DISTANCES
+ $distances -i "core:8 pu:2" -l
+ HWLOC_PU_DISTANCES=none
+ echo
+
+ HWLOC_PU_DISTANCES=0,2,4,1,3,5,6,8,10,7,9,11:2*2*3
+ export HWLOC_PU_DISTANCES
+ HWLOC_Core_DISTANCES=0-3:2*2
+ export HWLOC_Core_DISTANCES
+ $distances -i "core:4 pu:6" -p
+ HWLOC_PU_DISTANCES=none
+ HWLOC_Core_DISTANCES=none
+ echo
+
+ HWLOC_NUMANode_DISTANCES=4-7:2*2
+ export HWLOC_NUMANode_DISTANCES
+ $distances -i "machine:4 node:4 pu:2" -l
+ HWLOC_NUMANode_DISTANCES=none
+ echo
+) > "$file"
+diff @HWLOC_DIFF_U@ $abs_top_srcdir/utils/test-hwloc-distances.output "$file"
+rm -rf "$tmp"
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.output 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,52 @@
+0x0000000f
+0x000000f0
+
+0x00000003
+0x0000000c
+0x00000030
+0x000000c0
+
+0x00000001
+0x00000002
+0x00000004
+0x00000008
+0x00000010
+0x00000020
+0x00000040
+0x00000080
+
+0x00000001
+0x00000001
+0x00000002
+0x00000002
+0x00000004
+0x00000004
+0x00000008
+0x00000010
+0x00000010
+0x00000020
+0x00000040
+0x00000040
+0x00000080
+
+0x00000001
+0x00000001
+0x00000002
+0x00000002
+0x00000004
+0x00000004
+0x00000008
+0x00000008
+0x00000010
+0x00000010
+0x00000020
+0x00000020
+0x00000040
+0x00000040
+0x00000080
+0x00000080
+
+0x00000007
+0x00000038
+0x0003fe00
+0x07fc0000
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,42 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2010 inria. All rights reserved.
+# Copyright © 2009 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+distrib="$abs_top_builddir/utils/hwloc-distrib"
+abs_top_srcdir="@abs_top_srcdir@"
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/test-hwloc-distrib.output"
+
+set -e
+(
+ $distrib --if synthetic --input "2 2 2" 2
+ echo
+ $distrib --if synthetic --input "2 2 2" 4
+ echo
+ $distrib --if synthetic --input "2 2 2" 8
+ echo
+ $distrib --if synthetic --input "2 2 2" 13
+ echo
+ $distrib --if synthetic --input "2 2 2" 16
+ echo
+ $distrib --if synthetic --input "3 3 3" 4
+) > "$file"
+diff @HWLOC_DIFF_U@ $abs_top_srcdir/utils/test-hwloc-distrib.output "$file"
+rm -rf "$tmp"
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-distrib.sh.in
___________________________________________________________________
Added: svn:executable
+ *
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.output
===================================================================
Added: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.sh.in
===================================================================
--- mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.sh.in (rev 0)
+++ mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.sh.in 2012-02-25 00:52:55 UTC (rev 9527)
@@ -0,0 +1,52 @@
+#!/bin/sh
+#-*-sh-*-
+
+#
+# Copyright © 2009 CNRS
+# Copyright © 2009-2011 inria. All rights reserved.
+# Copyright © 2009, 2011 Université Bordeaux 1
+# See COPYING in top-level directory.
+#
+
+abs_top_builddir="@abs_top_builddir@"
+ls="$abs_top_builddir/utils/lstopo"
+abs_top_srcdir="@abs_top_srcdir@"
+
+: ${TMPDIR=/tmp}
+{
+ tmp=`
+ (umask 077 && mktemp -d "$TMPDIR/fooXXXXXX") 2>/dev/null
+ ` &&
+ test -n "$tmp" && test -d "$tmp"
+} || {
+ tmp=$TMPDIR/foo$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || exit $?
+file="$tmp/test-hwloc-ls.output"
+
+unset DISPLAY
+
+set -e
+$ls
+(
+ $ls > $tmp/test.console
+ $ls -v > $tmp/test.console_verbose
+ $ls -c -v > $tmp/test.cpuset_verbose
+ $ls --taskset -v > $tmp/test.taskset
+ $ls --merge > $tmp/test.merge
+
+ at HWLOC_HAVE_LIBPCI_TRUE@ $ls --no-io > $tmp/test.no-io
+ at HWLOC_HAVE_LIBPCI_TRUE@ $ls --no-bridges > $tmp/test.no-bridges
+ at HWLOC_HAVE_LIBPCI_TRUE@ $ls --whole-io > $tmp/test.whole-io
+ at HWLOC_HAVE_LIBPCI_TRUE@ $ls -v --whole-io > $tmp/test.wholeio_verbose
+
+ $ls --whole-system > $tmp/test.whole-system
+ $ls --ps > $tmp/test.
+ $ls $tmp/test.txt
+ $ls $tmp/test.fig
+ $ls $tmp/test.xml
+ HWLOC_NO_LIBXML_EXPORT=1 $ls $tmp/test.xml
+ $ls --input "ma:1 no:2 so:1 ca:2 2" $tmp/test.synthetic
+) > "$file"
+diff @HWLOC_DIFF_U@ $abs_top_srcdir/utils/test-hwloc-ls.output "$file"
+rm -rf "$tmp"
Property changes on: mpich2/trunk/src/pm/hydra/tools/topo/hwloc/hwloc/utils/test-hwloc-ls.sh.in
___________________________________________________________________
Added: svn:executable
+ *
More information about the mpich2-commits
mailing list