| 165 | const std::vector<phi::DenseTensor>& tensor); |
| 166 | |
| 167 | inline bool NeedTransformPlace(const phi::Place& src_place, |
| 168 | const Backend& target, |
| 169 | const TransformFlag& transform_flag) { |
| 170 | // NOTE(dev): The default value of TransformFlag is True, if it is set with |
| 171 | // False |
| 172 | // somewhere such as ops.yaml or backward.yaml that means we should skip data |
| 173 | // transform. Because "stop_transform_" has highest priority. |
| 174 | if (!transform_flag.need_trans_backend()) { |
| 175 | return false; |
| 176 | } |
| 177 | |
| 178 | #if defined(PADDLE_WITH_CUDA) || defined(PADDLE_WITH_HIP) |
| 179 | bool ret = src_place.GetType() == AllocationType::GPUPINNED || |
| 180 | (target != Backend::ALL_BACKEND && |
| 181 | phi::TransToPhiBackend(src_place) != |
| 182 | (target != Backend::GPUDNN ? target : Backend::GPU)); |
| 183 | #elif defined(PADDLE_WITH_XPU) |
| 184 | bool ret = src_place.GetType() == AllocationType::XPUPINNED || |
| 185 | (target != Backend::ALL_BACKEND && |
| 186 | phi::TransToPhiBackend(src_place) != target); |
| 187 | #elif defined(PADDLE_WITH_IPU) |
| 188 | bool ret = target != Backend::ALL_BACKEND && |
| 189 | phi::TransToPhiBackend(src_place) != target; |
| 190 | #elif defined(PADDLE_WITH_CUSTOM_DEVICE) |
| 191 | bool ret = target != Backend::ALL_BACKEND; |
| 192 | if (target == Backend::CUSTOM) { |
| 193 | ret = ret && !is_custom_place(src_place); |
| 194 | } else { |
| 195 | ret = |
| 196 | ret && phi::TransToPhiBackend(src_place) != |
| 197 | (target != Backend::GPUDNN ? target |
| 198 | : Backend::DEFAULT_CUSTOM_DEVICE); |
| 199 | } |
| 200 | #else |
| 201 | bool ret = false; |
| 202 | #endif |
| 203 | |
| 204 | #ifdef PADDLE_WITH_DNNL |
| 205 | if (target == Backend::ONEDNN) { |
| 206 | ret = src_place.GetType() != AllocationType::CPU; |
| 207 | } |
| 208 | #endif |
| 209 | return ret; |
| 210 | } |
| 211 | |
| 212 | /* ------------------ for auto parallel ----------------------- */ |
| 213 |
no test coverage detected