| 75 | } |
| 76 | |
| 77 | Status ProtoBufParser::ParseBatchRequestFromBuf( |
| 78 | const void* input_data[], int* input_size, |
| 79 | BatchCall& call, const SignatureInfo* signature_info) { |
| 80 | auto size = sizeof(input_data) / sizeof(void*); |
| 81 | call.call_num = size; |
| 82 | auto do_work = [&call, input_data, input_size, |
| 83 | signature_info](size_t begin, size_t end) { |
| 84 | for (size_t i = begin; i < end; ++i) { |
| 85 | eas::PredictRequest request; |
| 86 | request.ParseFromArray(input_data[i], input_size[i]); |
| 87 | |
| 88 | for (auto& input : request.inputs()) { |
| 89 | if (signature_info->input_key_idx.find(input.first) == |
| 90 | signature_info->input_key_idx.end()) { |
| 91 | LOG(FATAL) << "Request contain invalid input key : " << input.first; |
| 92 | } |
| 93 | int idx = signature_info->input_key_idx.at(input.first); |
| 94 | auto pb_to_tensor = util::Proto2Tensor(input.first, input.second); |
| 95 | if (!pb_to_tensor.status.ok()) { |
| 96 | return pb_to_tensor.status; |
| 97 | } |
| 98 | call.request[i].inputs.emplace_back( |
| 99 | signature_info->input_value_name[idx], |
| 100 | std::move(pb_to_tensor.tensor)); |
| 101 | } |
| 102 | |
| 103 | if (i == 0) { |
| 104 | if (request.output_filter().size() > 0) { |
| 105 | call.request[0].output_tensor_names.reserve(request.output_filter().size()); |
| 106 | for (auto key : request.output_filter()) { |
| 107 | if (signature_info->output_key_idx.find(key) == |
| 108 | signature_info->output_key_idx.end()) { |
| 109 | LOG(FATAL) << "Request contain invalid output filter: " << key; |
| 110 | } |
| 111 | call.request[0].output_tensor_names.emplace_back( |
| 112 | signature_info->output_value_name[signature_info->output_key_idx.at(key)]); |
| 113 | } |
| 114 | } else { |
| 115 | call.request[0].output_tensor_names = |
| 116 | signature_info->output_value_name; |
| 117 | } |
| 118 | } |
| 119 | } |
| 120 | }; |
| 121 | thread_pool_->ParallelFor(size, 10000, do_work); |
| 122 | |
| 123 | return call.BatchRequest(); |
| 124 | } |
| 125 | |
| 126 | Status ProtoBufParser::ParseBatchResponseToBuf( |
| 127 | BatchCall& call, void* output_data[], |
no test coverage detected