mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-25 21:40:05 +00:00
Memoized bake planes
- Planes fill lazily per column with ready bits and batch only missing columns on full-chunk requests - Natural fills batch only the base heights Terrain3D still needs and reuse the sparse memo - Bounds lattice and hydrology planner reads stay out of the bake - Bake capacity is eight times the noise cache, covering the measured working set - Generator evaluation counters and a bake census print from the probe - Parity test compares batched chunk base heights and evaluation counts with the scalar path
This commit is contained in:
1 parent
037156ab7d
commit
1acda886b3
12 files changed
+666
-291
No files matched your search
@@ -18,6 +18,8 @@
|
||||
|
||||
package art.arcane.iris.probe;
|
||||
|
||||
import art.arcane.iris.generation.bake.BakePlane;
|
||||
import art.arcane.iris.generation.bake.GeneratorEvaluations;
|
||||
import art.arcane.iris.pack.loading.IrisData;
|
||||
import art.arcane.iris.pack.PackValidationResult;
|
||||
import art.arcane.iris.pack.PackValidator;
|
||||
@@ -553,9 +555,11 @@ public final class GenerationProbe {
|
||||
List<ChunkCoordinate> coordinates, OutcomeSink sink) throws IOException {
|
||||
int totalChunks = coordinates.size();
|
||||
long measuredStartEpochMillis = 0L;
|
||||
GeneratorEvaluations.Snapshot measuredStartEvaluations = GeneratorEvaluations.snapshot();
|
||||
for (int index = 0; index < totalChunks; index++) {
|
||||
if (index == configuration.warmupChunks()) {
|
||||
measuredStartEpochMillis = System.currentTimeMillis();
|
||||
measuredStartEvaluations = GeneratorEvaluations.snapshot();
|
||||
}
|
||||
drainReported();
|
||||
ChunkOutcome outcome = generateChunk(engine, index, coordinates.get(index), configuration.multicore());
|
||||
@@ -563,12 +567,22 @@ public final class GenerationProbe {
|
||||
sink.accept(outcome, index >= configuration.warmupChunks());
|
||||
printProgress(configuration, index + 1, totalChunks);
|
||||
}
|
||||
printWindow(measuredStartEpochMillis, System.currentTimeMillis());
|
||||
printWindow(engine, measuredStartEpochMillis, System.currentTimeMillis(), measuredStartEvaluations);
|
||||
}
|
||||
|
||||
private static void printWindow(long startEpochMillis, long endEpochMillis) {
|
||||
private static void printWindow(Engine engine, long startEpochMillis, long endEpochMillis, GeneratorEvaluations.Snapshot startEvaluations) {
|
||||
System.out.println("IRIS_GENPROBE_WINDOW phase=measured start_epoch_ms=" + startEpochMillis
|
||||
+ " end_epoch_ms=" + endEpochMillis);
|
||||
GeneratorEvaluations.Snapshot evaluations = GeneratorEvaluations.snapshot().minus(startEvaluations);
|
||||
System.out.printf(Locale.ROOT, "IRIS_GENPROBE_GENERATORS baked_chunks=%d baked_evaluations=%d evaluations_per_baked_chunk=%.3f batched_evaluations=%d scalar_evaluations=%d%n",
|
||||
evaluations.bakedChunks(), evaluations.bakedEvaluations(), evaluations.bakedEvaluationsPerChunk(),
|
||||
evaluations.batchedEvaluations(), evaluations.scalarEvaluations());
|
||||
long[] census = engine.getComplex().bakeCensus();
|
||||
StringBuilder planes = new StringBuilder("IRIS_GENPROBE_BAKE entries=").append(census[BakePlane.values().length]);
|
||||
for (BakePlane plane : BakePlane.values()) {
|
||||
planes.append(' ').append(plane.name().toLowerCase(Locale.ROOT)).append('=').append(census[plane.ordinal()]);
|
||||
}
|
||||
System.out.println(planes);
|
||||
}
|
||||
|
||||
private static void generateParallel(Engine engine, ProbeConfiguration configuration, ProbeOptions options,
|
||||
@@ -594,10 +608,11 @@ public final class GenerationProbe {
|
||||
List<Integer> measured = spiralOrder(coordinates, configuration.warmupChunks(),
|
||||
configuration.centerChunkX(), configuration.centerChunkZ());
|
||||
long measuredStartEpochMillis = System.currentTimeMillis();
|
||||
GeneratorEvaluations.Snapshot measuredStartEvaluations = GeneratorEvaluations.snapshot();
|
||||
long measuredStarted = System.nanoTime();
|
||||
runPhase(executor, engine, configuration, coordinates, measured, outcomes);
|
||||
measuredWallNanos = System.nanoTime() - measuredStarted;
|
||||
printWindow(measuredStartEpochMillis, System.currentTimeMillis());
|
||||
printWindow(engine, measuredStartEpochMillis, System.currentTimeMillis(), measuredStartEvaluations);
|
||||
unattributed.addAll(drainReported());
|
||||
System.out.println("[genprobe] measured progress: " + configuration.measuredChunks() + "/"
|
||||
+ configuration.measuredChunks());
|
||||
|
||||
Reference in new issue
Block a user