Skip to content

Commit f23f21d

Browse files
Mikhail Zolotukhinfacebook-github-bot
Mikhail Zolotukhin
authored andcommitted
[TensorExpr] Remove 'Placeholder' class. (pytorch#64887)
Summary: Pull Request resolved: pytorch#64887 BufHandle has exactly the same functionality and should be used instead. Differential Revision: D30889483 D30889483 Test Plan: Imported from OSS Reviewed By: navahgar Pulled By: ZolotukhinM fbshipit-source-id: 365fe8e396731b88920535a3de96bd3301aaa3f3
1 parent 199031c commit f23f21d

35 files changed

+640
-807
lines changed

benchmarks/cpp/tensorexpr/bench_approx.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ void optimizePointwise(tensorexpr::LoopNest* ln, tensorexpr::Tensor target) {
3030

3131
static void relu_nnc(benchmark::State& state) {
3232
auto N = VarHandle("N", kInt);
33-
Placeholder A("A", kFloat, {N});
33+
BufHandle A("A", {N}, kFloat);
3434
auto clamp = 0;
3535
torch::jit::tensorexpr::Tensor B = Compute("B", {N}, [&](const VarHandle& i){
3636
auto A_elem = [&]() {
@@ -64,7 +64,7 @@ static void relu_nnc(benchmark::State& state) {
6464

6565
static void log_nnc_sleef(benchmark::State& state) {
6666
auto N = VarHandle("N", kInt);
67-
Placeholder A("A", kFloat, {N});
67+
BufHandle A("A", {N}, kFloat);
6868
torch::jit::tensorexpr::Tensor B =
6969
Compute("B", {N}, [&](const VarHandle& i) {
7070
return log(A.load(i));
@@ -93,7 +93,7 @@ static void log_nnc_sleef(benchmark::State& state) {
9393

9494
static void log_nnc_fast(benchmark::State& state) {
9595
auto N = VarHandle("N", kInt);
96-
Placeholder A("A", kFloat, {N});
96+
BufHandle A("A", {N}, kFloat);
9797
torch::jit::tensorexpr::Tensor B =
9898
Compute("B", {N}, [&](const VarHandle& i) {
9999
return fast_log(A.load(i));
@@ -122,7 +122,7 @@ static void log_nnc_fast(benchmark::State& state) {
122122

123123
static void log_nnc_vml(benchmark::State& state) {
124124
auto N = VarHandle("N", kInt);
125-
Placeholder A("A", kFloat, {N});
125+
BufHandle A("A", {N}, kFloat);
126126
torch::jit::tensorexpr::Tensor B =
127127
Compute("B", {N}, [&](const VarHandle& i) {
128128
return log_vml(A.load(i));
@@ -161,7 +161,7 @@ static void log_aten(benchmark::State& state) {
161161

162162
static void logit_nnc_sleef(benchmark::State& state) {
163163
auto N = VarHandle("N", kInt);
164-
Placeholder A("A", kFloat, {N});
164+
BufHandle A("A", {N}, kFloat);
165165
auto clamp = 1e-6f;
166166
tensorexpr::Tensor B = Compute("B", {N}, [&](const VarHandle& i) {
167167
auto A_elem = [&]() {
@@ -197,7 +197,7 @@ static void logit_nnc_sleef(benchmark::State& state) {
197197

198198
static void logit_nnc_fast(benchmark::State& state) {
199199
auto N = VarHandle("N", kInt);
200-
Placeholder A("A", kFloat, {N});
200+
BufHandle A("A", {N}, kFloat);
201201
auto clamp = 1e-6f;
202202
tensorexpr::Tensor B = Compute("B", {N}, [&](const VarHandle& i) {
203203
auto A_elem = [&]() {
@@ -233,7 +233,7 @@ static void logit_nnc_fast(benchmark::State& state) {
233233

234234
static void logit_nnc_vml(benchmark::State& state) {
235235
auto N = VarHandle("N", kInt);
236-
Placeholder A("A", kFloat, {N});
236+
BufHandle A("A", {N}, kFloat);
237237
auto clamp = 1e-6f;
238238
tensorexpr::Tensor B = Compute("B", {N}, [&](const VarHandle& i) {
239239
auto A_elem = [&]() {
@@ -310,7 +310,7 @@ static void logit_caffe2(benchmark::State& state) {
310310

311311
static void tanh_nnc_fast(benchmark::State& state) {
312312
auto N = VarHandle("N", kInt);
313-
Placeholder A("A", kFloat, {N});
313+
BufHandle A("A", {N}, kFloat);
314314
torch::jit::tensorexpr::Tensor B =
315315
Compute("B", {N}, [&](const VarHandle& i) {
316316
return fast_tanh(A.load(i));

benchmarks/cpp/tensorexpr/bench_batchnorm.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ BENCHMARK_DEFINE_F(BatchNorm, ATen)(benchmark::State& state) {
7575

7676
BENCHMARK_DEFINE_F(BatchNorm, NNC)(benchmark::State& state) {
7777

78-
Placeholder input("input", kFloat, {N_, C_, H_, W_});
79-
Placeholder weight("weight", kFloat, {C_});
80-
Placeholder bias("bias", kFloat, {C_});
81-
Placeholder mean("mean", kFloat, {C_});
82-
Placeholder var("var", kFloat, {C_});
78+
BufHandle input("input", {N_, C_, H_, W_}, kFloat);
79+
BufHandle weight("weight", {C_}, kFloat);
80+
BufHandle bias("bias", {C_}, kFloat);
81+
BufHandle mean("mean", {C_}, kFloat);
82+
BufHandle var("var", {C_}, kFloat);
8383
VarHandle eps("eps", kFloat);
8484

8585
using axis = const VarHandle&;
@@ -137,11 +137,11 @@ BENCHMARK_DEFINE_F(BatchNorm, ATenRelu)(benchmark::State& state) {
137137

138138
BENCHMARK_DEFINE_F(BatchNorm, NNCRelu)(benchmark::State& state) {
139139

140-
Placeholder input("input", kFloat, {N_, C_, H_, W_});
141-
Placeholder weight("weight", kFloat, {C_});
142-
Placeholder bias("bias", kFloat, {C_});
143-
Placeholder mean("mean", kFloat, {C_});
144-
Placeholder var("var", kFloat, {C_});
140+
BufHandle input("input", {N_, C_, H_, W_}, kFloat);
141+
BufHandle weight("weight", {C_}, kFloat);
142+
BufHandle bias("bias", {C_}, kFloat);
143+
BufHandle mean("mean", {C_}, kFloat);
144+
BufHandle var("var", {C_}, kFloat);
145145
VarHandle eps("eps", kFloat);
146146

147147
using axis = const VarHandle&;

benchmarks/cpp/tensorexpr/bench_compile.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ static void BM_CompileSwish(benchmark::State& state) {
1111
for (auto _ : state) {
1212
constexpr int N = 512;
1313
te::VarHandle n("n", te::kInt);
14-
te::Placeholder A(te::BufHandle("A", {N}, te::kFloat));
14+
te::BufHandle A("A", {N}, te::kFloat);
1515
te::Tensor relu = te::Compute("relu", {{n, "n"}}, [&](const te::VarHandle& i) {
1616
return te::Max::make(A.load(i), 0.f, false);
1717
});
@@ -40,7 +40,7 @@ static void BM_CompileSwish(benchmark::State& state) {
4040
static void BM_CompileSwishLLVMOnly(benchmark::State& state) {
4141
constexpr int N = 512;
4242
te::VarHandle n("n", te::kInt);
43-
te::Placeholder A(te::BufHandle("A", {N}, te::kFloat));
43+
te::BufHandle A("A", {N}, te::kFloat);
4444
te::Tensor relu = te::Compute("relu", {{n, "n"}}, [&](const te::VarHandle& i) {
4545
return te::Max::make(A.load(i), 0.f, false);
4646
});

benchmarks/cpp/tensorexpr/bench_concat.cpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ class ConcatBench : public benchmark::Fixture {
5151
size_t num_inputs = inputs_.size();
5252
size_t num_dims = 2;
5353

54-
std::vector<Placeholder> inputs;
54+
std::vector<BufHandle> inputs;
5555
for (size_t i = 0; i < num_inputs; ++i) {
56-
inputs.emplace_back(Placeholder(
56+
inputs.emplace_back(BufHandle(
5757
"input" + std::to_string(i),
58-
kFloat,
59-
{input_sizes_[i][0], input_sizes_[i][1]}));
58+
{input_sizes_[i][0], input_sizes_[i][1]},
59+
kFloat));
6060
}
6161

6262
Tensor output = Compute(
@@ -112,14 +112,14 @@ class ConcatBench : public benchmark::Fixture {
112112
{alloc<IntImm>(output_size_[0]), alloc<IntImm>(output_size_[1])}),
113113
kFloat);
114114

115-
std::vector<Placeholder> inputs;
115+
std::vector<BufHandle> inputs;
116116
std::vector<StmtPtr> for_stmts(num_inputs);
117117
int cumulative_input_sizes = 0;
118118
for (size_t i = 0; i < num_inputs; ++i) {
119-
inputs.emplace_back(Placeholder(
119+
inputs.emplace_back(BufHandle(
120120
"input" + std::to_string(i),
121-
kFloat,
122-
{input_sizes_[i][0], input_sizes_[i][1]}));
121+
{input_sizes_[i][0], input_sizes_[i][1]},
122+
kFloat));
123123
std::vector<VarPtr> for_vars(num_inputs);
124124
for (size_t d = 0; d < num_dims; ++d) {
125125
for_vars[d] =
@@ -131,7 +131,7 @@ class ConcatBench : public benchmark::Fixture {
131131
{for_vars[0],
132132
alloc<Add>(for_vars[1], alloc<IntImm>(cumulative_input_sizes))}),
133133
alloc<Load>(
134-
inputs[i].data(),
134+
inputs[i].node(),
135135
std::vector<ExprPtr>({for_vars[0], for_vars[1]})));
136136
auto for_st = alloc<For>(
137137
for_vars[0],

benchmarks/cpp/tensorexpr/bench_gemm.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ BENCHMARK_DEFINE_F(Gemm, Torch)(benchmark::State& state) {
4141

4242
BENCHMARK_DEFINE_F(Gemm, TensorExprNoopt)(benchmark::State& state) {
4343

44-
te::Placeholder AP(te::BufHandle("A", {M, K}, te::kFloat));
45-
te::Placeholder BP(te::BufHandle("B", {K, N}, te::kFloat));
44+
te::BufHandle AP("A", {M, K}, te::kFloat);
45+
te::BufHandle BP("B", {K, N}, te::kFloat);
4646
te::Tensor CT = te::Reduce(
4747
"gemm",
4848
{{M, "M"}, {N, "N"}},
@@ -64,8 +64,8 @@ BENCHMARK_DEFINE_F(Gemm, TensorExprNoopt)(benchmark::State& state) {
6464

6565
BENCHMARK_DEFINE_F(Gemm, TensorExprTile32x32)(benchmark::State& state) {
6666

67-
te::Placeholder AP(te::BufHandle("A", {M, K}, te::kFloat));
68-
te::Placeholder BP(te::BufHandle("B", {K, N}, te::kFloat));
67+
te::BufHandle AP("A", {M, K}, te::kFloat);
68+
te::BufHandle BP("B", {K, N}, te::kFloat);
6969
te::Tensor CT = te::Reduce(
7070
"gemm",
7171
{{M, "M"}, {N, "N"}},
@@ -123,8 +123,8 @@ BENCHMARK_DEFINE_F(Gemm, TensorExprTile32x32)(benchmark::State& state) {
123123

124124
BENCHMARK_DEFINE_F(Gemm, TensorExprTile4x16)(benchmark::State& state) {
125125

126-
te::Placeholder AP(te::BufHandle("A", {M, K}, te::kFloat));
127-
te::Placeholder BP(te::BufHandle("B", {K, N}, te::kFloat));
126+
te::BufHandle AP("A", {M, K}, te::kFloat);
127+
te::BufHandle BP("B", {K, N}, te::kFloat);
128128
te::Tensor CT = te::Reduce(
129129
"gemm",
130130
{{M, "M"}, {N, "N"}},
@@ -182,8 +182,8 @@ BENCHMARK_DEFINE_F(Gemm, TensorExprTile4x16)(benchmark::State& state) {
182182

183183
BENCHMARK_DEFINE_F(Gemm, TensorExprTile4x16VecUnroll)(benchmark::State& state) {
184184

185-
te::Placeholder AP(te::BufHandle("A", {M, K}, te::kFloat));
186-
te::Placeholder BP(te::BufHandle("B", {K, N}, te::kFloat));
185+
te::BufHandle AP("A", {M, K}, te::kFloat);
186+
te::BufHandle BP("B", {K, N}, te::kFloat);
187187
te::Tensor CT = te::Reduce(
188188
"gemm",
189189
{{M, "M"}, {N, "N"}},
@@ -249,8 +249,8 @@ BENCHMARK_DEFINE_F(Gemm, TensorExprTile4x16VecUnroll)(benchmark::State& state) {
249249

250250
BENCHMARK_DEFINE_F(Gemm, TensorExprTile4x16Cache)(benchmark::State& state) {
251251

252-
te::Placeholder AP(te::BufHandle("A", {M, K}, te::kFloat));
253-
te::Placeholder BP(te::BufHandle("B", {K, N}, te::kFloat));
252+
te::BufHandle AP("A", {M, K}, te::kFloat);
253+
te::BufHandle BP("B", {K, N}, te::kFloat);
254254
te::Tensor CT = te::Reduce(
255255
"gemm",
256256
{{M, "M"}, {N, "N"}},

benchmarks/cpp/tensorexpr/bench_parallel.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class ParallelAdd : public benchmark::Fixture {
3535
};
3636

3737
BENCHMARK_DEFINE_F(ParallelAdd, Simple)(benchmark::State& state) {
38-
Placeholder a_buf("a", kFloat, {M});
39-
Placeholder b_buf("b", kFloat, {M});
38+
BufHandle a_buf("a", {M}, kFloat);
39+
BufHandle b_buf("b", {M}, kFloat);
4040
Tensor c_tensor = Compute(
4141
"c", {{M, "m"}}, [&](const VarHandle& m) {
4242
return a_buf.load(m) + b_buf.load(m);

benchmarks/cpp/tensorexpr/bench_reduce.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ BENCHMARK_DEFINE_F(Reduce1D, TeNaive)(benchmark::State& state) {
220220

221221
int M = A.numel();
222222

223-
te::Placeholder AP(te::BufHandle("A", {M}, te::kFloat));
223+
te::BufHandle AP("A", {M}, te::kFloat);
224224
te::Tensor BT = te::Reduce(
225225
"reduce_full",
226226
{{1, "N"}},
@@ -252,7 +252,7 @@ BENCHMARK_DEFINE_F(Reduce1D, TeSplitTail)(benchmark::State& state) {
252252

253253
int M = A.numel();
254254

255-
te::Placeholder AP(te::BufHandle("A", {M}, te::kFloat));
255+
te::BufHandle AP("A", {M}, te::kFloat);
256256
te::Tensor BT = te::Reduce(
257257
"reduce_full",
258258
{{1, "N"}},
@@ -292,7 +292,7 @@ BENCHMARK_DEFINE_F(Reduce1D, TeSplitMask)(benchmark::State& state) {
292292

293293
int M = A.numel();
294294

295-
te::Placeholder AP(te::BufHandle("A", {M}, te::kFloat));
295+
te::BufHandle AP("A", {M}, te::kFloat);
296296
te::Tensor BT = te::Reduce(
297297
"reduce_full",
298298
{{1, "N"}},
@@ -334,7 +334,7 @@ BENCHMARK_DEFINE_F(Reduce1D, TeRfactorV1)(benchmark::State& state) {
334334
const int kChunkSize = 8;
335335
TORCH_CHECK(M % kChunkSize == 0);
336336

337-
te::Placeholder AP(te::BufHandle("A", {M}, te::kFloat));
337+
te::BufHandle AP("A", {M}, te::kFloat);
338338
te::Tensor BT = te::Reduce(
339339
"reduce_full",
340340
{},
@@ -384,8 +384,8 @@ BENCHMARK_DEFINE_F(Reduce1D, Op)(benchmark::State& state) {
384384
const int M = A.numel();
385385
const int kChunkSize = 8;
386386

387-
te::Placeholder a("A", te::kFloat, {M});
388-
te::Tensor b = te::computeSum({a.handle(), te::IntList({0}), false}, at::kFloat);
387+
te::BufHandle a("A", {M}, te::kFloat);
388+
te::Tensor b = te::computeSum({a, te::IntList({0}), false}, at::kFloat);
389389
te::LoopNest nest({b});
390390

391391
auto loops = nest.getLoopStmtsFor(b);
@@ -446,8 +446,8 @@ BENCHMARK_REGISTER_F(Reduce2DCol, Torch)
446446

447447
BENCHMARK_DEFINE_F(Reduce2DCol, OpSchedule)(benchmark::State& state) {
448448
constexpr int kCacheSize = 1 << 12;
449-
te::Placeholder a("A", te::kFloat, {M, N});
450-
te::Tensor b = te::computeSum({a.handle(), te::IntList({0}), false}, at::kFloat);
449+
te::BufHandle a("A", {M, N}, te::kFloat);
450+
te::Tensor b = te::computeSum({a, te::IntList({0}), false}, at::kFloat);
451451
te::LoopNest nest({b});
452452

453453
auto sch = state.range(2);
@@ -552,8 +552,8 @@ BENCHMARK_REGISTER_F(Reduce2DRow, Hand)
552552

553553
BENCHMARK_DEFINE_F(Reduce2DRow, OpSchedule)(benchmark::State& state) {
554554
constexpr int kChunkSize = 8;
555-
te::Placeholder a("A", te::kFloat, {M, N});
556-
te::Tensor b = te::computeSum({a.handle(), te::IntList({1}), false}, at::kFloat);
555+
te::BufHandle a("A", {M, N}, te::kFloat);
556+
te::Tensor b = te::computeSum({a, te::IntList({1}), false}, at::kFloat);
557557
te::LoopNest nest({b});
558558

559559
auto sch = state.range(2);

benchmarks/cpp/tensorexpr/bench_signed_log1p.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ class SignedLog1pBench : public benchmark::Fixture {
4242
}
4343

4444
void runNNC(benchmark::State& state) {
45-
Placeholder input_ph(
46-
"input", kFloat, {input_size_int_[0], input_size_int_[1]});
45+
BufHandle input_ph(
46+
"input", {input_size_int_[0], input_size_int_[1]}, kFloat);
4747
Tensor abs_result = Compute(
4848
"aten_abs",
4949
{{input_size_int_[0], "M"}, {input_size_int_[1], "N"}},
@@ -56,8 +56,8 @@ class SignedLog1pBench : public benchmark::Fixture {
5656
[&](const VarHandle& m, const VarHandle& n) {
5757
return log1p(abs_result.load(m, n));
5858
});
59-
Tensor sign_result = computeSign(
60-
{input_ph.handle()}, {input_size_int_[0], input_size_int_[1]});
59+
Tensor sign_result =
60+
computeSign({input_ph}, {input_size_int_[0], input_size_int_[1]});
6161
Tensor output = Compute(
6262
"aten_mul",
6363
{{input_size_int_[0], "M"}, {input_size_int_[1], "N"}},
@@ -90,8 +90,8 @@ class SignedLog1pBench : public benchmark::Fixture {
9090
}
9191

9292
void runNNCLogVml(benchmark::State& state) {
93-
Placeholder input_ph(
94-
"input", kFloat, {input_size_int_[0], input_size_int_[1]});
93+
BufHandle input_ph(
94+
"input", {input_size_int_[0], input_size_int_[1]}, kFloat);
9595
Tensor abs_result = Compute(
9696
"aten_abs",
9797
{{input_size_int_[0], "M"}, {input_size_int_[1], "N"}},
@@ -104,8 +104,8 @@ class SignedLog1pBench : public benchmark::Fixture {
104104
[&](const VarHandle& m, const VarHandle& n) {
105105
return log_vml(abs_result.load(m, n) + ExprHandle(1));
106106
});
107-
Tensor sign_result = computeSign(
108-
{input_ph.handle()}, {input_size_int_[0], input_size_int_[1]});
107+
Tensor sign_result =
108+
computeSign({input_ph}, {input_size_int_[0], input_size_int_[1]});
109109
Tensor output = Compute(
110110
"aten_mul",
111111
{{input_size_int_[0], "M"}, {input_size_int_[1], "N"}},

test/cpp/tensorexpr/test_approx.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ std::string diffs(const at::Tensor& a, const at::Tensor& b) {
3131

3232
TEST(Approx, log_vml) {
3333
te::VarHandle N("N", te::kInt);
34-
te::Placeholder A("A", te::kFloat, {N});
34+
te::BufHandle A("A", {N}, te::kFloat);
3535
te::Tensor B = te::Compute(
3636
"B", {N}, [&](const te::VarHandle& i) { return log_vml(A.load(i)); });
3737

0 commit comments

Comments
 (0)