JNIEXPORT jboolean JNICALL Java_com_baidu_mdl_demo_MDL_validate(JNIEnv *env, jclass thiz) { std::lock_guard<std::mutex> lock(shared_mutex); LOGI("jni validate invoked"); bool success = false; double sum = -1; double sign = 0; EXCEPTION_HEADER Loader *loader = Loader::shared_instance(); if (!loader->get_loaded()) { throw_exception("loader is not loaded yet"); } Net *net = get_net_instance(loader->_model); net->set_thread_num(1); vector<float> cpp_result = net->forward_from_to(nullptr, 0, 1, true); int cpp_result_count = cpp_result.size(); if (cpp_result_count > 0) { sum = 0; for (int i = 0; i < cpp_result_count; i++) { sum += cpp_result[i]; } } sign = loader->_model["meta"]["first_layer_sign"].number_value(); if (abs(sum - sign) < 0.5) { success = true; } EXCEPTION_FOOTER LOGI("jni validate returned: %s, calculated sign: %lf, expected sign: %lf", (success ? "true" : "false"), sum, sign); return success ? JNI_TRUE : JNI_FALSE; }
JNIEXPORT void JNICALL Java_com_baidu_mdl_demo_MDL_setThreadNum( JNIEnv *env, jclass thiz, jint num) { EXCEPTION_HEADER Loader *loader = Loader::shared_instance(); if (!loader->get_loaded()) { throw_exception("loader is not loaded yet"); } Net *net = get_net_instance(loader->_model); net->set_thread_num(num); if (num > Gemmer::gemmers.size()) { for (int i = 0; i < num - Gemmer::gemmers.size(); i++) { Gemmer::gemmers.push_back(new mdl::Gemmer()); } } EXCEPTION_FOOTER }