summaryrefslogtreecommitdiffstats
path: root/xmrstak/backend/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'xmrstak/backend/cpu')
-rw-r--r--xmrstak/backend/cpu/hwlocMemory.cpp64
-rw-r--r--xmrstak/backend/cpu/hwlocMemory.hpp56
2 files changed, 66 insertions, 54 deletions
diff --git a/xmrstak/backend/cpu/hwlocMemory.cpp b/xmrstak/backend/cpu/hwlocMemory.cpp
new file mode 100644
index 0000000..94d2b53
--- /dev/null
+++ b/xmrstak/backend/cpu/hwlocMemory.cpp
@@ -0,0 +1,64 @@
+#include "xmrstak/backend/cpu/hwlocMemory.hpp"
+
+#ifndef CONF_NO_HWLOC
+
+#include "xmrstak/misc/console.hpp"
+
+#include <hwloc.h>
+
+/** pin memory to NUMA node
+ *
+ * Set the default memory policy for the current thread to bind memory to the
+ * NUMA node.
+ *
+ * @param puId core id
+ */
+void bindMemoryToNUMANode( size_t puId )
+{
+ int depth;
+ hwloc_topology_t topology;
+
+ hwloc_topology_init(&topology);
+ hwloc_topology_load(topology);
+
+ if(!hwloc_topology_get_support(topology)->membind->set_thisthread_membind)
+ {
+ printer::inst()->print_msg(L0, "hwloc: set_thisthread_membind not supported");
+ hwloc_topology_destroy(topology);
+ return;
+ }
+
+ depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU);
+
+ for( size_t i = 0;
+ i < hwloc_get_nbobjs_by_depth(topology, depth);
+ i++ )
+ {
+ hwloc_obj_t pu = hwloc_get_obj_by_depth(topology, depth, i);
+ if( pu->os_index == puId )
+ {
+ if( 0 > hwloc_set_membind_nodeset(
+ topology,
+ pu->nodeset,
+ HWLOC_MEMBIND_BIND,
+ HWLOC_MEMBIND_THREAD))
+ {
+ printer::inst()->print_msg(L0, "hwloc: can't bind memory");
+ }
+ else
+ {
+ printer::inst()->print_msg(L0, "hwloc: memory pinned");
+ break;
+ }
+ }
+ }
+
+ hwloc_topology_destroy(topology);
+}
+#else
+
+void bindMemoryToNUMANode( size_t )
+{
+}
+
+#endif
diff --git a/xmrstak/backend/cpu/hwlocMemory.hpp b/xmrstak/backend/cpu/hwlocMemory.hpp
index 69742be..2130c2c 100644
--- a/xmrstak/backend/cpu/hwlocMemory.hpp
+++ b/xmrstak/backend/cpu/hwlocMemory.hpp
@@ -1,10 +1,6 @@
#pragma once
-#include "xmrstak/misc/console.hpp"
-
-#ifndef CONF_NO_HWLOC
-
-#include <hwloc.h>
+#include <cstddef>
/** pin memory to NUMA node
*
@@ -13,52 +9,4 @@
*
* @param puId core id
*/
-void bindMemoryToNUMANode( size_t puId )
-{
- int depth;
- hwloc_topology_t topology;
-
- hwloc_topology_init(&topology);
- hwloc_topology_load(topology);
-
- if(!hwloc_topology_get_support(topology)->membind->set_thisthread_membind)
- {
- printer::inst()->print_msg(L0, "hwloc: set_thisthread_membind not supported");
- hwloc_topology_destroy(topology);
- return;
- }
-
- depth = hwloc_get_type_depth(topology, HWLOC_OBJ_PU);
-
- for( size_t i = 0;
- i < hwloc_get_nbobjs_by_depth(topology, depth);
- i++ )
- {
- hwloc_obj_t pu = hwloc_get_obj_by_depth(topology, depth, i);
- if( pu->os_index == puId )
- {
- if( 0 > hwloc_set_membind_nodeset(
- topology,
- pu->nodeset,
- HWLOC_MEMBIND_BIND,
- HWLOC_MEMBIND_THREAD))
- {
- printer::inst()->print_msg(L0, "hwloc: can't bind memory");
- }
- else
- {
- printer::inst()->print_msg(L0, "hwloc: memory pinned");
- break;
- }
- }
- }
-
- hwloc_topology_destroy(topology);
-}
-#else
-
-void bindMemoryToNUMANode( size_t )
-{
-}
-
-#endif
+void bindMemoryToNUMANode( size_t puId );
OpenPOWER on IntegriCloud