<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: A Performance Comparison of Jess, Drools and MS-BRE</title>
	<atom:link href="http://pathfindersoftware.com/2006/08/a_performance_c/feed/" rel="self" type="application/rss+xml" />
	<link>http://pathfindersoftware.com/2006/08/a_performance_c/</link>
	<description>The Fastest Way to Launch Successful Software</description>
	<lastBuildDate>Thu, 19 Jan 2012 16:36:03 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Charles Young</title>
		<link>http://pathfindersoftware.com/2006/08/a_performance_c/#comment-5747</link>
		<dc:creator>Charles Young</dc:creator>
		<pubDate>Thu, 19 Oct 2006 19:32:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/a_performance_c/#comment-5747</guid>
		<description>&lt;p&gt;It not Microsoft who are holding things up - the paper was written entirely independently of MS, and they have no say in the matter.&lt;/p&gt;

&lt;p&gt;In our implementation, we did our very best, despite the lack of support for negated conjunction, to keep within the spirit of Miss Manners.   However, of course, without built-in support for negated conjunction, we were forced to implement our own custom approach to performing tests for non-existence or Path and Chosen facts.   We use a rather brittle approach in which, each time a new Path or Chosen fact is asserted, a record of this new fact is maintained in memory (outside of the knowledge of the engine).   In order to test for non-existence, we then look up these records to see if we can find a match.&lt;/p&gt;

&lt;p&gt;We had to depart from Miss Manners in two other respects.   Firstly, MS BRE does not support an equivalent conflict resolution strategy to OPS5 LEX or Jess/Clips depth-first.   We therefore needed to add an additional constraint to the find_seating rule to force the intended depth-first approach.  Our first attempt failed because, although we introduced a condition that should have made almost no change to the amount of evaluation done, Microsoft&#039;s Rete compiler effectively optimised the Rete, causing a huge decrease in evaluation.   We then hit on an approach in which we implemented the same logical constraint, but in custom code, hence making it &#039;invisible&#039; to the Rete compiler.   This worked very nicely.&lt;/p&gt;

&lt;p&gt;the other change was that, again because of the lack of support for conflict resolution strategies similar to other engines, we has to introduce priority (salience) settings on three rules.   This made no significant difference to th amount of evaluation. &lt;/p&gt;

&lt;p&gt;The introduction of a custom mechanism to check for non-existence almost certainly reduced the amount of work done overall in comparison to how things would work in negated conjunction is supported.   However, we are still a very long way away from the kind of outrageous cheats that some have used.   More than that, we provide very full disclosure and make it repeatedly clear that our results cannot be used to determine performance comparisons between MS BRE and other engines.&lt;/p&gt;

&lt;p&gt;I believe that Miss Manners is a very poor choice of benchmark *for general purpose performance comparison between different engines*.   There are several reasons for this, and in any case, I believe that you cannot adequately measure general comparative performance between two engines using a single benchmark.   The other problem is that, as the number of guests is increased, the benchmark quickly becomes almost totally dominated by the work done at a single NotCE node.   Even with reasonable beta  memory indexing (e,g, as per Jess, Drools), approx.  95% of all evaluations occur at this one node for the 128 guest run.   The benchmark is therefore good for comparing performance of single NotCE nodes working under stress, but not a lot else.   I admit that, for most engines, the major underlying  factor here is really the effectiveness of beta memory indexing.   However, NotCE nodes are not strictly mandated by Rete, and not supported by all Rete engines.   They can also potentially be implemented in slightly different ways, and might well not, for all engines, exhibit the same efficiency as join nodes.   Hence, I maintain that Manners is a really poor choice for making general performance comparisons between different engines.&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>It not Microsoft who are holding things up &#8211; the paper was written entirely independently of MS, and they have no say in the matter.</p>
<p>In our implementation, we did our very best, despite the lack of support for negated conjunction, to keep within the spirit of Miss Manners.   However, of course, without built-in support for negated conjunction, we were forced to implement our own custom approach to performing tests for non-existence or Path and Chosen facts.   We use a rather brittle approach in which, each time a new Path or Chosen fact is asserted, a record of this new fact is maintained in memory (outside of the knowledge of the engine).   In order to test for non-existence, we then look up these records to see if we can find a match.</p>
<p>We had to depart from Miss Manners in two other respects.   Firstly, MS BRE does not support an equivalent conflict resolution strategy to OPS5 LEX or Jess/Clips depth-first.   We therefore needed to add an additional constraint to the find_seating rule to force the intended depth-first approach.  Our first attempt failed because, although we introduced a condition that should have made almost no change to the amount of evaluation done, Microsoft&#8217;s Rete compiler effectively optimised the Rete, causing a huge decrease in evaluation.   We then hit on an approach in which we implemented the same logical constraint, but in custom code, hence making it &#8216;invisible&#8217; to the Rete compiler.   This worked very nicely.</p>
<p>the other change was that, again because of the lack of support for conflict resolution strategies similar to other engines, we has to introduce priority (salience) settings on three rules.   This made no significant difference to th amount of evaluation. </p>
<p>The introduction of a custom mechanism to check for non-existence almost certainly reduced the amount of work done overall in comparison to how things would work in negated conjunction is supported.   However, we are still a very long way away from the kind of outrageous cheats that some have used.   More than that, we provide very full disclosure and make it repeatedly clear that our results cannot be used to determine performance comparisons between MS BRE and other engines.</p>
<p>I believe that Miss Manners is a very poor choice of benchmark *for general purpose performance comparison between different engines*.   There are several reasons for this, and in any case, I believe that you cannot adequately measure general comparative performance between two engines using a single benchmark.   The other problem is that, as the number of guests is increased, the benchmark quickly becomes almost totally dominated by the work done at a single NotCE node.   Even with reasonable beta  memory indexing (e,g, as per Jess, Drools), approx.  95% of all evaluations occur at this one node for the 128 guest run.   The benchmark is therefore good for comparing performance of single NotCE nodes working under stress, but not a lot else.   I admit that, for most engines, the major underlying  factor here is really the effectiveness of beta memory indexing.   However, NotCE nodes are not strictly mandated by Rete, and not supported by all Rete engines.   They can also potentially be implemented in slightly different ways, and might well not, for all engines, exhibit the same efficiency as join nodes.   Hence, I maintain that Manners is a really poor choice for making general performance comparisons between different engines.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Lin</title>
		<link>http://pathfindersoftware.com/2006/08/a_performance_c/#comment-5746</link>
		<dc:creator>Peter Lin</dc:creator>
		<pubDate>Wed, 06 Sep 2006 05:24:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/a_performance_c/#comment-5746</guid>
		<description>&lt;p&gt;I look forward to the paper with the full source and output for manners if you&#039;re given permission by Microsoft. I can say pretty conclusively that a rule engine can get significantly better results if the rule engine &quot;short-cuts&quot; and does not really do full cross product matching + propogation. There are several ways of doing this. Forgy mentions making a subgoal, which switches the runtime to the equivalent of iLog&#039;s sequential. Ignoring the well know hack of changing the order of the NOT CE in the find seating rule, the other way is to run in backward chaining mode like LEAPS. There&#039;s several ways of detecting when and if a rule engine is taking a short-cut. The number of activations added/retracted to the agenda should be identicle to JESS or Drools3. If it isn&#039;t, it means the engine is taking a short-cut. I just posted some results today for Sumatra &lt;a href=&quot;http://woolfel.blogspot.com/2006/09/lazy-agenda-with-linkedactivationwrapp.html.&quot; rel=&quot;nofollow&quot;&gt;http://woolfel.blogspot.com/2006/09/lazy-agenda-with-linkedactivationwrapp.html.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The code is all in sourceforge, so anyone can run the test for themselves and turn on (watch all) to see exactly what is happening. Although many people consider manners a bad benchmark, I disagree. It is a useful benchmark. People just shouldn&#039;t use it to predict how their application will perform in production. It does measure how efficient the implementation is and points to potential weak areas. As a developer, having the information is useful and allows me to work around those weaknesses. If I don&#039;t know how it performs under stress, what are my chances of building an efficient application?&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>I look forward to the paper with the full source and output for manners if you&#8217;re given permission by Microsoft. I can say pretty conclusively that a rule engine can get significantly better results if the rule engine &#8220;short-cuts&#8221; and does not really do full cross product matching + propogation. There are several ways of doing this. Forgy mentions making a subgoal, which switches the runtime to the equivalent of iLog&#8217;s sequential. Ignoring the well know hack of changing the order of the NOT CE in the find seating rule, the other way is to run in backward chaining mode like LEAPS. There&#8217;s several ways of detecting when and if a rule engine is taking a short-cut. The number of activations added/retracted to the agenda should be identicle to JESS or Drools3. If it isn&#8217;t, it means the engine is taking a short-cut. I just posted some results today for Sumatra <a href="http://woolfel.blogspot.com/2006/09/lazy-agenda-with-linkedactivationwrapp.html." rel="nofollow">http://woolfel.blogspot.com/2006/09/lazy-agenda-with-linkedactivationwrapp.html.</a></p>
<p>The code is all in sourceforge, so anyone can run the test for themselves and turn on (watch all) to see exactly what is happening. Although many people consider manners a bad benchmark, I disagree. It is a useful benchmark. People just shouldn&#8217;t use it to predict how their application will perform in production. It does measure how efficient the implementation is and points to potential weak areas. As a developer, having the information is useful and allows me to work around those weaknesses. If I don&#8217;t know how it performs under stress, what are my chances of building an efficient application?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Charles Young</title>
		<link>http://pathfindersoftware.com/2006/08/a_performance_c/#comment-5745</link>
		<dc:creator>Charles Young</dc:creator>
		<pubDate>Sat, 19 Aug 2006 15:22:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/a_performance_c/#comment-5745</guid>
		<description>&lt;p&gt;Thanks for your comments, and also for an interesting blog site in general.  &lt;/p&gt;

&lt;p&gt;I really, really don&#039;t want to open up, again, the debate I was engaged in last year.   Suffice to say that there was context and background to why the article was published, and that I was tackling claims (since graciously retracted) about Microsoft&#039;s engine based on some rather poorly conceived performance figures contained in a Microsoft whitepaper.   Because the only other approach I could have taken was the rather indefensible...&quot;I&#039;ve used reflector to inspect Microsoft&#039;s code and it really, really is Rete&quot;, my approach was to say &quot;you can&#039;t infer it&#039;s not Rete just because the graph is a straight line&quot;.&lt;/p&gt;

&lt;p&gt;A long time ago, now, I implemented a variant of Miss Manners for MS BRE (MS BRE doesn’t support negated conjunctions, so we are forced to ‘cheat’).  I&#039;ve been challenged a couple of times to publish my findings, and being the person I am, could not do this by halves.   So, hopefully in the next few weeks now, we should be publishing an overly long and complex paper on this.  One the main points we make in the paper is that Miss Manners is absolutely useless (we use slightly more moderated language in the paper) as a general-purpose benchmark for comparative performance testing.   I won&#039;t go into why, here, but I note the Drools guys have made some similar arguments public.   We have gone further, and have some additional, rather compelling (I think), reasons to add to what they have already said.   &lt;/p&gt;

&lt;p&gt;I&#039;ve spent far more time than I should looking at rules engine benchmarking.   One conclusion is that any claims based on a single, or a few, benchmark tests can never be taken seriously.  The features and behaviour of these engines are far too varied to be described in such simplistic terms.  If I compare CLIPS, Jess and MS BRE, for example, I know how to make each one of them appear to be the &#039;winner&#039; or the &#039;looser&#039; in performance comparisons.   I also know how to exaggerate differences which in most scenarios would be near-undetectable in order to get the results I want.   CLIPS is often the fastest for small data sets.  Jess has excellent memory indexing features which makes it the best in many highly combinatorial scenarios.  MS BRE performs automatic Rete optimisation and can execute certain types of condition evaluation faster than the other two engines.&lt;/p&gt;

&lt;p&gt;Oh, and the Microsoft engine really, really, really is Rete!   The paper we plan to publish  demonstrates this fairly conclusively.   We even show the MS BRE Rete for our Miss Manners variant which is almost identical to the Jess Rete.&lt;br /&gt;
&lt;/p&gt;</description>
		<content:encoded><![CDATA[<p>Thanks for your comments, and also for an interesting blog site in general.  </p>
<p>I really, really don&#8217;t want to open up, again, the debate I was engaged in last year.   Suffice to say that there was context and background to why the article was published, and that I was tackling claims (since graciously retracted) about Microsoft&#8217;s engine based on some rather poorly conceived performance figures contained in a Microsoft whitepaper.   Because the only other approach I could have taken was the rather indefensible&#8230;&#8221;I&#8217;ve used reflector to inspect Microsoft&#8217;s code and it really, really is Rete&#8221;, my approach was to say &#8220;you can&#8217;t infer it&#8217;s not Rete just because the graph is a straight line&#8221;.</p>
<p>A long time ago, now, I implemented a variant of Miss Manners for MS BRE (MS BRE doesn’t support negated conjunctions, so we are forced to ‘cheat’).  I&#8217;ve been challenged a couple of times to publish my findings, and being the person I am, could not do this by halves.   So, hopefully in the next few weeks now, we should be publishing an overly long and complex paper on this.  One the main points we make in the paper is that Miss Manners is absolutely useless (we use slightly more moderated language in the paper) as a general-purpose benchmark for comparative performance testing.   I won&#8217;t go into why, here, but I note the Drools guys have made some similar arguments public.   We have gone further, and have some additional, rather compelling (I think), reasons to add to what they have already said.   </p>
<p>I&#8217;ve spent far more time than I should looking at rules engine benchmarking.   One conclusion is that any claims based on a single, or a few, benchmark tests can never be taken seriously.  The features and behaviour of these engines are far too varied to be described in such simplistic terms.  If I compare CLIPS, Jess and MS BRE, for example, I know how to make each one of them appear to be the &#8216;winner&#8217; or the &#8216;looser&#8217; in performance comparisons.   I also know how to exaggerate differences which in most scenarios would be near-undetectable in order to get the results I want.   CLIPS is often the fastest for small data sets.  Jess has excellent memory indexing features which makes it the best in many highly combinatorial scenarios.  MS BRE performs automatic Rete optimisation and can execute certain types of condition evaluation faster than the other two engines.</p>
<p>Oh, and the Microsoft engine really, really, really is Rete!   The paper we plan to publish  demonstrates this fairly conclusively.   We even show the MS BRE Rete for our Miss Manners variant which is almost identical to the Jess Rete.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic (User agent is rejected)
Page Caching using memcached (User agent is rejected)

Served from: pathfindersoftware.com @ 2012-02-09 17:46:47 -->
