From c92de934299e39712d12fc7d279ff5fbc5ffffd9 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 12 Oct 2016 10:08:56 +0100 Subject: [PATCH] Altered the configureAffinity() scheme so that it places threads preferentially on even based number processors first, which should work better in case the processors available have hyper-threading --- src/osgViewer/ViewerBase.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/osgViewer/ViewerBase.cpp b/src/osgViewer/ViewerBase.cpp index 467d7e0d4..49967a15e 100644 --- a/src/osgViewer/ViewerBase.cpp +++ b/src/osgViewer/ViewerBase.cpp @@ -87,9 +87,29 @@ void ViewerBase::viewerBaseInit() void ViewerBase::configureAffinity() { unsigned int numProcessors = OpenThreads::GetNumberOfProcessors(); + OSG_NOTICE<<"ViewerBase::configureAffinity() numProcessors="< AvailableProcessors; + AvailableProcessors availableProcessors; +#if 1 + // for hyper-threaed processors we want to place the threads on preferentiallly on 0,2,4,6 + for(unsigned int i=0; isetProcessorAffinity(OpenThreads::Affinity((availableProcessor++)%numProcessors)); + (*itr)->setProcessorAffinity(OpenThreads::Affinity(availableProcessors[availableProcessor++ % availableProcessors.size()])); } } @@ -142,7 +162,7 @@ void ViewerBase::configureAffinity() if ((*itr)->getTraits()) { osg::GraphicsContext::Traits* traits = const_cast((*itr)->getTraits()); - traits->affinity = OpenThreads::Affinity((availableProcessor++)%numProcessors); + traits->affinity = OpenThreads::Affinity(availableProcessors[availableProcessor++ % availableProcessors.size()]); } } } @@ -164,6 +184,9 @@ void ViewerBase::configureAffinity() OSG_NOTICE<<" databasePagers = "<