[x265] [PATCH] bug: build warnings removal for linux, correct threading masks for windows
Pradeep Ramachandran
pradeep at multicorewareinc.com
Wed Sep 9 07:57:55 CEST 2015
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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150909/2aebb4ca/attachment.html>
More information about the x265-devel
mailing list