mirror of https://github.com/PCSX2/pcsx2.git
Common: Purge SingleCoreAffinity
No longer used, never worked on Linux.
This commit is contained in:
parent
8a8e6c5d20
commit
9613b43d50
|
@ -102,7 +102,6 @@ target_sources(common PRIVATE
|
||||||
TraceLog.h
|
TraceLog.h
|
||||||
WAVWriter.h
|
WAVWriter.h
|
||||||
WindowInfo.h
|
WindowInfo.h
|
||||||
emitter/cpudetect_internal.h
|
|
||||||
emitter/implement/dwshift.h
|
emitter/implement/dwshift.h
|
||||||
emitter/implement/group1.h
|
emitter/implement/group1.h
|
||||||
emitter/implement/group2.h
|
emitter/implement/group2.h
|
||||||
|
|
|
@ -147,7 +147,6 @@
|
||||||
<ClInclude Include="Threading.h" />
|
<ClInclude Include="Threading.h" />
|
||||||
<ClInclude Include="emitter\implement\avx.h" />
|
<ClInclude Include="emitter\implement\avx.h" />
|
||||||
<ClInclude Include="emitter\implement\bmi.h" />
|
<ClInclude Include="emitter\implement\bmi.h" />
|
||||||
<ClInclude Include="emitter\cpudetect_internal.h" />
|
|
||||||
<ClInclude Include="emitter\instructions.h" />
|
<ClInclude Include="emitter\instructions.h" />
|
||||||
<ClInclude Include="emitter\internal.h" />
|
<ClInclude Include="emitter\internal.h" />
|
||||||
<ClInclude Include="emitter\legacy_instructions.h" />
|
<ClInclude Include="emitter\legacy_instructions.h" />
|
||||||
|
|
|
@ -156,9 +156,6 @@
|
||||||
<ClInclude Include="Console.h">
|
<ClInclude Include="Console.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="emitter\cpudetect_internal.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="emitter\implement\dwshift.h">
|
<ClInclude Include="emitter\implement\dwshift.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include "common/emitter/cpudetect_internal.h"
|
#include "common/emitter/tools.h"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
@ -32,7 +32,4 @@ void x86capabilities::CountLogicalCores()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not implemented yet for linux (see cpudetect_internal.h for details)
|
|
||||||
SingleCoreAffinity::SingleCoreAffinity() = default;
|
|
||||||
SingleCoreAffinity::~SingleCoreAffinity() = default;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
|
|
||||||
#include "common/Console.h"
|
#include "common/Console.h"
|
||||||
#include "common/emitter/cpudetect_internal.h"
|
#include "common/emitter/tools.h"
|
||||||
|
#include "common/RedtapeWindows.h"
|
||||||
|
|
||||||
void x86capabilities::CountLogicalCores()
|
void x86capabilities::CountLogicalCores()
|
||||||
{
|
{
|
||||||
|
@ -36,50 +37,4 @@ void x86capabilities::CountLogicalCores()
|
||||||
LogicalCores = CPUs;
|
LogicalCores = CPUs;
|
||||||
}
|
}
|
||||||
|
|
||||||
SingleCoreAffinity::SingleCoreAffinity()
|
|
||||||
{
|
|
||||||
s_threadId = nullptr;
|
|
||||||
s_oldmask = ERROR_INVALID_PARAMETER;
|
|
||||||
|
|
||||||
DWORD_PTR availProcCpus;
|
|
||||||
DWORD_PTR availSysCpus;
|
|
||||||
if (!GetProcessAffinityMask(GetCurrentProcess(), &availProcCpus, &availSysCpus))
|
|
||||||
return;
|
|
||||||
|
|
||||||
int cpu = 0;
|
|
||||||
DWORD_PTR affinityMask;
|
|
||||||
for (affinityMask = 1; affinityMask != 0; affinityMask <<= 1, ++cpu)
|
|
||||||
if (availProcCpus & affinityMask)
|
|
||||||
break;
|
|
||||||
|
|
||||||
s_threadId = GetCurrentThread();
|
|
||||||
s_oldmask = SetThreadAffinityMask(s_threadId, affinityMask);
|
|
||||||
|
|
||||||
if (s_oldmask == ERROR_INVALID_PARAMETER)
|
|
||||||
{
|
|
||||||
const int hexWidth = 2 * sizeof(DWORD_PTR);
|
|
||||||
Console.Warning(
|
|
||||||
"CpuDetect: SetThreadAffinityMask failed...\n"
|
|
||||||
"\tSystem Affinity : 0x%0*x\n"
|
|
||||||
"\tProcess Affinity: 0x%0*x\n"
|
|
||||||
"\tAttempted Thread Affinity CPU: %i",
|
|
||||||
hexWidth, availProcCpus, hexWidth, availSysCpus, cpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
Sleep(2);
|
|
||||||
|
|
||||||
// Sleep Explained: I arbitrarily pick Core 0 to lock to for running the CPU test. This
|
|
||||||
// means that the current thread will need to be switched to Core 0 if it's currently
|
|
||||||
// scheduled on a difference cpu/core. However, Windows does not necessarily perform
|
|
||||||
// that scheduling immediately upon the call to SetThreadAffinityMask (seems dependent
|
|
||||||
// on version: XP does, Win7 does not). So by issuing a Sleep here we give Win7 time
|
|
||||||
// to issue a timeslice and move our thread to Core 0. Without this, it tends to move
|
|
||||||
// the thread during the cpuSpeed test instead, causing totally wacky results.
|
|
||||||
};
|
|
||||||
|
|
||||||
SingleCoreAffinity::~SingleCoreAffinity()
|
|
||||||
{
|
|
||||||
if (s_oldmask != ERROR_INVALID_PARAMETER)
|
|
||||||
SetThreadAffinityMask(s_threadId, s_oldmask);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
#include "common/MemcpyFast.h"
|
#include "common/MemcpyFast.h"
|
||||||
#include "common/General.h"
|
#include "common/General.h"
|
||||||
#include "common/emitter/cpudetect_internal.h"
|
#include "common/emitter/tools.h"
|
||||||
#include "common/emitter/internal.h"
|
#include "common/emitter/internal.h"
|
||||||
#include "common/emitter/x86_intrin.h"
|
#include "common/emitter/x86_intrin.h"
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/* Cpudetection lib
|
|
||||||
* Copyright (C) 2002-2010 PCSX2 Dev Team
|
|
||||||
*
|
|
||||||
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
|
||||||
* of the GNU Lesser General Public License as published by the Free Software Found-
|
|
||||||
* ation, either version 3 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
||||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
||||||
* PURPOSE. See the GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License along with PCSX2.
|
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "common/RedtapeWindows.h"
|
|
||||||
#include "common/emitter/tools.h"
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------------------------
|
|
||||||
// Thread Affinity Lock
|
|
||||||
// --------------------------------------------------------------------------------------
|
|
||||||
// Assign a single CPU/core for this thread's affinity to ensure rdtsc() accuracy.
|
|
||||||
// (rdtsc for each CPU/core can differ, causing skewed results)
|
|
||||||
|
|
||||||
class SingleCoreAffinity
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
#ifdef _WIN32
|
|
||||||
HANDLE s_threadId;
|
|
||||||
DWORD_PTR s_oldmask;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
public:
|
|
||||||
SingleCoreAffinity();
|
|
||||||
virtual ~SingleCoreAffinity();
|
|
||||||
};
|
|
Loading…
Reference in New Issue