On Tue, May 17, 2016 at 7:07 PM, <[email protected]> wrote:
> # HG changeset patch > # User Praveen Tiwari <[email protected]> > # 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 > [email protected] > https://mailman.videolan.org/listinfo/x265-devel >
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
