Skip to content

After #1041 the LTX-2.5 render is dominated by a ~1731 s single-threaded phase that is CONSTANT in resolution, not by the decode #1087

Description

@localai-bot

Measured during the max-quality render run on dgx.casa on 2026-08-16/17, against main 0b0b8900f (i.e. with #1041's threaded decode in). Reported by the operator from the render agent's per-phase sampler; the classification method is stated below so it can be disputed.

The finding

Two rungs completed. Phase classification came from the CPU-time rate in a 2 s sampler (>3 cores = threaded, 0.4-3 = one core, below = load/IO):

Rung Wall load/IO one-core threaded peak cores
448x256 / 25f 3085 s 352 s (11.4%) 2023 s (65.6%) 705 s (22.9%) 29.8
704x448 / 25f 4231 s 330 s (7.8%) 2399 s (56.7%) 1497 s (35.4%) 30.9

Inside those one-core totals, a single contiguous phase measured 1731 s and 1732 s across the two rungs — i.e. essentially constant while the voxel count grew 2.75x (448x256 vs 704x448, same 25 frames). Only the later phases scale.

So the render cost now fits a fixed ~2300 s (load + this serial phase + the first threaded burst) plus ~2.7e-4 s per output voxel. #1041 removed the decode as the bottleneck and this phase inherited the position.

Why this matters more than the raw ratio

#1041 is real and it worked: the pool reaches 19-31 cores in the decode phases, and the decisive evidence is that 448x256/25f completed at all, in 3085 sdocs/USAGE.md still records that exact geometry as "Measured NOT to complete". But the ~9x is a decode figure and does not appear end to end, because a phase #1041 never touched is now ~57-66% of wall.

A resolution-independent serial cost is also the shape that punishes exactly the direction this campaign cares about: it is pure overhead on small renders and it does not amortise.

What this owes

  • Identify the phase. The sampler classifies by CPU-time rate, not by symbol, so this issue names a duration and a scaling law, not a function. A phase-boundary log (An LTX-2.5 render emits ONE log line in 2.5 hours, so no phase of it can be measured without re-deriving the timing from a memory sampler #1010, already open and already asking for exactly this) or a profile would name it. Do not guess it from the duration.
  • Once named, decide whether it is threadable the way the decode was, or whether it is the memory-format/serial gap between decode bursts that the same run observed scaling with voxels.
  • Re-derive the fixed/variable split on a third geometry before treating the two-point fit as a law. Two points define a line; they do not prove one.

Related: #1041 (the decode threading that landed), #1009, #1010 (per-phase timings), #1007 (no device arm), #1024 (GPU idle), and the investigation spec .agents/specs/ltx25-decode-speed.md.

Not measured: no oracle comparison, no ratio against vLLM or Lightricks, and the phase attribution is one-sided against our own engine.

FOLLOWING_AGENTS_PROTOCOL

Following-Agents-Protocol: true
AI-Assisted: true
Assisted-by: AGENT:claude-opus-5 [claude-code]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions