You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2019/12/01 00:04:24 UTC

[GitHub] [incubator-tvm] gussmith23 opened a new issue #4449: [RFC] Program Analysis Framework in Relay

gussmith23 opened a new issue #4449: [RFC] Program Analysis Framework in Relay
URL: https://github.com/apache/incubator-tvm/issues/4449
 
 
   Please also see #3895, which is @MarisaKirisame's RFC around a specific change to support analyses in Relay.
   
   This RFC pertains to building a centralized, comprehensive program analysis framework in Relay. I see two primary uses of program analyses in Relay: for generating analysis data **used by the compiler**, to do things such as quantization, and for generating human-readable data **used by developers**, useful for exploring Relay programs. Whereas Marisa's request pertains more to the first use-case, this request is inspired by the second use-case, and motivated by a desire to build a framework that covers both use-cases. Such frameworks exist -- see [LLVM's framework](http://llvm.org/docs/WritingAnLLVMPass.html), which is designed to generate data useful to both the compiler and the developer.
   
   I built [a small analysis framework](https://github.com/microsoft/Analysis-Framework-for-TVM) for Relay this past summer at Microsoft, useful for building human-readable analyses of Relay programs. A demo of this framework can be found [here](https://github.com/gussmith23/tvm/blob/c28b928b33da0cad03fc6804f26e34d61aca1606/demo.ipynb), on my branch of TVM.
   
   These are features I developed in my simple framework:
   - Utilities for exporting analysis results into some more useful format (e.g. pandas)
     + I achieve this in my simple framework by giving utilities which: (1) extract "columns" out of the resulting analysis data and (2) convert analysis data into a record-based format which can be imported into pandas.
   - A consistent format for the resulting analysis data, allowing for analyses to be composed and to depend on the outputs of previous analyses.
     + In my framework, analysis data is simply structured into a dictionary-of-dictionaries in Python, where keys are strings representing column/column-group names.
   - A helper class for doing simple static dataflow analysis, built on Relay's `ExprVisitor`.
   
   These are features which could be considered for a full framework:
   - The ability to do dynamic analysis of programs
     + There is some exploration of this in the demo linked above
   - Integration with the Pass Manager, so that dependencies between passes can be explicit
   - Utilities for doing control-flow analyses
   
   These are open questions that I have:
   - What examples of "ad-hoc" program analyses exist in Relay? #3895 lists some.
   - What features are needed by compiler analyses?
   
   I'm posting this in advance of the TVM conference this year, as I'm doing a lighting talk on program analysis in Relay and am hoping that the talk generates some discussion.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services