inline void __dumpContainerVariableStart(Variable* variable) { if (variable->type->value == Type::HARRAY || variable->type->value == Type::HMAP) { harray<hstr> types; foreach (Type*, it, variable->type->subTypes) { types += hsprintf("%02X", (*it)->value); } if (variable->containerSize > 0) { OPEN_NODE(hsprintf("Container sub_types=\"%s\"", types.joined(',').cStr())); } else { WRITE_NODE(hsprintf("Container sub_types=\"%s\"", types.joined(',').cStr())); } }
static void numa_mapping(void) { int node, cpu, core; int i, j, h; unsigned long work, bit; int count = 0; for (node = 0; node < common -> num_nodes; node ++) { core = 0; for (cpu = 0; cpu < common -> num_procs; cpu ++) { if (common -> node_info[node] & common -> avail & (1UL << cpu)) { common -> cpu_info[count] = WRITE_CORE(core) | WRITE_NODE(node) | WRITE_CPU(cpu); count ++; core ++; } } } #ifdef DEBUG fprintf(stderr, "\nFrom /sys ...\n\n"); for (cpu = 0; cpu < count; cpu++) fprintf(stderr, "CPU (%2d) : %08lx\n", cpu, common -> cpu_info[cpu]); #endif h = 1; while (h < count) h = 2 * h + 1; while (h > 1) { h /= 2; for (i = h; i < count; i++) { work = common -> cpu_info[i]; bit = CPU_ISSET(i, &cpu_orig_mask[0]); j = i - h; while (work < common -> cpu_info[j]) { common -> cpu_info[j + h] = common -> cpu_info[j]; if (CPU_ISSET(j, &cpu_orig_mask[0])) { CPU_SET(j + h, &cpu_orig_mask[0]); } else { CPU_CLR(j + h, &cpu_orig_mask[0]); } j -= h; if (j < 0) break; } common -> cpu_info[j + h] = work; if (bit) { CPU_SET(j + h, &cpu_orig_mask[0]); } else { CPU_CLR(j + h, &cpu_orig_mask[0]); } } } #ifdef DEBUG fprintf(stderr, "\nSorting ...\n\n"); for (cpu = 0; cpu < count; cpu++) fprintf(stderr, "CPU (%2d) : %08lx\n", cpu, common -> cpu_info[cpu]); #endif }