1. 16 Jan, 2020 3 commits
  2. 15 Jan, 2020 2 commits
    • [REFACTOR][IR] attrs.h -> ir (#4709) · b0b51f25
      This PR moves attrs.h into the ir folder as it
      can serve as a common infra for building ir dats structures.
      
      We also moved common container(FloatImm) into ir/expr.h
      Tianqi Chen committed
    • [REFACTOR][IR] Unify IntImm and UIntImm (#4706) · ce807fe8
      * [REFACTOR][IR] Unify IntImm and UIntImm
      
      This PR unifies UIntImm and IntImm to simplify the codebase.
      Unsigned integer constants will also be stored as IntImm.
      
      For uint constant that does not fit into int64(rare case), we introduced
      an intrinsic tvm_big_uint_imm to construct such intgers by its
      lower and higher 32bits.
      
      * [REFACTOR][IR] Remove UIntImm to use IntImm
      
      * rename big->large
      Tianqi Chen committed
  3. 14 Jan, 2020 1 commit
  4. 10 Jan, 2020 1 commit
  5. 09 Jan, 2020 1 commit
    • [REFACTOR][IR] tvm::Expr -> PrimExpr(Primitive Expr) (#4669) · d6a23cf5
      * [REFACTOR][IR] tvm::Expr -> PrimExpr(Primitive Expr)
      
      As part of unified IR, we will need to unify relay::Expr
      and the current tvm::Expr under the same base type.
      
      From the techinical point of view. tvm::Expr is a "primitive"
      expression that only contains POD types and handles and does
      not do life-cycle management.
      
      This PR renames Expr->PrimExpr to clarify that.
      We will send a subsequent PR to introduce the base expr class.
      
      * Remove legacy VarExpr and ExprHash/Equal
      Tianqi Chen committed
  6. 08 Jan, 2020 1 commit
    • [REFACTOR][IR] Add Node suffix to low-level IR nodes (#4649) · f4c5f93b
      * [REFACTOR][IR] Variable -> VarNode
      
      * [REFACTOR][IR] Add/Sub/Mul/Div -> AddNode/SubNode etc.
      
      * [REFACTOR][IR] Min/Max/FloorDiv/FloorMod -> MinNode/MaxNode etc.
      
      * [REFACTOR][IR] EQ/NE/LT/LE/GT/GE/Select -> EQNode/NENode etc.
      
      * [REFACTOR][IR] Add Node suffix to Select/Call/Load/Ramp/Shuffle/Let
      
      * [REFACTOR][IR] Add node suffix to IntImm/UIntImm/FloatImm/StringImm
      
      * [REFACTOR][IR] Add Node suffix to Any, AttrStmt, AssertStmt
      
      * [REFACTOR][IR] Add Node suffix to Store/Provide/Allocate/Free
      
      * [REFACTOR][IR] Add Node suffix to ProducerConsumer
      
      * Fix lint
      
      * style updates, test fixes
      Tianqi Chen committed
  7. 06 Jan, 2020 2 commits
    • [REFACTOR][IR] Introduce SeqStmt to replace ir::Block (#4627) · 3595cbe0
      * [REFACTOR][IR] Introduce SeqStmt to replace Block
      
      ir::Block was used to represent a sequence of Stmts in the original low-level IR.
      The nested ir::Block structure is not really friendly for recursive visits,
      especially when the statements are unrolled.
      
      This PR introduce a SeqStmt that directly stores a sequence of statements in an Array container.
      The new SeqStmt will be used as a replacement of the original Block structure.
      
      * [REFACTOR] Migrate use of Block to SeqStmt.
      
      * [REFACTOR] Remove Block
      
      * Add more comments per yizhi's comment
      Tianqi Chen committed
    • [REFACTOR] Automatically deduce function type signature in Registry.set_body_typed (#4623) · d5d63a44
      Previously we support a limited case of function type deduction and in many places
      we have to supply the type twice during set_body_typed (one in the template parameter, another in the lambda signature).
      
      This PR improves the deduce function by enablng automatic function signature deduction.
      
      ```
      TVM_REGISTER_GLOBAL("sub")
      .set_body_typed([](int x, int y) -> int { return x - y; });
      ```
      
      Unfortunately, because of template conflict, we can not support the original case
      where both type signature and lambda are supplied through set_body_typed.
      
      This PR refactors the existing regsitration to the new style.
      Tianqi Chen committed
  8. 04 Jan, 2020 1 commit
    • [REFACTOR] TVM_REGISTER_API -> TVM_REGISTER_GLOBAL (#4621) · 81523604
      TVM_REGSISTER_API is an alias of TVM_REGISTER_GLOBAL.
      In the spirit of simplify redirections, this PR removes
      the original TVM_REGISTER_API macro and directly use TVM_REGISTER_GLOBAL.
      
      This type of refactor will also simplify the IDE navigation tools
      such as FFI navigator to provide better code reading experiences.
      
      Move EnvFunc's definition to node.
      Tianqi Chen committed
  9. 03 Jan, 2020 1 commit
    • [REFACTOR] Migrate Low-level IR Passes into the New Stmt/Expr Mutator (#4607) · 203ca7a0
      * CombineContextCall
      
      * Migrate BoundChecker
      
      * Migrate CoprocSync
      
      * Migrate detect_device
      
      * Migrate loop_partition
      
      * Migrate infer_fragement
      
      * Migrate inject_copy_intrin
      
      * Migrate inject double buffer
      
      * Migrate lower_intrin and simplify
      
      * Migrate storage flatten
      
      * Migrate inject prefetch
      
      * Migrate inject_virtual_thread
      
      * migrate inline
      
      * Migrate lift attr scope
      
      * Migrate custom datatypes
      
      * migrate lower_thread_all_reduce
      
      * Migrate lower_tvm_builtin
      
      * migrate lower_warp memory
      
      * Migrate make_api.cc
      
      * Migrate remap_thread_axis
      
      * Migrate remove_no_op
      
      * migrate rewrite_unsafe_select
      
      * Migrate skip_assert simple_passes
      
      * Migrate split_host_device
      
      * Migrate ssa
      
      * Migrate storage_access
      
      * Migrate storage_rewrite
      
      * Migrate tensor_core
      
      * Migrate unroll_loop
      
      * Migrate vectorize
      
      * Migrate verify compact_buffer gpu_code
      
      * Migrate verify_memory
      
      * Migrate storage_sync
      
      * Remove unused refs to mutator
      
      * Migrate hybrid_op
      
      * Migrate tensorize
      
      * Migrate schedule ops
      
      * Migrate schedule_dataflow_rewrite
      
      * Migrate auto_inline_elemwise
      
      * Remove unecessary ref to visitor
      
      * remove unecessary ref
      
      * Migrate bound_deducer
      
      * Migrate domain_touched
      
      * Migrate autotvm feature touch extractor
      
      * Add annotations
      Tianqi Chen committed
  10. 31 Dec, 2019 1 commit
    • [REFACTOR][OBJECT] Consoldiate NodePtr/Ref/Hash/Equal to Object (#4603) · a8c36921
      * [REFACTOR][OBJECT] Consoldiate NodePtr/Ref/Hash/Equal and macros to Object.
      
      Historically, we have classes like NodePtr/Ref/HashEqual.
      After unified object protocol, these names are just alias of the object counterpart.
      Moreover, there are helper macros defined over the places for defining these object.
      
      This PR consoldiate the terminologies into the corresponding ones
      in the Object system so we have a clean and consistent API moving forward.
      
      * Update include/tvm/attrs.h
      
      Co-Authored-By: Wei Chen <ipondering.weic@gmail.com>
      
      * fix compilation
      
      Co-authored-by: Wei Chen <ipondering.weic@gmail.com>
      Tianqi Chen committed
  11. 30 Dec, 2019 1 commit
    • [REFACTOR][RUNTIME] Update NDArray use the Unified Object System (#4581) · 55bd786f
      * [REFACTOR][RUNTIME] Move NDArray to Object System.
      
      Previously NDArray has its own object reference counting mechanism.
      This PR migrates NDArray to the unified object protocol.
      
      The calling convention of NDArray remained intact.
      That means NDArray still has its own type_code and
      its handle is still DLTensor compatible.
      
      In order to do so, this PR added a few minimum runtime type
      detection in TVMArgValue and RetValue only when the corresponding
      type is a base type(ObjectRef) that could also refer to NDArray.
      
      This means that even if we return a base reference object ObjectRef
      which refers to the NDArray. The type_code will still be translated
      correctly as kNDArrayContainer.
      If we assign a non-base type(say Expr) that we know is not compatible
      with NDArray during compile time, no runtime type detection will be performed.
      
      This PR also adopts the object protocol for NDArray sub-classing and
      removed the legacy NDArray subclass protocol.
      Examples in apps/extension are now updated to reflect that.
      
      Making NDArray as an Object brings all the benefits of the object system.
      For example, we can now use the Array container to store NDArrays.
      
      * Address review comments
      Tianqi Chen committed
  12. 24 Dec, 2019 1 commit
  13. 22 Dec, 2019 1 commit
    • [REFACTOR][DTYPE] Isolate dtype to runtime (#4560) · 7fa8aab5
      dtype.h -> runtime/data_type.h
      
      Changes:
      - Rename all old reference of tvm::Type to DataType
      - ExprNode.type -> ExprNode.dtype
      - Expr.type() -> Expr.dtype()
      - Change Expr related functions to expr_operator.
        - DataType::min() -> min_value(DataType)
        - DataType::max() -> max_value(DataType)
      - Move type constructor Int, UInt, Float, Handle, Bool into DataType.
        - Int(bits) -> DataType::Int(bits)
        - UInt(bits) -> DataType::UInt(bits)
      Tianqi Chen committed
  14. 06 Dec, 2019 1 commit
  15. 24 Nov, 2019 1 commit
  16. 09 Nov, 2019 1 commit
    • Auto TensorCore CodeGen (#4234) · d64bf6b5
      * Add Auto TensorCore TensorCore Unit Test
      
      * Rebase to tvm master branch & Add auto tensor core
      
      * Code Refine
      
      * Add tensor core switch by pragma
      
      * Add pragma in tensor core example code
      
      * Get real tile size to replace hard coded 16
      
      * support more than 2 dimensions (e.g. batchmatmul) for buffer bind scope
      
      * support batch matmul
      
      * Move cuda env check to tensor_core.cc
      
      * Coderefine for tensor_core.cc
      
      * Refine comments
      
      * Some refinements of code and comment
      
      * Update TensorCore UT to pass the CPU test
      
      * remove redundant code
      
      * matmul's storage align for different layout
      
      * Add support for differenct position of type cast
      
      * Add formal tutorial for auto tensorcore codegen
      
      * move tensorcore check up to tutorial code
      
      * code and doc refine
      
      * comment out tune_and_evaluate in tutorial
      
      * fix cpplint error
      Minmin Sun (孙敏敏) committed
  17. 24 Oct, 2019 2 commits
    • [NODE][REFACTOR] Refactor reflection system in node. (#4189) · 78ca6fc8
      * [NODE][REFACTOR] Refactor reflection system in node.
      
      - Removed the old Node, Node is now just an alias of runtime::Object
      - Introduce ReflectionVTable, a new columnar dispatcher to support reflection
        - This allows us to remove vtable from most node objects
        - The VisitAttrs are registered via TVM_RESGITER_NODE_TYPE,
          they are no longer virtual.
      - Consolidated serialization and reflection features into node.
      
      * Explicit type qualification when calling destructor.
      
      * Fix SPIRV, more comments
      Tianqi Chen committed
    • TensorCore Support using Intrinsic (#4136) · 324a9607
      * add tensor core support
      
      * avoid memory bank conflict
      
      * fix thread sync & better performance
      
      * better performance
      
      * add schedule test for conv2d
      
      * extend into BatchMatMul
      
      * support config fragment shape and layout using intrinsic
      
      * add TensorCore tutorial
      
      * add int support and fix lint
      
      * address comment
      
      * add 32*16*8 TensorCore test
      
      * fix wmma include logic
      Siyuan Feng committed
  18. 21 Oct, 2019 1 commit
    • [REFACTOR][NODE][RUNTIME] Move Node to the new Object protocol. (#4161) · 7895adb2
      * [REFACTOR][NODE][RUNTIME] Move Node to the new Object protocol.
      
      This PR removes the original node system, and make node as a subclass of Object.
      This is a major refactor towards a better unified runtime object system.
      
      List of changes in the refactor:
      
      - We now hide data_ field, use Downcast explicitly to get a sub-class object.
      - Removed the node system FFI in python.
      - Removed the node C API, instead use PackedFunc for list and get attrs.
      - Change relay::Op::set_attr_type_key(attr_key_name) to relay::Op::set_attr_type<AttrType>().
        - This change was necessary because of the new Object registration mechanism.
        - Subsequent changes to the op registrations
        - The change revealed a few previous problems that is now fixed.
      - Patched up a few missing node type registration.
        - Now we will raise an error if we register object that is not registered.
      - The original node.h and container.h are kept in the same location.
      - Calling convention: kObjectHandle now equals the old kNodeHandle, kNodeHandle is removed.
      - IRFunctor now dispatches on ObjectRef.
      - Update to the new type checking API: is_type, derived_from are replaced by IsInstance.
      - Removed .hash member function, instead use C++ convention hasher functors.
      
      * Address review comments
      Tianqi Chen committed
  19. 18 Oct, 2019 1 commit
  20. 15 Oct, 2019 1 commit
    • [RFC][RUNTIME] Introduce new object protocol. (#4115) · a0bd3786
      * [RUNTIME] Introduce new object protocol.
      
      This PR introduces a new object protocol to unify the node and object.
      We also updated the existing runtime::vm code to make use of the new system.
      
      Update to the node will be done in a follow up PR.
      
      Other changes:
      
      - Remove object related code in json serializer as that code logic was not complete
        and we have a separate serializer for VM, can revisit later.
      
      * address review  comment
      
      * Fix the child slot logic
      Tianqi Chen committed
  21. 11 Oct, 2019 1 commit
  22. 27 Sep, 2019 1 commit
  23. 25 Sep, 2019 2 commits
  24. 22 Sep, 2019 1 commit
  25. 20 Sep, 2019 1 commit
  26. 26 Aug, 2019 1 commit
  27. 25 Jul, 2019 1 commit
    • Implementation of uTVM (#3227) · ef909df1
      * uTVM interfaces (#14)
      
      * some minor interface changes
      
      * implemented HostLowLevelDevice
      
      * added MicroDeviceAPI
      
      * implemented micro_common and added Python interfaces
      
      * current status, semi implemented micro session
      
      * added micro_common implementation and python interfaces (#18)
      
      * added micro_common implementation and python interfaces (#18)
      
      * current status, semi implemented
      
      * host test working
      
      * updated interfaces for MicroSession arguments allocation
      
      * make somewhat lint compatible
      
      * fix based on comments
      
      * added rounding macro
      
      * fix minor bug
      
      * improvements based on comments
      
      * Clean up `binutil.py` and make Python-3-compatible
      
      * Change argument allocation design
      
      * Address feedback and lint errors
      
      * Improve binutil tests
      
      * Simplify allocator (per @tqchen's suggestions)
      
      * Doc/style fixes
      
      * farts
      
      * mcgee
      
      * rodata section werks
      
      (and so does `test_runtime_micro_workspace.py`)
      
      * simple graph runtime werk
      
      * TEMP
      
      * ResNet works, yo
      
      * First round of cleanup
      
      * More cleanup
      
      * runs a dyson over the code
      
      * Another pass
      
      * Fix `make lint` issues
      
      * ready to pr... probably
      
      * final
      
      * Undo change
      
      * Fix rebase resolution
      
      * Minor fixes
      
      * Undo changes to C codegen tests
      
      * Add `obj_path` in `create_micro_lib`
      
      * TEMP
      
      * Address feedback
      
      * Add missing TODO
      
      * Partially address feedback
      
      * Fix headers
      
      * Switch to enum class for `SectionKind`
      
      * Add missing ASF header
      
      * Fix lint
      
      * Fix lint again
      
      * Fix lint
      
      * Kill lint warnings
      
      * Address feedback
      
      * Change Python interface to MicroTVM
      
      All interaction with the device is now through `Session` objects, which
      are used through Python's `with` blocks.
      
      * Reorder LowLevelDevice interface
      
      * Store shared ptr to session in all alloced objects
      
      * Move helper functions out of `tvm.micro`
      
      * Switch static char arr to vector
      
      * Improve general infra and code quality
      
      Does not yet address all of tqchen's feedback
      
      * Forgot a rename
      
      * Fix lint
      
      * Add ASF header
      
      * Fix lint
      
      * Partially address MarisaKirisame's feedback
      
      * Lint
      
      * Expose `MicroSession` as a node to Python
      
      * Revert to using `Session` constructor
      
      * Fix compiler error
      
      * (Maybe) fix CI error
      
      * Debugging
      
      * Remove
      
      * Quell lint
      
      * Switch to stack-based session contexts
      
      * Make uTVM less intrusive to host codegen
      
      And use SSA for operands of generated ternary operators
      
      * Inline UTVMArgs into UTVMTask struct
      
      * Remove `HostLowLevelDevice` header
      
      * Remove `BaseAddr` class
      
      * Address feedback
      
      * Add "utvm" prefix to global vars in runtime
      
      * Fix lint
      
      * Fix CI
      
      * Fix `test_binutil.py`
      
      * Fix submodules
      
      * Remove ResNet tests
      
      * Make `test_binutil.py` work with nose
      
      * Fix CI
      
      * I swear this actually fixes the binutil tests
      
      * lint
      
      * lint
      
      * Add fcompile-compatible cross-compile func
      
      * Add docs for uTVM runtime files
      
      * Move pointer patching into `MicroSession`
      
      * Fix lint
      
      * First attempt at unifying cross-compile APIs
      
      * Fix lint
      
      * Rename `cross_compile` back to `cc`
      
      * Address feedback
      
      * Remove commented code
      
      * Lint
      
      * Figure out failing function
      
      * Remove debugging code
      
      * Change "micro_dev" target to "micro"
      
      * Add checks in tests for whether uTVM is enabled
      
      * Add TODO for 32-bit support
      
      * Rename more "micro_dev" to "micro"
      
      * Undo rename
      
      We already have `tvm.micro` as a namespace.  Can't have it as a method
      as well.
      
      * Fix failing CI
      
      Thanks to @tqchen for finding this bug.  Emitting ternary operators for
      `min` and `max` causes concurrency bugs in CUDA, so we're moving the
      ternary op emissions from `CodeGenC` to `CodeGenCHost`.
      
      * Address feedback
      
      * Fix lint
      Logan Weber committed
  28. 13 Jul, 2019 1 commit
  29. 11 Jul, 2019 1 commit
  30. 02 Jul, 2019 1 commit
  31. 13 Jun, 2019 1 commit
  32. 24 May, 2019 1 commit
  33. 23 May, 2019 1 commit
  34. 22 May, 2019 1 commit