profile: per-LOD whole-view breakdown for the four-strate owner world (L73, no world change)

FI/TN/VS (legacy compiled-analytic) skip ZERO tiles at every LOD and evaluate ~44k density
points per LOD0/1 tile; SW skips 359/512 at LOD0. The whole-tile skip requires a native
tile with a uniform verdict, and the legacy paths return Mixed/unknown (R39 notes attached).
Opt-in stage timers, sampled field timer, per-LOD classification and composer counters.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-27 08:48:57 +01:00
1 parent d970d75be8
commit bd1b2a8f1d
10 files changed
+702 -5

No files matched your search

@@ -5052,6 +5052,13 @@ namespace StandaloneStreamBenchmark
std::array<std::uint64_t,9> DensitySamplesByLOD{};
std::array<std::uint64_t,9> SkirtTrianglesByLOD{};
std::array<std::uint64_t,9> TileCountByLOD{};
std::array<std::uint64_t,9> ClassifiedAirTilesByLOD{},ClassifiedSolidTilesByLOD{};
std::array<std::uint64_t,9> ClassifiedMixedTilesByLOD{},UnclassifiedTilesByLOD{};
std::array<std::uint64_t,9> MeshingSkippedTilesByLOD{},DensityGridTilesByLOD{};
std::array<std::uint64_t,9> DensityPointCallsByLOD{},DensityFieldEvalNanosecondsByLOD{};
std::array<std::uint64_t,9> DensityFieldEvalSamplePointsByLOD{};
std::array<std::uint64_t,9> ProofAirCellsByLOD{},ProofSolidCellsByLOD{};
std::array<double,9> PayloadBuildMsByLOD{};
std::array<std::uint64_t,9> BaseRouteTilesByLOD{},PageRouteTilesByLOD{};
for(const FVoxelTileKey& Tile:Desired.Tiles)
if(Tile.Level>=0&&Tile.Level<static_cast<int32>(ExpectedTilesByLOD.size()))
@@ -5101,6 +5108,28 @@ namespace StandaloneStreamBenchmark
{
const std::size_t LOD=static_cast<std::size_t>(Tile.Key.Level);
++TileCountByLOD[LOD];
const auto& TileDiagnostics=Tile.CoreDiagnostics;
if(TileDiagnostics.tileWasClassified)
{
switch(TileDiagnostics.tileClass)
{
case VoxelForgeCore::TileClass::allAir:++ClassifiedAirTilesByLOD[LOD];break;
case VoxelForgeCore::TileClass::allSolid:++ClassifiedSolidTilesByLOD[LOD];break;
case VoxelForgeCore::TileClass::mixed:++ClassifiedMixedTilesByLOD[LOD];break;
case VoxelForgeCore::TileClass::unknown:++UnclassifiedTilesByLOD[LOD];break;
}
}
else ++UnclassifiedTilesByLOD[LOD];
if(TileDiagnostics.meshingSkipped)++MeshingSkippedTilesByLOD[LOD];
if(Tile.DensitySamples>0)++DensityGridTilesByLOD[LOD];
DensityPointCallsByLOD[LOD]+=TileDiagnostics.densityPointCalls;
DensityFieldEvalNanosecondsByLOD[LOD]+=
TileDiagnostics.densityFieldEvalNanoseconds;
DensityFieldEvalSamplePointsByLOD[LOD]+=
TileDiagnostics.densityFieldEvalSamplePoints;
ProofAirCellsByLOD[LOD]+=TileDiagnostics.marchingCubesProofSkippedAirCells;
ProofSolidCellsByLOD[LOD]+=TileDiagnostics.marchingCubesProofSkippedSolidCells;
PayloadBuildMsByLOD[LOD]+=Tile.PayloadBuildMilliseconds;
WorkerSecondsByLOD[LOD]+=Tile.WorkerSeconds;
if(bReportLodWorkProfile)
{
@@ -5549,6 +5578,31 @@ namespace StandaloneStreamBenchmark
GroundRefineExclusiveMsByLOD[LOD],CapRefineExclusiveMsByLOD[LOD],
SkirtMsByLOD[LOD],static_cast<unsigned long long>(SkirtTrianglesByLOD[LOD]),
MeshAssemblyMsByLOD[LOD]);
if(bInstrumentTileDrain)
{
const double FieldEvalEstimateMs=DensityFieldEvalSamplePointsByLOD[LOD]
?static_cast<double>(DensityFieldEvalNanosecondsByLOD[LOD])
*static_cast<double>(DensityPointCallsByLOD[LOD])
/static_cast<double>(DensityFieldEvalSamplePointsByLOD[LOD])/1.0e6
:0.0;
const double TileDivisor=TileCountByLOD[LOD]
?static_cast<double>(TileCountByLOD[LOD]):1.0;
std::printf("[WorldAssemblerLODClassification] lod=%zu tiles=%llu all_air=%llu all_solid=%llu mixed=%llu unclassified=%llu tile_skips=%llu density_grid_tiles=%llu density_point_calls=%llu density_points_per_tile=%.1f field_eval_ms_est=%.3f field_eval_sample_points=%llu proof_air_cells=%llu proof_solid_cells=%llu payload_build_ms=%.3f\n",
LOD,static_cast<unsigned long long>(TileCountByLOD[LOD]),
static_cast<unsigned long long>(ClassifiedAirTilesByLOD[LOD]),
static_cast<unsigned long long>(ClassifiedSolidTilesByLOD[LOD]),
static_cast<unsigned long long>(ClassifiedMixedTilesByLOD[LOD]),
static_cast<unsigned long long>(UnclassifiedTilesByLOD[LOD]),
static_cast<unsigned long long>(MeshingSkippedTilesByLOD[LOD]),
static_cast<unsigned long long>(DensityGridTilesByLOD[LOD]),
static_cast<unsigned long long>(DensityPointCallsByLOD[LOD]),
static_cast<double>(DensityPointCallsByLOD[LOD])/TileDivisor,
FieldEvalEstimateMs,
static_cast<unsigned long long>(DensityFieldEvalSamplePointsByLOD[LOD]),
static_cast<unsigned long long>(ProofAirCellsByLOD[LOD]),
static_cast<unsigned long long>(ProofSolidCellsByLOD[LOD]),
PayloadBuildMsByLOD[LOD]);
}
if(bReportLodWorkProfile)
{
const auto& Detail=*FarLODProfile;
+23 -4
View File
@@ -50,6 +50,7 @@ struct FStandaloneCpuTile
uint32 SkirtTriangleCount=0;
uint64 DensitySamples=0;
double WorkerSeconds=0.0;
double PayloadBuildMilliseconds=0.0;
std::chrono::steady_clock::time_point QueuedAt{};
std::chrono::steady_clock::time_point StartedAt{};
std::chrono::steady_clock::time_point CompletedAt{};
@@ -373,6 +374,7 @@ struct FStandaloneCpuTileTimelineEvent
std::chrono::steady_clock::time_point StartedAt{};
std::chrono::steady_clock::time_point FinishedAt{};
double WorkerMilliseconds=-1.0;
double PayloadBuildMilliseconds=0.0;
uint64 DensitySamples=0;
uint32 SkirtTriangles=0;
VoxelForgeCore::TileGenerationStats Diagnostics{};
@@ -923,6 +925,7 @@ private:
Out.bHasDensityHash=Result->hasDensityHash;Out.bHasMeshHash=Result->hasMeshHash;
Out.bHasPayloadHash=Result->hasPayloadHash;Out.bHasTopologyHash=Result->hasTopologyHash;
Out.bHasMaterialHash=Result->hasMaterialHash;
const auto PayloadBuildStart=bInstrumentTileDrain?FClock::now():FClock::time_point{};
Out.Vertices.reserve(Result->vertices.size());
for(const auto& Vertex:Result->vertices)
Out.Vertices.push_back({
@@ -933,6 +936,9 @@ private:
Vertex.hostMaterialId,Vertex.resourceMaterialIds,Vertex.resourceWeightsQ16});
Out.Indices=std::move(Result->indices);
Out.TriangleSkirtFaceMasks=std::move(Result->skirtFaceMasks);
if(bInstrumentTileDrain)
Out.PayloadBuildMilliseconds=std::chrono::duration<double,std::milli>(
FClock::now()-PayloadBuildStart).count();
if(bProfile)
{
const VoxelDensityProfile::FSnapshot After=VoxelDensityProfile::SnapshotCurrentThread();
@@ -1046,7 +1052,8 @@ private:
RecordTimelineEvent(FStandaloneCpuTileTimelineEvent::EType::Finish,Tile.Key,
WorkerId,Queue.size(),Running.size(),Job.PriorityRank,Tile.CompletedAt,
Tile.QueuedAt,Tile.StartedAt,Tile.CompletedAt,Tile.WorkerSeconds*1000.0,
&Tile.CoreDiagnostics,Tile.DensitySamples,Tile.SkirtTriangleCount);
&Tile.CoreDiagnostics,Tile.DensitySamples,Tile.SkirtTriangleCount,
Tile.PayloadBuildMilliseconds);
Ready.push_back(std::move(Tile));
}
}
@@ -1065,9 +1072,20 @@ private:
static void PrintTileStageEvent(const FStandaloneCpuTileTimelineEvent& Event)
{
const auto& D=Event.Diagnostics;
std::printf("[CpuTileStages] key=(%d,%d,%d,lod%d) worker_id=%d worker_ms=%.3f samples=%llu classify_ms=%.3f column_ms=%.3f column_exclusive_ms=%.3f mc_ms=%.3f mc_grid_ms=%.3f mc_cell_ms=%.3f mc_gradient_ms=%.3f mc_interpolation_ms=%.3f mc_dedup_ms=%.3f mc_skirt_ms=%.3f mc_other_ms=%.3f connector_ms=%.3f ground_ms=%.3f cap_ms=%.3f horizon_ms=%.3f mesh_assembly_ms=%.3f candidate_cells=%llu classified_cells=%llu surface_cells=%llu proof_solid_cells=%llu proof_air_cells=%llu proof_density_samples=%llu zband_reject_cells=%llu x8_calls=%llu x8_active_lanes=%llu grad_calls=%llu grad_memo_hits=%llu grad_fallback_calls=%llu midpoint_attempts=%llu midpoint_memo_hits=%llu skirt_edges=%llu skirt_boundary_edges=%llu skirt_density_probes=%llu skirt_triangles=%u fi_local_hit=%llu fi_local_miss=%llu fi_local_conflicts=%llu fi_shared_hit=%llu fi_shared_miss=%llu fi_shared_computes=%llu fi_shared_conflicts=%llu fi_lock_wait_us=%.3f\n",
const char* TileClassName=D.tileClass==VoxelForgeCore::TileClass::allAir?"air":
D.tileClass==VoxelForgeCore::TileClass::allSolid?"solid":
D.tileClass==VoxelForgeCore::TileClass::mixed?"mixed":"unknown";
std::printf("[CpuTileStages] key=(%d,%d,%d,lod%d) worker_id=%d worker_ms=%.3f payload_ms=%.3f tile_classified=%d tile_class=%s tile_skip=%d density_point_calls=%llu density_float_points=%llu density_lattice_points=%llu density_unclamped_points=%llu density_x8_points=%llu field_eval_sample_ns=%llu field_eval_sample_points=%llu samples=%llu classify_ms=%.3f column_ms=%.3f column_exclusive_ms=%.3f mc_ms=%.3f mc_grid_ms=%.3f mc_cell_ms=%.3f mc_gradient_ms=%.3f mc_interpolation_ms=%.3f mc_dedup_ms=%.3f mc_skirt_ms=%.3f mc_other_ms=%.3f connector_ms=%.3f ground_ms=%.3f cap_ms=%.3f horizon_ms=%.3f mesh_assembly_ms=%.3f candidate_cells=%llu classified_cells=%llu surface_cells=%llu proof_solid_cells=%llu proof_air_cells=%llu proof_density_samples=%llu zband_reject_cells=%llu x8_calls=%llu x8_active_lanes=%llu grad_calls=%llu grad_memo_hits=%llu grad_fallback_calls=%llu midpoint_attempts=%llu midpoint_memo_hits=%llu skirt_edges=%llu skirt_boundary_edges=%llu skirt_density_probes=%llu skirt_triangles=%u fi_local_hit=%llu fi_local_miss=%llu fi_local_conflicts=%llu fi_shared_hit=%llu fi_shared_miss=%llu fi_shared_computes=%llu fi_shared_conflicts=%llu fi_lock_wait_us=%.3f\n",
Event.Key.Coord.X,Event.Key.Coord.Y,Event.Key.Coord.Z,Event.Key.Level,
Event.WorkerId,Event.WorkerMilliseconds,
Event.WorkerId,Event.WorkerMilliseconds,Event.PayloadBuildMilliseconds,
D.tileWasClassified?1:0,TileClassName,D.meshingSkipped?1:0,
static_cast<unsigned long long>(D.densityPointCalls),
static_cast<unsigned long long>(D.densityFloatPointCalls),
static_cast<unsigned long long>(D.densityLatticePointCalls),
static_cast<unsigned long long>(D.densityUnclampedPointCalls),
static_cast<unsigned long long>(D.densityX8PointCalls),
static_cast<unsigned long long>(D.densityFieldEvalNanoseconds),
static_cast<unsigned long long>(D.densityFieldEvalSamplePoints),
static_cast<unsigned long long>(Event.DensitySamples),D.classificationMilliseconds,
D.columnComputeMilliseconds,D.columnEvaluationExclusiveMilliseconds,
D.marchingCubesExclusiveMilliseconds+D.marchingCubesSkirtMilliseconds,
@@ -1137,13 +1155,14 @@ private:
size_t PriorityRank,FClock::time_point At,FClock::time_point Queued={},
FClock::time_point Started={},FClock::time_point Finished={},double WorkerMs=-1.0,
const VoxelForgeCore::TileGenerationStats* Diagnostics=nullptr,
uint64 DensitySamples=0,uint32 SkirtTriangles=0)
uint64 DensitySamples=0,uint32 SkirtTriangles=0,double PayloadBuildMs=0.0)
{
FStandaloneCpuTileTimelineEvent Event;
Event.Type=Type;Event.Key=Key;Event.WorkerId=WorkerId;
Event.QueueDepth=QueueDepth;Event.ActiveWorkers=ActiveWorkers;
Event.PriorityRank=PriorityRank;Event.At=At;Event.QueuedAt=Queued;
Event.StartedAt=Started;Event.FinishedAt=Finished;Event.WorkerMilliseconds=WorkerMs;
Event.PayloadBuildMilliseconds=PayloadBuildMs;
Event.DensitySamples=DensitySamples;Event.SkirtTriangles=SkirtTriangles;
if(Diagnostics)Event.Diagnostics=*Diagnostics;
if(WorkerId>=0&&static_cast<size_t>(WorkerId)<TimelineWorkerEvents.size())