feat(benchmark): build jobs from DXF manifests and run solves in parallel
Benchmark jobs could only come from .nest files. A JSON manifest now lists DXF files with quantities (plus sheet sizes, spacing, edge spacing, quadrant and per-part allowRotation), imported through CadImporter. DXF paths resolve relative to the manifest; sheet sizes are required from the manifest or --sheet-sizes and are read in the DXFs' own units. Folder scans pick up *.nest and *.manifest.json, and invalid manifests fail loudly. BenchmarkRunner now runs (job x engine) solves concurrently, capped by --parallel N (CLI default 3; --parallel 1 is sequential). Results are written by index so report order is unchanged. Concurrent solves compete for cores, so Time(ms) is only clean at --parallel 1; the run prints a note when N > 1. Also fixes --output for manifest jobs, which tried to read the manifest as a .nest to copy metadata from. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,13 @@ namespace OpenNest.Benchmark
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
if (file.EndsWith(".json", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// Hand-written manifests fail loudly rather than being skipped like unreadable .nest files.
|
||||
jobs.Add(DxfManifestLoader.Load(file, sheetSizeOverrides, partSpacingOverride));
|
||||
continue;
|
||||
}
|
||||
|
||||
Nest nest;
|
||||
|
||||
try
|
||||
@@ -79,7 +86,14 @@ namespace OpenNest.Benchmark
|
||||
if (Directory.Exists(inputPath))
|
||||
{
|
||||
return Directory
|
||||
.GetFiles(inputPath, "*.nest", SearchOption.AllDirectories)
|
||||
.EnumerateFiles(inputPath, "*", SearchOption.AllDirectories)
|
||||
.Where(f =>
|
||||
f.EndsWith(".nest", StringComparison.OrdinalIgnoreCase)
|
||||
|| f.EndsWith(
|
||||
DxfManifestLoader.FolderSuffix,
|
||||
StringComparison.OrdinalIgnoreCase
|
||||
)
|
||||
)
|
||||
.OrderBy(f => f, StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user