[*] Cleanup/formatting of SMT yields
This commit is contained in:
parent
3d8dd991e0
commit
36a72228db
@ -14,12 +14,10 @@ namespace Aurora
|
|||||||
|
|
||||||
namespace Aurora::Threading
|
namespace Aurora::Threading
|
||||||
{
|
{
|
||||||
// Note: the following APIs are in powers of 2!
|
AUKN_SYM void SetSpinCountTimeout(AuUInt32 uTimeout);
|
||||||
|
AUKN_SYM AuUInt32 GetSpinCountTimeout();
|
||||||
AUKN_SYM void SetSpinCountTimeout(AuUInt8 uTimeout);
|
AUKN_SYM void SetThreadLocalAdditionalSpinCountTimeout(AuUInt32 uTimeout);
|
||||||
AUKN_SYM AuUInt8 GetSpinCountTimeout();
|
AUKN_SYM AuUInt32 GetTotalSpinCountTime();
|
||||||
AUKN_SYM void SetThreadLocalAdditionalSpinCountTimeout(AuUInt8 uTimeout);
|
|
||||||
AUKN_SYM AuUInt32 GetTotalSpinCountTimeout();
|
|
||||||
|
|
||||||
AUKN_SYM const ThreadingConfig *GetThreadingConfig();
|
AUKN_SYM const ThreadingConfig *GetThreadingConfig();
|
||||||
AUKN_SYM void SetThreadingConfig(const ThreadingConfig *pUpdateConfig);
|
AUKN_SYM void SetThreadingConfig(const ThreadingConfig *pUpdateConfig);
|
||||||
|
@ -185,7 +185,7 @@ namespace Aurora::Threading::Waitables
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
||||||
AuUInt uCount(GetTotalSpinCountTimeout());
|
AuUInt uCount(GetTotalSpinCountTime());
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto uPerfCounter = __rdtsc() + uCount;
|
auto uPerfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < uPerfCounter)
|
while (__rdtsc() < uPerfCounter)
|
||||||
|
@ -33,7 +33,7 @@ namespace Aurora::Threading::Waitables
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
||||||
AuUInt uCount(GetTotalSpinCountTimeout());
|
AuUInt uCount(GetTotalSpinCountTime());
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto uPerfCounter = __rdtsc() + uCount;
|
auto uPerfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < uPerfCounter)
|
while (__rdtsc() < uPerfCounter)
|
||||||
|
@ -32,7 +32,7 @@ namespace Aurora::Threading::Waitables
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
#if (defined(AURORA_ARCH_X86) || defined(AURORA_ARCH_X64)) && !defined(AURORA_RUNTIME_FORCE_ADAPTIVE_FUTEX)
|
||||||
AuUInt uCount(GetTotalSpinCountTimeout());
|
AuUInt uCount(GetTotalSpinCountTime());
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto uPerfCounter = __rdtsc() + uCount;
|
auto uPerfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < uPerfCounter)
|
while (__rdtsc() < uPerfCounter)
|
||||||
|
@ -10,37 +10,41 @@
|
|||||||
|
|
||||||
namespace Aurora::Threading
|
namespace Aurora::Threading
|
||||||
{
|
{
|
||||||
AUKN_SYM void SetSpinCountTimeout(AuUInt8 uTimeout)
|
AUKN_SYM void SetSpinCountTimeout(AuUInt32 uTimeout)
|
||||||
{
|
{
|
||||||
gRuntimeConfig.threadingConfig.uSpinLoopPowerA = uTimeout;
|
gRuntimeConfig.threadingConfig.uSpinLoopPowerA = uTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuUInt8 GetSpinCountTimeout()
|
AUKN_SYM AuUInt32 GetSpinCountTimeout()
|
||||||
{
|
{
|
||||||
return gRuntimeConfig.threadingConfig.uSpinLoopPowerA;
|
return gRuntimeConfig.threadingConfig.uSpinLoopPowerA;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM void SetThreadLocalAdditionalSpinCountTimeout(AuUInt8 uTimeout)
|
AUKN_SYM void SetThreadLocalAdditionalSpinCountTimeout(AuUInt32 uTimeout)
|
||||||
{
|
{
|
||||||
gHasThreadLocalTimeout = 1;
|
gHasThreadLocalTimeout = 1;
|
||||||
tlsSpinCountLocal = uTimeout;
|
tlsSpinCountLocal = uTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
AUKN_SYM AuUInt32 GetTotalSpinCountTimeout()
|
AUKN_SYM AuUInt32 GetTotalSpinCountTime()
|
||||||
{
|
{
|
||||||
AuUInt32 uCount {};
|
AuUInt32 uCount {};
|
||||||
|
|
||||||
if (!gRuntimeConfig.threadingConfig.bPlatformIsSMPProcessorOptimized)
|
if (!gRuntimeConfig.threadingConfig.bPlatformIsSMPProcessorOptimized)
|
||||||
{
|
{
|
||||||
return 16;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
uCount = AuUInt32(gRuntimeConfig.threadingConfig.uSpinLoopPowerA);
|
uCount = AuUInt32(gRuntimeConfig.threadingConfig.uSpinLoopPowerA);
|
||||||
if (gHasThreadLocalTimeout)
|
if (gHasThreadLocalTimeout)
|
||||||
{
|
{
|
||||||
uCount += 1u << AuUInt32(tlsSpinCountLocal);
|
uCount += tlsSpinCountLocal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
|
// uCount *= 4;
|
||||||
|
//#endif
|
||||||
|
// well, i guess not because intel recommends going by rdtsc ticks, and not to assume eventual uop sleep of an unspecified period
|
||||||
return uCount;
|
return uCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
namespace Aurora::Threading
|
namespace Aurora::Threading
|
||||||
{
|
{
|
||||||
inline AuUInt32 gHasThreadLocalTimeout {};
|
inline AuUInt32 gHasThreadLocalTimeout {};
|
||||||
inline thread_local AuUInt8 tlsSpinCountLocal {};
|
inline thread_local AuUInt32 tlsSpinCountLocal {};
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SPIN_FOUR 1
|
#define SPIN_FOUR 1
|
||||||
@ -55,12 +55,12 @@ namespace Aurora::Threading::Primitives
|
|||||||
|
|
||||||
if (uNow <= gSpinAdaptiveThreshold)
|
if (uNow <= gSpinAdaptiveThreshold)
|
||||||
{
|
{
|
||||||
int loops = spin;
|
auto uCount = spin;
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto perfCounter = __rdtsc() + spin;
|
auto perfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < perfCounter)
|
while (__rdtsc() < perfCounter)
|
||||||
#else
|
#else
|
||||||
while (loops > 0)
|
while (uCount > 0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (callback())
|
if (callback())
|
||||||
@ -75,22 +75,22 @@ namespace Aurora::Threading::Primitives
|
|||||||
SMPPause();
|
SMPPause();
|
||||||
SMPPause();
|
SMPPause();
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops -= 4;
|
uCount -= 4;
|
||||||
#else
|
#else
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops -= 1;
|
uCount -= 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gHasThreadLocalTimeout)
|
if (gHasThreadLocalTimeout)
|
||||||
{
|
{
|
||||||
int loops = (1 << tlsSpinCountLocal);
|
auto uCount = tlsSpinCountLocal;
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto perfCounter = __rdtsc() + loops;
|
auto perfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < perfCounter)
|
while (__rdtsc() < perfCounter)
|
||||||
#else
|
#else
|
||||||
while (loops > 0)
|
while (uCount > 0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (callback())
|
if (callback())
|
||||||
@ -101,7 +101,7 @@ namespace Aurora::Threading::Primitives
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops--;
|
uCount--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -110,12 +110,12 @@ namespace Aurora::Threading::Primitives
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int loops = (spin) / 3;
|
auto uCount = (spin) / 3;
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto perfCounter = __rdtsc() + loops;
|
auto perfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < perfCounter)
|
while (__rdtsc() < perfCounter)
|
||||||
#else
|
#else
|
||||||
while (loops > 0)
|
while (uCount > 0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (callback())
|
if (callback())
|
||||||
@ -126,7 +126,7 @@ namespace Aurora::Threading::Primitives
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops --;
|
uCount--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -135,12 +135,12 @@ namespace Aurora::Threading::Primitives
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int loops = spin;
|
auto uCount = spin;
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto perfCounter = __rdtsc() + spin;
|
auto perfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < perfCounter)
|
while (__rdtsc() < perfCounter)
|
||||||
#else
|
#else
|
||||||
while (loops > 0)
|
while (uCount > 0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (callback())
|
if (callback())
|
||||||
@ -154,10 +154,10 @@ namespace Aurora::Threading::Primitives
|
|||||||
SMPPause();
|
SMPPause();
|
||||||
SMPPause();
|
SMPPause();
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops -= 4;
|
uCount -= 4;
|
||||||
#else
|
#else
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops -= 1;
|
uCount -= 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,13 +165,11 @@ namespace Aurora::Threading::Primitives
|
|||||||
if (gHasThreadLocalTimeout)
|
if (gHasThreadLocalTimeout)
|
||||||
{
|
{
|
||||||
auto uCount = tlsSpinCountLocal;
|
auto uCount = tlsSpinCountLocal;
|
||||||
|
|
||||||
int loops = (1 << uCount);
|
|
||||||
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
#if defined(AURORA_ARCH_X64) || defined(AURORA_ARCH_X86)
|
||||||
auto perfCounter = __rdtsc() + loops;
|
auto perfCounter = __rdtsc() + uCount;
|
||||||
while (__rdtsc() < perfCounter)
|
while (__rdtsc() < perfCounter)
|
||||||
#else
|
#else
|
||||||
while (loops > 0)
|
while (uCount > 0)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (callback())
|
if (callback())
|
||||||
@ -181,7 +179,7 @@ namespace Aurora::Threading::Primitives
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
SMPPause();
|
SMPPause();
|
||||||
loops --;
|
uCount--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user