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

Deepthi Nandakumar deepthi at multicorewareinc.com
Wed Sep 9 07:42:28 CEST 2015


On Tue, Sep 8, 2015 at 4:56 PM, <pradeep at multicorewareinc.com> wrote:

> # 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
>

Thanks, I will push this - but you could clean this up further by making
m_winCpuMask a local variable (doesnt need to be a threadpool class
member).

     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
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150909/67754014/attachment-0001.html>


More information about the x265-devel mailing list