return C10Tensor(std::move(impl_));
}
+ bool is_same(const Tensor& other) const noexcept {
+ return impl_ == other.impl_;
+ }
+
Tensor Clone() const {
Tensor x(GetDevice());
x.CopyFrom(*this);
std::vector<int> B_dims;
if (legacy_broadcast) {
- CAFFE_ENFORCE_NE(
- C.getIntrusivePtr(),
- B.getIntrusivePtr(),
+ CAFFE_ENFORCE(
+ !B.is_same(C),
"In-place is allowed only with the first tensor when "
"legacy-broadcasting");
C.ResizeLike(A);
const std::vector<int> C_dims =
caffe2::elementwise_ops_utils::ComputeBinaryBroadcastForwardDims(
A_dims, B_dims);
- if (C.getIntrusivePtr() == A.getIntrusivePtr()) {
+ if (A.is_same(C)) {
CAFFE_ENFORCE_EQ(C_dims, A_dims);
- } else if (C.getIntrusivePtr() == B.getIntrusivePtr()) {
+ } else if (B.is_same(C)) {
CAFFE_ENFORCE_EQ(C_dims, B_dims);
} else {
C.Resize(C_dims);
std::vector<int> B_dims;
if (legacy_broadcast) {
- CAFFE_ENFORCE_NE(
- C.getIntrusivePtr(),
- B.getIntrusivePtr(),
+ CAFFE_ENFORCE(
+ !B.is_same(C),
"In-place is allowed only with the first tensor when "
"legacy-broadcasting");
C.ResizeLike(A);
const std::vector<int> C_dims =
caffe2::elementwise_ops_utils::ComputeBinaryBroadcastForwardDims(
A_dims, B_dims);
- if (C.getIntrusivePtr() == A.getIntrusivePtr()) {
+ if (A.is_same(C)) {
CAFFE_ENFORCE_EQ(C_dims, A_dims);
- } else if (C.getIntrusivePtr() == B.getIntrusivePtr()) {
+ } else if (B.is_same(C)) {
CAFFE_ENFORCE_EQ(C_dims, B_dims);
} else {
C.Resize(C_dims);
const C10Tensor& output_) {
Tensor input(input_);
Tensor output(output_);
- if (output.getIntrusivePtr() != input.getIntrusivePtr()) {
+ if (!output.is_same(input)) {
output.CopyFrom(input);
}
}