/
usr
/
local
/
lib64
/
python3.6
/
site-packages
/
torch
/
include
/
torch
/
csrc
/
jit
/
tensorexpr
/
/usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/jit/tensorexpr
mkdir
upload
Name
Size
Mode
Actions
operators/
-
0755
rm
analysis.h
5888
0644
edit
dl
rm
block_codegen.h
4211
0644
edit
dl
rm
bounds_inference.h
2230
0644
edit
dl
rm
bounds_overlap.h
3329
0644
edit
dl
rm
codegen.h
6402
0644
edit
dl
rm
cpp_codegen.h
2278
0644
edit
dl
rm
cpp_intrinsics.h
719
0644
edit
dl
rm
cuda_codegen.h
7782
0644
edit
dl
rm
cuda_random.h
2642
0644
edit
dl
rm
dim_arg.h
884
0644
edit
dl
rm
eval.h
9639
0644
edit
dl
rm
exceptions.h
3253
0644
edit
dl
rm
expr.h
11588
0644
edit
dl
rm
external_functions.h
1274
0644
edit
dl
rm
external_functions_registry.h
2343
0644
edit
dl
rm
fwd_decls.h
2806
0644
edit
dl
rm
graph_opt.h
2553
0644
edit
dl
rm
half_support.h
5038
0644
edit
dl
rm
hash_provider.h
7930
0644
edit
dl
rm
intrinsic_symbols.h
420
0644
edit
dl
rm
ir.h
22622
0644
edit
dl
rm
ir_cloner.h
2069
0644
edit
dl
rm
ir_mutator.h
2010
0644
edit
dl
rm
ir_printer.h
3693
0644
edit
dl
rm
ir_simplifier.h
15090
0644
edit
dl
rm
ir_verifier.h
1240
0644
edit
dl
rm
ir_visitor.h
1825
0644
edit
dl
rm
kernel.h
9210
0644
edit
dl
rm
llvm_codegen.h
3180
0644
edit
dl
rm
llvm_jit.h
1965
0644
edit
dl
rm
loopnest.h
21599
0644
edit
dl
rm
mem_dependency_checker.h
13003
0644
edit
dl
rm
reduction.h
6742
0644
edit
dl
rm
registerizer.h
12498
0644
edit
dl
rm
stmt.h
21138
0644
edit
dl
rm
tensor.h
7640
0644
edit
dl
rm
tensorexpr_init.h
268
0644
edit
dl
rm
types.h
3880
0644
edit
dl
rm
unique_name_manager.h
940
0644
edit
dl
rm
var_substitutor.h
1753
0644
edit
dl
rm
Edit:
/usr/local/lib64/python3.6/site-packages/torch/include/torch/csrc/jit/tensorexpr/block_codegen.h
(4211B)
#pragma once #include <string> #include <unordered_map> #include <unordered_set> #include <ATen/ATen.h> #include <torch/csrc/jit/resource_guard.h> #include <torch/csrc/jit/tensorexpr/analysis.h> #include <torch/csrc/jit/tensorexpr/codegen.h> #include <torch/csrc/jit/tensorexpr/ir.h> #include <torch/csrc/jit/tensorexpr/ir_printer.h> #include <torch/csrc/jit/tensorexpr/ir_visitor.h> #include <torch/csrc/jit/tensorexpr/unique_name_manager.h> namespace torch { namespace jit { namespace tensorexpr { // A class that analyzes the given program relevant for Block backend. class BlockAnalysis : public IRVisitor { public: bool is_buf_store_target(BufPtr buf) const { return store_targets_.count(buf) > 0; } const std::unordered_set<BufPtr>& loads() const { return loads_; } const std::unordered_set<BufPtr>& stores() const { return store_targets_; } int block_size() const { return block_size_; } bool areBufsInMap(const std::unordered_set<BufPtr>& bufs) const; BufPtr getMultiDimBuf(BufPtr buf) const; std::string getInputName(BufPtr buf) const; std::string getFlatInputName(BufPtr buf) const { return getInputName(buf) + "_flat"; } std::unordered_map<std::string, BufPtr> getBufferMap() const { return map_input_to_tensor_bufs_; } private: void visit(StorePtr v) override; void visit(LoadPtr v) override; void visit(ForPtr v) override; std::unordered_map<std::string, BufPtr> map_input_to_tensor_bufs_; std::unordered_set<BufPtr> store_targets_; std::unordered_set<BufPtr> loads_; int block_size_ = 32; }; // A class that overrides the underlying IRPrinter to produce Block. class BlockPrinter : public IRPrinter { public: BlockPrinter(std::ostream* os, BlockAnalysis* block_analysis) : IRPrinter(*os), block_analysis_(block_analysis) {} using IRPrinter::name_manager; using IRPrinter::visit; private: BlockAnalysis* block_analysis_; std::unordered_map<std::string, int> dim_values_map; std::vector<std::string> dim_names = {"N", "H", "W", "C"}; std::vector<std::string> flat_dim_names = {"N", "NH", "NHW", "NHWC"}; void PrintTensorInfo(const std::unordered_set<BufPtr>& bufs); void PrintArguments(const std::unordered_set<BufPtr>& bufs); void PrintBufferInfo(const std::unordered_set<BufPtr>& bufs); void PrintDistribution(const std::unordered_set<BufPtr>& bufs); void PrintLoop(const std::unordered_set<BufPtr>& bufs, bool block_idx = true); void PrintReshapeInfo( const std::unordered_set<BufPtr>& bufs, bool reverse = false); void PrintDMAs(const std::unordered_set<BufPtr>& bufs); void PrintAdjustBuffers(const std::unordered_set<BufPtr>& bufs); void visit(ForPtr v) override; void visit(LoadPtr v) override; void visit(StorePtr v) override; void visit(BlockPtr v) override; void visit(AddPtr v) override; void visit(MulPtr v) override; }; class TORCH_API BlockCodeGen : public CodeGen { public: template <typename... Ts> /* implicit */ BlockCodeGen(StmtPtr stmt, Ts... ts) : CodeGen( stmt, std::vector<BufferArg>({BufferArg(ts)...}), at::Device(at::kCPU)) { Initialize(); } BlockCodeGen( StmtPtr stmt, const std::vector<BufferArg>& buffer_args, at::Device device = at::Device(at::kCPU), const std::string& kernel_func_name = "func") : CodeGen(stmt, buffer_args, device, kernel_func_name) { Initialize(); } ~BlockCodeGen() override; void call(const std::vector<CallArg>& args) override; void call_raw(const std::vector<void*>& args) override; void Initialize(); std::string getCodeText(const std::string& attr = "") override { return oss_.str(); } private: UniqueNameManager* name_manager() { if (!printer_) { throw std::runtime_error("Null IRPrinter is not expected"); } return printer_->name_manager(); } std::ostream& os() { return printer_->os(); } std::ostringstream oss_; std::unique_ptr<BlockPrinter> printer_; std::unique_ptr<BlockAnalysis> block_analysis_; std::string GetUniqueFuncName(const std::string& func_prefix); }; } // namespace tensorexpr } // namespace jit } // namespace torch
Save
cmd:
run