Skip to content

Commit ef015e9

Browse files
Xeratecclaude
andcommitted
Add tile-count performance hint to TransposeTileConstraint
Add a soft PerformanceHint constraining the output to at least 4 tiles. Transpose is bandwidth-bound, so a higher tile count keeps DMA and compute pipelined under double buffering. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3b011bb commit ef015e9

1 file changed

Lines changed: 21 additions & 1 deletion

File tree

Deeploy/Targets/Generic/TileConstraints/TransposeTileConstraint.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@
44

55
from typing import Dict, List, Tuple
66

7+
import numpy as np
8+
79
from Deeploy.AbstractDataTypes import PointerClass
810
from Deeploy.CommonExtensions.DataTypes import uint16_t
911
from Deeploy.CommonExtensions.OptimizationPasses.TopologyOptimizationPasses.LoweringOptimizationPasses import \
1012
_invertPermutation, _permuteHyperRectangle
1113
from Deeploy.DeeployTypes import NetworkContext, OperatorRepresentation
1214
from Deeploy.TilingExtension.MemoryConstraints import NodeMemoryConstraint
1315
from Deeploy.TilingExtension.TileConstraint import TileConstraint
14-
from Deeploy.TilingExtension.TilerModel import TilerModel
16+
from Deeploy.TilingExtension.TilerModel import PerformanceHint, TilerModel
1517
from Deeploy.TilingExtension.TilingCodegen import AbsoluteHyperRectangle, TilingSchedule, VariableReplacementScheme
1618

1719

@@ -35,6 +37,24 @@ def addGeometricalConstraint(tilerModel: TilerModel, parseDict: Dict, ctxt: Netw
3537

3638
return tilerModel
3739

40+
@staticmethod
41+
def addPolicyConstraint(tilerModel: TilerModel, parseDict: Dict, ctxt: NetworkContext) -> TilerModel:
42+
# Soft hint: split the output across at least 4 tiles. Transpose is
43+
# bandwidth-bound, so a higher tile count keeps DMA and compute pipelined
44+
# under double buffering.
45+
outputBufferName = parseDict['data_out']
46+
outputBuffer = ctxt.lookup(outputBufferName)
47+
48+
totalElements = int(np.prod(outputBuffer.shape))
49+
if totalElements < 4:
50+
return tilerModel
51+
52+
tilerModel.addTensorNumOfEltToModel(ctxt, outputBufferName)
53+
numEltVar = tilerModel.getTensorNumberOfEltVar(outputBufferName)
54+
tilerModel.addConstraint(numEltVar * 4 <= totalElements, strategy = PerformanceHint(priority = 0))
55+
56+
return tilerModel
57+
3858
@classmethod
3959
def serializeTilingSolution(
4060
cls, tilingSolution: NodeMemoryConstraint, absoluteOutputCubes: List[AbsoluteHyperRectangle],

0 commit comments

Comments
 (0)