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

Pradeep Ramachandran pradeep at multicorewareinc.com
Wed Sep 9 11:06:05 CEST 2015


My first patch did that but Steve recommended against it - dunno why.

Pradeep Ramachandran, PhD
Solution Architect,
Multicoreware Inc.
Ph:   +91 99627 82018

On Wed, Sep 9, 2015 at 11:36 AM, Deepthi Nandakumar <
deepthi at multicorewareinc.com> wrote:

> Hmm, m_numaMask points to different sized memory chunks on Win/Linux -
> node/cpu bit vectors.
>
> For Windows, the right thing would be to malloc a DWORD and free it in the
> destructor.
>
> On Wed, Sep 9, 2015 at 11:27 AM, Pradeep Ramachandran <
> pradeep at multicorewareinc.com> wrote:
>
>> But we're storing a reference to the m_winCpuMask variable. If it were a
>> local variable, it won't work, right?
>>
>> Pradeep Ramachandran, PhD
>> Solution Architect,
>> Multicoreware Inc.
>> Ph:   +91 99627 82018
>>
>> On Wed, Sep 9, 2015 at 11:12 AM, Deepthi Nandakumar <
>> deepthi at multicorewareinc.com> wrote:
>>
>>>
>>>
>>> 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
>>>>
>>>
>>>
>>> _______________________________________________
>>> x265-devel mailing list
>>> x265-devel at videolan.org
>>> https://mailman.videolan.org/listinfo/x265-devel
>>>
>>>
>>
>> _______________________________________________
>> x265-devel mailing list
>> x265-devel at videolan.org
>> https://mailman.videolan.org/listinfo/x265-devel
>>
>>
>
> _______________________________________________
> 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/eb9aac88/attachment.html>


More information about the x265-devel mailing list