[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