Provided by: libmemkind-dev_1.1.0-0ubuntu1_amd64 bug

NAME

       hbwmalloc - The high bandwidth memory interface
       Note: hbwmalloc.h functionality is considered as stable API (STANDARD API).

SYNOPSIS

       #include <hbwmalloc.h>

       Link with -lmemkind

       int hbw_check_available(void);
       void* hbw_malloc(size_t size);
       void* hbw_calloc(size_t nmemb, size_t size);
       void* hbw_realloc (void *ptr, size_t size);
       void hbw_free(void *ptr);
       int hbw_posix_memalign(void **memptr, size_t alignment, size_t size);
       int hbw_posix_memalign_psize(void **memptr, size_t alignment, size_t size, hbw_pagesize_t pagesize);
       hbw_policy_t hbw_get_policy(void);
       int hbw_set_policy(hbw_policy_t mode);

DESCRIPTION

       hbw_check_available()  returns 0 if high bandwidth memory is available and an error code described in the
       ERRORS section if not.

       hbw_malloc() allocates size bytes of uninitialized high bandwidth memory. The allocated space is suitably
       aligned (after possible pointer coercion) for storage of any  type  of  object.  If  size  is  zero  then
       hbw_malloc() returns NULL.

       hbw_calloc()  allocates  space for nmemb objects in high bandwidth memory, each size bytes in length. The
       result is identical to calling hbw_malloc() with an argument of nmemb*size , with the exception that  the
       allocated  memory  is  explicitly  initialized  to  zero bytes.  If nmemb or size is 0, then hbw_calloc()
       returns NULL.

       hbw_realloc() changes the size of the previously allocated high bandwidth memory  referenced  by  ptr  to
       size  bytes.  The  contents of the memory are unchanged up to the lesser of the new and old sizes. If the
       new size is larger, the contents of the newly  allocated  portion  of  the  memory  are  undefined.  Upon
       success, the memory referenced by ptr is freed and a pointer to the newly allocated high bandwidth memory
       is returned.

       Note: hbw_realloc() may move the memory allocation, resulting in a different return value than ptr.

       If  ptr  is  NULL, the hbw_realloc() function behaves identically to hbw_malloc() for the specified size.
       The address  ptr,  if  not  NULL,  was  returned  by  a  previous  call  to  hbw_malloc(),  hbw_calloc(),
       hbw_realloc(),  or  hbw_posix_memalign().   Otherwise,  or  if hbw_free(ptr) was called before, undefined
       behavior occurs.

       Note: hbw_realloc() cannot be used with a pointer returned by hbw_posix_memalign_psize().

       hbw_free() causes the allocated memory referenced by ptr to be made available for future allocations.  If
       ptr  is NULL, no action occurs.  The address ptr, if not NULL, must have been returned by a previous call
       to  hbw_malloc(),  hbw_calloc(),  hbw_realloc(),  hbw_posix_memalign(),  or   hbw_posix_memalign_psize().
       Otherwise, if hbw_free(ptr) was called before, undefined behavior occurs.

       hbw_posix_memalign()  allocates  size  bytes  of  high  bandwidth  memory such that the allocation's base
       address is an even multiple of alignment, and returns the allocation in the value pointed to  by  memptr.
       The requested alignment must be a power of 2 at least as large as sizeof(void *).

       hbw_posix_memalign_psize()  allocates size bytes of high bandwidth memory such that the allocation's base
       address is an even multiple of alignment, and returns the allocation in the value pointed to  by  memptr.
       The  requested  alignment  must  be a power of 2 at least as large as sizeof(void *).  The memory will be
       allocated using pages determined by the pagesize variable which may be one of  the  following  enumerated
       values:

       HBW_PAGESIZE_4KB
              The  four  kilobyte  page  size  option.  Note  that  with  transparent  huge  pages enabled these
              allocations may be promoted by the operating system to two megabyte pages.

       HBW_PAGESIZE_2MB
              The two megabyte page size option.

       HBW_PAGESIZE_1GB
              This option allows the user to specify arbitrary sizes backed by  one  gigabytes  pages.  Gigabyte
              pages  are allocated even if the size is not a modulo of 1GB. A good example of using this feature
              with realloc is shown in gb_realloc_example.c

       HBW_PAGESIZE_1GB_STRICT
              The one gigabyte page size option. The total size of the allocation must be a multiple of 1GB with
              this option, otherwise the allocation will fail.

       hbw_get_policy() returns the current fallback policy when insufficient high bandwith memory is available.

       hbw_set_policy() sets the current fallback policy. The policy can be modified only once in  the  lifetime
       of  an  application and before calling hbw_*alloc() or hbw_posix_memalign*() function.
       Note: If the policy is not set, than HBW_POLICY_PREFERRED will be used by default.

       HBW_POLICY_BIND
              If  insufficient  high  bandwidth  memory  from  the  nearest  NUMA node is available to satisfy a
              request, the allocated pointer is set to NULL and errno is set to ENOMEM.   If  insufficient  high
              bandwidth  memory  pages  are available at fault time the Out Of Memory (OOM) killer is triggered.
              Note that pages are faulted exclusively from the high bandwidth  NUMA  node  nearest  at  time  of
              allocation, not at time of fault.

       HBW_POLICY_PREFERRED
              If  insufficient memory is available from the high bandwidth NUMA node closest at allocation time,
              fall back to standard memory (default) with the smallest NUMA distance.

       HBW_POLICY_INTERLEAVE
              Interleave faulted pages from across all high bandwidth NUMA nodes using standard size pages  (the
              Transparent Huge Page feature is disabled).

RETURN VALUE

       hbw_get_policy()  returns  HBW_POLICY_BIND  or  HBW_POLICY_PREFERRED  which  represents  the current high
       bandwidth policy.  hbw_free() do not have return value.   hbw_malloc()  hbw_calloc(),  and  hbw_realloc()
       return  the  pointer  to  the  allocated  memory,  or  NULL  if the request fails.  hbw_posix_memalign(),
       hbw_posix_memalign_psize() and hbw_set_policy() return zero on  success  and  return  an  error  code  as
       described in the ERRORS section below on failure.

ERRORS

       Error codes described here are the POSIX standard error codes as defined in <errno.h>

       hbw_check_available()
              returns ENODEV if high-bandwidth memory is unavailable.

       hbw_posix_memalign() and hbw_posix_memalign_psize()
              If  the  alignment parameter is not a power of two, or was not a multiple of sizoeof(void *), then
              EINVAL is returned. If there was insufficient  memory  to  satisfy  the  request  then  ENOMEM  is
              returned.

       hbw_set_policy()
              returns  EPERM  if  hbw_set_policy  ()  was  called more than once, or EINVAL if mode argument was
              neither HBW_POLICY_PREFERRED, HBW_POLICY_BIND nor HBW_POLICY_INTERLEAVE.

NOTES

       The hbwmalloc.h file defines the external functions and enumerations for  the  hbwmalloc  library.  These
       interfaces define a heap manager that targets high bandwidth memory numa nodes.

FILES

       /usr/bin/memkind-hbw-nodes
              Prints a comma separated list of high bandwidth nodes.

ENVIRONMENT

       MEMKIND_HBW_NODES
              This  environment  varaible  is  a  comma  separated  list  of NUMA nodes that are treated as high
              bandwidth. Uses the libnuma routine numa_parse_nodestring() for parsing, so the  syntax  described
              in the numa(3) man page for this routine applies for example: 1-3,5 is a valid setting.

       MEMKIND_ARENA_NUM_PER_KIND
              This  environment  variable allows leveraging internal mechanism of the library for setting number
              of arenas per kind. Value should be a positive  integer  (not  greater  than  INT_MAX  defined  in
              limits.h).   The  user  should  set  the value based on the characteristics of application that is
              using the library.  Higher  value  can  provide  better  performance  in  extremely  multithreaded
              applications at the cost of memory overhead. See section "IMPLEMENTATION NOTES" of jemalloc(3) for
              more details about arenas.

COPYRIGHT

       Copyright (C) 2014 - 2016 Intel Corporation. All rights reserved.

SEE ALSO

       malloc(3), numa(3), numactl(8), mbind(2), mmap(2), move_pages(2) jemalloc(3) memkind(3)

Intel Corporation                                  2015-03-31                                       HBWMALLOC(3)