# ------------------------------------------------------------------- # Cpuset API, see Sys::Hwloc::Cpuset for accessors # $Id: hwloc_cpuset.xsh,v 1.9 2011/01/05 18:08:55 bzbkalli Exp $ # ------------------------------------------------------------------- # -- new/destroy hwloc_cpuset_t hwloc_cpuset_alloc() PROTOTYPE: PREINIT: hwloc_cpuset_t set = NULL; CODE: if((set = hwloc_cpuset_alloc()) == NULL) XSRETURN_UNDEF; else RETVAL = set; OUTPUT: RETVAL hwloc_cpuset_t hwloc_cpuset_dup(set) hwloc_cpuset_t set ALIAS: Sys::Hwloc::Cpuset::dup = 1 PREINIT: hwloc_cpuset_t s = NULL; CODE: PERL_UNUSED_VAR(ix); if((s = hwloc_cpuset_dup(set)) == NULL) XSRETURN_UNDEF; else RETVAL = s; OUTPUT: RETVAL void hwloc_cpuset_free(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::free = 1 Sys::Hwloc::Cpuset::destroy = 2 Sys::Hwloc::hwloc_cpuset_fill = 10 Sys::Hwloc::Cpuset::fill = 11 Sys::Hwloc::hwloc_cpuset_singlify = 20 Sys::Hwloc::Cpuset::singlify = 21 Sys::Hwloc::hwloc_cpuset_zero = 30 Sys::Hwloc::Cpuset::zero = 31 PPCODE: if(ix < 10) { hwloc_cpuset_free(set); sv_setref_pv(ST(0), "Sys::Hwloc::Cpuset", (void *)NULL); } else if(ix < 20) hwloc_cpuset_fill(set); else if(ix < 30) hwloc_cpuset_singlify(set); else if(ix < 40) hwloc_cpuset_zero(set); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_free, alias = %d", (int)ix); # -- set void hwloc_cpuset_all_but_cpu(set,cpu) hwloc_cpuset_t set unsigned cpu PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::all_but_cpu = 1 Sys::Hwloc::hwloc_cpuset_clr = 10 Sys::Hwloc::Cpuset::clr = 11 Sys::Hwloc::hwloc_cpuset_cpu = 20 Sys::Hwloc::Cpuset::cpu = 21 Sys::Hwloc::hwloc_cpuset_set = 30 Sys::Hwloc::Cpuset::set = 31 PPCODE: if(ix < 10) hwloc_cpuset_all_but_cpu(set,cpu); else if(ix < 20) hwloc_cpuset_clr(set,cpu); else if(ix < 30) hwloc_cpuset_cpu(set,cpu); else if(ix < 40) hwloc_cpuset_set(set,cpu); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_all_but_cpu, alias = %d", (int)ix); #if HWLOC_XSAPI_VERSION void hwloc_cpuset_clr_range(set,cpua,cpue) hwloc_cpuset_t set unsigned cpua unsigned cpue PROTOTYPE: $$$ ALIAS: Sys::Hwloc::Cpuset::clr_range = 1 PPCODE: PERL_UNUSED_VAR(ix); hwloc_cpuset_clr_range(set,cpua,cpue); #endif void hwloc_cpuset_set_range(set,cpua,cpue) hwloc_cpuset_t set unsigned cpua unsigned cpue PROTOTYPE: $$$ ALIAS: Sys::Hwloc::Cpuset::set_range = 1 PPCODE: PERL_UNUSED_VAR(ix); hwloc_cpuset_set_range(set,cpua,cpue); void hwloc_cpuset_copy(dst,src) hwloc_cpuset_t dst hwloc_cpuset_t src PROTOTYPE: $$ PPCODE: hwloc_cpuset_copy(dst,src); void hwloc_cpuset_from_ith_ulong(set,i,mask) hwloc_cpuset_t set unsigned i unsigned long mask PROTOTYPE: $$$ ALIAS: Sys::Hwloc::Cpuset::from_ith_ulong = 1 PREINIT: unsigned long lmask = mask; PPCODE: PERL_UNUSED_VAR(ix); hwloc_cpuset_from_ith_ulong(set,i,lmask); #if HWLOC_XSAPI_VERSION int hwloc_cpuset_from_string(set,string) hwloc_cpuset_t set const char *string PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::from_string = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_from_string(set,string); OUTPUT: RETVAL int hwloc_cpuset_from_liststring(set,string) hwloc_cpuset_t set const char *string PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::from_liststring = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = _hwloc_cpuset_list_sscanf(set,string); OUTPUT: RETVAL #else hwloc_cpuset_t hwloc_cpuset_from_string(string) const char *string PROTOTYPE: $ CODE: RETVAL = hwloc_cpuset_from_string(string); OUTPUT: RETVAL #endif void hwloc_cpuset_from_ulong(set,mask) hwloc_cpuset_t set unsigned long mask PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::from_ulong = 1 PREINIT: unsigned long lmask = mask; PPCODE: PERL_UNUSED_VAR(ix); hwloc_cpuset_from_ulong(set,lmask); # -- setlogic #if HWLOC_XSAPI_VERSION void hwloc_cpuset_and(res,set1,set2) hwloc_cpuset_t res hwloc_cpuset_t set1 hwloc_cpuset_t set2 PROTOTYPE: $$$ ALIAS: Sys::Hwloc::hwloc_cpuset_andnot = 1 Sys::Hwloc::hwloc_cpuset_or = 2 Sys::Hwloc::hwloc_cpuset_xor = 3 PPCODE: if(ix == 0) hwloc_cpuset_and(res,set1,set2); else if(ix == 1) hwloc_cpuset_andnot(res,set1,set2); else if(ix == 2) hwloc_cpuset_or(res,set1,set2); else if(ix == 3) hwloc_cpuset_xor(res,set1,set2); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_and, alias = %d", (int)ix); void hwloc_cpuset_not(res,set) hwloc_cpuset_t res hwloc_cpuset_t set PROTOTYPE: $$ PPCODE: hwloc_cpuset_not(res,set); #else void hwloc_cpuset_andset(set1,set2) hwloc_cpuset_t set1 hwloc_cpuset_t set2 PROTOTYPE: $$ ALIAS: Sys::Hwloc::hwloc_cpuset_orset = 2 Sys::Hwloc::hwloc_cpuset_xorset = 3 PPCODE: if(ix == 0) hwloc_cpuset_andset(set1,set2); else if(ix == 2) hwloc_cpuset_orset(set1,set2); else if(ix == 3) hwloc_cpuset_xorset(set1,set2); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_andset, alias = %d", (int)ix); #endif # -- get int hwloc_cpuset_first(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::first = 1 Sys::Hwloc::hwloc_cpuset_last = 10 Sys::Hwloc::Cpuset::last = 11 CODE: if(ix < 10) RETVAL = hwloc_cpuset_first(set); else if(ix < 20) RETVAL = hwloc_cpuset_last(set); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_first, alias = %d", (int)ix); OUTPUT: RETVAL #if HWLOC_XSAPI_VERSION int hwloc_cpuset_next(set,prev_cpu) hwloc_cpuset_t set unsigned prev_cpu PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::next = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_next(set,prev_cpu); OUTPUT: RETVAL #endif void hwloc_cpuset_ids(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::ids = 1 PREINIT: unsigned id; int count = 0; PPCODE: PERL_UNUSED_VAR(ix); hwloc_cpuset_foreach_begin(id,set) { mXPUSHu(id); count++; } hwloc_cpuset_foreach_end(); XSRETURN(count); SV * hwloc_cpuset_sprintf(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::sprintf = 1 PREINIT: int rc; CODE: PERL_UNUSED_VAR(ix); if((rc = hwloc_cpuset_snprintf(sbuf, sizeof(sbuf), set)) == -1) XSRETURN_UNDEF; else RETVAL = newSVpvn(sbuf,(STRLEN)rc); OUTPUT: RETVAL #if HWLOC_XSAPI_VERSION SV * hwloc_cpuset_list_sprintf(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::sprintf_list = 1 Sys::Hwloc::hwloc_cpuset_sprintf_list = 2 PREINIT: int rc; CODE: PERL_UNUSED_VAR(ix); if((rc = _hwloc_cpuset_list_snprintf(sbuf, sizeof(sbuf), set)) == -1) XSRETURN_UNDEF; else RETVAL = newSVpvn(sbuf,(STRLEN)rc); OUTPUT: RETVAL #endif unsigned long hwloc_cpuset_to_ith_ulong(set,i) hwloc_cpuset_t set unsigned i PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::to_ith_ulong = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_to_ith_ulong(set,i); OUTPUT: RETVAL unsigned long hwloc_cpuset_to_ulong(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::to_ulong = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_to_ulong(set); OUTPUT: RETVAL int hwloc_cpuset_weight(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::weight = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_weight(set); OUTPUT: RETVAL # -- test #if HWLOC_XSAPI_VERSION int hwloc_cpuset_compare(set1,set2) hwloc_cpuset_t set1 hwloc_cpuset_t set2 PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::compare = 1 Sys::Hwloc::hwloc_cpuset_isequal = 10 Sys::Hwloc::Cpuset::isequal = 11 Sys::Hwloc::hwloc_cpuset_compare_first = 20 Sys::Hwloc::Cpuset::compare_first = 21 Sys::Hwloc::hwloc_cpuset_intersects = 30 Sys::Hwloc::Cpuset::intersects = 31 CODE: if(ix < 10) RETVAL = hwloc_cpuset_compare(set1,set2); else if(ix < 20) RETVAL = hwloc_cpuset_isequal(set1,set2); else if(ix < 30) RETVAL = hwloc_cpuset_compare_first(set1,set2); else if(ix < 40) RETVAL = hwloc_cpuset_intersects(set1,set2); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_compare, alias = %d", (int)ix); OUTPUT: RETVAL #else int hwloc_cpuset_compar(set1,set2) hwloc_cpuset_t set1 hwloc_cpuset_t set2 PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::compar = 1 Sys::Hwloc::hwloc_cpuset_isequal = 10 Sys::Hwloc::Cpuset::isequal = 11 Sys::Hwloc::hwloc_cpuset_compar_first = 20 Sys::Hwloc::Cpuset::compar_first = 21 Sys::Hwloc::hwloc_cpuset_intersects = 30 Sys::Hwloc::Cpuset::intersects = 31 CODE: if(ix < 10) RETVAL = hwloc_cpuset_compar(set1,set2); else if(ix < 20) RETVAL = hwloc_cpuset_isequal(set1,set2); else if(ix < 30) RETVAL = hwloc_cpuset_compar_first(set1,set2); else if(ix < 40) RETVAL = hwloc_cpuset_intersects(set1,set2); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_compar, alias = %d", (int)ix); OUTPUT: RETVAL #endif int hwloc_cpuset_isincluded(subset,superset) hwloc_cpuset_t subset hwloc_cpuset_t superset PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::isincluded = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_isincluded(subset,superset); OUTPUT: RETVAL int hwloc_cpuset_includes(superset,subset) hwloc_cpuset_t subset hwloc_cpuset_t superset PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::includes = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_isincluded(subset,superset); OUTPUT: RETVAL int hwloc_cpuset_isfull(set) hwloc_cpuset_t set PROTOTYPE: $ ALIAS: Sys::Hwloc::Cpuset::isfull = 1 Sys::Hwloc::hwloc_cpuset_iszero = 10 Sys::Hwloc::Cpuset::iszero = 11 CODE: if(ix < 10) RETVAL = hwloc_cpuset_isfull(set); else if(ix < 20) RETVAL = hwloc_cpuset_iszero(set); else croak("Should not come here in Sys::Hwloc::hwloc_cpuset_isfull, alias = %d", (int)ix); OUTPUT: RETVAL int hwloc_cpuset_isset(set,cpu) hwloc_cpuset_t set unsigned cpu PROTOTYPE: $$ ALIAS: Sys::Hwloc::Cpuset::isset = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_cpuset_isset(set,cpu); OUTPUT: RETVAL #if HWLOC_XSAPI_VERSION hwloc_cpuset_t hwloc_topology_get_complete_cpuset(topo) hwloc_topology_t topo PROTOTYPE: $ ALIAS: Sys::Hwloc::Topology::get_complete_cpuset = 1 Sys::Hwloc::hwloc_topology_get_topology_cpuset = 10 Sys::Hwloc::Topology::get_topology_cpuset = 11 Sys::Hwloc::hwloc_topology_get_online_cpuset = 20 Sys::Hwloc::Topology::get_online_cpuset = 21 Sys::Hwloc::hwloc_topology_get_allowed_cpuset = 30 Sys::Hwloc::Topology::get_allowed_cpuset = 31 CODE: if(ix < 10) RETVAL = (hwloc_cpuset_t)hwloc_topology_get_complete_cpuset(topo); else if(ix < 20) RETVAL = (hwloc_cpuset_t)hwloc_topology_get_topology_cpuset(topo); else if(ix < 30) RETVAL = (hwloc_cpuset_t)hwloc_topology_get_online_cpuset(topo); else if(ix < 40) RETVAL = (hwloc_cpuset_t)hwloc_topology_get_allowed_cpuset(topo); else croak("Should not come here in Sys::Hwloc::hwloc_topology_get_complete_cpuset, alias = %d", (int)ix); OUTPUT: RETVAL #endif # ------------------------------------------------------------------- # Finding objects inside cpusets # ------------------------------------------------------------------- unsigned hwloc_get_nbobjs_inside_cpuset_by_depth(topo,set,depth) hwloc_topology_t topo hwloc_cpuset_t set unsigned depth PROTOTYPE: $$$ ALIAS: Sys::Hwloc::Topology::get_nbobjs_inside_cpuset_by_depth = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_get_nbobjs_inside_cpuset_by_depth(topo,set,depth); OUTPUT: RETVAL int hwloc_get_nbobjs_inside_cpuset_by_type(topo,set,type) hwloc_topology_t topo hwloc_cpuset_t set int type PROTOTYPE: $$$ ALIAS: Sys::Hwloc::Topology::get_nbobjs_inside_cpuset_by_type = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_get_nbobjs_inside_cpuset_by_type(topo,set,type); OUTPUT: RETVAL hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth(topo,set,depth,idx) hwloc_topology_t topo hwloc_cpuset_t set unsigned depth unsigned idx PROTOTYPE: $$$$ ALIAS: Sys::Hwloc::Topology::get_obj_inside_cpuset_by_depth = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_get_obj_inside_cpuset_by_depth(topo,set,depth,idx); OUTPUT: RETVAL hwloc_obj_t hwloc_get_obj_inside_cpuset_by_type(topo,set,type,idx) hwloc_topology_t topo hwloc_cpuset_t set int type unsigned idx PROTOTYPE: $$$$ ALIAS: Sys::Hwloc::Topology::get_obj_inside_cpuset_by_type = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_get_obj_inside_cpuset_by_type(topo,set,type,idx); OUTPUT: RETVAL #if HWLOC_XSAPI_VERSION hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(topo,set) hwloc_topology_t topo hwloc_cpuset_t set PROTOTYPE: $$ ALIAS: Sys::Hwloc::Topology::get_first_largest_obj_inside_cpuset = 1 CODE: PERL_UNUSED_VAR(ix); RETVAL = hwloc_get_first_largest_obj_inside_cpuset(topo,set); OUTPUT: RETVAL #endif hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth(topo,set,depth,prev) hwloc_topology_t topo hwloc_cpuset_t set unsigned depth SV *prev PROTOTYPE: $$$$ ALIAS: Sys::Hwloc::Topology::get_next_obj_inside_cpuset_by_depth = 1 PREINIT: hwloc_obj_t o = NULL; CODE: PERL_UNUSED_VAR(ix); o = SV2hwlocObj(prev, "Sys::Hwloc::hwloc_get_next_obj_inside_cpuset_by_depth()", 4, 1); RETVAL = hwloc_get_next_obj_inside_cpuset_by_depth(topo,set,depth,o); OUTPUT: RETVAL hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_type(topo,set,type,prev) hwloc_topology_t topo hwloc_cpuset_t set int type SV *prev PROTOTYPE: $$$$ ALIAS: Sys::Hwloc::Topology::get_next_obj_inside_cpuset_by_type = 1 PREINIT: hwloc_obj_t o = NULL; CODE: PERL_UNUSED_VAR(ix); o = SV2hwlocObj(prev, "Sys::Hwloc::hwloc_get_next_obj_inside_cpuset_by_type()", 4, 1); RETVAL = hwloc_get_next_obj_inside_cpuset_by_type(topo,set,type,o); OUTPUT: RETVAL void hwloc_get_largest_objs_inside_cpuset(topo,set) hwloc_topology_t topo hwloc_cpuset_t set PROTOTYPE: $$ ALIAS: Sys::Hwloc::Topology::get_largest_objs_inside_cpuset = 1 PREINIT: int rc; int i; hwloc_obj_t *objs = NULL; PPCODE: PERL_UNUSED_VAR(ix); if((objs = (hwloc_obj_t *)malloc(1024 * sizeof(hwloc_obj_t *))) == NULL) croak("Failed to allocate memory"); rc = hwloc_get_largest_objs_inside_cpuset(topo,set,objs,1024); if(rc < 0) rc = 0; EXTEND(SP, rc); for(i = 0; i < rc; i++) PUSHs(sv_2mortal(hwlocObj2SV(objs[i]))); free(objs); XSRETURN(rc);