Commit Graph

282 Commits

Author SHA1 Message Date
Hanchen Ye 66bf9a7623 [Readme] Update instructions for resnet18 example 2022-02-17 20:27:16 -06:00
Hanchen Ye 723d42304a [QoREstimation] Support scf if op 2022-02-17 19:52:58 -06:00
Hanchen Ye 577fa54c49 [Support] Include transfer load/store when getting the memref access map 2022-02-17 16:01:39 -06:00
Hanchen Ye b3c40d94bb [HLSCpp] Update the definition of MulPrimOp to support multiplication packing; [EmitHLSCpp] Support the emission of hlscpp primitive ops 2022-02-17 14:50:05 -06:00
Hanchen Ye 3100f042f3 [EmitHLSCpp] Support max/min ops 2022-02-16 19:12:51 -06:00
Hanchen Ye d775ccc9f9 [EmitHLSCpp] Support reinterpret_cast op 2022-02-16 18:41:19 -06:00
Hanchen Ye 887424942b [HLSCpp] Remove unused operations from the visitor; [EmitHLSCpp] Start the emissionts of vector load/store, transfer read/write, broadcast, mul primitive 2022-02-16 14:57:09 -06:00
Hanchen Ye 9626e556b7 [Transforms] Support vectorization in the pass pipeline; Update several passes to make them aware of transfer_read/write ops 2022-02-16 04:19:33 -06:00
Hanchen Ye b0cb590fb6 [Transforms] Enable the pass pipeline with tunable dataflow granularity and loop tiling size 2022-02-16 02:28:52 -06:00
Hanchen Ye 770ae66603 [CreateHLSCppPrimitive] Factor out this pass from LegalizeToHLSCpp; Move LegalizeToHLSCpp to Transforms directory; [Transforms] Add scalehls pass pipeline 2022-02-16 00:39:09 -06:00
Hanchen Ye ec415f92d5 [LegalizeToHLSCpp] Support to create mul and cast primitives for integer calculations 2022-02-15 23:35:57 -06:00
Hanchen Ye 7af2c0cafd [HLSCpp] Introduce MulPrimOp and CastPrimOp for DSP double pumping 2022-02-14 17:20:34 -06:00
Hanchen Ye 5c8e1ebda2 [QoREstimator] Improve the accuracy when resource can be shared between multiple loop bands 2022-02-13 23:21:22 -06:00
Hanchen Ye 1be6af93d8 [QoREstimator] Support fexp op; Start to specify dsp usage in config.json 2022-02-11 05:56:38 -06:00
Hanchen Ye baa212b473 [QoREstimation] Resolve an issue when estimating multi-loop functions with no_touch annotations 2022-02-11 04:51:42 -06:00
Hanchen Ye dfc2ab12c2 [ReduceInitialInterval] Implement this pass 2022-02-09 14:22:05 -06:00
Hanchen Ye 8a8de8b4c2 [MaterializeReduction] Implement this pass 2022-02-07 00:38:25 -06:00
Hanchen Ye 817620d5a0 [QoREstimation][MultipleLevelDSE] Use JSON file for configuration 2022-01-21 22:13:55 -06:00
Hanchen Ye 5e7171e9ac [HLSKernel] Remove this dialect from the repo 2022-01-21 03:55:49 -06:00
Hanchen Ye d65454f24e Clean up Conversion/Passes.h 2022-01-21 03:26:51 -06:00
Hanchen Ye 5fc4d2682b [QuantizeONNX] Remove from the repo 2022-01-21 03:22:56 -06:00
Hanchen Ye f354a8a3a6 Bump Polygeist to version 3f0e66045f01305e2b09de186552a3c42cdfd8e5 2022-01-21 02:58:31 -06:00
Hanchen Ye 2fdba859f7 [PartialAffineLoopTiling] Support to simplify loop structure after tiling 2021-11-12 01:51:15 -06:00
Hanchen Ye aaf11f432d Add build-scalehls.sh script; [README] Update build and test instructions; [Polygeist] Update polygeist submodule to avoid gettimeofday failure 2021-11-09 00:49:06 -06:00
Hanchen Ye 31981f14e4 [Support] Add getArrays API; [BindingsPython] Add PyArrayList class for array iteration; Remove logics after python exception 2021-11-06 15:45:43 -05:00
Hanchen Ye 1bdc117ddb [ArrayPartition] Add array partition API with explicit factors and kinds (cyclic or block) 2021-11-06 02:43:47 -05:00
Hanchen Ye 68f1d2a577 [AffineLoopOrderOpt] Support to specify permMap; [BindingsPython] Support LoopPermutation API; [pyscalehls] Add comments to each optimization call 2021-11-03 22:05:05 -05:00
Hanchen Ye 07d027d3c5 [BindingsPython] Directly use C++ API for ScaleHLS transform util bindings 2021-11-03 15:49:46 -05:00
Hanchen Ye ad8dea7101 [BindingsPython] Support applyLoopPipelining API 2021-11-03 01:20:47 -05:00
Hanchen Ye 82f8c7b221 [BindingsPython] Support MemoryAccessOpt API 2021-11-03 01:04:38 -05:00
Hanchen Ye 76abd5b96e [BindingsPython] Support AffineLoopOrderOpt and RemoveVariableBound APIs 2021-11-03 00:47:13 -05:00
Hanchen Ye b422ef16ee [BindingsPython] Support PyAffineLoopBand and PyAffineLoopBandIterator utility; Support applyAffineLoopPerfection API 2021-11-03 00:21:14 -05:00
Hanchen Ye 7359ec02c0 Update Polygeist to daeb952 2021-11-01 16:27:57 -05:00
Hanchen Ye 0f663e69c3 Support HLSCpp dialect python binding 2021-10-08 03:27:49 -05:00
Hanchen Ye 9b5be88f51 Add HLSCpp dialect CAPI 2021-10-08 03:01:38 -05:00
Hanchen Ye b20b152bd6 Port applyLegalizeToHLSCpp to python 2021-10-08 02:51:21 -05:00
Hanchen Ye b8f3882e5e Remove MlirFunc definitions 2021-10-03 16:59:33 -05:00
Hanchen Ye 0492347bef Add pyscalehls tool; Python binding for applyArrayPartition 2021-10-03 10:18:25 -05:00
Hanchen Ye 8ec060ea11 Start of transform utils python binding 2021-10-01 12:19:25 -05:00
Hanchen Ye ddf17f2ae8 Remove config folder; Update -multiple-level-dse to -dse 2021-09-30 04:57:45 -05:00
Hanchen Ye 2d42d2d6b9 Update README; Enable output QoR estimation in DSE; Register LLVM dialect 2021-09-30 04:44:47 -05:00
Hanchen Ye ab9d20a6eb Support to import scalehls in python; Move analysis utils to support folder; Move qor estimator to transform folder 2021-09-30 02:18:31 -05:00
Hanchen Ye 149ed35967 Start of capi and python binding 2021-09-29 23:33:56 -05:00
Hanchen Ye 9825bcd3ca remove SCF2Affine conversion passes 2021-08-23 13:30:36 -05:00
Hanchen Ye c5f894dd08 [scalehls-clang] Update test cases; [SCFToAffine] Solve an issue when loop bound is induction variable 2021-08-11 22:29:30 -05:00
Jianyi Cheng 5f430e18b7
Add SCFToAffine conversion pass (#25)
- Added two passes to raise scf dialect:
    - Check whether each scf.for op can be raised to an affine.for op and raise it if it can.
    - Check whether each memref.load/memref.store op can be raised to an affine.load/affine.store op and raise it if it can.
- Added a unit test for SCFToAffine
2021-07-03 01:39:31 -05:00
Hanchen Ye 964c7315eb [MultipleLevelDSE] start of supporting function pipelining; [Test] add gemm.c test case 2021-06-02 12:52:49 -05:00
Hanchen Ye c3deb43ee8 [Dialect] fix several bugs 2021-05-01 01:06:35 -05:00
Hanchen Ye 671b4a9991 fix bugs in new LLVM version 2021-04-30 13:21:20 -05:00
Hanchen Ye ab22a45c20 remove redundant includes 2021-04-21 22:20:37 -05:00
Hanchen Ye 3d1bcb906e [MultipeLevelDSE, LoopPipeline] fix bugs; [QoREstimation] fix no_touch attribute support; [LegalizeToHLSCpp] split out callable API; 2021-04-21 21:59:47 -05:00
Hanchen Ye 6b0255366a [Analysis] remove AnalysisBase class, update emitter, estimator, and optimizer accordingly; [MultipleLevelDSE] update with new attributes 2021-04-21 03:26:37 -05:00
Hanchen Ye 68b1895d31 [HLSCpp] update definition of attributes, hope this is the final version...; [LegalizeToHLSCpp, QoREstimation] update with new attributes 2021-04-21 00:29:52 -05:00
Hanchen Ye cb2df2dc37 [HLSCpp] update ScheduleAttr to TimingAttr; [QoREstimation] using HLSCpp attribute for representing resource and timing annotations 2021-04-19 00:11:10 -05:00
Hanchen Ye 2fda888955 [HLSCpp] use ODS for the dialect declaration 2021-04-16 09:58:08 -05:00
Hanchen Ye a26b6d0518 [HLSCpp] update all attributes; add attribute parser and printer; [QoREstimation] update with ScheduleAttr 2021-04-16 01:07:08 -05:00
Hanchen Ye c798c28717 [HLSCpp] start to add structure attributes for representing directives, scheduling, and resource info 2021-04-15 14:12:46 -05:00
Hanchen Ye d1786aeed7 [QuantizeOnnx] update the pass name 2021-04-06 20:35:32 -05:00
Hanchen Ye ea9467cfe5 [QuantizeDNNModel] add support of div op and some cast ops 2021-04-06 18:47:30 -05:00
Hanchen Ye d14f8718d0 [QuantizeDNNModel] impl this pass for quantizing onnx model to 8/32 bits representation; [HLSCpp] add MulOp and AddOp 2021-04-06 17:25:57 -05:00
Hanchen Ye d0b847c26a [MultipleLevelDSE] support to specify the maximum exploration and loop parallelism; [Samples] add trmm test case, update the problem size of all benchmarks to 1024 2021-03-31 22:45:14 -05:00
Hanchen Ye cd03a1def3 [MultipleLevelDSE] support to explore directive-only design space 2021-03-31 19:32:56 -05:00
Hanchen Ye a9d93f0ed2 [MultipleLevelDSE] support to specify sample number; [EmitHLSCpp] stop to emit interface pragma if array is fully partitioned; [Samples] update polybench test script 2021-03-31 15:56:00 -05:00
Hanchen Ye 1d00ea9812 [ArrayPartition] fix a bug; add applyArrayPartition() to transform utils; [Samples] update dnn test target fpga 2021-03-30 15:54:53 -05:00
Hanchen Ye 1e1b50df06 [MultipleLevelDSE] support to sample pareto points and dump to mlir files 2021-03-29 20:09:02 -05:00
Hanchen Ye 6bf2845742 [MultipleLevelDSE] support to dump all design spaces (loops and funcs); begin of exporting pareto design points C++ files; [Samples] reconstruct the file structure 2021-03-29 18:53:55 -05:00
Hanchen Ye 58bd312356 [ArrayPartition] update to target FuncOp rather than ModuleOp; [MultipleLevelDSE] add resConstraint option; [Samples] update polybench benchmarks 2021-03-29 15:52:34 -05:00
Hanchen Ye dec53d8e36 [SplitFunction] support to further split sub-functions into multiple single-loop-function 2021-03-26 22:38:07 -05:00
Hanchen Ye a040ce5009 [PartialAffineLoopTile] support loop order opt immediately after loop tiling; [AffineLoopOrderOpt] fix a small bug; [Samples] update the ablation study script 2021-03-26 12:23:28 -05:00
Hanchen Ye b6534145a1 [ArrayPartition] support to handle top functions containing multiple sub-functions 2021-03-23 21:58:09 -05:00
Hanchen Ye b0c331f44c [PartialAffineLoopTile] add appy-pipeline option 2021-03-23 11:53:14 -05:00
Hanchen Ye 1fe0475195 update to LLVM f178c13fa899; [ArrayPartition] fixed a bug; [Samples] remove array initialization in atax, bicg, and gesummv 2021-03-22 17:29:43 -05:00
Hanchen Ye dc3ef5ee67 [ArrayPartition] resolve an issue that non-pipelined loops are not considered; [Transforms] add an applyFullyUnrollAndPartition() until; [Samples] reverse gemm, syrk, syr2k back... 2021-03-16 23:57:18 -05:00
Hanchen Ye 4c9708d239 [Analysis] add a getAverageTripCount() util for estimation and dse 2021-03-16 17:31:19 -05:00
Hanchen Ye 1d39291a92 [MultipleLevelDSE] fixed a small issue; [Samples] update the problem sizes of polybench test cases 2021-03-04 19:58:46 -06:00
Hanchen Ye 17d34f0563 [MultipleLevelDSE] evaluate the tile config that fully unrolls all sequential loops in the design space initialization 2021-03-02 18:51:48 -06:00
Hanchen Ye 15bc2ff8f2 update to LLVM c68d289 2021-03-02 14:31:08 -06:00
Hanchen Ye 05681e4f34 [SimplifyMemrefAccess] significantly reduce the overall complexity 2021-03-01 22:27:02 -06:00
Hanchen Ye 2a7ceaf21b [MultipleLevelDSE] dse params passed in through target-spec.ini rather than pass options; update debug info emission format 2021-03-01 00:33:06 -06:00
Hanchen Ye d1e87c7af7 [QoREstimation] improve estimation speed by using parallel loop information; [Transforms] update utils to apply LegalizeToHLSCpp after loop tiling; [MultipleLevelDSE] add topFunc as pass option 2021-02-28 23:30:57 -06:00
Hanchen Ye 66f932c9db [LegalizeToHLSCpp] support to annotate parallel loops; [Transforms] improve the speed of SimplifyMemrefAccess and AffineStoreForward by using the parallel information 2021-02-28 20:52:10 -06:00
Hanchen Ye 6b6b07e764 [AffineStoreForward] rewrite this pass to improve the speed 2021-02-18 18:23:29 -06:00
Hanchen Ye a580fe4239 [QoREstimation] add dep-analysis option to improve the estimation speed 2021-02-18 00:48:01 -06:00
Hanchen Ye dbf65620df [MultipleLevelDSE] support to combine loop design spaces and conduct function-level optimization 2021-02-17 21:45:12 -06:00
Hanchen Ye 5b3848291a [MultipleLevelDSE] update the code structure; add FuncDesignPoint and FuncDesignSpace class; [QoREstimation] bypass the estimation of loops marked as no_touch 2021-02-17 12:53:24 -06:00
Hanchen Ye 22aea10608 [MultipleLevelDSE] support explore design space method 2021-02-13 12:53:34 -06:00
Hanchen Ye 9658ab6938 [MultipleLevelDSE] update code structure 2021-02-12 15:14:07 -06:00
Hanchen Ye 3e3435dc84 [MultipleLevelDSE] support ds initialization and pareto frontier update; support ds dump; remove ProfileDesignSpace pass; [PartialAffineLoopTile] become fully in-place tiling 2021-02-12 14:54:36 -06:00
Hanchen Ye 390333e5ec [MultipleLevelDSE] add new DesignPoint and DesignSpace class for representing and iterating in the design space, remove the TileSpace class; [LoopPipelining] pass loop band into this pass and make optimization to happen in place 2021-02-12 01:25:56 -06:00
Hanchen Ye d7a3456fc2 [MultipleLevelDSE] remove greedy dse algorithm; [ProfileDesignSpace] move this pass to Transforms folder due to dependence issue; update all CMakeLists 2021-02-10 20:04:46 -06:00
Hanchen Ye a55495582c [Transforms] use loop band as input for all loop transforms; update the method description of Utils 2021-02-10 08:50:56 -06:00
Hanchen Ye 265d888f5f add pthread support in cmake; [Transforms] support apply per-loop opt strategy in Utils; [Samples] increase problem size of some polybench test cases 2021-02-10 01:20:00 -06:00
Hanchen Ye c76938dccc [Readme] update test instructions; fixed several small bugs 2021-02-08 01:48:59 -06:00
Hanchen Ye fa2b63f958 rename HLSCppEstimator/Optimizer/Emitter to ScaleHLSXXX; [Transforms] op builder is no longer passed around but generated locally; [applyOptStrategy] update and optimize the implementation 2021-02-08 01:32:33 -06:00
Hanchen Ye 69ec8c0b4a [Transforms] move all transformation APIs to Transforms/Utils 2021-02-04 20:01:50 -06:00
Hanchen Ye 55d7c17d02 [ProfileDesignSpace] factor out a new pass for profiling; distribut test cases in test/Transforms into different sub-directories 2021-02-04 11:56:09 -06:00
Hanchen Ye 80bf2ceba4 [Transforms] distribute transform passes into 4 different folders; move HLSKernelBufferize pass to Dialect/HLSKernel folder 2021-02-02 19:22:15 -06:00
Hanchen Ye 7eb1ce40ce [MultipleLevelDSE] start to support profiling mode to profile the performance and resource utilization of the whole design space 2021-02-02 18:46:38 -06:00
Hanchen Ye f083e3c663 [QoREstimation] support per-loop estimation; annotate with/without resourc-sharing dsp utilization to pipelined loops 2021-02-02 17:48:00 -06:00
Hanchen Ye 0b7fde18d9 support to specify targeted II for pipelined loop/function 2021-02-02 15:04:45 -06:00