From 670d6ce94ff2a856e186bde25cc9a93fe9fbd812 Mon Sep 17 00:00:00 2001 From: NiccoloN Date: Mon, 23 Mar 2026 14:46:08 +0100 Subject: [PATCH] extend operation support for conv and gemm add more tests in validation --- .../Conversion/ONNXToSpatial/CMakeLists.txt | 2 + .../Conversion/ONNXToSpatial/Math/Conv.cpp | 14 +- .../Conversion/ONNXToSpatial/Math/Gemm.cpp | 78 ++++- .../Conversion/ONNXToSpatial/Math/MatMul.cpp | 108 +++++++ .../Conversion/ONNXToSpatial/ONNXToSpatial.td | 12 +- .../ONNXToSpatial/ONNXToSpatialPass.cpp | 8 +- .../ONNXToSpatial/ONNXToSpatialPatterns.hpp | 4 + .../Tensor/ONNXReshapeToTensorReshape.cpp | 121 ++++++++ .../SpatialToPim/SpatialToPimPass.cpp | 79 ++++- src/PIM/Pass/PimConstantFoldingPass.cpp | 262 ++++++++++++++++- validation/operations/README.md | 47 +++ .../operations/conv/batch_2/conv_batch_2.onnx | Bin 0 -> 251 bytes .../conv/batch_64/conv_batch_64.onnx | Bin 264 -> 0 bytes .../conv_explicit_padding.onnx | Bin 0 -> 218 bytes .../conv/kernel_3x3/conv_kernel_3x3.onnx | Bin 0 -> 209 bytes .../large_spatial/conv_large_spatial.onnx | Bin 0 -> 219 bytes .../multi_channel/conv_multi_channel.onnx | Bin 0 -> 617 bytes .../conv/pointwise_1x1/conv_1x1.onnx | Bin 0 -> 303 bytes .../conv_same_padding_3x3.onnx | Bin 0 -> 222 bytes .../conv/stride_2/conv_stride_2.onnx | Bin 0 -> 213 bytes .../with_bias_3x3/conv_with_bias_3x3.onnx | Bin 0 -> 423 bytes .../gemm/alpha_beta/gemm_alpha_beta.onnx | Bin 0 -> 16794 bytes .../operations/gemm/large/gemm_large.onnx | Bin 0 -> 131176 bytes .../gemm/non_square/gemm_non_square.onnx | Bin 0 -> 32875 bytes .../operations/gemm/small/gemm_small.onnx | Bin 0 -> 225 bytes .../operations/gemm/transB/gemm_transB.onnx | Bin 0 -> 32886 bytes .../gemm_transB_with_bias.onnx | Bin 0 -> 33168 bytes .../gemm/with_bias/gemm_with_bias.onnx | Bin 0 -> 66173 bytes validation/operations/gen_tests.py | 276 ++++++++++++++++++ 29 files changed, 982 insertions(+), 29 deletions(-) create mode 100644 src/PIM/Conversion/ONNXToSpatial/Math/MatMul.cpp create mode 100644 src/PIM/Conversion/ONNXToSpatial/Tensor/ONNXReshapeToTensorReshape.cpp create mode 100644 validation/operations/README.md create mode 100644 validation/operations/conv/batch_2/conv_batch_2.onnx delete mode 100644 validation/operations/conv/batch_64/conv_batch_64.onnx create mode 100644 validation/operations/conv/explicit_padding/conv_explicit_padding.onnx create mode 100644 validation/operations/conv/kernel_3x3/conv_kernel_3x3.onnx create mode 100644 validation/operations/conv/large_spatial/conv_large_spatial.onnx create mode 100644 validation/operations/conv/multi_channel/conv_multi_channel.onnx create mode 100644 validation/operations/conv/pointwise_1x1/conv_1x1.onnx create mode 100644 validation/operations/conv/same_padding_3x3/conv_same_padding_3x3.onnx create mode 100644 validation/operations/conv/stride_2/conv_stride_2.onnx create mode 100644 validation/operations/conv/with_bias_3x3/conv_with_bias_3x3.onnx create mode 100644 validation/operations/gemm/alpha_beta/gemm_alpha_beta.onnx create mode 100644 validation/operations/gemm/large/gemm_large.onnx create mode 100644 validation/operations/gemm/non_square/gemm_non_square.onnx create mode 100644 validation/operations/gemm/small/gemm_small.onnx create mode 100644 validation/operations/gemm/transB/gemm_transB.onnx create mode 100644 validation/operations/gemm/transB_with_bias/gemm_transB_with_bias.onnx create mode 100644 validation/operations/gemm/with_bias/gemm_with_bias.onnx create mode 100644 validation/operations/gen_tests.py diff --git a/src/PIM/Conversion/ONNXToSpatial/CMakeLists.txt b/src/PIM/Conversion/ONNXToSpatial/CMakeLists.txt index 85beb04..ea95ce8 100644 --- a/src/PIM/Conversion/ONNXToSpatial/CMakeLists.txt +++ b/src/PIM/Conversion/ONNXToSpatial/CMakeLists.txt @@ -5,9 +5,11 @@ add_public_tablegen_target(ONNXToSpatialIncGen) add_onnx_mlir_library(OMONNXToSpatial Math/Gemm.cpp Math/Conv.cpp + Math/MatMul.cpp NN/Pooling.cpp NN/ReduceMean.cpp Tensor/ONNXConcatToTensorConcat.cpp + Tensor/ONNXReshapeToTensorReshape.cpp Tensor/RemoveUnusedHelperOps.cpp Utils/SpatialReducer.cpp Utils/WeightSubdivider.cpp diff --git a/src/PIM/Conversion/ONNXToSpatial/Math/Conv.cpp b/src/PIM/Conversion/ONNXToSpatial/Math/Conv.cpp index a9d4dfb..981510b 100644 --- a/src/PIM/Conversion/ONNXToSpatial/Math/Conv.cpp +++ b/src/PIM/Conversion/ONNXToSpatial/Math/Conv.cpp @@ -130,19 +130,11 @@ LogicalResult ConvToGemm::matchAndRewrite(ONNXConvOp convOp, }); Value wTrans = ONNXTransposeOp::create(rewriter, loc, wTransType, wFlat, rewriter.getI64ArrayAttr({1, 0})); - // Reshape bias [numChannelsOut] -> [1, numChannelsOut] for Gemm C row-broadcasting, or use none + // Pass bias through directly; Gemm handles rank-1 C canonicalization. bool hasB = !isa(b.getDefiningOp()); Value gemmC; - if (hasB) { - auto biasType = RankedTensorType::get({1, numChannelsOut}, cast(b.getType()).getElementType()); - gemmC = tensor::ExpandShapeOp::create(rewriter, - loc, - biasType, - b, - SmallVector { - {0, 1} - }); - } + if (hasB) + gemmC = b; else gemmC = ONNXNoneOp::create(rewriter, loc, rewriter.getNoneType()); diff --git a/src/PIM/Conversion/ONNXToSpatial/Math/Gemm.cpp b/src/PIM/Conversion/ONNXToSpatial/Math/Gemm.cpp index 53bde28..0ca061c 100644 --- a/src/PIM/Conversion/ONNXToSpatial/Math/Gemm.cpp +++ b/src/PIM/Conversion/ONNXToSpatial/Math/Gemm.cpp @@ -23,6 +23,38 @@ namespace { constexpr StringRef COMPUTE_HAS_SOFTMAX_DIVISOR_ATTRNAME = "computeWithSoftmaxDivisor"; +static FailureOr materializeScaledConstantTensor(Value value, + float factor, + ConversionPatternRewriter& rewriter, + Location loc) { + if (factor == 1.0f) + return value; + + auto constantOp = value.getDefiningOp(); + if (!constantOp) + return failure(); + + auto denseAttr = dyn_cast(constantOp.getValue()); + if (!denseAttr) + return failure(); + + SmallVector scaledValues; + scaledValues.reserve(denseAttr.getNumElements()); + APFloat scale(factor); + bool hadFailure = false; + for (const APFloat& originalValue : denseAttr.getValues()) { + APFloat scaledValue(originalValue); + if (scaledValue.multiply(scale, APFloat::rmNearestTiesToEven)) + hadFailure = true; + scaledValues.push_back(std::move(scaledValue)); + } + if (hadFailure) + return failure(); + + auto scaledAttr = DenseFPElementsAttr::get(cast(denseAttr.getType()), scaledValues); + return arith::ConstantOp::create(rewriter, loc, denseAttr.getType(), scaledAttr).getResult(); +} + struct GemmToManyGemv : OpConversionPattern { using OpConversionPattern::OpConversionPattern; @@ -74,10 +106,25 @@ LogicalResult GemmToManyGemv::matchAndRewrite(ONNXGemmOp gemmOp, if (numOutRows <= 1) return failure(); + auto scaledB = materializeScaledConstantTensor(b, gemmOpAdaptor.getAlpha().convertToFloat(), rewriter, loc); + if (failed(scaledB)) + return failure(); + b = *scaledB; + RankedTensorType cType = nullptr; bool cHasNumOutRows = false; if (hasC) { + auto scaledC = materializeScaledConstantTensor(c, gemmOpAdaptor.getBeta().convertToFloat(), rewriter, loc); + if (failed(scaledC)) + return failure(); + c = *scaledC; cType = cast(c.getType()); + // Expand rank-1 bias [N] to rank-2 [1, N] for uniform handling + if (cType.getRank() == 1) { + auto expandedType = RankedTensorType::get({1, cType.getDimSize(0)}, cType.getElementType()); + c = tensor::ExpandShapeOp::create(rewriter, loc, expandedType, c, SmallVector{{0, 1}}); + cType = expandedType; + } assert("Only support rank 2 tensor for C" && cType.getRank() == 2); cHasNumOutRows = cType.getDimSize(0) == numOutRows; } @@ -112,8 +159,8 @@ LogicalResult GemmToManyGemv::matchAndRewrite(ONNXGemmOp gemmOp, aSlice, b, cSlice, - gemmOp.getAlphaAttr(), - gemmOp.getBetaAttr(), + rewriter.getF32FloatAttr(1.0f), + rewriter.getF32FloatAttr(1.0f), gemmOp.getTransAAttr(), gemmOp.getTransBAttr()); gemvOps.push_back(gemvOp.getY()); @@ -158,6 +205,12 @@ LogicalResult GemvToSpatialCompute::matchAndRewrite(ONNXGemmOp gemmOp, bool hasC = !isa(c.getDefiningOp()); if (hasC) { cType = cast(c.getType()); + // Expand rank-1 bias [N] to rank-2 [1, N] for uniform handling + if (cType.getRank() == 1) { + auto expandedType = RankedTensorType::get({1, cType.getDimSize(0)}, cType.getElementType()); + c = tensor::ExpandShapeOp::create(rewriter, gemmLoc, expandedType, c, SmallVector{{0, 1}}); + cType = expandedType; + } assert("Only support rank 2 tensor for C" && cType.getRank() == 2); } @@ -177,19 +230,24 @@ LogicalResult GemvToSpatialCompute::matchAndRewrite(ONNXGemmOp gemmOp, auto bShape = bType.getShape(); auto transposedType = bType.cloneWith(ArrayRef({bShape[1], bShape[0]}), bType.getElementType()); b = ONNXTransposeOp::create(rewriter, gemmLoc, transposedType, b, rewriter.getI64ArrayAttr({1, 0})); + bType = cast(b.getType()); } if (alpha != 1.0f) { - auto alphaTensorType = RankedTensorType::get({1, 1}, cast(a.getType()).getElementType()); - auto alphaTensorValue = DenseFPElementsAttr::get(alphaTensorType, {alpha}); - auto alphaTensor = arith::ConstantOp::create(rewriter, gemmLoc, alphaTensorType, alphaTensorValue); - a = spatial::SpatVMulOp::create(rewriter, gemmLoc, a.getType(), a, alphaTensor); + auto scaledB = materializeScaledConstantTensor(b, alpha, rewriter, gemmLoc); + if (failed(scaledB)) + return failure(); + b = *scaledB; + bType = cast(b.getType()); + alpha = 1.0f; } if (hasC && beta != 1.0f) { - auto betaTensorType = RankedTensorType::get({1, 1}, cast(c.getType()).getElementType()); - auto betaTensorValue = DenseFPElementsAttr::get(betaTensorType, {beta}); - auto betaTensor = arith::ConstantOp::create(rewriter, gemmLoc, betaTensorType, betaTensorValue); - c = spatial::SpatVMulOp::create(rewriter, gemmLoc, c.getType(), c, betaTensor); + auto scaledC = materializeScaledConstantTensor(c, beta, rewriter, gemmLoc); + if (failed(scaledC)) + return failure(); + c = *scaledC; + cType = cast(c.getType()); + beta = 1.0f; } auto [aNumHSlices, aLastHSliceSize] = ceilIntegerDivideWithRemainder(aType.getDimSize(1), crossbarSize.getValue()); diff --git a/src/PIM/Conversion/ONNXToSpatial/Math/MatMul.cpp b/src/PIM/Conversion/ONNXToSpatial/Math/MatMul.cpp new file mode 100644 index 0000000..a37cd74 --- /dev/null +++ b/src/PIM/Conversion/ONNXToSpatial/Math/MatMul.cpp @@ -0,0 +1,108 @@ +#include "mlir/Dialect/Tensor/IR/Tensor.h" +#include "mlir/IR/BuiltinTypes.h" +#include "mlir/IR/PatternMatch.h" + +#include "llvm/ADT/SmallVector.h" + +#include "src/Accelerators/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp" +#include "src/Accelerators/PIM/Dialect/Spatial/SpatialOps.hpp" +#include "src/Dialect/ONNX/ONNXOps.hpp" + +using namespace mlir; + +namespace onnx_mlir { +namespace { + +struct MatMulRank3ToGemm : OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + + LogicalResult matchAndRewrite(ONNXMatMulOp matmulOp, PatternRewriter& rewriter) const override { + auto lhsType = dyn_cast(matmulOp.getA().getType()); + auto rhsType = dyn_cast(matmulOp.getB().getType()); + auto outType = dyn_cast(matmulOp.getY().getType()); + if (!lhsType || !rhsType || !outType || !lhsType.hasStaticShape() || !rhsType.hasStaticShape() + || !outType.hasStaticShape()) + return failure(); + if (lhsType.getRank() != 2 || rhsType.getRank() != 3 || outType.getRank() != 3) + return failure(); + + const int64_t batch = rhsType.getDimSize(0); + const int64_t k = rhsType.getDimSize(1); + const int64_t n = rhsType.getDimSize(2); + const int64_t m = lhsType.getDimSize(0); + if (lhsType.getDimSize(1) != k || outType.getDimSize(0) != batch || outType.getDimSize(1) != m + || outType.getDimSize(2) != n) + return failure(); + + Location loc = matmulOp.getLoc(); + auto lhsTransposedType = RankedTensorType::get({k, m}, lhsType.getElementType()); + auto rhsSliceType = RankedTensorType::get({1, k, 1}, rhsType.getElementType()); + auto rhsRowType = RankedTensorType::get({1, k}, rhsType.getElementType()); + auto gemmRowType = RankedTensorType::get({1, m}, outType.getElementType()); + auto gemmOutType = RankedTensorType::get({batch * n, m}, outType.getElementType()); + auto gemmExpandedType = RankedTensorType::get({batch, n, m}, outType.getElementType()); + + Value lhsTransposed = + ONNXTransposeOp::create(rewriter, loc, lhsTransposedType, matmulOp.getA(), rewriter.getI64ArrayAttr({1, 0})); + Value none = ONNXNoneOp::create(rewriter, loc, rewriter.getNoneType()); + + SmallVector gemmRows; + gemmRows.reserve(batch * n); + for (int64_t batchIdx = 0; batchIdx < batch; batchIdx++) { + for (int64_t colIdx = 0; colIdx < n; colIdx++) { + SmallVector offsets = { + rewriter.getIndexAttr(batchIdx), rewriter.getIndexAttr(0), rewriter.getIndexAttr(colIdx)}; + SmallVector sizes = { + rewriter.getIndexAttr(1), rewriter.getIndexAttr(k), rewriter.getIndexAttr(1)}; + SmallVector strides = { + rewriter.getIndexAttr(1), rewriter.getIndexAttr(1), rewriter.getIndexAttr(1)}; + Value rhsSlice = + tensor::ExtractSliceOp::create(rewriter, loc, rhsSliceType, matmulOp.getB(), offsets, sizes, strides); + Value rhsRow = tensor::CollapseShapeOp::create( + rewriter, loc, rhsRowType, rhsSlice, SmallVector{{0}, {1, 2}}); + + auto gemmOp = ONNXGemmOp::create(rewriter, + loc, + gemmRowType, + rhsRow, + lhsTransposed, + none, + rewriter.getF32FloatAttr(1.0f), + rewriter.getF32FloatAttr(1.0f), + rewriter.getBoolAttr(false), + rewriter.getBoolAttr(false)); + gemmRows.push_back(gemmOp.getY()); + } + } + + auto concatComputeOp = + spatial::SpatWeightedCompute::create(rewriter, loc, gemmOutType, SmallVector(), gemmRows); + + auto* concatBlock = new Block(); + for (Value gemmRow : gemmRows) + concatBlock->addArgument(gemmRow.getType(), loc); + concatComputeOp.getBody().push_back(concatBlock); + rewriter.setInsertionPointToStart(concatBlock); + + auto concatOp = tensor::ConcatOp::create(rewriter, loc, /*axis=*/0, concatBlock->getArguments()); + spatial::SpatYieldOp::create(rewriter, loc, concatOp.getResult()); + + rewriter.setInsertionPointAfter(concatComputeOp); + Value gemmOut = concatComputeOp.getResult(0); + Value gemmExpanded = tensor::ExpandShapeOp::create( + rewriter, loc, gemmExpandedType, gemmOut, SmallVector{{0, 1}, {2}}); + Value result = ONNXTransposeOp::create( + rewriter, loc, outType, gemmExpanded, rewriter.getI64ArrayAttr({0, 2, 1})); + + rewriter.replaceOp(matmulOp, result); + return success(); + } +}; + +} // namespace + +void populateMatMulRewritePatterns(RewritePatternSet& patterns, MLIRContext* ctx) { + patterns.insert(ctx); +} + +} // namespace onnx_mlir diff --git a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatial.td b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatial.td index f83d758..cb3401b 100644 --- a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatial.td +++ b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatial.td @@ -15,6 +15,10 @@ def onnxToArithConstantOp : Pat< // ONNXMatMulOp to ONNXGemmOp patterns +def IsRank2Result: Constraint< + CPred<"cast($0.getType()).getRank() == 2">, + "Result is rank 2">; + def matMulAddToGemmPattern : Pat< (ONNXAddOp (ONNXMatMulOp:$matmulres $A, $B), $C), (ONNXGemmOp $A, $B, $C, @@ -22,19 +26,21 @@ def matMulAddToGemmPattern : Pat< /* beta = */ (NativeCodeCall<"$_builder.getF32FloatAttr(1)">), /* transA = */ (NativeCodeCall<"IntegerAttr::get($_builder.getIntegerType(64, true), 0)">), /* transB = */ (NativeCodeCall<"IntegerAttr::get($_builder.getIntegerType(64, true), 0)">) - ) + ), + [(IsRank2Result $matmulres)] >; def matMulToGemmPattern : Pat< (ONNXMatMulOp:$matmulres $A, $B), ( - ONNXGemmOp $A, $B, + ONNXGemmOp $A, $B, /* C = */ (NativeCodeCall<"tensor::EmptyOp::create($_builder, $_loc, cast(matmulres.getY().getType()).getShape(), cast(matmulres.getY().getType()).getElementType());">), /* alpha = */ (NativeCodeCall<"$_builder.getF32FloatAttr(1)">), /* beta = */ (NativeCodeCall<"$_builder.getF32FloatAttr(0)">), /* transA = */ (NativeCodeCall<"IntegerAttr::get($_builder.getIntegerType(64, true), 0)">), /* transB = */ (NativeCodeCall<"IntegerAttr::get($_builder.getIntegerType(64, true), 0)">) - ) + ), + [(IsRank2Result $matmulres)] >; // ONNXConvOp + ONNXAddOp to ONNXConvOp pattern diff --git a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPass.cpp b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPass.cpp index 0bd82d0..02f92c8 100644 --- a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPass.cpp +++ b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPass.cpp @@ -1,6 +1,5 @@ #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" -#include "mlir/Dialect/Tosa/IR/TosaOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" @@ -56,6 +55,7 @@ void ONNXToSpatialPass::runOnOperation() { mergeActivationPatterns.add(ctx); mergeActivationPatterns.add(ctx); mergeActivationPatterns.add(ctx); + populateMatMulRewritePatterns(mergeActivationPatterns, ctx); if (failed(applyPatternsGreedily(moduleOp, std::move(mergeActivationPatterns)))) llvm::dbgs() << "Failed to merge activation patterns, continuing...\n"; @@ -74,7 +74,9 @@ void ONNXToSpatialPass::runOnOperation() { ConversionTarget target(*ctx); target.addLegalDialect(); - target.addIllegalOp(); + target.addDynamicallyLegalOp([](ONNXMatMulOp op) { + return cast(op.getY().getType()).getRank() != 2; + }); target.addIllegalOp(); target.addIllegalOp(); target.addIllegalOp(); @@ -83,6 +85,7 @@ void ONNXToSpatialPass::runOnOperation() { target.addIllegalOp(); target.addIllegalOp(); target.addIllegalOp(); + target.addIllegalOp(); RewritePatternSet patterns(ctx); patterns.add(ctx); @@ -90,6 +93,7 @@ void ONNXToSpatialPass::runOnOperation() { populateConvOpPatterns(patterns, ctx); populatePoolingTilingPattern(patterns, ctx); populateOnnxGemmOpPatterns(patterns, ctx); + populateReshapeConversionPattern(patterns, ctx); populateONNXConcatToTensorConcatPattern(patterns, ctx); populateReduceMeanConversionPattern(patterns, ctx); diff --git a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp index 1a1a3f6..1b7ffaa 100644 --- a/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp +++ b/src/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp @@ -7,12 +7,16 @@ namespace onnx_mlir { void populateConvOpPatterns(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); +void populateMatMulRewritePatterns(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); + void populateOnnxGemmOpPatterns(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); void populatePoolingTilingPattern(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); void populateONNXConcatToTensorConcatPattern(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); +void populateReshapeConversionPattern(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); + void populateRemoveUnusedHelperOpsPatterns(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); void populateReduceMeanConversionPattern(mlir::RewritePatternSet& patterns, mlir::MLIRContext* ctx); diff --git a/src/PIM/Conversion/ONNXToSpatial/Tensor/ONNXReshapeToTensorReshape.cpp b/src/PIM/Conversion/ONNXToSpatial/Tensor/ONNXReshapeToTensorReshape.cpp new file mode 100644 index 0000000..629b0ce --- /dev/null +++ b/src/PIM/Conversion/ONNXToSpatial/Tensor/ONNXReshapeToTensorReshape.cpp @@ -0,0 +1,121 @@ +#include "mlir/Dialect/Tensor/IR/Tensor.h" +#include "mlir/Transforms/DialectConversion.h" + +#include "llvm/ADT/SmallVector.h" + +#include "src/Accelerators/PIM/Conversion/ONNXToSpatial/ONNXToSpatialPatterns.hpp" +#include "src/Dialect/ONNX/ONNXOps.hpp" + +using namespace mlir; + +namespace onnx_mlir { +namespace { + +static bool haveStaticPositiveShape(ArrayRef shape) { + return llvm::all_of(shape, [](int64_t dim) { return dim > 0; }); +} + +static bool inferCollapseReassociation(ArrayRef sourceShape, + ArrayRef resultShape, + SmallVector& reassociation) { + reassociation.clear(); + + size_t sourceIdx = 0; + size_t resultIdx = 0; + while (sourceIdx < sourceShape.size() && resultIdx < resultShape.size()) { + int64_t sourceProduct = sourceShape[sourceIdx]; + int64_t resultProduct = resultShape[resultIdx]; + + ReassociationIndices group; + group.push_back(sourceIdx); + while (sourceProduct != resultProduct) { + if (sourceProduct > resultProduct) + return false; + sourceIdx++; + if (sourceIdx >= sourceShape.size()) + return false; + group.push_back(sourceIdx); + sourceProduct *= sourceShape[sourceIdx]; + } + + reassociation.push_back(group); + sourceIdx++; + resultIdx++; + } + + return sourceIdx == sourceShape.size() && resultIdx == resultShape.size(); +} + +static bool inferExpandReassociation(ArrayRef sourceShape, + ArrayRef resultShape, + SmallVector& reassociation) { + reassociation.clear(); + + size_t sourceIdx = 0; + size_t resultIdx = 0; + while (sourceIdx < sourceShape.size() && resultIdx < resultShape.size()) { + int64_t sourceProduct = sourceShape[sourceIdx]; + int64_t resultProduct = resultShape[resultIdx]; + + ReassociationIndices group; + group.push_back(resultIdx); + while (resultProduct != sourceProduct) { + if (resultProduct > sourceProduct) + return false; + resultIdx++; + if (resultIdx >= resultShape.size()) + return false; + group.push_back(resultIdx); + resultProduct *= resultShape[resultIdx]; + } + + reassociation.push_back(group); + sourceIdx++; + resultIdx++; + } + + return sourceIdx == sourceShape.size() && resultIdx == resultShape.size(); +} + +struct ONNXReshapeToTensorReshape : OpConversionPattern { + using OpConversionPattern::OpConversionPattern; + + LogicalResult matchAndRewrite(ONNXReshapeOp reshapeOp, + ONNXReshapeOpAdaptor adaptor, + ConversionPatternRewriter& rewriter) const override { + auto sourceType = dyn_cast(adaptor.getData().getType()); + auto resultType = dyn_cast(reshapeOp.getReshaped().getType()); + if (!sourceType || !resultType || !sourceType.hasStaticShape() || !resultType.hasStaticShape()) + return failure(); + if (!haveStaticPositiveShape(sourceType.getShape()) || !haveStaticPositiveShape(resultType.getShape())) + return failure(); + + if (sourceType == resultType) { + rewriter.replaceOp(reshapeOp, adaptor.getData()); + return success(); + } + + SmallVector reassociation; + if (sourceType.getRank() > resultType.getRank() + && inferCollapseReassociation(sourceType.getShape(), resultType.getShape(), reassociation)) { + rewriter.replaceOpWithNewOp(reshapeOp, resultType, adaptor.getData(), reassociation); + return success(); + } + + if (sourceType.getRank() < resultType.getRank() + && inferExpandReassociation(sourceType.getShape(), resultType.getShape(), reassociation)) { + rewriter.replaceOpWithNewOp(reshapeOp, resultType, adaptor.getData(), reassociation); + return success(); + } + + return failure(); + } +}; + +} // namespace + +void populateReshapeConversionPattern(RewritePatternSet& patterns, MLIRContext* ctx) { + patterns.insert(ctx); +} + +} // namespace onnx_mlir diff --git a/src/PIM/Conversion/SpatialToPim/SpatialToPimPass.cpp b/src/PIM/Conversion/SpatialToPim/SpatialToPimPass.cpp index 7490fb2..2ffdb7b 100644 --- a/src/PIM/Conversion/SpatialToPim/SpatialToPimPass.cpp +++ b/src/PIM/Conversion/SpatialToPim/SpatialToPimPass.cpp @@ -1,3 +1,4 @@ +#include "mlir/Dialect/Arith/IR/Arith.h" #include "mlir/Dialect/Func/IR/FuncOps.h" #include "mlir/Dialect/Tensor/IR/Tensor.h" #include "mlir/Dialect/Tosa/IR/TosaOps.h" @@ -79,8 +80,31 @@ private: } // namespace static bool isChannelUseChainOp(Operation* op) { - return isa( - op); + return isa(op); +} + +static void cloneMappedHelperOperands(Operation* op, IRMapping& mapping, IRRewriter& rewriter) { + for (Value operand : op->getOperands()) { + if (mapping.lookupOrNull(operand)) + continue; + + Operation* definingOp = operand.getDefiningOp(); + if (!definingOp) + continue; + + if (!isa(definingOp)) + continue; + + Operation* clonedOp = rewriter.clone(*definingOp, mapping); + for (auto [originalResult, newResult] : llvm::zip(definingOp->getResults(), clonedOp->getResults())) + mapping.map(originalResult, newResult); + rewriter.setInsertionPointAfter(clonedOp); + } } static size_t countComputeLeafUsers(Value value) { @@ -204,6 +228,56 @@ void SpatialToPimPass::runOnComputeOp(spatial::SpatWeightedCompute computeOp, IR OpOperand& resultUse = *resultUses.begin(); Operation* resultUser = resultUse.getOwner(); + if (isChannelUseChainOp(resultUser)) { + SmallVector returnChain; + Value chainedValue = result; + Operation* chainUser = resultUser; + + while (isChannelUseChainOp(chainUser)) { + returnChain.push_back(chainUser); + auto chainUses = chainUser->getResult(0).getUses(); + if (rangeLength(chainUses) != 1) + break; + chainedValue = chainUser->getResult(0); + chainUser = chainUses.begin()->getOwner(); + } + + if (isa(chainUser)) { + size_t resultIndexInReturn = chainedValue.getUses().begin()->getOperandNumber(); + + rewriter.setInsertionPoint(yieldOp); + IRMapping mapping; + mapping.map(result, yieldValue); + + Value storedValue = yieldValue; + for (Operation* op : returnChain) { + cloneMappedHelperOperands(op, mapping, rewriter); + Operation* clonedOp = rewriter.clone(*op, mapping); + for (auto [originalResult, newResult] : llvm::zip(op->getResults(), clonedOp->getResults())) + mapping.map(originalResult, newResult); + storedValue = clonedOp->getResult(0); + rewriter.setInsertionPointAfter(clonedOp); + markOpToRemove(op); + } + + auto storedType = cast(storedValue.getType()); + size_t elementSize = storedType.getElementTypeBitWidth() / 8; + + Value outputTensor = outputTensors[resultIndexInReturn]; + if (auto storedOp = storedValue.getDefiningOp()) + rewriter.setInsertionPointAfter(storedOp); + PimMemCopyDevToHostOp::create(rewriter, + loc, + outputTensor.getType(), + outputTensor, + storedValue, + rewriter.getI32IntegerAttr(0), + rewriter.getI32IntegerAttr(0), + rewriter.getI32IntegerAttr(storedType.getNumElements() * elementSize)); + continue; + } + } + if (isa(resultUser)) { size_t resultIndexInReturn = resultUse.getOperandNumber(); size_t offset = 0; @@ -493,6 +567,7 @@ void SpatialToPimPass::replaceBlockArgumentWithRecvOp(spatial::SpatWeightedCompu IRMapping mapping; mapping.map(channelSourceOp, receivedValue); for (Operation* op : llvm::reverse(clonedChain)) { + cloneMappedHelperOperands(op, mapping, rewriter); Operation* clonedOp = rewriter.clone(*op, mapping); for (auto [originalResult, newResult] : llvm::zip(op->getResults(), clonedOp->getResults())) mapping.map(originalResult, newResult); diff --git a/src/PIM/Pass/PimConstantFoldingPass.cpp b/src/PIM/Pass/PimConstantFoldingPass.cpp index 9fe6a2f..bf70814 100644 --- a/src/PIM/Pass/PimConstantFoldingPass.cpp +++ b/src/PIM/Pass/PimConstantFoldingPass.cpp @@ -30,6 +30,24 @@ static Value stripMemRefCasts(Value value) { return value; } +static Value stripMemRefViewOps(Value value) { + while (true) { + if (auto castOp = value.getDefiningOp()) { + value = castOp.getSource(); + continue; + } + if (auto collapseOp = value.getDefiningOp()) { + value = collapseOp.getSrc(); + continue; + } + if (auto expandOp = value.getDefiningOp()) { + value = expandOp.getSrc(); + continue; + } + return value; + } +} + static memref::GlobalOp createFoldedGlobal(ModuleOp moduleOp, Location loc, MemRefType globalType, @@ -204,6 +222,7 @@ struct StaticSubviewInfo { }; static FailureOr getStaticSubviewInfo(Value value) { + value = stripMemRefViewOps(value); auto subviewOp = value.getDefiningOp(); if (!subviewOp) return failure(); @@ -321,6 +340,77 @@ struct RewriteCoreSubviewCopyPattern final : OpRewritePattern } }; +struct RewriteHostSubviewLoadPattern final : OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + + LogicalResult matchAndRewrite(pim::PimMemCopyHostToDevOp copyOp, PatternRewriter& rewriter) const override { + auto srcSubview = getStaticSubviewInfo(copyOp.getHostSrc()); + auto dstSubview = getStaticSubviewInfo(copyOp.getDeviceDst()); + const bool splitSrc = succeeded(srcSubview) + && !isMemoryContiguous(srcSubview->sourceShape, srcSubview->offsets, srcSubview->sizes, srcSubview->strides); + const bool splitDst = succeeded(dstSubview) + && !isMemoryContiguous(dstSubview->sourceShape, dstSubview->offsets, dstSubview->sizes, dstSubview->strides); + if (!splitSrc && !splitDst) + return failure(); + + auto sourceType = dyn_cast(copyOp.getHostSrc().getType()); + auto dstType = dyn_cast(copyOp.getDeviceDst().getType()); + if (!sourceType || !dstType || !sourceType.hasStaticShape() || !dstType.hasStaticShape()) + return failure(); + if (sourceType.getElementType() != dstType.getElementType()) + return failure(); + + if (splitSrc && llvm::any_of(srcSubview->strides, [](int64_t stride) { return stride != 1; })) + return failure(); + if (splitDst && llvm::any_of(dstSubview->strides, [](int64_t stride) { return stride != 1; })) + return failure(); + + ArrayRef copyShape = splitSrc ? ArrayRef(srcSubview->sizes) : ArrayRef(dstSubview->sizes); + if (splitSrc && splitDst && copyShape != ArrayRef(dstSubview->sizes)) + return failure(); + + const int64_t elementByteWidth = sourceType.getElementTypeBitWidth() / 8; + if (elementByteWidth <= 0) + return failure(); + + const int64_t totalBytes = getNumElements(copyShape) * elementByteWidth; + if (copyOp.getSize() != totalBytes) + return failure(); + + const int64_t sliceBytes = copyShape.back() * elementByteWidth; + if (sliceBytes <= 0) + return failure(); + + SmallVector outerShape(copyShape.begin(), copyShape.end() - 1); + auto outerStrides = computeRowMajorStrides(outerShape); + const int64_t numSlices = outerShape.empty() ? 1 : getNumElements(outerShape); + + rewriter.setInsertionPoint(copyOp); + for (int64_t linearIndex = 0; linearIndex < numSlices; ++linearIndex) { + SmallVector outerIndices = + outerShape.empty() ? SmallVector{} : delinearizeIndex(linearIndex, outerShape, outerStrides); + const int64_t srcByteOffset = copyOp.getHostSrcOffset() + + (splitSrc ? getSubviewChunkOffsetBytes(*srcSubview, outerIndices, elementByteWidth) + : linearIndex * sliceBytes); + const int64_t dstByteOffset = copyOp.getDeviceDstOffset() + + (splitDst ? getSubviewChunkOffsetBytes(*dstSubview, outerIndices, elementByteWidth) + : linearIndex * sliceBytes); + pim::PimMemCopyHostToDevOp::create( + rewriter, + copyOp.getLoc(), + splitDst ? cast(dstSubview->source.getType()) : dstType, + splitDst ? dstSubview->source : copyOp.getDeviceDst(), + splitSrc ? srcSubview->source : copyOp.getHostSrc(), + rewriter.getI32IntegerAttr(static_cast(dstByteOffset)), + rewriter.getI32IntegerAttr(static_cast(srcByteOffset)), + rewriter.getI32IntegerAttr(static_cast(sliceBytes))); + } + + rewriter.replaceOp(copyOp, copyOp.getDeviceDst()); + return success(); + } +}; + static FailureOr foldConstantAlloc(memref::AllocOp allocOp, ModuleOp moduleOp) { auto allocType = dyn_cast(allocOp.getType()); if (!allocType || !allocType.hasStaticShape()) @@ -578,6 +668,170 @@ struct FoldConstantAllocPattern final : OpRewritePattern { } }; +struct FoldConstantMemCpPattern final : OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + + LogicalResult matchAndRewrite(pim::PimMemCopyOp copyOp, PatternRewriter& rewriter) const override { + // Only match top-level memcp (not inside pim.core) + if (copyOp->getParentOfType()) + return failure(); + + // dst must be an alloc with static shape + auto allocOp = copyOp.getDst().getDefiningOp(); + if (!allocOp) + return failure(); + auto allocType = dyn_cast(allocOp.getType()); + if (!allocType || !allocType.hasStaticShape()) + return failure(); + + // The copy must cover the full destination (offsets both zero) + if (copyOp.getDstOffset() != 0 || copyOp.getSrcOffset() != 0) + return failure(); + + // Resolve the source through an optional subview to a get_global + auto srcSubview = getStaticSubviewInfo(copyOp.getSrc()); + Value globalSource = succeeded(srcSubview) ? srcSubview->source : stripMemRefCasts(copyOp.getSrc()); + + auto moduleOp = copyOp->getParentOfType(); + if (!moduleOp) + return failure(); + + auto denseAttr = getDenseGlobalValue(moduleOp, globalSource); + if (failed(denseAttr)) + return failure(); + + // Build the folded dense attribute + DenseElementsAttr foldedAttr; + if (succeeded(srcSubview)) { + // Extract the sub-tensor from the source constant + auto sourceType = dyn_cast(denseAttr->getType()); + if (!sourceType || !sourceType.hasStaticShape()) + return failure(); + if (llvm::any_of(srcSubview->strides, [](int64_t s) { return s != 1; })) + return failure(); + + auto resultTensorType = RankedTensorType::get(allocType.getShape(), allocType.getElementType()); + const int64_t numResultElements = resultTensorType.getNumElements(); + auto sourceStrides = computeRowMajorStrides(sourceType.getShape()); + auto resultStrides = computeRowMajorStrides(resultTensorType.getShape()); + SmallVector sourceValues(denseAttr->getValues()); + SmallVector resultValues(numResultElements); + + for (int64_t i = 0; i < numResultElements; ++i) { + auto resultIndices = delinearizeIndex(i, resultTensorType.getShape(), resultStrides); + SmallVector sourceIndices; + sourceIndices.reserve(resultIndices.size()); + for (auto [off, idx] : llvm::zip_equal(srcSubview->offsets, resultIndices)) + sourceIndices.push_back(off + idx); + int64_t srcLinear = linearizeIndex(sourceIndices, sourceStrides); + resultValues[i] = sourceValues[srcLinear]; + } + foldedAttr = DenseElementsAttr::get(resultTensorType, resultValues); + } + else { + // Direct copy from a global — just reuse its dense attribute + auto resultTensorType = RankedTensorType::get(allocType.getShape(), allocType.getElementType()); + if (resultTensorType != denseAttr->getType()) + return failure(); + foldedAttr = *denseAttr; + } + + // Verify that the alloc's remaining users are supported ops. + bool allLiveUsersAreCores = true; + for (Operation* user : allocOp->getUsers()) { + if (user == copyOp) + continue; + if (isa(user)) + continue; + if (isa(user)) + continue; + if (isa(user)) { + allLiveUsersAreCores = false; + continue; + } + return failure(); + } + + auto newGlobal = createFoldedGlobal(moduleOp, allocOp.getLoc(), allocType, foldedAttr, "pim_folded_memcp"); + if (allLiveUsersAreCores) + markWeightAlways(newGlobal); + + rewriter.setInsertionPoint(allocOp); + auto newGetGlobal = memref::GetGlobalOp::create(rewriter, allocOp.getLoc(), allocType, newGlobal.getName()); + if (allLiveUsersAreCores) + markWeightAlways(newGetGlobal); + + rewriter.replaceAllUsesWith(allocOp.getResult(), newGetGlobal.getResult()); + rewriter.eraseOp(copyOp); + if (allocOp.use_empty()) + rewriter.eraseOp(allocOp); + return success(); + } +}; + +struct FoldConstantCoreSubviewPattern final : OpRewritePattern { + using OpRewritePattern::OpRewritePattern; + + LogicalResult matchAndRewrite(memref::SubViewOp subviewOp, PatternRewriter& rewriter) const override { + // Only handle subviews whose users are all pim.core ops. + if (subviewOp.use_empty()) + return failure(); + if (!llvm::all_of(subviewOp->getUsers(), [](Operation* user) { return isa(user); })) + return failure(); + + // Source must resolve to a constant get_global. + auto moduleOp = subviewOp->getParentOfType(); + if (!moduleOp) + return failure(); + auto denseAttr = getDenseGlobalValue(moduleOp, stripMemRefCasts(subviewOp.getSource())); + if (failed(denseAttr)) + return failure(); + + // Static subview info. + auto subviewInfo = getStaticSubviewInfo(subviewOp.getResult()); + if (failed(subviewInfo)) + return failure(); + if (llvm::any_of(subviewInfo->strides, [](int64_t s) { return s != 1; })) + return failure(); + + auto sourceType = dyn_cast(denseAttr->getType()); + if (!sourceType || !sourceType.hasStaticShape()) + return failure(); + + // Build the contiguous result type. + auto elementType = cast(subviewOp.getType()).getElementType(); + auto resultMemRefType = MemRefType::get( + SmallVector(subviewInfo->sizes.begin(), subviewInfo->sizes.end()), elementType); + auto resultTensorType = RankedTensorType::get(resultMemRefType.getShape(), elementType); + const int64_t numResultElements = resultTensorType.getNumElements(); + + // Extract the sub-tensor. + auto sourceStrides = computeRowMajorStrides(sourceType.getShape()); + auto resultStrides = computeRowMajorStrides(resultTensorType.getShape()); + SmallVector sourceValues(denseAttr->getValues()); + SmallVector resultValues(numResultElements); + for (int64_t i = 0; i < numResultElements; ++i) { + auto resultIndices = delinearizeIndex(i, resultTensorType.getShape(), resultStrides); + SmallVector sourceIndices; + sourceIndices.reserve(resultIndices.size()); + for (auto [off, idx] : llvm::zip_equal(subviewInfo->offsets, resultIndices)) + sourceIndices.push_back(off + idx); + resultValues[i] = sourceValues[linearizeIndex(sourceIndices, sourceStrides)]; + } + auto foldedAttr = DenseElementsAttr::get(resultTensorType, resultValues); + + auto newGlobal = createFoldedGlobal(moduleOp, subviewOp.getLoc(), resultMemRefType, foldedAttr, "pim_folded_subview"); + markWeightAlways(newGlobal); + + rewriter.setInsertionPoint(subviewOp); + auto newGetGlobal = memref::GetGlobalOp::create(rewriter, subviewOp.getLoc(), resultMemRefType, newGlobal.getName()); + markWeightAlways(newGetGlobal); + + rewriter.replaceOp(subviewOp, newGetGlobal.getResult()); + return success(); + } +}; + struct PimConstantFoldingPass : PassWrapper> { MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(PimConstantFoldingPass) @@ -591,7 +845,13 @@ struct PimConstantFoldingPass : PassWrappergetRegisteredOperations()) op.getCanonicalizationPatterns(owningPatterns, context); owningPatterns - .add( + .add( context); patterns = std::make_shared(std::move(owningPatterns)); return success(); diff --git a/validation/operations/README.md b/validation/operations/README.md new file mode 100644 index 0000000..03c2a5c --- /dev/null +++ b/validation/operations/README.md @@ -0,0 +1,47 @@ +# Validation Operations + +ONNX test models used by `validate.py` to verify the Raptor compiler + PIM simulator pipeline. + +Generated tests can be regenerated with: +``` +python3 validation/operations/gen_tests.py +``` + +## Conv + +| Test | Directory | Input | Output | Kernel | Stride | Padding | Bias | Notes | +|------|-----------|-------|--------|--------|--------|---------|------|-------| +| Simple | `conv/simple` | [1,3,3,3] | [1,1,2,2] | 2x2 | 1 | none | no | Basic conv, hand-crafted | +| With constant | `conv/with_constant` | [1,3,3,3] | [1,1,3,3] | 2x2 | 1 | SAME_UPPER | yes | Hand-crafted, constant weight+bias | +| Batch 2 | `conv/batch_2` | [2,3,3,3] | [2,1,3,3] | 2x2 | 1 | SAME_UPPER | yes | Batched input | +| Kernel 3x3 | `conv/kernel_3x3` | [1,1,5,5] | [1,1,3,3] | 3x3 | 1 | none | no | Larger kernel | +| Stride 2 | `conv/stride_2` | [1,1,6,6] | [1,1,2,2] | 3x3 | 2 | none | no | Strided convolution | +| Multi channel | `conv/multi_channel` | [1,3,5,5] | [1,4,3,3] | 3x3 | 1 | none | no | 3 in channels, 4 out channels | +| Pointwise 1x1 | `conv/pointwise_1x1` | [1,8,4,4] | [1,4,4,4] | 1x1 | 1 | none | no | Channel mixing | +| SAME padding 3x3 | `conv/same_padding_3x3` | [1,1,5,5] | [1,1,5,5] | 3x3 | 1 | SAME_UPPER | no | Spatial dims preserved | +| Explicit padding | `conv/explicit_padding` | [1,1,4,4] | [1,1,4,4] | 3x3 | 1 | [1,1,1,1] | no | Symmetric explicit pads | +| With bias 3x3 | `conv/with_bias_3x3` | [1,3,5,5] | [1,2,3,3] | 3x3 | 1 | none | yes | Multi-channel with bias | +| Large spatial | `conv/large_spatial` | [1,1,8,8] | [1,1,6,6] | 3x3 | 1 | none | no | Larger spatial input | + +## Gemm + +| Test | Directory | A (input) | W (weight) | Output | transB | alpha | beta | Bias | Notes | +|------|-----------|-----------|------------|--------|--------|-------|------|------|-------| +| Default | `gemm/` | [10,132] | [132,132] | [10,132] | no | 1 | 1 | no | Hand-crafted, square weights | +| Non-square | `gemm/non_square` | [4,128] | [128,64] | [4,64] | no | 1 | 1 | no | K != N | +| With bias | `gemm/with_bias` | [4,128] | [128,128] | [4,128] | no | 1 | 1 | [128] | Bias vector | +| transB | `gemm/transB` | [4,128] | [64,128] | [4,64] | yes | 1 | 1 | no | Transposed weight | +| Alpha/beta | `gemm/alpha_beta` | [4,64] | [64,64] | [4,64] | no | 0.5 | 0.25 | [64] | Scaled matmul + bias | +| Small | `gemm/small` | [2,8] | [8,4] | [2,4] | no | 1 | 1 | no | Tiny matrices | +| Large | `gemm/large` | [8,256] | [256,128] | [8,128] | no | 1 | 1 | no | Larger matrices | +| transB + bias | `gemm/transB_with_bias` | [4,128] | [64,128] | [4,64] | yes | 1 | 1 | [64] | Combined | + +## Gemv + +| Test | Directory | Input | W (weight) | Output | Bias | Notes | +|------|-----------|-------|------------|--------|------|-------| +| Simple | `gemv/simple` | [1,132] | [132,132] | [1,132] | no | Single-sample matmul | +| Constant | `gemv/constant` | _(none)_ | [132,132] | [1,132] | no | All inputs constant | +| Homogeneous const | `gemv/with_homogeneous_constant` | [1,132] | [132,132] | [1,132] | [1,132] | Bias matches output shape | +| Heterogeneous const | `gemv/with_heterogeneous_constant` | [1,132] | [132,132] | [1,132] | [1,132] | Different constant pattern | +| Scalar const | `gemv/with_scalar_constant` | [1,132] | [132,132] | [1,132] | [1,1] | Scalar bias, broadcast | diff --git a/validation/operations/conv/batch_2/conv_batch_2.onnx b/validation/operations/conv/batch_2/conv_batch_2.onnx new file mode 100644 index 0000000000000000000000000000000000000000..8fa369c53ffe2425b0b3f2c1dd70a83113fc6598 GIT binary patch literal 251 zcmdwCCSB+SXz=FUyzuh#1-u5>lz;#5a1fL zfRR~Cl#3@jwJ0w&C%!l%u^`of$$@DBBfFLW7khC@QD#bNu>+$6BTz($CmCo`d{Sab zaz?z7mOTd}2Qvo~2a^D!6JxlSfzh-*cK)Xu_v&ravo~p8yic$sa^JOQ`ujz{3G8b- z`rOV|_1Zp-tIPH+`Yyk}U5$UQ7B2@QNUM_fT TCjliR(IgpRl1?mK3E}x1Ix#?GRfs z(P44-I)|5wP6PQb9Cp26a*QnzbYx&qaCBk}*W%@11ZrhrU|8Vb#OM?y4Rp4U7?%hK cqmTd>6Ndv3GsAEaP%;utk`X59#3UdD07wiw3IG5A diff --git a/validation/operations/conv/explicit_padding/conv_explicit_padding.onnx b/validation/operations/conv/explicit_padding/conv_explicit_padding.onnx new file mode 100644 index 0000000000000000000000000000000000000000..15813f708fab487c9966c1d119b241d7908a6daa GIT binary patch literal 218 zcmd;+&sXrX|Y7lbu?Wmzon_oRL_N>cH&4ynvBiOOT7D zATg!bfe`{hLIPau#U(|VDXCylpooxQGSGzh)QW;+&sXrX|Y7lbu?Wmzon_oRL_N>cH&4ynvBiOOT7D zATg!bfdK+RLIPau#U(|VDXGN{j1G)I5h0Fbpb7ED6~;+&sXrX|Y7lbu?Wmzon_oRL_N>cH&4ynvBiOOT7D zATg!bfdK+RLIPau#U(|VDXGN{j1G)I5h0;upb7CgiACwD@x=v+C7FpiTE-lVK*-F& zEWqf*81AK#IqC4e-byF?mQLpVuRKNfr}7!vUt+V^|03-8zJC&y`>(Byw2hJmx=Kil jON4__NPvrpgAs~3fHX%EP%;vWBpXnY&54DJL4X$kv*a;P literal 0 HcmV?d00001 diff --git a/validation/operations/conv/multi_channel/conv_multi_channel.onnx b/validation/operations/conv/multi_channel/conv_multi_channel.onnx new file mode 100644 index 0000000000000000000000000000000000000000..bfec7b2ae08ce9ea1495bdbdb3ab9f1cf27d125b GIT binary patch literal 617 zcmd;+&sXrX|Y7lbu?Wmzon_oRL_N>cH&4ynvBiOOT7D zATg!bfdK+RLIPau#U(|VDXGN{j1G)I5h0;upb7E0r8y;;@yQv9c|cRN4lr}Da4>_Q z0HYIQxYq_|MbTWlugns5wF@gxy`ohx@iqsI#A0wtJt3%E5gaGQsY& zNQM2=pRKlRFDC7qE3a)^w@t@Jp5f}gGo^C-Kd-!Lx9jcE-Iv3E?F$Rxu+NSK71ERv3y_dtTlE5Gllmj7l`a%a7)8JN*b6( ngv7W+I2eTlxR^K?ftVSHSwT1nC>e<+$pTft?8L&wAixU%xY+Q* literal 0 HcmV?d00001 diff --git a/validation/operations/conv/pointwise_1x1/conv_1x1.onnx b/validation/operations/conv/pointwise_1x1/conv_1x1.onnx new file mode 100644 index 0000000000000000000000000000000000000000..50cf143ed8eda67c9c3d66fc54fbbb8db15c6326 GIT binary patch literal 303 zcmd;+&sXrX|Y7lbu?Wmzon_oRL_N>cHs0xPXyeOOT7D zATg!bfdK+RLIPau#U(|VDXGO!MM50OKojB(D-5+JFmkYPaBwhkFbXg_F@}3JFi!BT z+Apj1!0z9hHT%x&jkV7R@!B7kx600;RM}om>xf;SLcRU}d7Sn}+E@1-EIz&Oe3g$~ z*ZdZ{Q~Qx>gF$WN{fN&B} SG7?P^ECG^qV&P&C-~|A(kyb(g literal 0 HcmV?d00001 diff --git a/validation/operations/conv/same_padding_3x3/conv_same_padding_3x3.onnx b/validation/operations/conv/same_padding_3x3/conv_same_padding_3x3.onnx new file mode 100644 index 0000000000000000000000000000000000000000..3a017fce27bab14830d11cb8aa03a6cd36afefd2 GIT binary patch literal 222 zcmd;+&sXrX|V6kyu)iA77A|qQn*K=<6CE8W7+bw1AOW zOO%TzJGCe;H7C9}Be5XWf!Tq10VBJX02h04Nl|7>YOw>O10zsGh&LH%Qhae@Zfd-7 zg|U_~2O|(Nb1(}qIx&WOsa%!f+s|eyVLQV-eE+r?a(3)5g7+sWZQskiZMEGsZM*%} pzESp3(m;m^iE)W=FbWB9F>x?LF)NT}O#(_r;*xY?;bIWr1pp2{FX{jQ literal 0 HcmV?d00001 diff --git a/validation/operations/conv/stride_2/conv_stride_2.onnx b/validation/operations/conv/stride_2/conv_stride_2.onnx new file mode 100644 index 0000000000000000000000000000000000000000..913596686d4fd910866fb03ec72bcf18e7bde9ff GIT binary patch literal 213 zcmd;+&sXrX|Y7lbu?Wmzon_oRL_N>cH&4ynvBiOOT7D zATg!bfdK+RLIPau#U(|VDXGN{Ob$#y5h0#rpb7C1K_e|=4n`nk=3o|JbYcwmQd!=f zWZzbMbl<_BzxI7%;oBe6DP+HtTX4UAhm8FP+jn-8OceG-Ndw&@B*rDe!6+oa#l*n~ Z#cV*DEeR+YiA9nLD9Pl+!o?uK3jp>GE_eU{ literal 0 HcmV?d00001 diff --git a/validation/operations/conv/with_bias_3x3/conv_with_bias_3x3.onnx b/validation/operations/conv/with_bias_3x3/conv_with_bias_3x3.onnx new file mode 100644 index 0000000000000000000000000000000000000000..d4f81e4af0f46f38ab5f47d02a165da62585ed63 GIT binary patch literal 423 zcmdwCCbH(a{e_89c8byy_8oFHv)i`y z%f6$b1^b&y?d`UPJKC$($L~)MGPa*wQf_Z}d&a&NEvfw>e{SvToPF0Wt#AFlnGprW~TWs&IEVQ2z z5U~G>m4w}!Z9MjAvdi{q`$gIq+BVtUXn1F9x*>bt!VNO}H*J@(U;XOHo?}xt?Y(|^ zja{I6pxr`^TDvV}J$t2p+u91B^S9skdip-;TN3-V1UZ;MesuEUIIPS{O_B+!fZ2(Ki$Q=F0N8Vmi~s-t literal 0 HcmV?d00001 diff --git a/validation/operations/gemm/alpha_beta/gemm_alpha_beta.onnx b/validation/operations/gemm/alpha_beta/gemm_alpha_beta.onnx new file mode 100644 index 0000000000000000000000000000000000000000..12482762764437a6e2e461f4715c00cec0203546 GIT binary patch literal 16794 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

h-WpJhMuVK7yYMT9B*4 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

FP49h>p>5&oLu3cG%L!Q2&}(R9svQK;bV<7Uoy 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

#06|Ft0nTFJGtk%8LFuvZiu_)M^ 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 literal 0 HcmV?d00001 diff --git a/validation/operations/gemm/non_square/gemm_non_square.onnx b/validation/operations/gemm/non_square/gemm_non_square.onnx new file mode 100644 index 0000000000000000000000000000000000000000..d26ecf45a1654fbc3727b580c080c12e3da7fcbb GIT binary patch literal 32875 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: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 literal 0 HcmV?d00001 diff --git a/validation/operations/gemm/small/gemm_small.onnx b/validation/operations/gemm/small/gemm_small.onnx new file mode 100644 index 0000000000000000000000000000000000000000..49a7f9178e74bd5cb38875b0d47045dc34d58a0f GIT binary patch literal 225 zcmd;+~qDE5wx!B;$*76LWI3dKfu4I9LQ2ofyNt8W>|& z``hm>jo4rL_{F~cJ(YGpE#mBNH-_v#AJSsCSDe>=QtfV=^A-Q>j-Pk3f42Glu5*9I z>`Mu^Ych!qp@A2GeXF4HyzgNL~yO6(g?6}VQ*hdKi-73V##lyiU#KFbH!34w{NkG9! NG(i?87A^(>UI3??PGkT8 literal 0 HcmV?d00001 diff --git a/validation/operations/gemm/transB/gemm_transB.onnx b/validation/operations/gemm/transB/gemm_transB.onnx new file mode 100644 index 0000000000000000000000000000000000000000..2df2d834c0db6d98fbda8c405d69452b8b170693 GIT binary patch literal 32886 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 literal 0 HcmV?d00001 diff --git a/validation/operations/gemm/transB_with_bias/gemm_transB_with_bias.onnx b/validation/operations/gemm/transB_with_bias/gemm_transB_with_bias.onnx new file mode 100644 index 0000000000000000000000000000000000000000..696ef58ca4d4ca790d20944f5816a5e05999c9ec GIT binary patch literal 33168 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 r!7<_pZ50JC%^oVt($#{R!gy_HltsCWNAp6>}6 literal 0 HcmV?d00001 diff --git a/validation/operations/gen_tests.py b/validation/operations/gen_tests.py new file mode 100644 index 0000000..812edec --- /dev/null +++ b/validation/operations/gen_tests.py @@ -0,0 +1,276 @@ +#!/usr/bin/env python3 +"""Generate ONNX test models for validating GEMM and Conv implementations.""" + +import numpy as np +import onnx +from onnx import helper, TensorProto, numpy_helper +from pathlib import Path + +OPERATIONS_DIR = Path(__file__).parent + + +def save_model(model, directory, filename): + """Save an ONNX model, creating the directory if needed.""" + d = OPERATIONS_DIR / directory + d.mkdir(parents=True, exist_ok=True) + path = d / filename + onnx.checker.check_model(model) + onnx.save(model, str(path)) + print(f" {path.relative_to(OPERATIONS_DIR)}") + + +# --------------------------------------------------------------------------- +# GEMM tests +# --------------------------------------------------------------------------- + +def gemm_non_square(): + """GEMM with non-square weight matrix: [B, K] @ [K, N], K != N.""" + B, K, N = 4, 128, 64 + W = numpy_helper.from_array(np.random.default_rng(42).uniform(-1, 1, (K, N)).astype(np.float32), name="W") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W"], ["Y"]) + graph = helper.make_graph([node], "gemm_non_square", [A], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/non_square", "gemm_non_square.onnx") + + +def gemm_with_bias(): + """GEMM with bias: Y = A @ W + C.""" + B, K, N = 4, 128, 128 + rng = np.random.default_rng(43) + W = numpy_helper.from_array(rng.uniform(-1, 1, (K, N)).astype(np.float32), name="W") + C = numpy_helper.from_array(rng.uniform(-1, 1, (N,)).astype(np.float32), name="C") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W", "C"], ["Y"]) + graph = helper.make_graph([node], "gemm_with_bias", [A], [Y], initializer=[W, C]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/with_bias", "gemm_with_bias.onnx") + + +def gemm_transB(): + """GEMM with transB=1: Y = A @ W^T.""" + B, K, N = 4, 128, 64 + rng = np.random.default_rng(44) + # W stored as [N, K], transposed during computation + W = numpy_helper.from_array(rng.uniform(-1, 1, (N, K)).astype(np.float32), name="W") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W"], ["Y"], transB=1) + graph = helper.make_graph([node], "gemm_transB", [A], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/transB", "gemm_transB.onnx") + + +def gemm_alpha_beta(): + """GEMM with alpha and beta: Y = 0.5 * A @ W + 0.25 * C.""" + B, K, N = 4, 64, 64 + rng = np.random.default_rng(45) + W = numpy_helper.from_array(rng.uniform(-1, 1, (K, N)).astype(np.float32), name="W") + C = numpy_helper.from_array(rng.uniform(-1, 1, (N,)).astype(np.float32), name="C") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W", "C"], ["Y"], alpha=0.5, beta=0.25) + graph = helper.make_graph([node], "gemm_alpha_beta", [A], [Y], initializer=[W, C]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/alpha_beta", "gemm_alpha_beta.onnx") + + +def gemm_small(): + """Small GEMM: [2, 8] @ [8, 4].""" + B, K, N = 2, 8, 4 + rng = np.random.default_rng(46) + W = numpy_helper.from_array(rng.uniform(-1, 1, (K, N)).astype(np.float32), name="W") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W"], ["Y"]) + graph = helper.make_graph([node], "gemm_small", [A], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/small", "gemm_small.onnx") + + +def gemm_large(): + """Larger GEMM: [8, 256] @ [256, 128].""" + B, K, N = 8, 256, 128 + rng = np.random.default_rng(47) + W = numpy_helper.from_array(rng.uniform(-1, 1, (K, N)).astype(np.float32), name="W") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W"], ["Y"]) + graph = helper.make_graph([node], "gemm_large", [A], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/large", "gemm_large.onnx") + + +def gemm_transB_with_bias(): + """GEMM with transB and bias: Y = A @ W^T + C.""" + B, K, N = 4, 128, 64 + rng = np.random.default_rng(48) + W = numpy_helper.from_array(rng.uniform(-1, 1, (N, K)).astype(np.float32), name="W") + C = numpy_helper.from_array(rng.uniform(-1, 1, (N,)).astype(np.float32), name="C") + A = helper.make_tensor_value_info("A", TensorProto.FLOAT, [B, K]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [B, N]) + node = helper.make_node("Gemm", ["A", "W", "C"], ["Y"], transB=1) + graph = helper.make_graph([node], "gemm_transB_with_bias", [A], [Y], initializer=[W, C]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "gemm/transB_with_bias", "gemm_transB_with_bias.onnx") + + +# --------------------------------------------------------------------------- +# Conv tests +# --------------------------------------------------------------------------- + +def conv_3x3_kernel(): + """Conv with 3x3 kernel, no padding.""" + # Input: [1, 1, 5, 5], Kernel: [1, 1, 3, 3] -> Output: [1, 1, 3, 3] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 1, 5, 5]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 1, 3, 3]) + W = numpy_helper.from_array( + np.random.default_rng(50).uniform(-1, 1, (1, 1, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_3x3", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/kernel_3x3", "conv_kernel_3x3.onnx") + + +def conv_stride2(): + """Conv with 3x3 kernel and stride 2.""" + # Input: [1, 1, 6, 6], Kernel: [1, 1, 3, 3], stride 2 -> Output: [1, 1, 2, 2] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 1, 6, 6]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 1, 2, 2]) + W = numpy_helper.from_array( + np.random.default_rng(51).uniform(-1, 1, (1, 1, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[2, 2], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_stride2", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/stride_2", "conv_stride_2.onnx") + + +def conv_multi_channel(): + """Conv with multiple input and output channels.""" + # Input: [1, 3, 5, 5], Kernel: [4, 3, 3, 3] -> Output: [1, 4, 3, 3] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 3, 5, 5]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 4, 3, 3]) + W = numpy_helper.from_array( + np.random.default_rng(52).uniform(-1, 1, (4, 3, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_multi_channel", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/multi_channel", "conv_multi_channel.onnx") + + +def conv_1x1(): + """1x1 pointwise convolution (channel mixing).""" + # Input: [1, 8, 4, 4], Kernel: [4, 8, 1, 1] -> Output: [1, 4, 4, 4] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 8, 4, 4]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 4, 4, 4]) + W = numpy_helper.from_array( + np.random.default_rng(53).uniform(-1, 1, (4, 8, 1, 1)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[1, 1], strides=[1, 1], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_1x1", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/pointwise_1x1", "conv_1x1.onnx") + + +def conv_same_padding_3x3(): + """Conv 3x3 with SAME_UPPER padding, preserving spatial dimensions.""" + # Input: [1, 1, 5, 5], Kernel: [1, 1, 3, 3], SAME_UPPER -> Output: [1, 1, 5, 5] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 1, 5, 5]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 1, 5, 5]) + W = numpy_helper.from_array( + np.random.default_rng(54).uniform(-1, 1, (1, 1, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], auto_pad="SAME_UPPER") + graph = helper.make_graph([node], "conv_same_3x3", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/same_padding_3x3", "conv_same_padding_3x3.onnx") + + +def conv_explicit_padding(): + """Conv 3x3 with explicit asymmetric padding.""" + # Input: [1, 1, 4, 4], Kernel: [1, 1, 3, 3], pads=[1,1,1,1] -> Output: [1, 1, 4, 4] + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 1, 4, 4]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 1, 4, 4]) + W = numpy_helper.from_array( + np.random.default_rng(55).uniform(-1, 1, (1, 1, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], pads=[1, 1, 1, 1]) + graph = helper.make_graph([node], "conv_explicit_pad", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/explicit_padding", "conv_explicit_padding.onnx") + + +def conv_with_bias_3x3(): + """Conv 3x3 with bias.""" + # Input: [1, 3, 5, 5], Kernel: [2, 3, 3, 3], Bias: [2] -> Output: [1, 2, 3, 3] + rng = np.random.default_rng(56) + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 3, 5, 5]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 2, 3, 3]) + W = numpy_helper.from_array(rng.uniform(-1, 1, (2, 3, 3, 3)).astype(np.float32), name="W") + B = numpy_helper.from_array(rng.uniform(-1, 1, (2,)).astype(np.float32), name="B") + node = helper.make_node("Conv", ["X", "W", "B"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_with_bias_3x3", [X], [Y], initializer=[W, B]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/with_bias_3x3", "conv_with_bias_3x3.onnx") + + +def conv_batch_2(): + """Batched conv (batch=2) with SAME_UPPER padding and bias.""" + # Input: [2, 3, 3, 3], Kernel: [1, 3, 2, 2], Bias: [1] -> Output: [2, 1, 3, 3] + rng = np.random.default_rng(57) + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [2, 3, 3, 3]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [2, 1, 3, 3]) + W = numpy_helper.from_array(rng.uniform(-1, 1, (1, 3, 2, 2)).astype(np.float32), name="W") + B = numpy_helper.from_array(rng.uniform(-1, 1, (1,)).astype(np.float32), name="B") + node = helper.make_node("Conv", ["X", "W", "B"], ["Y"], + kernel_shape=[2, 2], strides=[1, 1], auto_pad="SAME_UPPER") + graph = helper.make_graph([node], "conv_batch_2", [X], [Y], initializer=[W, B]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/batch_2", "conv_batch_2.onnx") + + +def conv_large_spatial(): + """Conv on larger spatial input: [1, 1, 8, 8] with 3x3 kernel.""" + X = helper.make_tensor_value_info("X", TensorProto.FLOAT, [1, 1, 8, 8]) + Y = helper.make_tensor_value_info("Y", TensorProto.FLOAT, [1, 1, 6, 6]) + W = numpy_helper.from_array( + np.random.default_rng(58).uniform(-1, 1, (1, 1, 3, 3)).astype(np.float32), name="W") + node = helper.make_node("Conv", ["X", "W"], ["Y"], + kernel_shape=[3, 3], strides=[1, 1], pads=[0, 0, 0, 0]) + graph = helper.make_graph([node], "conv_large_spatial", [X], [Y], initializer=[W]) + model = helper.make_model(graph, opset_imports=[helper.make_opsetid("", 13)]) + save_model(model, "conv/large_spatial", "conv_large_spatial.onnx") + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- + +if __name__ == "__main__": + print("Generating GEMM tests:") + gemm_non_square() + gemm_with_bias() + gemm_transB() + gemm_alpha_beta() + gemm_small() + gemm_large() + gemm_transB_with_bias() + + print("\nGenerating Conv tests:") + conv_3x3_kernel() + conv_stride2() + conv_multi_channel() + conv_1x1() + conv_same_padding_3x3() + conv_explicit_padding() + conv_with_bias_3x3() + conv_batch_2() + conv_large_spatial() + + print("\nDone.")