Skip to content

Commit

Permalink
Fixed FFT detection. However, it only works on Smallest and Small FFT…
Browse files Browse the repository at this point in the history
…, as Prime95 otherwise randomizes the order of the FFT size.

Added a new "Huge" Preset that tests anything above 8192K and which is now the default.
  • Loading branch information
sp00n committed Mar 12, 2021
1 parent b45bef4 commit fc0874b
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 52 deletions.
8 changes: 4 additions & 4 deletions config.default.ini
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ mode = SSE
# Smallest: Smallest FFT: 4K to 21K - tests L1/L2 caches, high power/heat/CPU stress
# Small: Small FFT: 36K to 248K - tests L1/L2/L3 caches, maximum power/heat/CPU stress
# Large: Large FFT: 426K to 8192K - stresses memory controller and RAM (although memory testing is disabled here by default!)
# All: All FFT: 4K to 8192K - all of the above
# Default: Small
FFTSize = Small
# All: All FFT: 4K to whatever is the highest FFT (32768K for SSE/AVX, 51200 for AVX2)
# Default: Huge
FFTSize = Huge


# Set the runtime per core
Expand All @@ -31,7 +31,7 @@ runtimePerCore = 360
# If set to 0 (default), the stress test programm will be restarted when an error
# occurs and the core that caused the error will be skipped on the next iteration
# Default: 0
stopOnError = 1
stopOnError = 0


# The number of threads to use for testing
Expand Down
150 changes: 102 additions & 48 deletions script-corecycler.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -300,8 +300,10 @@ function Get-Settings {
# 'Smallest': Smallest FFT: 4K to 21K - tests L1/L2 caches, high power/heat/CPU stress
# 'Small': Small FFT: 36K to 248K - tests L1/L2/L3 caches, maximum power/heat/CPU stress
# 'Large': Large FFT: 426K to 8192K - stresses memory controller and RAM (although memory testing is disabled here by default!)
# 'All': All FFT: 4K to 8192K - all of the above
FFTSize = 'Small'
# 'Huge': New custom mode: anything above 8192K
# 'All': All FFT: 4K to whatever is the highest FFT (32768K for SSE/AVX, 51200 for AVX2)
# Default: 'Huge'
FFTSize = 'Huge'


# Set the runtime per core
Expand Down Expand Up @@ -949,48 +951,79 @@ function Test-ProcessUsage {

# DEBUG
# Also add the 5 last rows of the results.txt file
#Write-Text('LAST 5 ROWS OF RESULTS.TXT:')
#Write-Text(Get-Item -Path $primeResultsPath | Get-Content -Tail 5)
#Write-Verbose('LAST 5 ROWS OF RESULTS.TXT:')
#Write-Verbose(Get-Item -Path $primeResultsPath | Get-Content -Tail 5)

# Try to determine the last run FFT size
# If the results.txt doesn't exist, assume that it was on the very first iteration
if (!$resultFileHandle) {
$lastRunFFT = $minFFTSize
# Note: Unfortunately Prime95 randomizes the FFT sizes for anything above Small FFT sizes
# So we cannot make an educated guess for these settings
if ($maxFFTSize -le $FFTMinMaxValues[$settings.mode]['Small'].Max) {
if (!$resultFileHandle) {
$lastRunFFT = $minFFTSize
}

# Get the last couple of rows and find the last passed FFT size
else {
$lastFiveRows = $resultFileHandle | Get-Content -Tail 5
$lastPassedFFTArr = @($lastFiveRows | Where-Object {$_ -like '*passed*'})
$hasMatched = $lastPassedFFTArr[$lastPassedFFTArr.Length-1] -match 'Self-test (\d+)K passed'
$lastPassedFFT = if ($matches -is [Hashtable] -or $matches -is [Array]) { [Int]$matches[1] } # $matches is a fixed(?) variable name for -match

# No passed FFT was found, assume it's the first FFT size
if (!$lastPassedFFT) {
$lastRunFFT = $minFFTSize
}

# If the last passed FFT size is the max selected FFT size, start at the beginning
elseif ($lastPassedFFT -eq $maxFFTSize) {
$lastRunFFT = $minFFTSize
}

# If the last passed FFT size is not the max size, check if the value doesn't show up at all in the FFT array
# In this case, we also assume that it successfully completed the max value and errored at the min FFT size
# Example: Smallest FFT max = 21, but the actual last size tested is 20K
elseif (!$FFTSizes[$cpuTestMode].Contains($lastPassedFFT)) {
$lastRunFFT = $minFFTSize
}

# If it's not the max value and it does show up in the FFT array, select the next value
else {
$lastRunFFT = $FFTSizes[$cpuTestMode][$FFTSizes[$cpuTestMode].indexOf($lastPassedFFT)+1]
}
}

# Educated guess
if ($lastRunFFT) {
Write-ColorText('ERROR: The error likely happened at FFT size ' + $lastRunFFT + 'K') Magenta
}
else {
Write-ColorText('ERROR: No additional FFT size information found in the results.txt') Magenta
}

Write-Verbose('The last 5 entries in the results.txt:')
Write-Verbose($lastFiveRows -Join ', ')

Write-Text('')
}

# Get the last couple of rows and find the last passed FFT size
else {
$lastFiveRows = $resultFileHandle | Get-Content -Tail 5
$lastPassedFFTArr = @($lastFiveRows | Where-Object {$_ -like '*passed*'})
$hasMatched = $lastPassedFFTArr[$lastPassedFFTArr.Length-1] -match 'Self-test (\d+)K passed'
$lastPassedFFT = if ($matches -is [Array]) { [Int]$matches[1] } # $matches is a fixed(?) variable name for -match
$lastPassedFFT = if ($matches -is [Hashtable] -or $matches -is [Array]) { [Int]$matches[1] } # $matches is a fixed(?) variable name for -match

# No passed FFT was found, assume it's the first FFT size
if (!$lastPassedFFT) {
$lastRunFFT = $minFFTSize
if ($lastPassedFFT) {
Write-ColorText('ERROR: The last *passed* FFT size before the error was: ' + $lastPassedFFT + 'K') Magenta
Write-ColorText('ERROR: Unfortunately FFT size fail detection only works for Smallest or Small FFT sizes.') Magenta
}

# If the last passed FFT size is the max selected FFT size, start at the beginning
elseif ($lastPassedFFT -eq $maxFFTSize) {
$lastRunFFT = $minFFTSize
else {
Write-ColorText('ERROR: No additional FFT size information found in the results.txt') Magenta
}

# If the last passed FFT size is not the max size, check if the value doesn't show up at all in the FFT array
# In this case, we also assume that it successfully completed the max value and errored at the min FFT size
# Example: Smallest FFT max = 21, but the actual last size tested is 20K
elseif (!$FFTSizes[$cpuTestMode].Contains($lastPassedFFT)) {
$lastRunFFT = $minFFTSize
}
Write-Verbose('The last 5 entries in the results.txt:')
Write-Verbose($lastFiveRows -Join ', ')

# If it's not the max value and it does show up in the FFT array, select the next value
else {
$lastRunFFT = $FFTSizes[$cpuTestMode][$FFTSizes[$cpuTestMode].indexOf($lastPassedFFT)+1]
}
}

# Educated guess
if ($lastRunFFT) {
Write-ColorText('ERROR: The error likely happened at FFT size ' + $lastRunFFT + 'K') Magenta
Write-Text('')
}


Expand Down Expand Up @@ -1218,14 +1251,17 @@ $FFTSizes = @{
256, 288, 320, 336, 384, 400,

# Large FFT
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
448, 480, 512, 560, 576, 640, 672, 720, 768, 800, 896, 960, 1024, 1120, 1152, 1200, 1280, 1344, 1440, 1536, 1600, 1680, 1728, 1792, 1920,
2048, 2240, 2304, 2400, 2560, 2688, 2800, 2880, 3072, 3200, 3360, 3456, 3584, 3840, 4096, 4480, 4608, 4800, 5120, 5376, 5600, 5760, 6144,
6400, 6720, 6912, 7168, 7680, 8000, 8192

# Not used in Prime95 presets
# 32768 seems to be the maximum FFT size possible
8960, 9216, 9600, 10240, 10752, 11200, 11520, 12288, 12800, 13440, 13824, 14336, 15360, 16000, 16384, 17920, 18432, 19200, 20480, 20480,
21504, 22400, 23040, 24576, 25600, 26880, 27648, 28672, 30720, 32000, 32768
# Now custom labeled "Huge"
# 32768 seems to be the maximum FFT size possible for SSE
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
8960, 9216, 9600, 10240, 10752, 11200, 11520, 12288, 12800, 13440, 13824, 14336, 15360, 16000, 16384, 17920, 18432, 19200, 20480, 21504,
22400, 23040, 24576, 25600, 26880, 27648, 28672, 30720, 32000, 32768
)

AVX = @(
Expand All @@ -1242,12 +1278,17 @@ $FFTSizes = @{
256, 288, 320, 336, 384, 400,

# Large FFT
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
448, 480, 512, 560, 576, 640, 672, 720, 768, 800, 864, 896, 960, 1024, 1152, 1280, 1344, 1440, 1536, 1600, 1680, 1728, 1792, 1920,
2048, 2304, 2400, 2560, 2688, 2880, 3072, 3200, 3360, 3456, 3584, 3840, 4032, 4096, 4480, 4608, 4800, 5120, 5376, 5760, 6144,
6400, 6720, 6912, 7168, 7680, 8000, 8192

# Not used in Prime95 presets
# TODO: after 8192 for AVX
# Now custom labeled "Huge"
# 32768 seems to be the maximum FFT size possible for AVX
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
8960, 9216, 9600, 10240, 10752, 11520, 12288, 12800, 13440, 13824, 14336, 15360, 16000, 16128, 16384, 17920, 18432, 19200, 20480, 21504,
22400, 23040, 24576, 25600, 26880, 28672, 30720, 32000, 32768
)


Expand All @@ -1265,12 +1306,22 @@ $FFTSizes = @{
256, 280, 288, 320, 336, 384, 400,

# Large FFT
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
448, 480, 512, 560, 640, 672, 768, 800, 896, 960, 1024, 1120, 1152, 1280, 1344, 1440, 1536, 1600, 1680, 1792, 1920,
2048, 2240, 2304, 2400, 2560, 2688, 2800, 2880, 3072, 3200, 3360, 3584, 3840, 4096, 4480, 4608, 4800, 5120, 5376, 5600, 5760, 6144,
6400, 6720, 7168, 7680, 8000, 8064, 8192

# Not used in Prime95 presets
# TODO: after 8192 for AVX2
# Now custom labeled "Huge"
# 51200 seems to be the maximum FFT size possible for AVX2
# Note: Unfortunately Prime95 seems to randomize the order for larger FFT sizes
8960, 9216, 9600, 10240, 10752, 11200, 11520, 12288, 12800, 13440, 13824, 14336, 15360, 16000, 16128, 16384, 17920, 18432, 19200, 20480,
21504, 22400, 23040, 24576, 25600, 26880, 28672, 30720, 32000, 32768, 35840, 38400, 40960, 44800, 51200

# An example of the randomization:
# 11200, 8960, 9216, 9600, 10240, 10752, 11520, 11200, 11520, 12288, 11200, 8192, 11520, 12288, 12800, 13440, 13824, 8960, 14336, 15360,
# 16000, 16128, 16384, 9216, 17920, 18432, 19200, 20480, 21504, 9600, 22400, 23040, 24576, 25600, 26880, 10240, 28672, 30720, 32000, 32768,
# 35840, 10752, 38400, 40960, 44800, 51200
)
}

Expand All @@ -1280,24 +1331,27 @@ $FFTSizes = @{
# depending on the selected test mode (SSE, AVX, AVX2)
$FFTMinMaxValues = @{
SSE = @{
Smallest = @{ Min = 4; Max = 20; } # Originally 4 ... 21
Small = @{ Min = 40; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
All = @{ Min = 4; Max = 8192; } # Originally 4 ... 8192
Smallest = @{ Min = 4; Max = 20; } # Originally 4 ... 21
Small = @{ Min = 40; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
Huge = @{ Min = 8960; Max = 32768; } # New addition
All = @{ Min = 4; Max = 32768; }
}

AVX = @{
Smallest = @{ Min = 4; Max = 21; } # Originally 4 ... 21
Small = @{ Min = 36; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
All = @{ Min = 4; Max = 8192; } # Originally 4 ... 8192
Smallest = @{ Min = 4; Max = 21; } # Originally 4 ... 21
Small = @{ Min = 36; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
Huge = @{ Min = 8960; Max = 32768; } # New addition
All = @{ Min = 4; Max = 32768; }
}

AVX2 = @{
Smallest = @{ Min = 4; Max = 21; } # Originally 4 ... 21
Small = @{ Min = 36; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
All = @{ Min = 4; Max = 8192; } # Originally 4 ... 8192
Smallest = @{ Min = 4; Max = 21; } # Originally 4 ... 21
Small = @{ Min = 36; Max = 240; } # Originally 36 ... 248
Large = @{ Min = 448; Max = 8192; } # Originally 426 ... 8192
Huge = @{ Min = 8960; Max = 51200; } # New addition
All = @{ Min = 4; Max = 51200; }
}
}

Expand Down

0 comments on commit fc0874b

Please sign in to comment.