// ------------------------------------------------------------------ // ciMethod::uses_balanced_monitors // // Does this method use monitors in a strict stack-disciplined manner? bool ciMethod::has_balanced_monitors() { check_is_loaded(); if (_balanced_monitors) return true; // Analyze the method to see if monitors are used properly. VM_ENTRY_MARK; methodHandle method(THREAD, get_Method()); assert(method->has_monitor_bytecodes(), "should have checked this"); // Check to see if a previous compilation computed the // monitor-matching analysis. if (method->guaranteed_monitor_matching()) { _balanced_monitors = true; return true; } { EXCEPTION_MARK; ResourceMark rm(THREAD); GeneratePairingInfo gpi(method); gpi.compute_map(CATCH); if (!gpi.monitor_safe()) { return false; } method->set_guaranteed_monitor_matching(); _balanced_monitors = true; } return true; }
static void init_plugins_from_dir(const char *plugin_dir){ DIR *dir; struct dirent *ent; dir = opendir(plugin_dir); if (!dir) return; while ((ent = readdir(dir)) != NULL){ char filename[strlen(plugin_dir)+strlen(ent->d_name)+4]; void* handle; sprintf(filename, "%s/%s", plugin_dir, ent->d_name); handle=dlopen(filename, RTLD_NOW); if(handle){ void *(*gpi) (void); gpi=dlsym(handle, "get_iplugin_info"); if(gpi){ InputPlugin *p=gpi(); mp_msg(MSGT_DEMUX, MSGL_INFO, MSGTR_MPDEMUX_XMMS_FoundPlugin, ent->d_name,p->description); p->handle = handle; p->filename = strdup(filename); p->get_vis_type = input_get_vis_type; p->add_vis_pcm = input_add_vis_pcm; p->set_info = input_set_info; p->set_info_text = input_set_info_text; if(p->init) p->init(); input_plugins[no_plugins++]=p; } else dlclose(handle); } } closedir(dir); }
void doIt( const char *pin ) { GPI gpi( pin ); gpi.setEdge( GPI::BOTH ); for( int k = 0; k < 5; ++k ) { std::cout << gpi.wait() << '\n'; } }
double IFunctional::penalty(vector<ExtendedSpaceNode2D> &info) const { IFunctional* functional = const_cast<IFunctional*>(this); double ht = mTimeDimension.step(); unsigned int L = mTimeDimension.sizeN(); functional->backward->setPenaltyCoefficient(r); functional->backward->info = &info; double p_sum = 0.0; for (unsigned int i=0; i<mParameter.Lc; i++) p_sum += 0.5*gpi(i, 0, info)*gpi(i, 0, info); for (unsigned int l=1; l<=L-1; l++) { for (unsigned int i=0; i<mParameter.Lc; i++) p_sum += gpi(i, l, info)*gpi(i, l, info); } for (unsigned int i=0; i<mParameter.Lc; i++) p_sum += 0.5*gpi(i, L, info)*gpi(i, L, info); return p_sum*ht; }
void IFunctional::gradient(const DoubleVector &pv, DoubleVector &g) const { IFunctional *ifunc = const_cast<IFunctional*>(this); unsigned int L = mTimeDimension.sizeN(); double ht = mTimeDimension.step(); ifunc->fromVector(pv, ifunc->mParameter); forward->setParameter(mParameter); backward->setParameter(mParameter); DoubleMatrix u; DoubleMatrix p; vector<ExtendedSpaceNode2D> u_info; forward->calculateMVD(u, u_info, true); backward->u = &u; backward->U = &ifunc->U; backward->info = &u_info; vector<ExtendedSpaceNode2D> p_info; backward->calculateMVD(p, p_info, true); g.clear(); g.resize(pv.length(), 0.0); unsigned int gi = 0; // k if (optimizeK) { for (unsigned int i=0; i<mParameter.Lc; i++) { ExtendedSpaceNode2D &pi = p_info[i]; for (unsigned int j=0; j<mParameter.Lo; j++) { ExtendedSpaceNode2D &uj = u_info[j]; double grad_Kij = 0.0; grad_Kij += 0.5 * (pi.value(0)+2.0*r*gpi(i,0,u_info)*sgn(g0i(i,0,u_info))) * (uj.value(0) - mParameter.z.at(i,j)); for (unsigned int m=1; m<=L-1; m++) { grad_Kij += (pi.value(m)+2.0*r*gpi(i,m,u_info)*sgn(g0i(i,m,u_info))) * (uj.value(m) - mParameter.z.at(i,j)); } grad_Kij += 0.5 * (pi.value(L)+2.0*r*gpi(i,L,u_info)*sgn(g0i(i,L,u_info))) * (uj.value(L) - mParameter.z.at(i,j)); grad_Kij *= -ht; g[gi++] = grad_Kij + 2.0*regEpsilon*(mParameter.k.at(i,j) - mParameter0.k.at(i,j)); } } } else { for (unsigned int i=0; i<mParameter.Lc; i++) { for (unsigned int j=0; j<mParameter.Lo; j++) { g[gi++] = 0.0; } } } // z if (optimizeZ) { for (unsigned int i=0; i<mParameter.Lc; i++) { ExtendedSpaceNode2D &pi = p_info[i]; for (unsigned int j=0; j<mParameter.Lo; j++) { double grad_Zij = 0.0; grad_Zij += 0.5 * (pi.value(0)+2.0*r*gpi(i,0,u_info)*sgn(g0i(i,0,u_info))) * mParameter.k.at(i,j); for (unsigned int m=1; m<=L-1; m++) { grad_Zij += (pi.value(m)+2.0*r*gpi(i,m,u_info)*sgn(g0i(i,m,u_info))) * mParameter.k.at(i,j); } grad_Zij += 0.5 * (pi.value(L)+2.0*r*gpi(i,L,u_info)*sgn(g0i(i,L,u_info))) * mParameter.k.at(i,j); grad_Zij *= ht; g[gi++] = grad_Zij + 2.0*regEpsilon*(mParameter.z[i][j] - mParameter0.z[i][j]); } } } else { for (unsigned int i=0; i<mParameter.Lc; i++) { for (unsigned int j=0; j<mParameter.Lo; j++) { g[gi++] = 0.0; } } } // xi if (optimizeO) { for (unsigned int j=0; j<mParameter.Lo; j++) { ExtendedSpaceNode2D &uj = u_info[j]; double gradXijX = 0.0; double gradXijY = 0.0; double vi = 0.0; vi = 0.0; for (unsigned int i=0; i<mParameter.Lc; i++) vi += mParameter.k.at(i,j) * (p_info[i].value(0)+2.0*r*gpi(i,0,u_info)*sgn(g0i(i,0,u_info))); gradXijX += 0.5 * uj.valueDx(0) * vi; gradXijY += 0.5 * uj.valueDy(0) * vi; for (unsigned int m=1; m<=L-1; m++) { vi = 0.0; for (unsigned int i=0; i<mParameter.Lc; i++) vi += mParameter.k.at(i,j)*(p_info[i].value(m)+2.0*r*gpi(i,m,u_info)*sgn(g0i(i,m,u_info))); gradXijX += uj.valueDx(m) * vi; gradXijY += uj.valueDy(m) * vi; } vi = 0.0; for (unsigned int i=0; i<mParameter.Lc; i++) vi += mParameter.k.at(i,j)*(p_info[i].value(L)+2.0*r*gpi(i,L,u_info)*sgn(g0i(i,L,u_info))); gradXijX += 0.5 * uj.valueDx(L) * vi; gradXijY += 0.5 * uj.valueDy(L) * vi; gradXijX *= -ht; gradXijY *= -ht; g[gi++] = gradXijX + 2.0*regEpsilon*(mParameter.xi[j].x - mParameter0.xi[j].x); g[gi++] = gradXijY + 2.0*regEpsilon*(mParameter.xi[j].y - mParameter0.xi[j].y); } } else { for (unsigned int j=0; j<mParameter.Lo; j++) { g[gi++] = 0.0; g[gi++] = 0.0; } } // eta if (optimizeC) { for (unsigned int i=0; i<mParameter.Lc; i++) { ExtendedSpaceNode2D &pi = p_info[i]; double grad_EtaiX = 0.0; double grad_EtaiY = 0.0; double vi = 0.0; vi = 0.0; for (unsigned int j=0; j<mParameter.Lo; j++) vi += mParameter.k.at(i,j) * (u_info[j].value(0) - mParameter.z.at(i,j)); grad_EtaiX += 0.5 * pi.valueDx(0) * vi; grad_EtaiY += 0.5 * pi.valueDy(0) * vi; for (unsigned int m=1; m<=L-1; m++) { vi = 0.0; for (unsigned int j=0; j<mParameter.Lo; j++) vi += mParameter.k.at(i,j) * (u_info[j].value(m) - mParameter.z.at(i,j)); grad_EtaiX += pi.valueDx(m) * vi; grad_EtaiY += pi.valueDy(m) * vi; } vi = 0.0; for (unsigned int j=0; j<mParameter.Lo; j++) vi += mParameter.k.at(i,j) * (u_info[j].value(L) - mParameter.z.at(i,j)); grad_EtaiX += 0.5 * pi.valueDx(L) * vi; grad_EtaiY += 0.5 * pi.valueDy(L) * vi; grad_EtaiX *= -ht; grad_EtaiY *= -ht; g[gi++] = grad_EtaiX + 2.0*regEpsilon*(mParameter.eta[i].x - mParameter0.eta[i].x); g[gi++] = grad_EtaiY + 2.0*regEpsilon*(mParameter.eta[i].y - mParameter0.eta[i].y); } } else { for (unsigned int i=0; i<mParameter.Lc; i++) { g[gi++] = 0.0; g[gi++] = 0.0; } } u_info.clear(); p_info.clear(); }