[x265] [PATCH] bug: build warnings removal for linux, correct threading masks for windows

pradeep at multicorewareinc.com pradeep at multicorewareinc.com
Tue Sep 8 13:26:52 CEST 2015


# HG changeset patch
# User Pradeep Ramachandran <pradeep at multicorewareinc.com>
# Date 1441710481 -19800
#      Tue Sep 08 16:38:01 2015 +0530
# Node ID 314dbb79621f74a18108439fb49cc6f10070bcca
# Parent  e1adac00dce8e5641cbe9aec3d50a72261c308d9
bug: build warnings removal for linux, correct threading masks for windows.

diff -r e1adac00dce8 -r 314dbb79621f source/common/threadpool.cpp
--- a/source/common/threadpool.cpp	Thu Sep 03 14:41:06 2015 +0530
+++ b/source/common/threadpool.cpp	Tue Sep 08 16:38:01 2015 +0530
@@ -378,8 +378,16 @@
     X265_CHECK(numThreads <= MAX_POOL_THREADS, "a single thread pool cannot have more than MAX_POOL_THREADS threads\n");
 
 #if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7 
-    m_winNodemask = nodeMask & ~(0x1 << getNumaNodeCount());
-    m_numaNodeMask = &m_winNodemask;
+    m_winCpuMask = 0x0;
+    GROUP_AFFINITY groupAffinity;
+    for (int i = 0; i < getNumaNodeCount(); i++)
+    {
+        int numaNode = ((nodeMask >> i) & 0x1U) ? i : -1;
+        if (numaNode != -1)
+            if (GetNumaNodeProcessorMaskEx((USHORT)numaNode, &groupAffinity))
+                m_winCpuMask |= groupAffinity.Mask;
+    }
+    m_numaMask = &m_winCpuMask;
 #elif HAVE_LIBNUMA
     if (numa_available() >= 0)
     {
@@ -387,11 +395,13 @@
         if (nodemask)
         {
             *(nodemask->maskp) = nodeMask;
-            m_numaNodeMask = nodemask;
+            m_numaMask = nodemask;
         }
         else
             x265_log(NULL, X265_LOG_ERROR, "unable to get NUMA node mask for %lx\n", nodeMask);
     }
+#else
+    (void)nodeMask;
 #endif
 
     m_numWorkers = numThreads;
@@ -449,33 +459,35 @@
     X265_FREE(m_jpTable);
 
 #if HAVE_LIBNUMA
-    if(m_numaNodeMask)
-        numa_free_nodemask((struct bitmask*)m_numaNodeMask);
+    if(m_numaMask)
+        numa_free_nodemask((struct bitmask*)m_numaMask);
 #endif
 }
 
 void ThreadPool::setCurrentThreadAffinity()
 {
-    setThreadNodeAffinity(m_numaNodeMask);
+    setThreadNodeAffinity(m_numaMask);
 }
 
 /* static */
-void ThreadPool::setThreadNodeAffinity(void *numaNodeMask)
+void ThreadPool::setThreadNodeAffinity(void *numaMask)
 {
 #if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7 
-    if (SetThreadAffinityMask(GetCurrentThread(), (DWORD_PTR)(*((DWORD*)numaNodeMask))))
+    if (SetThreadAffinityMask(GetCurrentThread(), (DWORD_PTR)(*((DWORD*)numaMask))))
         return;
     else
         x265_log(NULL, X265_LOG_ERROR, "unable to set thread affinity for NUMA node mask\n");
 #elif HAVE_LIBNUMA
     if (numa_available() >= 0)
     {
-        numa_run_on_node_mask((struct bitmask*)numaNodeMask);
-        numa_set_interleave_mask((struct bitmask*)numaNodeMask);
+        numa_run_on_node_mask((struct bitmask*)numaMask);
+        numa_set_interleave_mask((struct bitmask*)numaMask);
         numa_set_localalloc();
         return;
     }
     x265_log(NULL, X265_LOG_ERROR, "unable to set thread affinity for NUMA node mask\n");
+#else
+    (void)numaMask;
 #endif
     return;
 }
diff -r e1adac00dce8 -r 314dbb79621f source/common/threadpool.h
--- a/source/common/threadpool.h	Thu Sep 03 14:41:06 2015 +0530
+++ b/source/common/threadpool.h	Tue Sep 08 16:38:01 2015 +0530
@@ -83,9 +83,9 @@
     sleepbitmap_t m_sleepBitmap;
     int           m_numProviders;
     int           m_numWorkers;
-    void*         m_numaNodeMask;
+    void*         m_numaMask; // node mask in linux, cpu mask in windows
 #if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7 
-    DWORD         m_winNodemask;
+    DWORD         m_winCpuMask;
 #endif
     bool          m_isActive;
 
@@ -106,7 +106,7 @@
 
     static int  getCpuCount();
     static int  getNumaNodeCount();
-    static void setThreadNodeAffinity(void *numaNodeMask);
+    static void setThreadNodeAffinity(void *numaMask);
 };
 
 /* Any worker thread may enlist the help of idle worker threads from the same


More information about the x265-devel mailing list