On Wed, Jan 12, 2011 at 1:23 PM, Dave Reynolds <[email protected]> wrote: > On Wed, 2011-01-12 at 11:52 -0500, Marco Neumann wrote: >> Thank you for the tip Dave. >> >> OWLMicro seems to be marginally faster but almost insignificant for my >> needs. I mostly compute the owl:inverseOf in the following data >> (http://www.lotico.com/meetup/2009/locations.txt) > > If all you want is inverseOf plus a bit then you could create a tailored > rule set (or even just use Java code :)).
yes very true. >> I am using the YourKit Java Profiler 9.5.3 and am a bit surprised that >> my shiny dual quad core XEON CPUs (8 processors) are hoovering at >> around 12% for almost an hour. >> >> Is there a way to prioritize the reasoner method to take a bit more of >> the action? As far as I can tell its the >> com.hp.hpl.jena.reasoner.rulesys.impl.RETEEngine at work here. > > Not that I know of. > > The reasoner isn't built to make good use of multi-core processors. > > I'd love to develop a more scalable inference solution for Jena, part of > which would involved making better use of parallelism, but time and > funding are lacking :( And there is no need to make it available as free software IMO. I guess that's where pellet, OWLIM, jess, racer etc play-out to be more efficient. Would you agree? > Dave >> >> Marco >> >> >> >> >> On Wed, Jan 12, 2011 at 4:16 AM, Dave Reynolds >> <[email protected]> wrote: >> > On Tue, 2011-01-11 at 20:26 -0500, Marco Neumann wrote: >> >> I have the following inference work-flow: >> >> >> >> Model m = TDBFactory.createModel(directory) ; >> >> >> >> m.read(data); >> >> >> >> Reasoner reasoner = ReasonerRegistry.getOWLMiniReasoner(); >> >> >> >> InfModel inf = ModelFactory.createInfModel(reasoner, m); >> >> >> >> //up to here everything runs pretty fast >> >> >> >> m.add(inf.getDeductionsModel()); >> >> >> >> // here the model.add takes forever to complete >> >> >> >> m.commit(); >> >> >> >> Has anyone recommendations to improve performance here or share best >> >> practice? >> > >> > The reasoners do all their work in memory so running over the TDB copy >> > just slows things down without any benefit of scalability. >> > >> > I'd do something like: >> > >> > Model m = TDBFactory.createModel(directory) ; >> > >> > Model tmp = ModelFactory.createDefaultModel(); >> > tmp.read(data); >> > Reasoner reasoner = ReasonerRegistry.getOWLMiniReasoner(); >> > InfModel inf = ModelFactory.createInfModel(reasoner, tmp); >> > >> > m.add(tmp); >> > m.add(inf.getDeductionsModel()); >> > >> > Note 1. Depending on what inferences you want OWLMicro can be notably >> > faster than OWLMini. >> > >> > Note 2. The deductionsModel only contains the forward deductions. When >> > you ask an InfModel a query it will also run backward chaining rules so >> > to get the entire inference closure you need to ask inf for everything. >> > In that case replace the last two lines by: >> > m.add( inf ); >> > >> > If you only want certainly types of inference then ask more specific >> > queries to inf and add only those results to m. >> > >> > Dave >> > >> > >> > >> >> >> > > > > -- Marco Neumann KONA Make sure to join us at the Semantic Technology Conference 2011 in San Francisco and save 15% with the coupon code STMN http://www.lotico.com/evt/stc2011/
