<?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"
	>
<channel>
	<title>Comments on: The Multi-Core Dilemma - By Patrick Leonard</title>
	<atom:link href="http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/feed/" rel="self" type="application/rss+xml" />
	<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/</link>
	<description></description>
	<pubDate>Sun, 20 Jul 2008 16:46:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Ondrej Spanel</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-13381</link>
		<dc:creator>Ondrej Spanel</dc:creator>
		<pubDate>Fri, 27 Jun 2008 09:18:42 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-13381</guid>
		<description>Quote: "For example, a processor with a single core from a few years ago that ran at 3.0 Ghz is being replaced with a dual or quad-core processor with each core running in the neighborhood of 2.6 Ghz. More total processing power, but each one is a bit slower."

This does not reflect for the very important fact the work per clock has significantly increased meanwhile. I have Intel Core 2 Quad at 2.4 GHz now in my computer. Even its performance as a single core is higher than what I had with 3.6 GHz Intel Pentium 4, while the power consumption is much lower.

This is one thing I see as a good with the multicore revolution - nobody seems to be obsessed with the GHz any more, and it is the performance which is increased instead.</description>
		<content:encoded><![CDATA[<p>Quote: "For example, a processor with a single core from a few years ago that ran at 3.0 Ghz is being replaced with a dual or quad-core processor with each core running in the neighborhood of 2.6 Ghz. More total processing power, but each one is a bit slower."</p>
<p>This does not reflect for the very important fact the work per clock has significantly increased meanwhile. I have Intel Core 2 Quad at 2.4 GHz now in my computer. Even its performance as a single core is higher than what I had with 3.6 GHz Intel Pentium 4, while the power consumption is much lower.</p>
<p>This is one thing I see as a good with the multicore revolution - nobody seems to be obsessed with the GHz any more, and it is the performance which is increased instead.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-3533</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Fri, 08 Jun 2007 14:19:03 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-3533</guid>
		<description>DataRush does not currently operate on a "grid"---it requires an SMP machine since it resides entirely within one JVM. Ordering is explicit: you plug your Java code into operators which you then arrange into a pipeline using a coordination language called DFXML. More generally, you can arrange the nodes of the computation in a directed graph (not just pipelines, but also fan-out structures through partitioning, replicated output, or operators that map one input to many outputs and fan-in structures through unpartitioning or operators that map many inputs to one output). All threading is managed by the runtime system, responsible for scheduling the execution of the various operators when data is available for them to process. The system is quite analogous to pipes in Unix, but with strict type enforcement, configurable properties at each operator, and the portability of the JVM.

From what I can tell, Software Pipelines operates at a courser level, wrapping an entire application in each node, then providing an API for nodes to communicate with one another either on the same machine or across a network via web services. Does it provide a standard library of operators, or simply a contract which you must abide by to take advantage of the coordination system?</description>
		<content:encoded><![CDATA[<p>DataRush does not currently operate on a "grid"---it requires an SMP machine since it resides entirely within one JVM. Ordering is explicit: you plug your Java code into operators which you then arrange into a pipeline using a coordination language called DFXML. More generally, you can arrange the nodes of the computation in a directed graph (not just pipelines, but also fan-out structures through partitioning, replicated output, or operators that map one input to many outputs and fan-in structures through unpartitioning or operators that map many inputs to one output). All threading is managed by the runtime system, responsible for scheduling the execution of the various operators when data is available for them to process. The system is quite analogous to pipes in Unix, but with strict type enforcement, configurable properties at each operator, and the portability of the JVM.</p>
<p>From what I can tell, Software Pipelines operates at a courser level, wrapping an entire application in each node, then providing an API for nodes to communicate with one another either on the same machine or across a network via web services. Does it provide a standard library of operators, or simply a contract which you must abide by to take advantage of the coordination system?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: VMs Help Solve the Multicore Puzzle - PC Blade Daily - Practical News and Views on Centralized Computing</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2530</link>
		<dc:creator>VMs Help Solve the Multicore Puzzle - PC Blade Daily - Practical News and Views on Centralized Computing</dc:creator>
		<pubDate>Wed, 25 Apr 2007 19:29:46 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2530</guid>
		<description>[...] processors mean one thing: multithreaded applications. And that, in turn, means one other thing: headaches. &#8220;The main reason most desktop applications are not multithreaded is because writing that [...]</description>
		<content:encoded><![CDATA[<p>[...] processors mean one thing: multithreaded applications. And that, in turn, means one other thing: headaches. &#8220;The main reason most desktop applications are not multithreaded is because writing that [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick Leonard</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2319</link>
		<dc:creator>Patrick Leonard</dc:creator>
		<pubDate>Wed, 04 Apr 2007 00:05:19 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2319</guid>
		<description>DataRush is also working to bring concurrency to the application server, but they seem to be focused more on the dtraditional compute grid problem - taking an algorithm or other large compute task like monte carlo or pricing algorithm and breaking it up into pieces to run across a grid. I haven't tested DataRush, so I can't say for sure, but that's what it seems from their web site.

Software Pipelines is an approach for bringing concurrency to an application along with order and control of the threads - from the application layer. Most business applications can't run in a compute grid because they have these types of requirements (FIFO ordering, human interaction, splits/joins, etc.) that they can't hand over to the app server or OS. This typically gets solved with multi-threaded programming. Of course you can still write multi-threaded code to solve this, but most people don't want to.</description>
		<content:encoded><![CDATA[<p>DataRush is also working to bring concurrency to the application server, but they seem to be focused more on the dtraditional compute grid problem - taking an algorithm or other large compute task like monte carlo or pricing algorithm and breaking it up into pieces to run across a grid. I haven't tested DataRush, so I can't say for sure, but that's what it seems from their web site.</p>
<p>Software Pipelines is an approach for bringing concurrency to an application along with order and control of the threads - from the application layer. Most business applications can't run in a compute grid because they have these types of requirements (FIFO ordering, human interaction, splits/joins, etc.) that they can't hand over to the app server or OS. This typically gets solved with multi-threaded programming. Of course you can still write multi-threaded code to solve this, but most people don't want to.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henry Cobb</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2271</link>
		<dc:creator>Henry Cobb</dc:creator>
		<pubDate>Fri, 30 Mar 2007 23:09:34 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2271</guid>
		<description>Gosh, Software Pipelines, do you mean like using the pipe symbol to connect two processes so that each can run at full speed with say a shell buffering the output of one into the input of the other?

If the next version of WinDos includes this advanced new feature then Microsoft will only be like three decades behind the state of the art.

-HJC</description>
		<content:encoded><![CDATA[<p>Gosh, Software Pipelines, do you mean like using the pipe symbol to connect two processes so that each can run at full speed with say a shell buffering the output of one into the input of the other?</p>
<p>If the next version of WinDos includes this advanced new feature then Microsoft will only be like three decades behind the state of the art.</p>
<p>-HJC</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Emilio</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2132</link>
		<dc:creator>Emilio</dc:creator>
		<pubDate>Wed, 21 Mar 2007 15:51:58 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2132</guid>
		<description>I guess I understand exactly what you are saying, but I only take exception to the premise that J2EE and .NET -- when used to create OLTP threaded Web Apps -- would see any impact going to multicore. You see, the J2EE container contracts already assume unordered, concurrent "beans" and any shared memory issues are built into the framework, so it's really not an issue.

I agree, however, that if you want to sync threads MANUALLY, and you go beyond the standard J2EE and .NET API contracts, or you throw them aside all together, then you're in deep doo doo (technical term).

I really hope PeakStream and others don't wade into OLTP, SOA and Enterprise Service Bus "blueprints", because I think the value of your platform will diminish to near-zero. It's actually the poor sods who are forced to use straight C, Java, COBOL or C# that have a huge uphill battle on multicore -- and you will only find those developers in very specific markets solving very specific problems AWAY from OLTP, SOA, Web Apps etc...

Of course, it just so happens that DataRush crushes these non-J2EE data parallel problems http://www.pervasivedatarush.com/benchmarks 

:-)</description>
		<content:encoded><![CDATA[<p>I guess I understand exactly what you are saying, but I only take exception to the premise that J2EE and .NET -- when used to create OLTP threaded Web Apps -- would see any impact going to multicore. You see, the J2EE container contracts already assume unordered, concurrent "beans" and any shared memory issues are built into the framework, so it's really not an issue.</p>
<p>I agree, however, that if you want to sync threads MANUALLY, and you go beyond the standard J2EE and .NET API contracts, or you throw them aside all together, then you're in deep doo doo (technical term).</p>
<p>I really hope PeakStream and others don't wade into OLTP, SOA and Enterprise Service Bus "blueprints", because I think the value of your platform will diminish to near-zero. It's actually the poor sods who are forced to use straight C, Java, COBOL or C# that have a huge uphill battle on multicore -- and you will only find those developers in very specific markets solving very specific problems AWAY from OLTP, SOA, Web Apps etc...</p>
<p>Of course, it just so happens that DataRush crushes these non-J2EE data parallel problems <a href="http://www.pervasivedatarush.com/benchmarks" rel="nofollow">http://www.pervasivedatarush.com/benchmarks</a> </p>
<p>:-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick Leonard</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2088</link>
		<dc:creator>Patrick Leonard</dc:creator>
		<pubDate>Fri, 16 Mar 2007 22:47:04 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2088</guid>
		<description>One more thing that may be of interest - just so you know that I'm not the only one who thinks this (is that the definition of insanity?...), a few other postings on concurrency from SDTimes.

Threading Maturity Model
http://ztrek.blogspot.com/2007/02/responses-to-threading-maturity-model.html

The Personal Threading Maturity Model
http://www.knowing.net/default,month,2007-01.aspx</description>
		<content:encoded><![CDATA[<p>One more thing that may be of interest - just so you know that I'm not the only one who thinks this (is that the definition of insanity?...), a few other postings on concurrency from SDTimes.</p>
<p>Threading Maturity Model<br />
<a href="http://ztrek.blogspot.com/2007/02/responses-to-threading-maturity-model.html" rel="nofollow">http://ztrek.blogspot.com/2007/02/responses-to-threading-maturity-model.html</a></p>
<p>The Personal Threading Maturity Model<br />
<a href="http://www.knowing.net/default,month,2007-01.aspx" rel="nofollow">http://www.knowing.net/default,month,2007-01.aspx</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick Leonard</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2087</link>
		<dc:creator>Patrick Leonard</dc:creator>
		<pubDate>Fri, 16 Mar 2007 22:37:33 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2087</guid>
		<description>Emilio,

I will try to "de-marketing-ize" as much as possible ;) I'm not familiar with DataRush (apart from what i just got from the web site) so I can't really comment on what they have done. 

The limitation in app servers with multi-core is primarily around applications with ordering requirements. If the app doesn't care about order, then the OS, app server, SMP, etc. can spawn new threads as needed and it should scale fine. But if the application logic requires ordering ('A' must happen before 'B'), then they have no way of knowing how to avoid race conditions or other problematic behavior. 

This problem is not unique to java. It is a basic issue of concurrency - how to do more than one thing at a time and still ensure that order happens as required by the business logic. 

Yes, it can be done with multi-threaded programming, and many apps are already set up for this. But many are not, so the question is how to get them ready for concurrency without significant rewrites.

There is another thing to consider - do you want your concurrency model embedded in your application logic? It's a bit like databases - the data model doesn't reside inside the application logic (although people used to do that way back when). Abstracting your concurrency model out of the application code can have benefits, such as being able to performance tune without modifying source code.

BTW, to answer your question, the Rogue Wave implementation is multi-language, so it supports Java, C++, .NET, BPEL. We have used it for bulk batch apps and for transactional.</description>
		<content:encoded><![CDATA[<p>Emilio,</p>
<p>I will try to "de-marketing-ize" as much as possible ;) I'm not familiar with DataRush (apart from what i just got from the web site) so I can't really comment on what they have done. </p>
<p>The limitation in app servers with multi-core is primarily around applications with ordering requirements. If the app doesn't care about order, then the OS, app server, SMP, etc. can spawn new threads as needed and it should scale fine. But if the application logic requires ordering ('A' must happen before 'B'), then they have no way of knowing how to avoid race conditions or other problematic behavior. </p>
<p>This problem is not unique to java. It is a basic issue of concurrency - how to do more than one thing at a time and still ensure that order happens as required by the business logic. </p>
<p>Yes, it can be done with multi-threaded programming, and many apps are already set up for this. But many are not, so the question is how to get them ready for concurrency without significant rewrites.</p>
<p>There is another thing to consider - do you want your concurrency model embedded in your application logic? It's a bit like databases - the data model doesn't reside inside the application logic (although people used to do that way back when). Abstracting your concurrency model out of the application code can have benefits, such as being able to performance tune without modifying source code.</p>
<p>BTW, to answer your question, the Rogue Wave implementation is multi-language, so it supports Java, C++, .NET, BPEL. We have used it for bulk batch apps and for transactional.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Emilio</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2075</link>
		<dc:creator>Emilio</dc:creator>
		<pubDate>Fri, 16 Mar 2007 14:13:29 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2075</guid>
		<description>I would like a compare/contrast between Rouge's stuff and Pervasive DataRush. Are both 100% Java? Do both use dataflow graph theory to structure pipelines? Are both targeting data-intensive BULK data processing apps? Do both auto-scale up and down as processor and memory are modified on the fly by the VM? 

When to use which?

Let's cut through the marketing b.s. and talk turkey so developers will learn something in this blog. I dare ya :-)

PS: I totally do not get the comments about multicore + app servers = slight problem. I don't see the issue because the OS and SMP multicore server abstract any/all issues from the JVM that spins up concurrent threads. There are 1000 "contracts" all the way up and down the stack that would prevent surprises. So I am most definitely missing the point here. Can we talk a couple levels deeper starting from EJB bean pooling and driving down the stack? I need to see where the issue is for J2EE-like use-cases.

PPS: I see all the issue with batch data processing apps. Not with OLTP or ESB/SOA apps. Just don't see it...</description>
		<content:encoded><![CDATA[<p>I would like a compare/contrast between Rouge's stuff and Pervasive DataRush. Are both 100% Java? Do both use dataflow graph theory to structure pipelines? Are both targeting data-intensive BULK data processing apps? Do both auto-scale up and down as processor and memory are modified on the fly by the VM? </p>
<p>When to use which?</p>
<p>Let's cut through the marketing b.s. and talk turkey so developers will learn something in this blog. I dare ya :-)</p>
<p>PS: I totally do not get the comments about multicore + app servers = slight problem. I don't see the issue because the OS and SMP multicore server abstract any/all issues from the JVM that spins up concurrent threads. There are 1000 "contracts" all the way up and down the stack that would prevent surprises. So I am most definitely missing the point here. Can we talk a couple levels deeper starting from EJB bean pooling and driving down the stack? I need to see where the issue is for J2EE-like use-cases.</p>
<p>PPS: I see all the issue with batch data processing apps. Not with OLTP or ESB/SOA apps. Just don't see it...</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patrick Leonard</title>
		<link>http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2048</link>
		<dc:creator>Patrick Leonard</dc:creator>
		<pubDate>Thu, 15 Mar 2007 17:03:50 +0000</pubDate>
		<guid isPermaLink="false">http://softwareblogs.intel.com/2007/03/14/the-multi-core-dilemma-by-patrick-leonard/#comment-2048</guid>
		<description>Stan, you hit it exactly. Most java developers that we talk to do assume that this will be handled for them. And there is some truth to that - certain aspects can be handled "automagically". But there are some significant use cases where existing apps will not scale when moved to multi-core hardware. 

For example, any application that has to ensure ordered processing will have this issue. The JVM, OS, app server, etc. don't know the business logic of the application, so they cannot execute parallel tasks in a way that is consistent with the application's ordering requirements. In fact, they may execute the tasks in a way that is at odds with the application.</description>
		<content:encoded><![CDATA[<p>Stan, you hit it exactly. Most java developers that we talk to do assume that this will be handled for them. And there is some truth to that - certain aspects can be handled "automagically". But there are some significant use cases where existing apps will not scale when moved to multi-core hardware. </p>
<p>For example, any application that has to ensure ordered processing will have this issue. The JVM, OS, app server, etc. don't know the business logic of the application, so they cannot execute parallel tasks in a way that is consistent with the application's ordering requirements. In fact, they may execute the tasks in a way that is at odds with the application.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
