[x265] [PATCH] ThreadPool.cpp: fix core count for windows machines
Pradeep Ramachandran
pradeep at multicorewareinc.com
Tue May 17 16:31:30 CEST 2016
On Tue, May 17, 2016 at 7:07 PM, <praveen at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Praveen Tiwari <praveen at multicorewareinc.com>
> # Date 1463492196 -19800
> # Tue May 17 19:06:36 2016 +0530
> # Node ID 372fc5b12ed6003f8784702956ccf7203ea68a2e
> # Parent e5b5bdc3c154f908706fb75e006f9abf9b3de96f
> ThreadPool.cpp: fix core count for windows machines
>
> diff -r e5b5bdc3c154 -r 372fc5b12ed6 source/common/threadpool.cpp
> --- a/source/common/threadpool.cpp Sat May 14 07:29:46 2016 +0530
> +++ b/source/common/threadpool.cpp Tue May 17 19:06:36 2016 +0530
> @@ -27,6 +27,7 @@
> #include "threading.h"
>
> #include <new>
> +#include <winnt.h>
>
> #if X86_64
>
> @@ -64,6 +65,18 @@
> # define strcasecmp _stricmp
> #endif
>
> +uint64_t bitCount(uint64_t value)
> +{
> + uint64_t count = 0;
> + while (value > 0) // until all bits are zero
> + {
> + if ((value & 1) == 1) // check lower bit
> + count++;
> + value >>= 1; // shift bits, removing lower bit
> + }
> + return count;
> +}
> +
> namespace X265_NS {
> // x265 private namespace
>
> @@ -238,7 +251,6 @@
> memset(nodeMaskPerPool, 0, sizeof(nodeMaskPerPool));
>
> int numNumaNodes = X265_MIN(getNumaNodeCount(), MAX_NODE_NUM);
> - int cpuCount = getCpuCount();
> bool bNumaSupport = false;
>
> #if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7
> @@ -248,20 +260,28 @@
> #endif
>
>
> +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7
> + PGROUP_AFFINITY groupAffinityPointer = new GROUP_AFFINITY;
> + for (int i = 0; i < numNumaNodes; i++)
> + {
> + GetNumaNodeProcessorMaskEx((UCHAR)i, groupAffinityPointer);
> + cpusPerNode[i] = (int)bitCount(groupAffinityPointer->Mask);
> + }
> + delete groupAffinityPointer;
> +#elif HAVE_LIBNUMA
> + int cpuCount = getCpuCount();
>
Can we move to the cleaner implementation of not relying on CPU counts for
non-windows platforms also?
> for (int i = 0; i < cpuCount; i++)
> {
> -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= _WIN32_WINNT_WIN7
> - UCHAR node;
> - if (GetNumaProcessorNode((UCHAR)i, &node))
> - cpusPerNode[X265_MIN(node, (UCHAR)MAX_NODE_NUM)]++;
> - else
> -#elif HAVE_LIBNUMA
> if (bNumaSupport >= 0)
> cpusPerNode[X265_MIN(numa_node_of_cpu(i), MAX_NODE_NUM)]++;
> - else
> + }
> +#elif
> + int cpuCount = getCpuCount();
> + for (int i = 0; i < cpuCount; i++)
> + {
> + cpusPerNode[0]++;
> + }
>
How about cpusPerNode[0] = getCpuCount() here? The for loop is unnecessary.
> #endif
> - cpusPerNode[0]++;
> - }
>
> if (bNumaSupport && p->logLevel >= X265_LOG_DEBUG)
> for (int i = 0; i < numNumaNodes; i++)
> _______________________________________________
> 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/20160517/1ce58afe/attachment.html>
More information about the x265-devel
mailing list