Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid
### List of Pull Requests
- PyPi Package Deployment + Remove Banshee Dept [#154](https://github.com/pulp-platform/Deeploy/pull/154)
- PyTest Migration [#144](https://github.com/pulp-platform/Deeploy/pull/144)
- Support for MaxPool1D and RQSConv1D for PULPOpen [#146](https://github.com/pulp-platform/Deeploy/pull/146)
- Update submodule `pulp-nn-mixed` [#145](https://github.com/pulp-platform/Deeploy/pull/145)
- Improve Profiling [#138](https://github.com/pulp-platform/Deeploy/pull/138)
- FP32 ReduceMean operator improvement [#137](https://github.com/pulp-platform/Deeploy/pull/137)
Expand Down Expand Up @@ -66,6 +67,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid
- `pytestRunner.py` contains helper functions and fixtures for the whole project.
- `test_platforms.py` lists the E2E tests and sorts them into marked categories (per platform and per kernel/model).
- Each platform has a test config file where a list or a dict describes the tests.
- Add integer MaxPool1D for Generic platform and RQSConv1D support for PULPOpen, with corresponding kernel tests.
- Support for unknown number of data dimensions in the tiler
- Parallelization support for the FP32 ReduceMean operator on PULPOpen
- Extensive testing for the ReduceMean operator
Expand Down Expand Up @@ -171,6 +173,7 @@ This file contains the changelog for the Deeploy project. The changelog is divid
- Update `README.md` to remove reference to NVIDIA's PyPi index.
- `nvidia-pyindex` was broken as it now tries to build the wheel to respect the new policy on packages using `pyproject`. Instead of installing this package, we just add the `https://pypi.ngc.nvidia.com` channel to the pip config file.
- Pin versions of broken dependencies of Banshee.
- im2col buffer size in Conv1d template
- Fixed ReduceMean parallelization and tiling issues described in Issue [#134](https://github.com/pulp-platform/Deeploy/issues/134).
- Fixed PULP FP32 regular and DW Conv2D, and MatMul tile constraints.
- Fixed type casting for tiling code generation.
Expand Down
4 changes: 2 additions & 2 deletions Deeploy/Targets/GAP9/Bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
from Deeploy.Targets.PULPOpen.DataTypes import PULPDMAFuture
from Deeploy.Targets.PULPOpen.Templates import ConvTemplate, DMASliceTemplate, FloatAddTemplate, FloatConvTemplate, \
FloatGELUTemplate, FloatGemmTemplate, FloatLayernormTemplate, FloatMatMulTemplate, FloatMaxPoolTemplate, \
FloatMulTemplate, FloatReluTemplate, FloatSoftmaxTemplate, GEMMTemplate, MatrixVectorTemplate, MaxPool2DTemplate, \
FloatMulTemplate, FloatReluTemplate, FloatSoftmaxTemplate, GEMMTemplate, MatrixVectorTemplate, MaxPoolTemplate, \
MulTemplate, ReduceMeanTemplate, RequantShiftTemplate, ReshapeTemplate, RQAddTemplate, RQSiHardswishTemplate, \
SGDTemplate, SoftmaxCrossEntropyLossTemplate, TallGEMMTemplate, TransposeTemplate, UniformRequantShiftTemplate, \
iRMSNormTemplate, iSoftmaxTemplate
Expand Down Expand Up @@ -227,7 +227,7 @@

GAP9MaxPool2DBindings = [
NodeBinding(PULPMaxPoolChecker([PointerClass(type)], [PointerClass(type)]),
MaxPool2DTemplate.PULPMaxPool2D_8_Template, GAP9Transformer) for type in [int8_t, uint8_t]
MaxPoolTemplate.PULPMaxPool2D_8_Template, GAP9Transformer) for type in [int8_t, uint8_t]
] + [
NodeBinding(PULPMaxPoolChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatMaxPoolTemplate.referenceTemplate, GAP9Transformer)
Expand Down
6 changes: 3 additions & 3 deletions Deeploy/Targets/GAP9/Platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@
SoftmaxCrossEntropyLossGradParser, SoftmaxCrossEntropyLossParser, SoftmaxGradParser, SoftmaxParser, \
TransposeParser, UniformRequantShiftParser, UnsqueezeParser, iHardswishParser, iRMSNormParser, iSoftmaxParser
from Deeploy.Targets.Generic.Templates import AllocateTemplate as BasicAllocateTemplate
from Deeploy.Targets.PULPOpen.Bindings import BasicDequantBindings, BasicQuantBindings, PULPConv1DBinding, \
PULPDMASliceBindings, PULPDWConv1DBinding, PULPReduceMeanBindings, PULPSliceBindings
from Deeploy.Targets.PULPOpen.Bindings import BasicDequantBindings, BasicQuantBindings, PULPDMASliceBindings, \
PULPDWConv1DBinding, PULPReduceMeanBindings, PULPRQSConv1DBindings, PULPSliceBindings
from Deeploy.Targets.PULPOpen.Layers import PULPRQSConvLayer, PULPRQSGEMMLayer
from Deeploy.Targets.PULPOpen.Parsers import PULPConv1DParser, PULPConv2DParser, PULPDWConv1DParser, \
PULPDWConv2DParser, PULPFPConv2DParser, PULPFPDWConv2DParser, PULPGEMMParser, PULPMatrixVecParser, \
Expand All @@ -63,7 +63,7 @@
GAP9_MatMulMapper = NodeMapper(MatMulParser(), GAP9MatMulTilingReadyBindings)
GAP9_RQIntegerDivMapper = NodeMapper(RQIntegerDivParser(), [BasicRQIntegerDivBinding])
GAP9_RQGELU_int8_Mapper = NodeMapper(RQSiGELUParser(), GAP9iRQSGELUTilingReadyBindings)
GAP9_Conv1DMapper = NodeMapper(PULPConv1DParser(), [PULPConv1DBinding])
GAP9_Conv1DMapper = NodeMapper(PULPConv1DParser(), PULPRQSConv1DBindings)
GAP9_DWConv1DMapper = NodeMapper(PULPDWConv1DParser(), [PULPDWConv1DBinding])
GAP9_FPConv2DMapper = NodeMapper(PULPFPConv2DParser(), GAP9Conv2DTilingReadyBindings)
GAP9_Conv2DMapper = NodeMapper(PULPConv2DParser(), GAP9RQSConv2DTilingReadyBindings)
Expand Down
5 changes: 4 additions & 1 deletion Deeploy/Targets/Generic/Bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,15 @@
]

BasicMaxPool1DBindings = [
NodeBinding(MaxPoolChecker([PointerClass(int8_t)], [PointerClass(int8_t)]), MaxPoolTemplate.reference1DTemplate,
BasicTransformer)
] + [
NodeBinding(MaxPoolChecker([PointerClass(type)], [PointerClass(type)]), FloatMaxPoolTemplate.reference1DTemplate,
BasicTransformer) for type in FloatDataTypes
]

BasicMaxPool2DBindings = [
NodeBinding(MaxPoolChecker([PointerClass(int8_t)], [PointerClass(int8_t)]), MaxPoolTemplate.referenceTemplate,
NodeBinding(MaxPoolChecker([PointerClass(int8_t)], [PointerClass(int8_t)]), MaxPoolTemplate.reference2DTemplate,
BasicTransformer)
] + [
NodeBinding(MaxPoolChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
Expand Down
8 changes: 6 additions & 2 deletions Deeploy/Targets/Generic/Parsers.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,13 @@ def __init__(self):
def parseNode(self, node: gs.Node) -> bool:

ret = all([
'ceil_mode' in node.attrs, 'kernel_shape' in node.attrs, 'pads' in node.attrs, 'strides' in node.attrs,
'ceil_mode' in node.attrs,
'kernel_shape' in node.attrs,
'pads' in node.attrs,
'strides' in node.attrs,
len(node.inputs) == 1,
len(node.outputs) >= 1
len(node.outputs) >= 1,
all([stride > 0 for stride in node.attrs['strides']]),
])
Comment thread
Xeratec marked this conversation as resolved.

if ret:
Expand Down
4 changes: 2 additions & 2 deletions Deeploy/Targets/Generic/Platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
ITAMaxMapper = NodeMapper(ITAMaxParser(), [BasicITASoftmaxBinding])
ITAPartialMaxMapper = NodeMapper(ITAPartialMaxParser(), [BasicITAPartialSoftmaxBinding])
MatMulMapper = NodeMapper(MatMulParser(), BasicMatMulBindings)
MaxPoolMapper = NodeMapper(GenericMaxPool2DParser(), BasicMaxPool2DBindings)
MaxPool2DMapper = NodeMapper(GenericMaxPool2DParser(), BasicMaxPool2DBindings)
MaxPool1DMapper = NodeMapper(MaxPool1DParser(), BasicMaxPool1DBindings)
MulMapper = NodeMapper(MulParser(), BasicMulBindings)
PowMapper = NodeMapper(PowParser(), BasicPowBindings)
Expand Down Expand Up @@ -99,7 +99,7 @@
'ITAPartialMax': ITAMaxLayer([ITAPartialMaxMapper]),
'MatMul': GEMMLayer([MatMulMapper]),
'MatMulInteger': MatMulLayer([MatMulMapper]),
'MaxPool': MaxPoolLayer([MaxPool1DMapper, MaxPoolMapper]),
'MaxPool': MaxPoolLayer([MaxPool1DMapper, MaxPool2DMapper]),
'Mul': MulLayer([MulMapper]),
'Pow': PowLayer([PowMapper]),
'Sqrt': SqrtLayer([SqrtMapper]),
Expand Down
25 changes: 23 additions & 2 deletions Deeploy/Targets/Generic/Templates/MaxPoolTemplate.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from Deeploy.DeeployTypes import NetworkContext, NodeTemplate, OperatorRepresentation


class _MaxPool2DTemplate(NodeTemplate):
class _MaxPoolTemplate(NodeTemplate):

def __init__(self, templateStr):
super().__init__(templateStr)
Expand All @@ -28,7 +28,7 @@ def alignToContext(self, ctxt: NetworkContext,
return ctxt, operatorRepresentation, []


referenceTemplate = _MaxPool2DTemplate("""
reference2DTemplate = _MaxPoolTemplate("""
<%
batchOffsetIn = ch_im_in * dim_im_in_x * dim_im_in_y
batchOffsetOut = ch_im_out * dim_im_out_x * dim_im_out_y
Expand All @@ -50,3 +50,24 @@ def alignToContext(self, ctxt: NetworkContext,
}
END_SINGLE_CORE
""")

reference1DTemplate = _MaxPoolTemplate("""
<%
batchOffsetIn = ch_im_in * dim_im_in_y
batchOffsetOut = ch_im_out * dim_im_out_y
%>
// 1D MaxPool (Name: ${nodeName}, Op: ${nodeOp})
BEGIN_SINGLE_CORE
${data_in_type.typeName} ref_${data_out}_${data_in} = ${data_in};
${data_out_type.typeName} ref_${data_out}_${data_out} = ${data_out};
for (uint32_t n=0; n<${batch}; ++n) {
MaxPool1d_s${data_in_type.referencedType.typeWidth}_s${data_out_type.referencedType.typeWidth}(
ref_${data_out}_${data_in}, ${ch_im_in}, ${dim_im_in_y},
${dim_kernel_y}, ${stride_y},
ref_${data_out}_${data_out}, ${input_offset}, ${output_offset}
);
ref_${data_out}_${data_in} += ${batchOffsetIn};
ref_${data_out}_${data_out} += ${batchOffsetOut};
}
END_SINGLE_CORE
""")
24 changes: 17 additions & 7 deletions Deeploy/Targets/PULPOpen/Bindings.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from Deeploy.Targets.PULPOpen.Templates import ConvTemplate, DMASliceTemplate, FloatAddTemplate, FloatConvTemplate, \
FloatGELUTemplate, FloatGemmTemplate, FloatLayernormTemplate, FloatMatMulTemplate, FloatMaxPoolTemplate, \
FloatMulTemplate, FloatReduceMeanTemplate, FloatReluTemplate, FloatSoftmaxTemplate, GEMMTemplate, \
MatrixVectorTemplate, MaxPool2DTemplate, MulTemplate, ReduceMeanTemplate, RequantShiftTemplate, ReshapeTemplate, \
MatrixVectorTemplate, MaxPoolTemplate, MulTemplate, ReduceMeanTemplate, RequantShiftTemplate, ReshapeTemplate, \
RQAddTemplate, RQSiHardswishTemplate, SGDTemplate, SoftmaxCrossEntropyLossTemplate, TallGEMMTemplate, \
TransposeTemplate, UniformRequantShiftTemplate, iRMSNormTemplate, iSoftmaxTemplate
from Deeploy.Targets.PULPOpen.TypeCheckers import PULPConvChecker, PULPLinearChecker, PULPMaxPoolChecker, \
Expand Down Expand Up @@ -265,19 +265,29 @@

PULPRQSGEMMBindings = PULPRQSGEMM_8_Binding

PULPMaxPool1DBindings = [
NodeBinding(PULPMaxPoolChecker([PointerClass(type)], [PointerClass(type)]),
MaxPoolTemplate.PULPMaxPool1D_8_Template, ForkTransformer) for type in [int8_t, uint8_t]
]

PULPMaxPool2DBindings = [
NodeBinding(PULPMaxPoolChecker([PointerClass(type)], [PointerClass(type)]),
MaxPool2DTemplate.PULPMaxPool2D_8_Template, ForkTransformer) for type in [int8_t, uint8_t]
MaxPoolTemplate.PULPMaxPool2D_8_Template, ForkTransformer) for type in [int8_t, uint8_t]
] + [
NodeBinding(PULPMaxPoolChecker([PointerClass(float32_t)], [PointerClass(float32_t)]),
FloatMaxPoolTemplate.referenceTemplate, ForkTransformer)
]

PULPConv1DBinding = NodeBinding(
PULPConvChecker(
[PointerClass(int8_t), PointerClass(int8_t),
PointerClass(int32_t),
PointerClass(int32_t)], [PointerClass(int8_t)]), ConvTemplate.PULPConv1D_8_Template, ForkTransformer)
PULPRQSConv1DBindings = [
NodeBinding(
PULPConvChecker([PointerClass(_type),
PointerClass(int8_t),
PointerClass(int32_t),
PointerClass(int32_t)], [PointerClass(_type)]),
ConvTemplate.PULPConv1D_8_Template,
ForkTransformer,
) for _type in (int8_t, uint8_t)
]

PULPDWConv1DBinding = NodeBinding(
PULPConvChecker(
Expand Down
37 changes: 20 additions & 17 deletions Deeploy/Targets/PULPOpen/Platform.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,18 @@
RQSiHardswishLayer, SGDLayer, SliceLayer, SoftmaxCrossEntropyLossGradLayer, SoftmaxCrossEntropyLossLayer, \
SoftmaxGradLayer, SoftmaxLayer, TransposeLayer, iHardswishLayer, iRMSNormLayer
from Deeploy.Targets.Generic.Parsers import AddParser, ConcatParser, DequantParser, FlattenParser, GatherParser, \
GELUGradParser, GELUParser, GEMMParser, LayerNormGradParser, LayerNormParser, MatMulParser, MaxPool2DParser, \
MulParser, Pad1DParser, Pad2DParser, QuantParser, ReduceSumParser, ReluParser, RequantShiftParser, ReshapeParser, \
RQAddParser, RQIntegerDivParser, RQSiGELUParser, RQSiHardswishParser, SGDParser, SliceParser, \
SoftmaxCrossEntropyLossGradParser, SoftmaxCrossEntropyLossParser, SoftmaxGradParser, SoftmaxParser, \
TransposeParser, UniformRequantShiftParser, UnsqueezeParser, iHardswishParser, iRMSNormParser, iSoftmaxParser
GELUGradParser, GELUParser, GEMMParser, LayerNormGradParser, LayerNormParser, MatMulParser, MaxPool1DParser, \
MaxPool2DParser, MulParser, Pad1DParser, Pad2DParser, QuantParser, ReduceSumParser, ReluParser, \
RequantShiftParser, ReshapeParser, RQAddParser, RQIntegerDivParser, RQSiGELUParser, RQSiHardswishParser, \
SGDParser, SliceParser, SoftmaxCrossEntropyLossGradParser, SoftmaxCrossEntropyLossParser, SoftmaxGradParser, \
SoftmaxParser, TransposeParser, UniformRequantShiftParser, UnsqueezeParser, iHardswishParser, iRMSNormParser, \
iSoftmaxParser
from Deeploy.Targets.Generic.Templates import AllocateTemplate as BasicAllocateTemplate
from Deeploy.Targets.Generic.TopologyOptimizationPasses.Passes import DequantPatternPass, IntegerDivRequantMergePass, \
MergeConstAddAndRequantPass, MergeTrueIntegerDivRequantShiftPass, QuantPatternPass, RQSSplitPass, \
SkipEmptyConcatPass, SkipUnityRequantPass, iGELURequantMergePass, iHardswishRequantMergePass
from Deeploy.Targets.PULPOpen.Bindings import BasicDequantBindings, BasicQuantBindings, PULPConv1DBinding, \
PULPDMASliceBindings, PULPDWConv1DBinding
from Deeploy.Targets.PULPOpen.Bindings import BasicDequantBindings, BasicQuantBindings, PULPDMASliceBindings, \
PULPDWConv1DBinding
from Deeploy.Targets.PULPOpen.Layers import PULPRQSConvLayer, PULPRQSGEMMLayer
from Deeploy.Targets.PULPOpen.Parsers import PULPConv1DParser, PULPConv2DParser, PULPDWConv1DParser, \
PULPDWConv2DParser, PULPFPConv2DParser, PULPFPDWConv2DParser, PULPGEMMParser, PULPMatrixVecParser, \
Expand All @@ -40,14 +41,15 @@
PULPFPGELUGradTilingReadyBindings, PULPFPGELUTilingReadyBindings, PULPFPGEMMTilingReadyBindings, \
PULPGatherTilingReadyBindings, PULPiHardswishTilingReadyBindings, PULPiRMSNormTilingReadyBindings, \
PULPiRQSGELUTilingReadyBindings, PULPLayernormGradTilingReadyBindings, PULPLayernormTilingReadyBindings, \
PULPMatMulTilingReadyBindings, PULPMaxPool2DTilingReadyBindings, PULPMulTilingReadyBindings, \
PULPReduceMeanTilingReadyBindings, PULPReduceSumTilingReadyBindings, PULPReluTilingReadyBindings, \
PULPRQAddTilingReadyBindings, PULPRQSConv2DTilingReadyBindings, PULPRQSDWConv2DTilingReadyBindings, \
PULPRQSGEMMTilingReadyBindings, PULPRQSiHardswishTilingReadyBindings, PULPRQSMatrixVecTilingReadyBindings, \
PULPRQSTallGEMMTilingReadyBindings, PULPRQSTilingReadyBindings, PULPSGDTilingReadyBindings, \
PULPSliceTilingReadyBindings, PULPSoftmaxCrossEntropyGradTilingReadyBindings, \
PULPSoftmaxCrossEntropyTilingReadyBindings, PULPSoftmaxGradTilingReadyBindings, PULPSoftmaxTilingReadyBindings, \
PULPTransposeTilingReadyBindings, PULPUniformRQSTilingReadyBindings
PULPMatMulTilingReadyBindings, PULPMaxPool1DTilingReadyBindings, PULPMaxPool2DTilingReadyBindings, \
PULPMulTilingReadyBindings, PULPReduceMeanTilingReadyBindings, PULPReduceSumTilingReadyBindings, \
PULPReluTilingReadyBindings, PULPRQAddTilingReadyBindings, PULPRQSConv1DTilingReadyBindings, \
PULPRQSConv2DTilingReadyBindings, PULPRQSDWConv2DTilingReadyBindings, PULPRQSGEMMTilingReadyBindings, \
PULPRQSiHardswishTilingReadyBindings, PULPRQSMatrixVecTilingReadyBindings, PULPRQSTallGEMMTilingReadyBindings, \
PULPRQSTilingReadyBindings, PULPSGDTilingReadyBindings, PULPSliceTilingReadyBindings, \
PULPSoftmaxCrossEntropyGradTilingReadyBindings, PULPSoftmaxCrossEntropyTilingReadyBindings, \
PULPSoftmaxGradTilingReadyBindings, PULPSoftmaxTilingReadyBindings, PULPTransposeTilingReadyBindings, \
PULPUniformRQSTilingReadyBindings
from Deeploy.Targets.PULPOpen.TopologyOptimizationPasses.Passes import PULPAddRequantMergePass, \
PULPConvRequantMergePass, PULPGEMMRequantMergePass, PULPMatMulRequantMergePass

Expand All @@ -73,7 +75,7 @@
RQIntegerDivMapper = NodeMapper(RQIntegerDivParser(), [BasicRQIntegerDivBinding])
RQGELU_int8_Mapper = NodeMapper(RQSiGELUParser(), PULPiRQSGELUTilingReadyBindings)

Conv1DMapper = NodeMapper(PULPConv1DParser(), [PULPConv1DBinding])
Conv1DMapper = NodeMapper(PULPConv1DParser(), PULPRQSConv1DTilingReadyBindings)
DWConv1DMapper = NodeMapper(PULPDWConv1DParser(), [PULPDWConv1DBinding])
FPConv2DMapper = NodeMapper(PULPFPConv2DParser(), PULPConv2DTilingReadyBindings)
Conv2DMapper = NodeMapper(PULPConv2DParser(), PULPRQSConv2DTilingReadyBindings)
Expand All @@ -83,6 +85,7 @@
FloatGEMMMapper = NodeMapper(GEMMParser(), PULPFPGEMMTilingReadyBindings)
MatrixVecMapper = NodeMapper(PULPMatrixVecParser(), PULPRQSMatrixVecTilingReadyBindings)
TallGEMMMapper = NodeMapper(PULPTallGEMMParser(), PULPRQSTallGEMMTilingReadyBindings)
MaxPool1DMapper = NodeMapper(MaxPool1DParser(), PULPMaxPool1DTilingReadyBindings)
MaxPool2DMapper = NodeMapper(MaxPool2DParser(), PULPMaxPool2DTilingReadyBindings)
LayerNormMapper = NodeMapper(LayerNormParser(), PULPLayernormTilingReadyBindings)
LayerNormGradMapper = NodeMapper(LayerNormGradParser(), PULPLayernormGradTilingReadyBindings)
Expand Down Expand Up @@ -117,7 +120,7 @@
'GeluGrad': GELUGradLayer([GELUGradMapper]),
'LayerNormalization': LayerNormLayer([LayerNormMapper]),
'LayerNormalizationGrad': LayerNormGradLayer([LayerNormGradMapper]),
'MaxPool': MaxPoolLayer([MaxPool2DMapper]),
'MaxPool': MaxPoolLayer([MaxPool1DMapper, MaxPool2DMapper]),
'RequantizediGELU': RQSiGELULayer([RQGELU_int8_Mapper]),
'RQIntegerDiv': RQIntegerDivLayer([RQIntegerDivMapper]),
'MatMul': MatMulLayer([MatMulMapper]),
Expand Down
13 changes: 2 additions & 11 deletions Deeploy/Targets/PULPOpen/Templates/ConvTemplate.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ def alignToContext(self, ctxt: NetworkContext,
def computeTransientBuffersSize(
ctxt: NetworkContext,
operatorRepresentation: OperatorRepresentation) -> List[Tuple[str, Union[int, IntVar]]]:
im2col_dim = 8 * (1 * (1 + operatorRepresentation['pads'][0]) + operatorRepresentation['dim_kernel_y'])
im2col_dim = 8 * 2 * operatorRepresentation['ch_im_in'] * operatorRepresentation['dim_kernel_y']
im2col_name = operatorRepresentation['nodeName'] + "_buffer"
return [(im2col_name, im2col_dim)]

Expand Down Expand Up @@ -175,16 +175,7 @@ def __init__(self, templateStr):
signatureString += '_u8'
%>

<%
operatorString = ''
if dim_kernel_x == 1 and dim_kernel_y == 1:
operatorString = 'pointwise'
else:
operatorString = 'conv'
operatorString = 'conv'
%>

pulp_nn_${operatorString}${signatureString}(${data_in}, ${ctxtBuffer}, NULL, ${data_out}, ${weight}, ${mul}, ${add}, 1, ${log2D}, 1, ${dim_im_in_y}, ${ch_im_in}, 1, ${dim_im_out_y}, ${ch_im_out}, 1, ${dim_kernel_y}, ${padding_y_top}, ${padding_y_bottom}, 0, 0, 1, ${stride_y}, 1, 1);
pulp_nn_conv${signatureString}(${data_in}, ${ctxtBuffer}, NULL, ${data_out}, ${weight}, ${mul}, ${add}, 1, ${log2D}, 1, ${dim_im_in_y}, ${ch_im_in}, 1, ${dim_im_out_y}, ${ch_im_out}, 1, ${dim_kernel_y}, ${padding_y_top}, ${padding_y_bottom}, 0, 0, 1, ${stride_y}, 1, 1);
""")

PULPDWConv1D_8_Template = PULP1DDWConvTemplate("""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,17 @@ def alignToContext(self, ctxt: NetworkContext,
%>
pulp_nn_maxpool${signatureString}(${data_in}, ${data_out}, ${dim_im_in_y}, ${dim_im_in_x}, ${ch_im_in}, ${dim_im_out_y}, ${dim_im_out_x}, ${dim_kernel_y}, ${dim_kernel_x}, ${padding_y_top}, ${padding_y_bottom}, ${padding_x_left}, ${padding_x_right}, ${stride_y}, ${stride_x});
""")

PULPMaxPool1D_8_Template = PULPMaxPoolTemplate("""
// PULP NN MaxPool 1D
<%
signatureString = ''
if input_signed:
signatureString += '_i8'
else:
signatureString += '_u8'
%>
pulp_nn_maxpool${signatureString}(
${data_in}, ${data_out}, 1, ${dim_im_in_y}, ${ch_im_in}, 1, ${dim_im_out_y},
1, ${dim_kernel_y}, ${padding_y}, ${padding_y_right}, 0, 0, 1, ${stride_y});
""")
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Loading
Loading