n differentiable functions arranged in bounded-depth groups, each group differentiated in both forward and reverse mode, plus a differentiable generic. Stresses the autodiff IR transform (inside linkAndOptimizeIR) and the front-end checking of [Differentiable]. Scales by breadth.
bucket: autodiff · compile mode: target · flags: -target spirv -emit-spirv-directly · default N: 200
Full sub-counter decomposition of compileInner — named leaf timers plus (self) residuals (a parent's time not covered by a named child, e.g. the autodiff transform in linkAndOptimizeIR (self)). Topmost band traces compileInner; hover a band for its phase.
exact compiled source (N = 200); long files show the first 40 lines, the area around computeMain (±40), and the last 40 lines (gaps elided)
// AUTO-GENERATED by perf-suite/workloads.py — do not edit by hand.
RWStructuredBuffer<float> outBuf;
[Differentiable]
float leaf(float x) { return x * x + sin(x) * cos(x); }
[Differentiable]
float chain_0(float x) { return leaf(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_1(float x) { return chain_0(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_2(float x) { return chain_1(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_3(float x) { return chain_2(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_4(float x) { return chain_3(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_5(float x) { return chain_4(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_6(float x) { return chain_5(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_7(float x) { return chain_6(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_8(float x) { return leaf(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_9(float x) { return chain_8(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_10(float x) { return chain_9(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_11(float x) { return chain_10(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_12(float x) { return chain_11(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_13(float x) { return chain_12(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_14(float x) { return chain_13(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_15(float x) { return chain_14(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_16(float x) { return leaf(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
// … 332 lines omitted …
[Differentiable]
float chain_183(float x) { return chain_182(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_184(float x) { return leaf(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_185(float x) { return chain_184(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_186(float x) { return chain_185(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_187(float x) { return chain_186(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_188(float x) { return chain_187(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_189(float x) { return chain_188(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_190(float x) { return chain_189(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_191(float x) { return chain_190(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_192(float x) { return leaf(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_193(float x) { return chain_192(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_194(float x) { return chain_193(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_195(float x) { return chain_194(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_196(float x) { return chain_195(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_197(float x) { return chain_196(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_198(float x) { return chain_197(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
float chain_199(float x) { return chain_198(x) * 1.0009 + sin(x) * 0.5 - cos(x) * 0.25; }
[Differentiable]
T poly<T : IDifferentiable & IFloat>(T x) { return x * x * x + x; }
[shader("compute")]
[numthreads(1,1,1)]
void computeMain(uint3 tid : SV_DispatchThreadID)
{
float x = outBuf[tid.x];
float acc = 0.0;
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_7)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_7)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_15)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_15)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_23)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_23)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_31)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_31)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_39)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_39)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_47)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_47)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_55)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_55)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_63)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_63)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_71)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_71)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_79)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_79)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_87)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_87)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_95)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_95)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_103)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_103)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_111)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_111)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_119)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_119)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_127)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_127)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_135)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_135)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_143)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_143)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_151)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_151)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_159)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_159)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_167)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_167)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_175)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_175)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_183)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_183)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_191)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_191)(diffPair(x, 1.0)).d; }
{ var dp = diffPair(x, 1.0);
bwd_diff(chain_199)(dp, 1.0); acc += dp.d;
acc += fwd_diff(chain_199)(diffPair(x, 1.0)).d; }
acc += fwd_diff(poly<float>)(diffPair(x, 1.0)).d;
outBuf[0] = acc;
}