Engine: drop the layer-loop memory flush in preset M
The ten network layer dispatches only need dispatch serialization, not a global memoryBarrier flush: each layer's cross-block traffic goes through its own buffers, already published by the preceding stage's flush. An empty compute->compute pipeline barrier keeps the ordering and removes the flush cost: whole-frame median 2515.0 -> 2431.7 us at Balanced (1488x837 -> 2560x1440), 3818.9 -> 3773.3 at Quality, 1892.6 -> 1810.6 at Performance, byte-identical to the captured launches (chain test 10/10 layers 100.0%, frame test inf dB, 8- and 16-frame outputs match). Also documents this session's discarded probes (intra-frame barrier relaxation, colSum subgroup shuffle, downsample BLOCK_Y 32, expansion EO stride 24, cross-frame pipelining analysis, the NO_ROUND 7.0% rounding-free ceiling) and adds the round_half.glsl include guard.
This commit is contained in:
1 parent
d5c8be25c8
commit
065fe2c2a1
4 files changed
+134
-1
No files matched your search
@@ -3,6 +3,8 @@
|
||||
// gfx1201, and so is the packHalf2x16 round-trip (which is round-toward-zero anyway): the rounding only happens
|
||||
// once the binary16 value lands in binary16 memory. Scalar f32 -> f16 -> f32 casts are folded the same way,
|
||||
// notably for filtered recurrent features, hence the integer helper below.
|
||||
#ifndef D4R_ROUND_HALF_GL
|
||||
#define D4R_ROUND_HALF_GL
|
||||
// Cooperative matrices are composites of implementation-dependent components: every invocation owns and may
|
||||
// subscript a fixed number of them (length(), 8 for a 16x16 subgroup-scope accumulator on a 32-lane wave).
|
||||
float roundHalfValue(float v) {
|
||||
@@ -40,3 +42,5 @@ vec4 roundHalfValue(vec4 v) {
|
||||
(m)[rh_i_] = float(storage[gl_LocalInvocationID.x * 8u + uint(rh_i_)]); \
|
||||
subgroupMemoryBarrierShared(); \
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user