summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJosh Blum2012-10-07 02:46:09 -0700
committerJosh Blum2012-10-07 02:46:09 -0700
commitc69c2f9e891915e43963010e1baf34740b55f8c2 (patch)
tree14158408196d42ccb7716dc6e31b9338fb4f6c58 /lib
parent84d3b87dfedf273800ea7f579a0c9a5d5c80099a (diff)
downloadsandhi-c69c2f9e891915e43963010e1baf34740b55f8c2.tar.gz
sandhi-c69c2f9e891915e43963010e1baf34740b55f8c2.tar.bz2
sandhi-c69c2f9e891915e43963010e1baf34740b55f8c2.zip
removed numanuma dependency, replaced with AllocOnNode header
We only needed numanuma for allocation, so replace it with this header hopefully theron will have this in the future
Diffstat (limited to 'lib')
-rw-r--r--lib/CMakeLists.txt12
-rw-r--r--lib/alloc_on_node.hpp83
-rw-r--r--lib/sbuffer.cpp18
3 files changed, 94 insertions, 19 deletions
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 8f90824..6081bb6 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -37,18 +37,6 @@ file(GLOB apology_sources "${GRAS_SOURCE_DIR}/Apology/lib/*.cpp")
list(APPEND gnuradio_core_sources ${apology_sources})
########################################################################
-# Setup NumaNuma
-########################################################################
-list(APPEND CMAKE_MODULE_PATH ${GRAS_SOURCE_DIR}/numanuma/cmake)
-include_directories(${GRAS_SOURCE_DIR}/numanuma/include)
-find_package(NumaNuma)
-if(NOT NUMANUMA_FOUND)
- message(FATAL_ERROR "numanuma dependencies not met!")
-endif()
-
-list(APPEND gnuradio_core_libs ${NUMANUMA_LIBRARIES})
-
-########################################################################
# Append gnuradio-core library sources
########################################################################
list(APPEND gnuradio_core_sources
diff --git a/lib/alloc_on_node.hpp b/lib/alloc_on_node.hpp
new file mode 100644
index 0000000..de58a0f
--- /dev/null
+++ b/lib/alloc_on_node.hpp
@@ -0,0 +1,83 @@
+//
+// Copyright 2012 Josh Blum
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef INCLUDED_LIBGRAS_ALLOC_ON_NODE_HPP
+#define INCLUDED_LIBGRAS_ALLOC_ON_NODE_HPP
+
+#include <Theron/Assert.h>
+#include <Theron/Detail/Threading/Utils.h>
+
+//----------------------------------------------------------------------
+//-- a little cross platform numa allocator
+//-- use the existing theron defines for convenience
+//----------------------------------------------------------------------
+inline void *AllocOnNode(const long node, const size_t size)
+{
+
+#if THERON_NUMA
+
+#if THERON_WINDOWS
+
+ #if _WIN32_WINNT >= 0x0600
+ return VirtualAllocExNuma(
+ GetCurrentProcess(),
+ NULL,
+ size,
+ MEM_RESERVE | MEM_COMMIT,
+ PAGE_READWRITE,
+ node
+ );
+ #else
+ return NULL;
+ #endif
+
+#elif THERON_GCC
+
+ if ((numa_available() < 0))
+ {
+ return NULL;
+ }
+
+ return numa_alloc_onnode(size, node);
+
+#endif
+
+#endif // THERON_NUMA
+
+ return NULL;
+}
+
+//----------------------------------------------------------------------
+//-- free memory allocated by AllocOnNode -- needs mem and size
+//----------------------------------------------------------------------
+inline void FreeOnNode(void *mem, const size_t size)
+{
+#if THERON_NUMA
+
+#if THERON_WINDOWS
+
+ VirtualFree(mem, size, MEM_RELEASE);
+
+#elif THERON_GCC
+
+ numa_free(mem, size);
+
+#endif
+
+#endif // THERON_NUMA
+}
+
+#endif /*INCLUDED_LIBGRAS_ALLOC_ON_NODE_HPP*/
diff --git a/lib/sbuffer.cpp b/lib/sbuffer.cpp
index 2fe7533..ab5c72c 100644
--- a/lib/sbuffer.cpp
+++ b/lib/sbuffer.cpp
@@ -15,7 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <gnuradio/sbuffer.hpp>
-#include <numanuma.hpp>
+#include "alloc_on_node.hpp"
#include <boost/bind.hpp>
using namespace gnuradio;
@@ -50,9 +50,9 @@ SBufferConfig::SBufferConfig(void)
affinity = -1;
}
-static void numanuma_mem_deleter(SBuffer &, numanuma::mem *m)
+static void numa_mem_deleter(SBuffer &buff)
{
- delete m;
+ FreeOnNode(buff.get_actual_memory(), buff.get_actual_length());
}
static void default_allocator_deleter(SBuffer &, char *m)
@@ -72,10 +72,14 @@ static void default_allocator(SBufferConfig &config)
}
else
{
- numanuma::mem *m = numanuma::mem::make(config.affinity, config.length);
- config.memory = m->get();
- config.length = m->len();
- config.deleter = boost::bind(&numanuma_mem_deleter, _1, m);
+ config.memory = AllocOnNode(config.affinity, config.length);
+ config.deleter = boost::bind(&numa_mem_deleter, _1);
+ //deal with numa failue case //TODO print warning message
+ if (config.memory == NULL)
+ {
+ config.affinity = -1;
+ default_allocator(config);
+ }
}
}