Skip to content

directory-structure

所有复杂代码都在c++中实现,python是为了用户接口,但是c++也可以调用python里面的接口

主目录结构

├── 3rdparty 第三方软件库,其中一些以git submodule的形式包含, 包括 HalideIR, rang, dlpack等一些开源软件
├── apps 包含了一些基于TVM的扩展项目,也作为如何使用tvm的例程
├── cmake tvm编译用的cmake
├── conda conda是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换,这里实现了tvm的安装的包装,使得tvm安装更加方便
├── docker 基于docker的tvm快速部署,包含了一系列的dockerfile和安装脚本,能够根据dockerfile直接生成相应的镜像,省去了安装依赖环境的烦恼
├── docs 基于rst的文档,和官网的doc是一样的
├── golang tvm runtime的golang接口
├── include src 目录下的cc文件对应的头文件
├── jvm tvm runtime的java接口
├── nnvm nnvm实现,我们使用relay
├── python 可以理解为软件前端,c++可以理解为软件后端,python实现了对c++代码的封装,可以控制编译流程
├── rust Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言,放在tvm中不知道是要做什么,似乎是不影响我们了解tvm的编译过程
├── src op编译相关的c++代码和runtime部署相关的c++代码
├── tests 应该是测试相关的
├── topi op的实现在这里,包含的compute和schedule实现,实现支持c++和python
├── tutorials 一些demo
├── vta versatile tensor accelerator └── web This folder contains TVM WebAssembly and Javascript backend through Emscripten

详细结构

python

可以理解为软件前端,c++可以理解为软件后端,python实现了对c++代码的封装,可以控制编译流程

├── python
│   └── tvm
│   ├── api_internal.py
│   ├── api.py 生成tensor 转到c++中实现
│   ├── arith.py
│   ├── attrs.py
│   ├── autotvm
│   ├── build_module.py 包含了tvm.build(),利用schedule,input tensor, output tensor, target 来生成tvm.module, 同时包含了tvm.lower(),这是build过程的第一步
│   ├── codegen.py
│   ├── container.py
│   ├── contrib 一些非核心特性的API,类似于一个小工具库,其中包含一些对第三方工具的包装
│   ├── datatype.py
│   ├── error.py
│   ├── exec
│   ├── expr.py
│   ├── _ffi 在这里tvm实现了对python的包装,_LIB实现包含在这里面
│   ├── generic.py
│   ├── hybrid
│   ├── __init_
.py
│   ├── intrin.py
│   ├── ir_builder.py
│   ├── ir_pass.py
│   ├── make.py
│   ├── module.py 实现了tvm.module的定义, module包含了一个编译好的func,可以使用函数调用语法进行调用
│   ├── ndarray.py 实现了NDarray类,但实际上文件的大多数method与ctx有关,用于创建不同的ctx实例,估计后续会有命名优化 │   ├── node.py
│   ├── pyversion.py
│   ├── relay
│   │   ├── backend
│   │   ├── _base.py
│   │   ├── base.py
│   │   ├── _build_module.py
│   │   ├── build_module.py relay 的build入口 │   │   ├── contrib.py
│   │   ├── debug.py
│   │   ├── expr_functor.py
│   │   ├── _expr.py
│   │   ├── expr.py The expression nodes of Relay 以及各种各样的expr
│   │   ├── expr.pyi
│   │   ├── feature.py
│   │   ├── frontend relay前端,包含tensorflow, caffe, mxnet 等网络
│   │   ├── grammar
│   │   ├── image.py
│   │   ├── __init_
.py
│   │   ├── _make.py
│   │   ├── _module.py
│   │   ├── module.py
│   │   ├── _module.pyi
│   │   ├── nn.py
│   │   ├── op
│   │   ├── param_dict.py
│   │   ├── _parser.py
│   │   ├── parser.py
│   │   ├── prelude.py
│   │   ├── prelude.rly
│   │   ├── quantize
│   │   ├── scope_builder.py
│   │   ├── _transform.py
│   │   ├── transform.py
│   │   ├── transform.pyi
│   │   ├── ty.py
│   │   ├── ty.pyi
│   │   └── vision.py
│   ├── rpc
│   ├── schedule.py 包含class schedule的定义,create_schedule通过node机制来实现c++类型到python类型的转换并返回一个schedule对象,c++中也有一个对应的schedule定义
│   ├── stmt.py
│   ├── tag.py
│   ├── target.py
│   ├── tensor_intrin.py
│   ├── tensor.py tensor的抽象,例如A = tvm.placeholder((n,), name='A'), A就是一个tensor, 也包含operation的抽象 tensor具体实现在c++中
│   └── testing.py

src

├── src
│   ├── api c++对上层的接口,每个接口都可以在python端调用,均通过TVM_REGISTER_API进行注册, 在python端通过_api_internal.进行调用
│   │   ├── api_arith.cc
│   │   ├── api_base.cc
│   │   ├── api_codegen.cc
│   │   ├── api_ir.cc
│   │   ├── api_lang.cc 包含创建tensor相关的api接口
│   │   ├── api_pass.cc
│   │   ├── api_schedule.cc
│   │   ├── api_test.cc
│   │   └── dsl_api.cc
│   ├── arithmetic
│   │   ├── analyzer.cc
│   │   ├── bound_deducer.cc
│   │   ├── canonical_simplify.cc
│   │   ├── compute_expr.h
│   │   ├── const_fold.h
│   │   ├── const_int_bound.cc
│   │   ├── detect_linear_equation.cc
│   │   ├── domain_touched.cc
│   │   ├── int_op_overflow.h
│   │   ├── int_set.cc
│   │   ├── int_set.h
│   │   ├── modular_set.cc
│   │   ├── pattern_match.h
│   │   ├── rewrite_simplify.cc
│   │   ├── rewrite_simplify.h
│   │   └── stmt_simplify.cc CDLL │   ├── autotvm
│   │   ├── feature_visitor.cc
│   │   ├── feature_visitor.h
│   │   ├── touch_extractor.cc
│   │   └── touch_extractor.h
│   ├── codegen
│   │   ├── build_common.h
│   │   ├── build_module.cc
│   │   ├── codegen_aocl.cc
│   │   ├── codegen.cc
│   │   ├── codegen_c.cc
│   │   ├── codegen_c.h
│   │   ├── codegen_c_host.cc
│   │   ├── codegen_c_host.h
│   │   ├── codegen_cuda.cc
│   │   ├── codegen_cuda.h
│   │   ├── codegen_metal.cc
│   │   ├── codegen_metal.h
│   │   ├── codegen_opencl.cc
│   │   ├── codegen_opencl.h
│   │   ├── codegen_opengl.cc
│   │   ├── codegen_opengl.h
│   │   ├── codegen_source_base.cc
│   │   ├── codegen_source_base.h
│   │   ├── codegen_vhls.cc
│   │   ├── codegen_vhls.h
│   │   ├── datatype
│   │   │   ├── registry.cc
│   │   │   └── registry.h
│   │   ├── intrin_rule_aocl.cc
│   │   ├── intrin_rule.cc
│   │   ├── intrin_rule_cuda.cc
│   │   ├── intrin_rule.h
│   │   ├── intrin_rule_metal.cc
│   │   ├── intrin_rule_opencl.cc
│   │   ├── intrin_rule_opengl.cc
│   │   ├── intrin_rule_vhls.cc
│   │   ├── llvm
│   │   │   ├── codegen_amdgpu.cc
│   │   │   ├── codegen_arm.cc
│   │   │   ├── codegen_cpu.cc
│   │   │   ├── codegen_cpu.h
│   │   │   ├── codegen_llvm.cc
│   │   │   ├── codegen_llvm.h
│   │   │   ├── codegen_nvptx.cc
│   │   │   ├── codegen_x86_64.cc
│   │   │   ├── intrin_rule_llvm.cc
│   │   │   ├── intrin_rule_llvm.h
│   │   │   ├── intrin_rule_nvptx.cc
│   │   │   ├── intrin_rule_rocm.cc
│   │   │   ├── llvm_common.cc
│   │   │   ├── llvm_common.h
│   │   │   └── llvm_module.cc
│   │   ├── opt
│   │   │   ├── build_aocl_off.cc
│   │   │   ├── build_cuda_off.cc
│   │   │   ├── build_cuda_on.cc
│   │   │   ├── build_metal_off.cc
│   │   │   ├── build_opencl_off.cc
│   │   │   ├── build_opengl_off.cc
│   │   │   ├── build_rocm_off.cc
│   │   │   ├── build_sdaccel_off.cc
│   │   │   └── README
│   │   ├── source_module.cc
│   │   ├── spirv
│   │   │   ├── build_vulkan.cc
│   │   │   ├── codegen_spirv.cc
│   │   │   ├── codegen_spirv.h
│   │   │   ├── intrin_rule_spirv.cc
│   │   │   ├── ir_builder.cc
│   │   │   └── ir_builder.h │   │   └── stackvm
│   │   ├── codegen_stackvm.cc
│   │   └── codegen_stackvm.h
│   ├── common
│   │   ├── arena.h
│   │   ├── base64.h
│   │   ├── pipe.h
│   │   ├── ring_buffer.h
│   │   └── socket.h
│   ├── contrib
│   │   ├── cblas
│   │   │   ├── cblas.cc
│   │   │   └── gemm_common.h
│   │   ├── cublas
│   │   │   ├── cublas.cc
│   │   │   ├── cublas_utils.cc
│   │   │   └── cublas_utils.h
│   │   ├── cudnn
│   │   │   ├── conv_forward.cc
│   │   │   ├── cudnn_utils.cc
│   │   │   └── cudnn_utils.h
│   │   ├── hybrid
│   │   │   ├── codegen_hybrid.cc
│   │   │   └── codegen_hybrid.h
│   │   ├── miopen
│   │   │   ├── conv_forward.cc
│   │   │   ├── miopen_utils.cc
│   │   │   └── miopen_utils.h
│   │   ├── mps
│   │   │   ├── conv.mm
│   │   │   ├── gemm.mm
│   │   │   ├── mps_utils.h
│   │   │   └── mps_utils.mm
│   │   ├── nnpack
│   │   │   ├── convolution.cc
│   │   │   ├── fully_connected.cc
│   │   │   ├── nnpack_utils.cc
│   │   │   └── nnpack_utils.h
│   │   ├── random
│   │   │   ├── mt_random_engine.cc
│   │   │   ├── random.cc
│   │   │   └── sgx_random_engine.cc
│   │   ├── rocblas
│   │   │   └── rocblas.cc
│   │   └── sort
│   │   └── sort.cc
│   ├── lang
│   │   ├── api_registry.cc
│   │   ├── attr_functor.h
│   │   ├── attrs.cc
│   │   ├── buffer.cc
│   │   ├── channel.cc
│   │   ├── data_layout.cc
│   │   ├── expr.cc
│   │   ├── expr_operator.cc
│   │   ├── ir.cc
│   │   ├── lowered_func.cc
│   │   ├── reflection.cc
│   │   ├── target_info.cc
│   │   └── tensor.cc tensor表达的实现 对应python中的tensor | 对应头文件
│   ├── op
│   │   ├── compute_op.cc
│   │   ├── compute_op.h
│   │   ├── cross_thread_reduction.cc
│   │   ├── extern_op.cc
│   │   ├── hybrid_op.cc
│   │   ├── hybrid_op.h
│   │   ├── op_util.cc
│   │   ├── op_util.h
│   │   ├── placeholder_op.cc
│   │   ├── scan_op.cc
│   │   ├── tensor_compute_op.cc
│   │   └── tensorize.cc
│   ├── pass
│   │   ├── arg_binder.cc
│   │   ├── arg_binder.h
│   │   ├── bound_checker.cc
│   │   ├── combine_context_call.cc
│   │   ├── coproc_sync.cc
│   │   ├── detect_device.cc
│   │   ├── inject_copy_intrin.cc
│   │   ├── inject_double_buffer.cc
│   │   ├── inject_prefetch.cc
│   │   ├── inject_virtual_thread.cCDLLc
│   │   ├── inline.cc
│   │   ├── ir_deep_compare.cc
│   │   ├── ir_mutator.cc
│   │   ├── ir_util.cc
│   │   ├── ir_util.h
│   │   ├── ir_visitor.cc
│   │   ├── lift_attr_scope.cc
│   │   ├── loop_partition.cc
│   │   ├── lower_custom_datatypes.cc
│   │   ├── lower_intrin.cc
│   │   ├── lower_thread_allreduce.cc
│   │   ├── lower_tvm_builtin.cc
│   │   ├── lower_warp_memory.cc
│   │   ├── make_api.cc
│   │   ├── narrow_channel_access.cc
│   │   ├── remap_thread_axis.cc
│   │   ├── remove_no_op.cc
│   │   ├── rewrite_unsafe_select.cc
│   │   ├── simple_passes.cc
│   │   ├── split_host_device.cc
│   │   ├── split_pipeline.cc
│   │   ├── ssa.cc
│   │   ├── storage_access.cc
│   │   ├── storage_access.h
│   │   ├── storage_flatten.cc
│   │   ├── storage_rewrite.cc
│   │   ├── storage_sync.cc
│   │   ├── unroll_loop.cc
│   │   ├── vectorize_loop.cc
│   │   ├── verify_gpu_code.cc
│   │   └── verify_memory.cc
│   ├── relay 管理计算图的组件(提供一种计算图的表达,即IR),计算图中的node使用src目录下的一些基础架构进行编译和执行
│   │   ├── backend
│   │   │   ├── build_module.cc
│   │   │   ├── compile_engine.cc
│   │   │   ├── compile_engine.h
│   │   │   ├── graph_plan_memory.cc
│   │   │   ├── graph_runtime_codegen.cc
│   │   │   ├── interpreter.cc
│   │   │   ├── param_dict.cc
│   │   │   ├── param_dict.h
│   │   │   ├── utils.h
│   │   │   └── vm
│   │   │   ├── compiler.cc
│   │   │   ├── inline_primitives.cc
│   │   │   ├── lambda_lift.cc
│   │   │   └── vm.cc
│   │   ├── ir
│   │   │   ├── adt.cc
│   │   │   ├── alpha_equal.cc
│   │   │   ├── base.cc
│   │   │   ├── doc.cc
│   │   │   ├── doc.h
│   │   │   ├── error.cc
│   │   │   ├── expr.cc
│   │   │   ├── expr_functor.cc
│   │   │   ├── hash.cc
│   │   │   ├── module.cc
│   │   │   ├── op.cc
│   │   │   ├── pattern_functor.cc
│   │   │   ├── pretty_printer.cc
│   │   │   ├── type.cc
│   │   │   ├── type_functor.cc
│   │   │   └── type_functor.h
│   │   ├── op
│   │   │   ├── algorithm
│   │   │   │   ├── argsort.cc
│   │   │   │   └── topk.cc
│   │   │   ├── annotation
│   │   │   │   └── annotation.cc
│   │   │   ├── debug.cc
│   │   │   ├── device_copy.cc
│   │   │   ├── image
│   │   │   │   └── resize.cc
│   │   │   ├── nn
│   │   │   │   ├── convolution.cc
│   │   │   │   ├── nn.cc
│   │   │   │   ├── pad.cc
│   │   │   │   ├── pooling.cc
│   │   │   │   └── upsampling.cc
│   │   │   ├── op_common.h
│   │   │   ├── tensor
│   │   │   │   ├── binary.cc
│   │   │   │   ├── reduce.cc
│   │   │   │   ├── transform.cc
│   │   │   │   └── unary.cc
│   │   │   ├── type_relations.cc
│   │   │   ├── type_relations.h
│   │   │   └── vision
│   │   │   ├── multibox_op.cc
│   │   │   ├── nms.cc
│   │   │   ├── rcnn_op.cc
│   │   │   └── yolo.cc
│   │   └── pass
│   │   ├── alter_op_layout.cc
│   │   ├── alter_op_layout.h
│   │   ├── canonicalize_cast.cc
│   │   ├── canonicalize_ops.cc
│   │   ├── combine_parallel_conv2d.cc
│   │   ├── dead_code.cc
│   │   ├── de_duplicate.cc
│   │   ├── dependency_graph.cc
│   │   ├── dependency_graph.h
│   │   ├── device_annotation.cc
│   │   ├── eliminate_common_subexpr.cc
│   │   ├── eta_expand.cc
│   │   ├── expr_subst.cc
│   │   ├── expr_subst.h
│   │   ├── feature.cc
│   │   ├── fold_constant.cc
│   │   ├── fold_scale_axis.cc
│   │   ├── forward_rewrite.cc
│   │   ├── fuse_ops.cc
│   │   ├── gradient.cc
│   │   ├── kind_check.cc
│   │   ├── let_list.h
│   │   ├── mac_count.cc
│   │   ├── match_exhaustion.cc
│   │   ├── partial_eval.cc
│   │   ├── pass_manager.cc
│   │   ├── pass_util.h
│   │   ├── pattern_util.h
│   │   ├── quantize.cc
│   │   ├── quantize.h
│   │   ├── simplify_inference.cc
│   │   ├── to_a_normal_form.cc
│   │   ├── to_cps.cc
│   │   ├── to_graph_normal_form.cc
│   │   ├── type_infer.cc
│   │   ├── type_solver.cc
│   │   ├── type_solver.h
│   │   ├── util.cc
│   │   └── well_formed.cc
│   ├── runtime
│   │   ├── builtin_fp16.cc
│   │   ├── c_dsl_api.cc
│   │   ├── cpu_device_api.cc
│   │   ├── c_runtime_api.cc
│   │   ├── cuda cuda runtime 接口实现
│   │   ├── dsl_api.h
│   │   ├── dso_module.cc
│   │   ├── file_util.cc
│   │   ├── file_util.h
│   │   ├── graph
│   │   ├── meta_data.h
│   │   ├── metal
│   │   ├── module.cc
│   │   ├── module_util.cc
│   │   ├── module_util.h
│   │   ├── ndarray.cc
│   │   ├── opencl opencl runtime 接口实现
│   │   ├── opengl opengl runtime 接口实现 │   │   ├── pack_func.h PackedFunc 定义与实现 │   │   ├── registry.cc PackedFunc 相关 │   │   ├── rocm rocm runtime 接口实现 │   │   ├── rpc rpc runtime接口实现
│   │   ├── runtime_base.h
│   │   ├── sgx
│   │   ├── stackvm
│   │   ├── system_lib_module.cc
│   │   ├── threading_backend.cc
│   │   ├── thread_pool.cc
│   │   ├── thread_storage_scope.h
│   │   ├── vm
│   │   ├── vulkan
│   │   ├── workspace_pool.cc
│   │   └── workspace_pool.h
│   └── schedule
│   ├── auto_inline_elem_wise.cc
│   ├── bound.cc bound实现,bound infrence是推断出所有循环边界和中间缓冲区大小的过程
│   ├── graph.cc 与bound有关
│   ├── graph.h
│   ├── message_passing.cc 与bound有关
│   ├── message_passing.h
│   ├── schedule_dataflow_rewrite.cc
│   ├── schedule_lang.cc
│   └── schedule_ops.cc 定义ScheduleOps(),返回stmt

topi

├── topi
│   ├── include
│   │   └── topi
│   │   ├── broadcast.h
│   │   ├── contrib
│   │   │   ├── cublas.h
│   │   │   └── rocblas.h
│   │   ├── cuda
│   │   │   ├── dense.h
│   │   │   ├── extern.h
│   │   │   ├── injective.h
│   │   │   ├── normalization.h
│   │   │   ├── pooling.h
│   │   │   ├── reduction.h
│   │   │   └── softmax.h
│   │   ├── detail
│   │   │   ├── array_utils.h
│   │   │   ├── broadcast.h
│   │   │   ├── constant_utils.h
│   │   │   ├── extern.h
│   │   │   ├── fuse.h
│   │   │   ├── pad_utils.h
│   │   │   └── ravel_unravel.h
│   │   ├── elemwise.h
│   │   ├── generic
│   │   │   ├── default.h
│   │   │   ├── extern.h
│   │   │   └── injective.h
│   │   ├── image
│   │   │   └── resize.h
│   │   ├── nn
│   │   │   ├── batch_matmul.h
│   │   │   ├── bias_add.h
│   │   │   ├── bnn.h
│   │   │   ├── dense.h
│   │   │   ├── dilate.h
│   │   │   ├── flatten.h
│   │   │   ├── l2_normalize.h
│   │   │   ├── local_response_norm.h
│   │   │   ├── mapping.h
│   │   │   ├── pooling.h
│   │   │   ├── softmax.h
│   │   │   └── upsampling.h
│   │   ├── nn.h
│   │   ├── reduction.h
│   │   ├── rocm
│   │   │   ├── dense.h
│   │   │   └── normalization.h
│   │   ├── tags.h
│   │   ├── transform.h
│   │   ├── vision
│   │   │   └── reorg.h
│   │   └── x86
│   │   ├── bnn.h
│   │   ├── default.h
│   │   └── injective.h
│   ├── python
│   │   ├── setup.py
│   │   └── topi
│   │   ├── arm_cpu
│   │   │   ├── bitserial_conv2d.py
│   │   │   ├── bitserial_dense.py
│   │   │   ├── conv2d.py
│   │   │   ├── conv2d_transpose.py
│   │   │   ├── depthwise_conv2d.py
│   │   │   ├── init.py
│   │   │   └── injective.py
│   │   ├── broadcast.py
│   │   ├── cpp.py
│   │   ├── cuda
│   │   │   ├── batch_matmul.py
│   │   │   ├── conv2d_direct.py
│   │   │   ├── conv2d_hwcn.py
│   │   │   ├── conv2d_int8.py
│   │   │   ├── conv2d.py
│   │   │   ├── conv2d_transpose_nchw.py
│   │   │   ├── conv2d_winograd.py
│   │   │   ├── deformable_conv2d.py
│   │   │   ├── dense.py
│   │   │   ├── depthwise_conv2d.py
│   │   │   ├── extern.py
│   │   │   ├── group_conv2d_nchw.py
│   │   │   ├── init.py
│   │   │   ├── injective.py
│   │   │   ├── nms.py
│   │   │   ├── nn.py
│   │   │   ├── pooling.py
│   │   │   ├── rcnn
│   │   │   │   ├── init.py
│   │   │   │   ├── proposal.py
│   │   │   │   └── pycache
│   │   │   ├── reduction.py
│   │   │   ├── softmax.py
│   │   │   ├── sort.py
│   │   │   ├── ssd
│   │   │   │   ├── init.py
│   │   │   │   ├── multibox.py
│   │   │   │   └── pycache
│   │   │   ├── tensor_intrin.py
│   │   │   └── vision.py
│   │   ├── generic
│   │   │   ├── extern.py
│   │   │   ├── init.py
│   │   │   ├── injective.py
│   │   │   ├── nn.py
│   │   │   ├── sort.py
│   │   │   └── vision.py
│   │   ├── generic_op_impl.py
│   │   ├── hls
│   │   │   ├── init.py
│   │   │   ├── injective.py
│   │   │   ├── nn.py
│   │   │   └── pycache
│   │   ├── image
│   │   │   ├── init.py
│   │   │   └── resize.py
│   │   ├── init.py
│   │   ├── intel_graphics
│   │   │   ├── conv2d.py
│   │   │   ├── init.py
│   │   │   └── pycache
│   │   ├── mali
│   │   │   ├── conv2d.py
│   │   │   ├── dense.py
│   │   │   ├── depthwise_conv2d.py
│   │   │   ├── init.py
│   │   │   └── pycache
│   │   ├── math.py
│   │   ├── nn
│   │   │   ├── batch_matmul.py
│   │   │   ├── bitserial_conv2d.py
│   │   │   ├── bitserial_dense.py
│   │   │   ├── bitserial_util.py
│   │   │   ├── bnn.py
│   │   │   ├── conv2d.py
│   │   │   ├── conv2d_transpose.py
│   │   │   ├── deformable_conv2d.py
│   │   │   ├── dense.py
│   │   │   ├── depthwise_conv2d.py
│   │   │   ├── dilate.py
│   │   │   ├── elemwise.py
│   │   │   ├── flatten.py
│   │   │   ├── init.py
│   │   │   ├── l2_normalize.py
│   │   │   ├── local_response_norm.py
│   │   │   ├── mapping.py
│   │   │   ├── pad.py
│   │   │   ├── pooling.py
│   │   │   ├── softmax.py
│   │   │   ├── upsampling.py
│   │   │   └── util.py
│   │   ├── opengl
│   │   │   ├── conv2d_nchw.py
│   │   │   ├── dense.py
│   │   │   ├── init.py
│   │   │   ├── injective.py
│   │   │   ├── pooling.py
│   │   │   └── softmax.py
│   │   ├── reduction.py
│   │   ├── rocm
│   │   │   ├── conv2d.py
│   │   │   ├── dense.py
│   │   │   ├── init.py
│   │   │   ├── nn.py
│   │   │   └── pycache
│   │   ├── sort.py
│   │   ├── sparse
│   │   │   ├── csrmm.py
│   │   │   ├── csrmv.py
│   │   │   ├── dense.py
│   │   │   ├── init.py
│   │   │   └── pycache
│   │   ├── tag.py
│   │   ├── tensor.py
│   │   ├── testing
│   │   │   ├── batch_matmul.py
│   │   │   ├── bilinear_resize_python.py
│   │   │   ├── conv2d_hwcn_python.py
│   │   │   ├── conv2d_nchw_python.py
│   │   │   ├── conv2d_nhwc_python.py
│   │   │   ├── conv2d_transpose_nchw_python.py
│   │   │   ├── deformable_conv2d_nchw_python.py
│   │   │   ├── depthwise_conv2d_python.py
│   │   │   ├── dilate_python.py
│   │   │   ├── gather_nd_python.py
│   │   │   ├── init.py
│   │   │   ├── l2_normalize_python.py
│   │   │   ├── lrn_python.py
│   │   │   ├── reorg_python.py
│   │   │   ├── roi_align_python.py
│   │   │   ├── roi_pool_python.py
│   │   │   ├── sequence_mask_python.py
│   │   │   ├── slice_axis_python.py
│   │   │   ├── softmax_python.py
│   │   │   ├── strided_slice_python.py
│   │   │   └── upsampling_python.py
│   │   ├── transform.py
│   │   ├── util.py
│   │   ├── vision
│   │   │   ├── init.py
│   │   │   ├── nms.py
│   │   │   ├── rcnn
│   │   │   │   ├── init.py
│   │   │   │   ├── proposal.py
│   │   │   │   ├── roi_align.py
│   │   │   │   └── roi_pool.py
│   │   │   ├── reorg.py
│   │   │   └── ssd
│   │   │   ├── init.py
│   │   │   ├── multibox.py
│   │   │   └── pycache
│   │   └── x86
│   │   ├── batch_matmul.py
│   │   ├── binarize_pack.py
│   │   ├── binary_dense.py
│   │   ├── bitserial_conv2d.py
│   │   ├── bitserial_dense.py
│   │   ├── check_targets.py
│   │   ├── conv2d_avx_1x1.py
│   │   ├── conv2d_avx_common.py
│   │   ├── conv2d.py
│   │   ├── dense.py
│   │   ├── depthwise_conv2d.py
│   │   ├── init.py
│   │   ├── injective.py
│   │   ├── nn.py
│   │   ├── pooling.py
│   │   ├── roi_align.py
│   │   ├── tensor_intrin.py
│   │   └── util.py
│   ├── recipe
│   │   ├── broadcast │   │   │   └── test_broadcast_map.py
│   │   ├── conv
│   │   │   ├── depthwise_conv2d_test.py
│   │   │   ├── test_conv2d_hwcn_map.py
│   │   │   └── test_conv_int8_intel.py
│   │   ├── gemm
│   │   │   ├── android_gemm_square.py
│   │   │   ├── cuda_gemm_square.py
│   │   │   └── gemm_int8.py
│   │   ├── reduce
│   │   │   └── test_reduce_map.py
│   │   └── rnn
│   │   ├── lstm.py
│   │   └── matexp.py
│   ├── src
│   │   └── topi.cc
│   └── tests