示例#1
0
int
hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
    nodeset = hwloc_fix_membind(topology, nodeset);
    if (!nodeset)
        return -1;

    if (flags & HWLOC_MEMBIND_PROCESS) {
        if (topology->binding_hooks.set_thisproc_membind)
            return topology->binding_hooks.set_thisproc_membind(topology, nodeset, policy, flags);
    } else if (flags & HWLOC_MEMBIND_THREAD) {
        if (topology->binding_hooks.set_thisthread_membind)
            return topology->binding_hooks.set_thisthread_membind(topology, nodeset, policy, flags);
    } else {
        if (topology->binding_hooks.set_thisproc_membind) {
            int err = topology->binding_hooks.set_thisproc_membind(topology, nodeset, policy, flags);
            if (err >= 0 || errno != ENOSYS)
                return err;
            /* ENOSYS, fallback */
        }
        if (topology->binding_hooks.set_thisthread_membind)
            return topology->binding_hooks.set_thisthread_membind(topology, nodeset, policy, flags);
    }

    errno = ENOSYS;
    return -1;
}
示例#2
0
文件: bind.c 项目: AbheekG/chapel
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)
{
  nodeset = hwloc_fix_membind(topology, nodeset);
  if (!nodeset)
    return -1;

  if (topology->binding_hooks.set_area_membind)
    return topology->binding_hooks.set_area_membind(topology, addr, len, nodeset, policy, flags);

  errno = ENOSYS;
  return -1;
}
示例#3
0
文件: bind.c 项目: AbheekG/chapel
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)
{
  nodeset = hwloc_fix_membind(topology, nodeset);
  if (!nodeset)
    return -1;

  if (topology->binding_hooks.set_proc_membind)
    return topology->binding_hooks.set_proc_membind(topology, pid, nodeset, policy, flags);

  errno = ENOSYS;
  return -1;
}
示例#4
0
int
hwloc_set_membind_nodeset(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
  nodeset = hwloc_fix_membind(topology, nodeset);
  if (!nodeset)
    return -1;

  if (flags & HWLOC_MEMBIND_PROCESS) {
    if (topology->set_thisproc_membind)
      return topology->set_thisproc_membind(topology, nodeset, policy, flags);
  } else if (flags & HWLOC_MEMBIND_THREAD) {
    if (topology->set_thisthread_membind)
      return topology->set_thisthread_membind(topology, nodeset, policy, flags);
  } else {
    if (topology->set_thisproc_membind)
      return topology->set_thisproc_membind(topology, nodeset, policy, flags);
    else if (topology->set_thisthread_membind)
      return topology->set_thisthread_membind(topology, nodeset, policy, flags);
  }

  errno = ENOSYS;
  return -1;
}
示例#5
0
文件: bind.c 项目: AbheekG/chapel
void *
hwloc_alloc_membind_nodeset(hwloc_topology_t topology, size_t len, hwloc_const_nodeset_t nodeset, hwloc_membind_policy_t policy, int flags)
{
  void *p;
  nodeset = hwloc_fix_membind(topology, nodeset);
  if (!nodeset)
    goto fallback;
  if (flags & HWLOC_MEMBIND_MIGRATE) {
    errno = EINVAL;
    goto fallback;
  }

  if (topology->binding_hooks.alloc_membind)
    return topology->binding_hooks.alloc_membind(topology, len, nodeset, policy, flags);
  else if (topology->binding_hooks.set_area_membind) {
    p = hwloc_alloc(topology, len);
    if (!p)
      return NULL;
    if (topology->binding_hooks.set_area_membind(topology, p, len, nodeset, policy, flags) && flags & HWLOC_MEMBIND_STRICT) {
      int error = errno;
      free(p);
      errno = error;
      return NULL;
    }
    return p;
  } else {
    errno = ENOSYS;
  }

fallback:
  if (flags & HWLOC_MEMBIND_STRICT)
    /* Report error */
    return NULL;
  /* Never mind, allocate anyway */
  return hwloc_alloc(topology, len);
}