| 1402 | } |
| 1403 | |
| 1404 | bool OperatorWithKernel::SupportCustomDevice() const { |
| 1405 | #ifdef PADDLE_WITH_CUSTOM_DEVICE |
| 1406 | auto phi_kernels = phi::KernelFactory::Instance().SelectKernelMap( |
| 1407 | phi::TransToPhiKernelName(type_)); |
| 1408 | auto has_phi_kernel = |
| 1409 | std::any_of(phi_kernels.begin(), |
| 1410 | phi_kernels.end(), |
| 1411 | [](phi::KernelKeyMap::const_reference kern_pair) { |
| 1412 | return phi::is_custom_place( |
| 1413 | phi::TransToPhiPlace(kern_pair.first.backend())); |
| 1414 | }); |
| 1415 | if (has_phi_kernel) { |
| 1416 | return true; |
| 1417 | } else { |
| 1418 | auto kernel_iter = OperatorWithKernel::AllOpKernels().find(type_); |
| 1419 | if (kernel_iter == OperatorWithKernel::AllOpKernels().end()) { |
| 1420 | return false; |
| 1421 | } else { |
| 1422 | auto& op_kernels = kernel_iter->second; |
| 1423 | return std::any_of(op_kernels.begin(), |
| 1424 | op_kernels.end(), |
| 1425 | [this](OpKernelMap::const_reference kern_pair) { |
| 1426 | return phi::is_custom_place(kern_pair.first.place_); |
| 1427 | }); |
| 1428 | } |
| 1429 | } |
| 1430 | #else |
| 1431 | PADDLE_THROW(common::errors::PreconditionNotMet( |
| 1432 | "should not call OperatorWithKernel::SupportCustomDevice() when not " |
| 1433 | "compiled with " |
| 1434 | "CustomDevice support.")); |
| 1435 | return false; |
| 1436 | #endif |
| 1437 | } |
| 1438 | |
| 1439 | bool OperatorWithKernel::SupportsONEDNN(const phi::DataType data_type) const { |
| 1440 | auto phi_kernels = phi::KernelFactory::Instance().SelectKernelMap( |
no test coverage detected