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:
MS
2025-03-14 15:05:55 -04:00
committed by GitHub
parent d663e26321
commit 3d9c7a8956
5 changed files with 287 additions and 50 deletions

81
tools/multi-prepare.ps1 Normal file
View 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 }