MCPcopy Create free account
hub / github.com/PaddlePaddle/Paddle / KernelSelectionErrorMessage

Function KernelSelectionErrorMessage

paddle/phi/core/kernel_factory.cc:584–641  ·  view source on GitHub ↗

return all kernel selection error message of specific kernel_name: 1. If target_key not supports target backend, output "Selected wrong Backend ..." 2. If target_key not supports target datatype, output "Selected wrong DataType ..." 3. `target_key` is still not supported, output all kernel keys of corresponding kernel_name: { (CPU, NCHW, [int8, int16, ...]); (GPU, Undefined(AnyLayout), [float32, f

Source from the content-addressed store, hash-verified

582// ...
583// }
584std::string KernelSelectionErrorMessage(const std::string& kernel_name,
585 const KernelKey& target_key) {
586 PADDLE_ENFORCE_NE(KernelFactory::Instance().kernels().find(kernel_name),
587 KernelFactory::Instance().kernels().end(),
588 common::errors::NotFound(
589 "The kernel `%s` is not registered.", kernel_name));
590
591 // Init data structure
592 bool support_backend = false;
593 bool support_dtype = false;
594 std::unordered_map<std::string, std::vector<std::string>> all_kernel_key;
595 std::unordered_set<std::string> backend_set;
596 std::unordered_set<std::string> dtype_set;
597
598 // Record all kernel information of kernel_name
599 for (auto const& iter : KernelFactory::Instance().kernels()[kernel_name]) {
600 KernelKey kernel_key = iter.first;
601 if (kernel_key.backend() == target_key.backend()) {
602 support_backend = true;
603 if (kernel_key.dtype() == target_key.dtype()) {
604 support_dtype = true;
605 }
606 dtype_set.insert(DataTypeToString(kernel_key.dtype()));
607 }
608 backend_set.insert(
609 paddle::experimental::BackendToString(kernel_key.backend()));
610 all_kernel_key[paddle::experimental::BackendToString(kernel_key.backend()) +
611 ", " + common::DataLayoutToString(kernel_key.layout())]
612 .push_back(DataTypeToString(kernel_key.dtype()));
613 }
614 // 1. If target_key not supports target backend, output "Selected wrong
615 // Backend ..."
616 if (!support_backend) {
617 std::string error_message = paddle::string::join_strings(backend_set, ", ");
618 return "Selected wrong Backend `" +
619 paddle::experimental::BackendToString(target_key.backend()) +
620 "`. Paddle support following Backends: " + error_message + ".";
621 }
622 // 2. If target_key not supports target datatype, output "Selected wrong
623 // DataType ..."
624 if (!support_dtype) {
625 std::string error_message = paddle::string::join_strings(dtype_set, ", ");
626 return "Selected wrong DataType `" + DataTypeToString(target_key.dtype()) +
627 "`. Paddle support following DataTypes: " + error_message + ".";
628 }
629 // 3. `target_key` is still not supported, output all kernel keys of
630 // corresponding kernel_name
631 std::string message = "Currently, paddle support following kernel keys of `" +
632 kernel_name + "`: { ";
633 for (auto& item : all_kernel_key) {
634 std::vector<std::string>& dtype_vec = item.second;
635 message += "(" + item.first + ", [";
636 message += paddle::string::join_strings(dtype_vec, ", ");
637 message += "]); ";
638 }
639 message += "}.";
640 return message;
641}

Callers 1

Calls 12

InstanceFunction · 0.85
BackendToStringFunction · 0.85
DataLayoutToStringFunction · 0.85
join_stringsFunction · 0.85
DataTypeToStringFunction · 0.50
findMethod · 0.45
endMethod · 0.45
backendMethod · 0.45
dtypeMethod · 0.45
insertMethod · 0.45
push_backMethod · 0.45
layoutMethod · 0.45

Tested by

no test coverage detected