mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-22 16:04:17 +00:00
Improve performance of entropy build action (#1407)
* Use multiple threads for entropy builds
* Verify builds parameter
* Revert "Verify builds parameter"
This reverts commit 460d3d3b55
.
* Use options instead
* Seed fix
* 256 samples on push
This commit is contained in:
81
tools/multi-prepare.ps1
Normal file
81
tools/multi-prepare.ps1
Normal file
@@ -0,0 +1,81 @@
|
||||
if ($args.count -lt 2) {
|
||||
Write-Error "Requires 2 args: job matrix number and number of builds for this job."
|
||||
exit 1
|
||||
}
|
||||
|
||||
function Get-BaseSeed {
|
||||
Param (
|
||||
[int]$Matrix
|
||||
)
|
||||
|
||||
# GITHUB_SHA is the commit hash. This means the entropy files will be consistent
|
||||
# unless you push a new commit.
|
||||
$sha = [System.Convert]::ToUInt32($env:GITHUB_SHA.Substring(0, 8), 16)
|
||||
|
||||
# Mask off the last 16 bits
|
||||
$base_seed = ($sha -band 0xffff0000)
|
||||
|
||||
# Add the matrix number * 256. We can run 256 unique builds on this job.
|
||||
return $base_seed + ($Matrix -shl 8)
|
||||
}
|
||||
|
||||
$MatrixNo = [int]$args[0]
|
||||
$BuildCount = [int]$args[1]
|
||||
$base_seed = $(Get-BaseSeed -Matrix $MatrixNo)
|
||||
|
||||
$build_ids = 0..($BuildCount - 1)
|
||||
|
||||
$build_dirs = foreach($i in $build_ids) { "build$i" }
|
||||
$stdout_files = foreach($i in $build_ids) { "stdout$i.txt" }
|
||||
$stderr_files = foreach($i in $build_ids) { "stderr$i.txt" }
|
||||
|
||||
$procs = New-Object System.Collections.Generic.List[System.Diagnostics.Process]
|
||||
|
||||
foreach($i in $build_ids) {
|
||||
# Create the entropy file
|
||||
$entropy_file = "entropy$i.h"
|
||||
$seed = $base_seed + $i
|
||||
|
||||
Write-Output "Using seed: $seed (instance $i)"
|
||||
python3 tools/entropy.py $seed > $entropy_file
|
||||
|
||||
# Prepare to build
|
||||
$params = @{
|
||||
FilePath = "cmake"
|
||||
PassThru = $null
|
||||
ArgumentList = @(
|
||||
"-B", $build_dirs[$i],
|
||||
"-DCMAKE_BUILD_TYPE=RelWithDebInfo",
|
||||
"-DISLE_INCLUDE_ENTROPY=ON",
|
||||
"-DISLE_ENTROPY_FILENAME=$entropy_file",
|
||||
"-G", "`"NMake Makefiles`""
|
||||
)
|
||||
}
|
||||
|
||||
# For the first job, display stdout and stderr.
|
||||
# Else dump to file so we don't see 50 at once.
|
||||
if ($i -eq 0) {
|
||||
$params.Add("NoNewWindow", $null)
|
||||
} else {
|
||||
$params.Add("RedirectStandardOutput", $stdout_files[$i])
|
||||
$params.Add("RedirectStandardError", $stderr_files[$i])
|
||||
}
|
||||
|
||||
$procs.Add($(Start-Process @params))
|
||||
}
|
||||
|
||||
$failed = $false
|
||||
try { Wait-Process -InputObject $procs } catch { $failed = $true }
|
||||
|
||||
# Check for failure
|
||||
foreach($i in $build_ids) {
|
||||
if ($procs[$i].ExitCode -ne 0) {
|
||||
if ($i -ne 0) {
|
||||
Get-Content $stdout_files[$i] -Tail 10
|
||||
Get-Content $stderr_files[$i] -Tail 10
|
||||
}
|
||||
$failed = $true
|
||||
}
|
||||
}
|
||||
|
||||
if ($failed) { exit 1 }
|
Reference in New Issue
Block a user