api_gen_utils.h 4.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/* Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */

#pragma once

#include "paddle/phi/api/include/tensor.h"
W
wanghuancoder 已提交
18
#include "paddle/phi/backends/all_context.h"
19 20 21 22 23 24
#include "paddle/phi/core/compat/convert_utils.h"
#include "paddle/phi/core/dense_tensor.h"
#include "paddle/phi/core/meta_tensor.h"
#include "paddle/phi/core/selected_rows.h"
#include "paddle/phi/core/sparse_coo_tensor.h"
#include "paddle/phi/core/sparse_csr_tensor.h"
J
Jack Zhou 已提交
25
#include "paddle/phi/core/string_tensor.h"
26

27 28 29 30 31 32
namespace phi {
namespace distributed {
class DistTensor;
}  // namespace distributed
}  // namespace phi

33 34 35
namespace paddle {
namespace experimental {

J
Jack Zhou 已提交
36
enum class TensorType { DENSE_TENSOR, SPARSE_CSR, SPARSE_COO, STRING_TENSOR };
37 38 39 40 41

/* ------------------ for input ----------------------- */

std::shared_ptr<phi::DenseTensor> TensorToDenseTensor(const Tensor& tensor);

42
paddle::optional<phi::DenseTensor> TensorToDenseTensor(
43 44
    const paddle::optional<Tensor>& tensor);

45
std::unique_ptr<std::vector<phi::DenseTensor*>> TensorToDenseTensor(
46 47
    const std::vector<Tensor>& tensors);

48 49 50 51 52 53 54
std::vector<const phi::DenseTensor*> TensorToConstDenseTensorPtr(
    const std::vector<Tensor>& tensors);

paddle::optional<std::vector<const phi::DenseTensor*>>
TensorToConstDenseTensorPtr(
    const paddle::optional<std::vector<Tensor>>& tensors);

55 56
std::shared_ptr<phi::SelectedRows> TensorToSelectedRows(const Tensor& tensor);

57 58
paddle::optional<phi::SelectedRows> TensorToSelectedRows(
    const paddle::optional<Tensor>& tensor);
59

J
Jack Zhou 已提交
60 61
std::shared_ptr<phi::StringTensor> TensorToStringTensor(const Tensor& tensor);

Z
zhangkaihuo 已提交
62 63
std::shared_ptr<phi::SparseCooTensor> TensorToSparseCooTensor(
    const Tensor& tensor);
64 65
/* ----------------- for infer_meta --------------------- */

66
phi::MetaTensor MakeMetaTensor(const phi::TensorBase& tensor);
67

68 69
phi::MetaTensor MakeMetaTensor(
    const paddle::optional<phi::DenseTensor>& tensor);
Z
zyfncg 已提交
70

71
std::vector<phi::MetaTensor> MakeMetaTensor(
72
    const std::vector<const phi::DenseTensor*>& tensors);
73

74 75 76
std::vector<phi::MetaTensor> MakeMetaTensor(
    const std::vector<phi::DenseTensor*>& tensors);

Y
YuanRisheng 已提交
77 78 79
std::vector<phi::MetaTensor> MakeMetaTensor(
    const std::vector<const phi::SelectedRows*>& tensors);

80 81
phi::MetaTensor MakeMetaTensor(
    const paddle::optional<phi::SelectedRows>& tensor);
Z
zyfncg 已提交
82

Z
zhangkaihuo 已提交
83 84 85 86 87 88
phi::MetaTensor MakeMetaTensor(
    const paddle::optional<phi::SparseCooTensor>& tensor);

phi::MetaTensor MakeMetaTensor(
    const paddle::optional<phi::SparseCsrTensor>& tensor);

89 90 91
std::vector<phi::MetaTensor> MakeMetaTensor(
    const paddle::optional<std::vector<const phi::DenseTensor*>>& tensors);

Y
YuanRisheng 已提交
92 93 94
std::vector<phi::MetaTensor> MakeMetaTensor(
    const std::vector<const phi::TensorBase*>& tensors);

95 96
/* ------------------ for output ----------------------- */

Z
zyfncg 已提交
97
phi::DenseTensor* SetKernelOutput(Tensor* out);
98 99 100 101

std::vector<phi::DenseTensor*> SetKernelOutput(size_t out_size,
                                               std::vector<Tensor>* out);

102
std::vector<phi::DenseTensor*> SetInplaceVectorKernelOutput(
Z
zyfncg 已提交
103
    size_t out_size, std::vector<Tensor>* out);
104 105

std::vector<phi::DenseTensor*> SetInplaceOptionalVectorKernelOutput(
Z
zyfncg 已提交
106
    size_t out_size, const paddle::optional<std::vector<Tensor>>& out);
107

108 109 110
// For backward api
std::vector<phi::DenseTensor*> SetKernelOutput(std::vector<Tensor*>* out);

Z
zyfncg 已提交
111
phi::SelectedRows* SetSelectedRowsKernelOutput(Tensor* out);
112 113 114

phi::TensorBase* SetSparseKernelOutput(Tensor* out, TensorType type);

Z
zyfncg 已提交
115
phi::TensorBase* SetStringsKernelOutput(Tensor* out, TensorType type);
J
Jack Zhou 已提交
116

W
wanghuancoder 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
phi::DenseTensor* ProcessStrideBackup(phi::DenseTensor** tensor);

std::vector<phi::DenseTensor*> ProcessStrideBackup(
    std::vector<phi::DenseTensor*>* tensor);

phi::SelectedRows* ProcessStrideBackup(phi::SelectedRows** tensor);

void TransStride(phi::DeviceContext* dev_ctx,
                 phi::DenseTensor* from,
                 phi::DenseTensor* to);

void TransStride(phi::DeviceContext* dev_ctx,
                 const std::vector<phi::DenseTensor*>& from,
                 const std::vector<phi::DenseTensor*>& to);

void TransStride(phi::DeviceContext* dev_ctx,
                 phi::SelectedRows* from,
                 phi::SelectedRows* to);

136 137 138 139
void TransStrideLegacy(phi::DeviceContext* dev_ctx,
                       phi::DenseTensor* from,
                       phi::DenseTensor* to);

140 141 142 143 144 145
#ifdef PADDLE_WITH_DISTRIBUTE
/* ------------------ for auto parallel ----------------------- */

phi::distributed::DistTensor* SetKernelDistOutput(Tensor* out);
#endif

146 147
}  // namespace experimental
}  // namespace paddle