| 41 | } |
| 42 | |
| 43 | bool ModelParser::parse_model_info( |
| 44 | Config& network_config, NetworkIO& network_io, |
| 45 | std::unordered_map<std::string, LiteAny>& isolated_config_map, |
| 46 | std::string& extra_info, bool configure_valid) const { |
| 47 | //! no model info, no parse, direct return |
| 48 | if (m_is_bare_model || !m_info) { |
| 49 | return false; |
| 50 | } |
| 51 | //! parse ModelInfo::data |
| 52 | if (m_info->data()) { |
| 53 | size_t info_length = m_info->data()->size(); |
| 54 | const uint8_t* info_data = m_info->data()->Data(); |
| 55 | //! decryption the info |
| 56 | auto info_ptr = decrypt_memory( |
| 57 | info_data, info_length, m_info_decryption_name, info_length); |
| 58 | //! parse the info |
| 59 | LITE_LOCK_GUARD(parse_info_static_data().map_mutex); |
| 60 | auto it_parse = parse_info_static_data().parse_info_methods.find( |
| 61 | m_info_parse_func_name); |
| 62 | if (it_parse == parse_info_static_data().parse_info_methods.end()) { |
| 63 | LITE_THROW(ssprintf( |
| 64 | "can't find model info parse function %s.", |
| 65 | m_info_parse_func_name.c_str())); |
| 66 | } |
| 67 | auto model_info_parse_func = |
| 68 | parse_info_static_data().parse_info_methods[m_info_parse_func_name]; |
| 69 | //! convert for NetworkIOInner to NetworkIO |
| 70 | if (model_info_parse_func) { |
| 71 | model_info_parse_func( |
| 72 | info_ptr.get(), info_length, m_model_name, network_config, |
| 73 | network_io, isolated_config_map, extra_info); |
| 74 | } else { |
| 75 | LITE_THROW(ssprintf( |
| 76 | "model info parse function of %s is empty", |
| 77 | m_info_parse_func_name.c_str())); |
| 78 | } |
| 79 | } |
| 80 | //! parse ModelInfo::algo_policy |
| 81 | if (m_info->algo_policy() && configure_valid) { |
| 82 | size_t cache_length = m_info->algo_policy()->size(); |
| 83 | const uint8_t* cache = m_info->algo_policy()->Data(); |
| 84 | if (m_info_cache_parse_func_name == "LITE_parse_cache") { |
| 85 | if (m_is_fast_run_cache) { |
| 86 | parse_info_cache(cache, cache_length); |
| 87 | } else if (m_info->binary_cache()) { |
| 88 | size_t binary_cache_length = m_info->binary_cache()->size(); |
| 89 | const uint8_t* binary_cache = m_info->binary_cache()->Data(); |
| 90 | parse_info_cache( |
| 91 | cache, cache_length, m_is_fast_run_cache, binary_cache, |
| 92 | binary_cache_length); |
| 93 | } else { |
| 94 | LITE_THROW("opencl binary cache is not given"); |
| 95 | } |
| 96 | } else { |
| 97 | LITE_THROW(ssprintf( |
| 98 | "model cache parse function of %s is not defined.", |
| 99 | m_info_cache_parse_func_name.c_str())); |
| 100 | } |
no test coverage detected