Commit Graph

282 Commits

Author SHA1 Message Date
Hanchen Ye f02955c284 [Readme] add onnx-mlir integration test instructions; add mnist.onnx, resnet18 test case; [EmitHLSCpp] support cast ops emission 2020-12-24 00:15:47 -06:00
Hanchen Ye e0ca62e238 [EmitHLSCpp] support TensorToMemrefOp emission; fixed related bugs 2020-12-23 17:48:21 -06:00
Hanchen Ye 21347b2665 [LegalizeOnnx] support to legalize the output of onnx-mlir flow to pure standard/affine IR 2020-12-23 16:45:38 -06:00
Hanchen Ye 4c1cc9e4b1 [QoREstimator] support DSP estimation (#18) 2020-12-22 15:33:12 -06:00
Hanchen Ye 85c47e98e3 [QoREstimation] support function call estimation, a known issue is CallOps inside of loops are not comprehensively considered; estimation refinement for multiple loops and select op (#5); fix related bugs 2020-12-21 19:02:39 -06:00
Hanchen Ye b0bf044c9a [QoREstimation] support scheduling reverse (#5); update scheduling emission style 2020-12-21 11:32:25 -06:00
Hanchen Ye 53550db33a [EmitHLSCpp] support to emit line number and schedule information; [HLSCpp] update all code related to storage_type attribute to align with Vivado 2019.1 settings 2020-12-20 17:52:56 -06:00
Hanchen Ye 1ef835680b [SimplifyMemRefAccess] implement this pass; [QoREstimation] fix a bug in dep-II estimation 2020-12-19 21:02:27 -06:00
Hanchen Ye b9af6f5355 [SimplifyMemRefAccess] start of this pass; [Analysis] update getLoadStoresMap method in utils 2020-12-19 17:36:17 -06:00
Hanchen Ye 6103dfba45 [StoreOpForward] impl of this pass; update checkSameLevel method in Analysis utils 2020-12-19 17:06:27 -06:00
Hanchen Ye 117a1bd0f4 [HLSCpp] eliminate PragmaOps, update ArrayOp definition; [Analysis] refactor Utils; [StoreForward] start of this pass 2020-12-18 23:42:41 -06:00
Hanchen Ye 2d943dd238 remove redundant includes in all files; [QoREstimation] refactor include structure 2020-12-18 21:16:22 -06:00
Hanchen Ye cea67c2064 [QoREstimation] refactor the estimation from ASAP -> ALAP; [ArrayPartition] move partiton_num annotation from QoREstimation to this pass 2020-12-18 20:21:20 -06:00
Hanchen Ye 5d854f3b74 [QoREstimation] support profiling latency based estimation (#2) 2020-12-17 21:40:29 -06:00
Hanchen Ye 18e5f434bb [QoREstimation] fix bugs and incorrect behaviors in the implementation; [Passes] add some TODOs 2020-12-17 17:05:26 -06:00
Hanchen Ye 512c842908 [QoREstimator] thoroughly rewrite the estimator with new strategy and structure 2020-12-17 06:10:48 -06:00
Hanchen Ye fac1498067 [LoopPipelining] move automatic flattening to this pass; [QoREstimation] support AffineIfOp estimation, know issue: dependencies between load/store operations should be considered in scheduling 2020-12-14 23:41:08 -06:00
Hanchen Ye 2307b0141f [QoREstimation] restructure qor estimator 2020-12-14 16:24:36 -06:00
Hanchen Ye 3f6d8e8560 [Passes] small bugs fixed; remove HLSCppAnalyzer; insert-pipeline-pragma to loop-pipelining 2020-12-14 13:45:13 -06:00
Hanchen Ye 31ce83be83 [RemoveVarLoopBound] simplify impl logic; [QoREstimation] update to FuncOp pass, remove op-latency configuration 2020-12-13 22:07:04 -06:00
Hanchen Ye 142ffadd14 [Passes] change target operation from ModuleOp to FuncOp if possible 2020-12-13 19:39:33 -06:00
Hanchen Ye 4e163d6edc [LegalizeDataflow] start of this pass; [HLSKernel] add CopyOp and lowering 2020-12-11 00:10:58 -06:00
Hanchen Ye 0414489dfd [HLSKernelBufferize] impl of this pass; a known issue is the unused return tensor can not be eliminated 2020-12-10 22:55:05 -06:00
Hanchen Ye fa105e1746 [HLSKernel] support tensor output for CNNOps 2020-12-10 17:33:59 -06:00
Hanchen Ye 6b5d682df1 [ConvertToHLSCpp] support defining top function; [EmitHLSCpp] support to emit interface pragmas according to whether the current function is top function or not 2020-12-09 18:59:00 -06:00
Hanchen Ye b01d469bf3 [SplitFunction] start of split-function pass 2020-12-09 13:04:51 -06:00
Hanchen Ye f9bf38240e [ArrayPartition] impl of this pass; note that due to the insufficient AffineExpr simplification mechanism in MLIR, this pass can't handle too complicated cases 2020-12-07 23:24:15 -06:00
Hanchen Ye a06d34e837 [ArrayPartition] start of array partition pass 2020-12-07 00:03:51 -06:00
Hanchen Ye 7cb98f3a87 [Samples] add ablation test script; update Readme; bug fix in InsertPipelinePragma 2020-12-06 23:48:20 -06:00
Hanchen Ye 939f01cd05 [InsertPipelinePragma] imple of this pass; support to specify the insertion level 2020-12-05 23:53:18 -06:00
Hanchen Ye 1ba479f1e6 [RemoveValLoopBound] impl this pass; only support single-dim variable upper bound 2020-12-05 23:26:58 -06:00
Hanchen Ye a57f014e6b [PartialAffineLoopTile] add the impl of this pass 2020-12-05 21:18:49 -06:00
Hanchen Ye 8be4fd1211 [AffineLoopPerfection] add this new pass: now only support sequential nested loop and constant loop bound 2020-12-04 23:24:16 -06:00
Hanchen Ye 1fa7700ae8 [Conversion] update all conversion passes definition to TableGen 2020-12-04 18:34:24 -06:00
Hanchen Ye a8a6d639e1 [HLSKernel] CNNOps verifiers (#16) 2020-12-01 22:44:00 -06:00
Hanchen Ye 192e3e3fd7 [BenchmarkGen] support generating the last dense layer, and impl corresponding affine lowering (#15) 2020-12-01 21:20:39 -06:00
Hanchen Ye e5cd6673e7 [BenchmarkGen] support generate CNN benchmarks without considering the last dense layer (#15) 2020-12-01 18:31:23 -06:00
Hanchen Ye ac4f3725d1 [HLSKernelToAffine] impl of SyrkOp, Syr2kOp, and TrmmOp lowering 2020-12-01 00:49:50 -06:00
Hanchen Ye ac1c9966a8 [HLSKernelToAffine] impl of GemmOp and SymmOp lowering 2020-11-30 22:57:42 -06:00
Hanchen Ye 29aff5e6fb [HLSKernel] update BLASOps def; [HLSKernelToAffine] start of BLASOps lowering 2020-11-30 21:02:11 -06:00
Hanchen Ye 8f1eadd913 [HLSKernel] rewrite def of CNNOps, all input and output are bufferized now; add mergeOp; [HLSKernelToAffine] update a compact lowering impl; [HLSKernelToLinalg] removed because this will not bring us significant simplification/convenience 2020-11-30 12:39:41 -06:00
Hanchen Ye ba0b949477 [HLSKernel] add BLASOps and ISPOps 2020-11-18 22:56:07 -06:00
Hanchen Ye c6ce8991d7 [HLSKernelToLinalg] add to linalg converter 2020-11-18 20:17:17 -06:00
Hanchen Ye 2fb35bdc68 [EmitHLSCpp] start of supporting scf ops; [scalehls-gen] start of benchmark generation 2020-11-05 18:20:17 -06:00
Hanchen Ye cf4e36e626 [HLSKernelToAffine] impl lowering of maxpool, relu, gemm ops 2020-11-05 15:48:47 -06:00
Hanchen Ye 6adc65da7a [HLSKernel] add maxpool, relu, and gemm operations 2020-11-04 22:40:29 -06:00
Hanchen Ye 41e3747b85 [HLSKernel] start of HLSKernel ops lowering; add ConvOp 2020-11-01 21:27:53 -06:00
Hanchen Ye eb34f4ee7b [HLSKernel] mechanical rename Benchmark to HLSKernel 2020-10-28 22:20:37 -05:00
Hanchen Ye da05ac2d84 [Benchmark] start of implementing benchmark dialect and benchmark-to-affine lowering 2020-10-27 18:36:17 -05:00
Hanchen Ye 6bbb1be13c [HLSCppEmitter] emit ArrayOp and loop/func pragmas; compatible with Vivado HLS 2019.1 for now. 2020-10-10 23:35:21 -05:00
Hanchen Ye 3f7a58d55f [QoREstimation] new resource-aware II analysis! memory port resources are taken into consideration 2020-10-10 22:53:52 -05:00
Hanchen Ye cbfb623c67 [QoREstimation] unroll loops in IR now! support a real partition-aware loop scheduling 2020-10-10 02:33:26 -05:00
Hanchen Ye 28926c5cc2 [QoREstimation] impl of getAccessNum method, this will take partition information and count number of accesses for each partition of each dimension of each load/store op, which will help to better estimate II and iteration latency 2020-10-08 02:45:44 -05:00
Hanchen Ye 58655710f5 remove expired files and includes; update readme 2020-10-06 01:58:10 -05:00
Hanchen Ye 8365d24ded [QoREstimation] update code with the new ArrayOp; add new HLSCppToolBase class 2020-10-06 01:36:51 -05:00
Hanchen Ye f3c40918e3 [HLSCppDialect] add array operations, and corresponding modification in HLSCppEmitter, ConverToHLSCpp 2020-10-05 23:26:42 -05:00
Hanchen Ye 3555fb9d2d [HLSCppDialect] use enum to update attributes definition; enhance pragma operations to support bind_storage, partition, and interface; [HLSCppEmitter] support all enhanced pragma operations 2020-10-04 20:14:22 -05:00
Hanchen Ye 4838b15b0f update func_pragma definition; update readme 2020-10-01 20:10:51 -05:00
Hanchen Ye e2c21ca9ab [QoREstimation] support dependency-based II analysis 2020-10-01 16:16:02 -05:00
Hanchen Ye 46f444463e [QoREstimator] a simple impl of estimator with lots of assumptions, can handle unroll and pipeline 2020-09-30 23:26:26 -05:00
Hanchen Ye 003a91472c update to the newest version LLVM 2020-09-30 09:14:18 -05:00
Hanchen Ye 77eaacd030 [HLSCppDialect] update pragma operations definition, update corresponding emitters 2020-09-25 23:19:24 -05:00
Hanchen Ye 4470f6c232 [QoREstimation] move this pass to Analysis directory 2020-09-24 15:18:34 -05:00
Hanchen Ye 21968283d1 [QoREstimation] split out QoREstimation.h, StaticParam.h, and Visitor.h; refine QoREstimation code structure with new created classes; a relative completed searchLongestPath implementation 2020-09-24 00:30:03 -05:00
Hanchen Ye ce293ee4c5 [QoREstimation] design parameters data structure; initial impl of longer path search 2020-09-23 18:23:43 -05:00
Hanchen Ye b605503236 remove global dialect registration; update file structure 2020-09-23 14:10:34 -05:00
Hanchen Ye 9b7c1c1c69 [HLSCppDialect] pragma operations come back... eventually I found the analysis+estimate 2-step approach in COMBA is misleading, basically you can't clearly partition the task into two passes (StaticAnalysis and QoREstimation), so that I decide to merge the two into one QoREstimation pass. In this case, there's no need to move around estimated or extracted parameters between different passes, which means we can create an internal data structure in QoREstimation pass for decently holding all parameters, and pragma information will continue to be represented as pragma operation 2020-09-23 12:39:14 -05:00
Hanchen Ye e06ba37001 [QoREstimation] initial implementation; add several config files for holding profiling data, resource constraint, and tool configuration. These config file can be passed to the compiler through QoREstimation pass option 2020-09-22 23:32:29 -05:00
Hanchen Ye 50b2a6c099 [HLSCppDialect] remove pragma operations: the functionality of pragma ops has been fully covered by param ops, and param ops is much more friendly to dse, hince there are no reason to maintain two groups of op with overlapped semantics; [README] update install & test instructions 2020-09-20 02:21:20 -05:00
Hanchen Ye e1b878e845 [HLSCppDialect] refine parameter operations definition; create seperate attributes tablegen 2020-09-20 02:05:58 -05:00
Hanchen Ye 53a83dee09 [HLSCppDialect] add many new passes declaration; add parameter operations declaration; remove scalehls-estimator tool 2020-09-19 18:21:08 -05:00
Hanchen Ye 8a67b13b99 [HLSCppDialect] add Assign operation, ConvertToHLSCpp pass; [HLSCppEmitter] add two testcases 2020-09-13 23:40:24 -05:00
Hanchen Ye c707e72a0a [PragmaInsertion] simple initial implementation for testing new pragma operations 2020-09-13 18:08:46 -05:00
Hanchen Ye 565a8f15d0 update code structure: add scalehls-estimator, EstimateQoR, and hlscpp::PragmaInsertion pass 2020-09-13 16:35:47 -05:00
Hanchen Ye a31192405d [HLSCppDialect] add pipeline & unroll & array_partition pragma operation 2020-09-13 01:02:15 -05:00
Hanchen Ye 1a6491b4fd [HLSCppDialect] add ApplyPragmasOp and PragmaOpInterface 2020-09-12 18:30:04 -05:00
Hanchen Ye 45fe55af67 add new HLSCpp dialect and scalehls-opt tool 2020-09-09 23:44:47 -05:00
Hanchen Ye 1f4200e88a mechanical rename hlsld to scalehls; update file structure 2020-09-06 18:05:16 -05:00
Hanchen Ye 01baa10c97 [EmitHLSCpp] some basic classes; hlsld-translate entry; add testcase 2020-08-26 23:23:22 -05:00
Hanchen Ye b35338e68e build code structure; update readme; remove pymlir directory 2020-08-25 14:11:30 -05:00
hanchen8 0d548a41f4 Add FpgaKrnl Ops defination 2020-05-06 21:15:55 -05:00
hanchen8 dbe3466267 construct files structure 2020-04-21 17:29:35 -05:00