| 183 | } |
| 184 | |
| 185 | std::unique_ptr<PaddlePredictor> NativePaddlePredictor::Clone(void *stream) { |
| 186 | std::lock_guard<std::mutex> lk(clone_mutex_); |
| 187 | VLOG(3) << "Predictor::clone"; |
| 188 | std::unique_ptr<PaddlePredictor> cls(new NativePaddlePredictor(config_)); |
| 189 | // Hot fix the bug that result diff in multi-thread. |
| 190 | // TODO(Superjomn) re-implement a real clone here. |
| 191 | PADDLE_ENFORCE_NOT_NULL( |
| 192 | dynamic_cast<NativePaddlePredictor *>(cls.get()), |
| 193 | common::errors::PreconditionNotMet( |
| 194 | "Dynamic_cast from PaddlePredictor to NativePaddlePredictor failed")); |
| 195 | if (!dynamic_cast<NativePaddlePredictor *>(cls.get())->Init(nullptr)) { |
| 196 | LOG(ERROR) << "fail to call Init"; |
| 197 | return nullptr; |
| 198 | } |
| 199 | return cls; |
| 200 | } |
| 201 | |
| 202 | bool NativePaddlePredictor::SetFeed(const std::vector<PaddleTensor> &inputs, |
| 203 | framework::Scope *scope) { |