<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Transactional Memory - All Comments</title><link>http://blogs.msdn.com/b/stmteam/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>re: STM.NET DevLab Incubation Complete</title><link>http://blogs.msdn.com/b/stmteam/archive/2010/05/12/stm-net-devlab-incubation-complete.aspx#10051407</link><pubDate>Wed, 18 Aug 2010 11:21:02 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10051407</guid><dc:creator>Anton</dc:creator><description>&lt;p&gt;link to STM Programmer&amp;#39;s Guide does not work &amp;nbsp;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10051407" width="1" height="1"&gt;</description></item><item><title>re: STM.NET DevLab Incubation Complete</title><link>http://blogs.msdn.com/b/stmteam/archive/2010/05/12/stm-net-devlab-incubation-complete.aspx#10012262</link><pubDate>Thu, 13 May 2010 04:43:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10012262</guid><dc:creator>JudahGabriel</dc:creator><description>&lt;p&gt;Wow. So STM.NET is retired. Was technical problems the final blow? I remember Joe Duffy describing a &amp;lt;a href=&amp;quot;&lt;a rel="nofollow" target="_new" href="http://www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx&amp;quot;&amp;gt;fundamental"&gt;http://www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx&amp;quot;&amp;gt;fundamental&lt;/a&gt; technical problem discovered in the STM bits&amp;lt;/a&amp;gt; - is that what put the nail in the coffin?&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10012262" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9854072</link><pubDate>Fri, 31 Jul 2009 07:41:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9854072</guid><dc:creator>Guy Korland</dc:creator><description>&lt;p&gt;@Torvald is right the programming model is much more important than that performance for most of the programmers. From my experience most of them are not even trying to handle concurrency issue and will not even try to use anything but coarse grained locking.&lt;/p&gt;
&lt;p&gt;Saying that on that on the other hand the performance can't be dramatically low even for a single thread.&lt;/p&gt;
&lt;p&gt;In Deuce we started to work on this single thread overhead and we expect to reduce it dramatically using very similar to the ways the GC overhead was reduced gradually.&lt;/p&gt;
&lt;p&gt;BTW, we used Azul Vega2 (96 threads) and Sun Maramba (128 threads), for the big tests.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9854072" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9853831</link><pubDate>Fri, 31 Jul 2009 01:42:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9853831</guid><dc:creator>dvyukov</dc:creator><description>&lt;p&gt;Re: What really matters in the TM vs. locks vs. X debate is the programming interface. &lt;/p&gt;
&lt;p&gt;Hmm... I guess single-threading will be a clear winner. No? Why one would want to see on anything else? I think there is something else except programming interface.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9853831" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9853728</link><pubDate>Thu, 30 Jul 2009 23:52:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9853728</guid><dc:creator>Torvald</dc:creator><description>&lt;p&gt;What really matters in the TM vs. locks vs. X debate is the programming interface. Atomic blocks don't specify how synchronization is implemented. This makes it a tough problem for the TM library+compiler, but at the same time if offers plenty of flexibility for how the TM+compiler actually implement this. This is an optimization problem that is largely decoupled from the composition of application code. It is a lot harder to optimize with locking (unless the application is trivial), especially if you do not know the workload a priori. It is hard to believe that every application can have built-in tuning for every possible synchronization workload. It is more reasonable to try this for an STM, because you build TM+compiler once and then use it in several applications.&lt;/p&gt;
&lt;p&gt;And I think this is what Nir Shavit referred to. STM research doesn't need to care that much about expert programmers (eg, people working on OS kernels such as Solaris') as they can spend a lot of time on their code and are highly qualified. But, locking will be hard for larger teams of average programmers that develop applications with nontrivial synchronization, and that do not want to or cannot spend lots of development time on synchronization.&lt;/p&gt;
&lt;p&gt;So, TM is, IMO, mostly about enabling a certain style of programming (atomic blocks for synchronization) that decreases development costs for a average programmers and ordinary applications. I don't see anything wrong with trying to accomplish this. Additionally, we actually do learn a lot about synchronization (unless when we just recycle old DB ideas :), and we do learn more about how failure atomicity and concurrency relate to each other in non-database settings (@Dana: do you remember the discussions at Transact08?).&lt;/p&gt;
&lt;p&gt;Some more detailed comments:&lt;/p&gt;
&lt;p&gt;The shared counter in time-based TMs is not a scalability problem, because you can use hardware clocks instead (many current machines already have suitable hardware clocks). For details, see&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://se.inf.tu-dresden.de/papers/preprint-riegel2007lsart.pdf"&gt;http://se.inf.tu-dresden.de/papers/preprint-riegel2007lsart.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One possible approach to solve the &amp;quot;linked-list problem&amp;quot; is to use multi-level concurrency control, which has been investigated by database researchers long before the TM hype. Transactional Boosting is essentially multi-level concurrency control applied to a TM scenario with fast base objects (custom concurrent algorithms for data structures).&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9853728" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9853440</link><pubDate>Thu, 30 Jul 2009 18:33:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9853440</guid><dc:creator>Marek</dc:creator><description>&lt;p&gt;&amp;gt; I will note that the Sun TM people are doing interesting &lt;/p&gt;
&lt;p&gt;&amp;gt; work on avoiding this scalability bottleneck&lt;/p&gt;
&lt;p&gt;Here is the paper describing this work:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://research.sun.com/scalable/pubs/TRANSACT2009-ScalableSTMAnatomy.pdf"&gt;http://research.sun.com/scalable/pubs/TRANSACT2009-ScalableSTMAnatomy.pdf&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9853440" width="1" height="1"&gt;</description></item><item><title>re: STM.NET Released!</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/28/stm-net-released.aspx#9853290</link><pubDate>Thu, 30 Jul 2009 16:00:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9853290</guid><dc:creator>Daniel Earwicker</dc:creator><description>&lt;p&gt;Along with Atomic.Do, would you consider this:&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;public static T Get&amp;lt;T&amp;gt;(AtomicFunc&amp;lt;T&amp;gt; func)&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;T result = default(T);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;try&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = func();&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;catch (AtomicMarker) { }&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return result;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;This would be nice and convenient, e.g. instead of (from the STM User Guide):&lt;/p&gt;
&lt;p&gt;public bool Validate()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;bool result = false;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;Atomic.Do(()=&amp;gt;&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;result = (m_string1.Equals(m_string2) == false);&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;});&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return result;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;We'd just say:&lt;/p&gt;
&lt;p&gt;public bool Validate()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt; &amp;nbsp; &amp;nbsp;return Atomic.Get(() =&amp;gt; m_string1.Equals(m_string2) == false);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9853290" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9852557</link><pubDate>Thu, 30 Jul 2009 00:20:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852557</guid><dc:creator>dvyukov</dc:creator><description>&lt;p&gt;Re: ----------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Does STM have a bright future? &amp;nbsp;Dan Grossman at U of Washington makes the analogy with garbage collection, and I think it's a good one: would you have predicted that GC would have a bright future in, say, 1985? &amp;nbsp;Probably not, but it did. &amp;nbsp;It turned out that there was cleverness to be had that people hadn't thought of yet. &amp;nbsp;The same might still be true of software STM techniques.&lt;/p&gt;
&lt;p&gt;----------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;I am saying anything about 10-25 years future. I do not care about that. Probably that time STM will backed by HTM so that there will be no problem of instrumentation overheads and read scalability. Or maybe everyone will be using auto-parallelization stuff, so that nobody will care about such things as mutexes, threads and STM.&lt;/p&gt;
&lt;p&gt;Arghhh, blog interface becomes too painful, probably we better move to:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://social.msdn.microsoft.com/Forums/en-US/stmdevlab/threads"&gt;http://social.msdn.microsoft.com/Forums/en-US/stmdevlab/threads&lt;/a&gt;&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852557" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9852552</link><pubDate>Thu, 30 Jul 2009 00:16:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852552</guid><dc:creator>dvyukov</dc:creator><description>&lt;p&gt;Re:---------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;In a managed world, the application doesn't usually have to do any memory or object lifetime management, and the GC and TM can be made to play together nicely. &amp;nbsp;There are ways to do logging and statistics that do most things thread-locally, and only occasionally synchronize. &amp;nbsp;Reads/modifications of shared data structures are of course shared, but whether they *scale* depends on the data structure. &amp;nbsp;It's possibly to make a hash table scale pretty nicely. &amp;nbsp;A queue is more problematic, by nature of its semantics. &amp;nbsp;But in many circumstances you don't require &amp;quot;precise&amp;quot; queue semantics -- an approximate queue, that gives &amp;quot;roughly FIFO&amp;quot; ordering, may be adequate, and allow better scaling. &amp;nbsp;So yes, sometimes you have to share -- but that doesn't mean you can't scale.&lt;/p&gt;
&lt;p&gt;---------------------------------------------------------------------&lt;/p&gt;
&lt;p&gt;Ah, you crack me, I can do and done all that stuff - roughly FIFO queues, cache-conscious hash tables, efficient blocking/signaling, zero-overhead rw mutexes, etc (&lt;a rel="nofollow" target="_new" href="http://groups.google.ru/group/lock-free/topics"&gt;http://groups.google.ru/group/lock-free/topics&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But (1) I would not call that easier that careful fine-grained locking at all, (2) I am not sure as to whether STM is a good tool for that, currently I use low-level atomics with fine-grained fences + a bit OS dependent stuff + a dash of hardware dependent stuff.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852552" width="1" height="1"&gt;</description></item><item><title>re: Are we beyond the trough of disillusionment?</title><link>http://blogs.msdn.com/b/stmteam/archive/2009/07/24/are-we-beyond-the-trough-of-disillusionment.aspx#9852533</link><pubDate>Wed, 29 Jul 2009 23:57:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9852533</guid><dc:creator>dvyukov</dc:creator><description>&lt;p&gt;For example, how STM can efficiently handle iteration over lengthy linked-list with concurrent mutations?&lt;/p&gt;
&lt;p&gt;Yes, I can redesign the application or use something like AMD ASF's 'release' operation. But doesn't this defeat the whole point of simplicity and productivity? I guess that neither way will be fast and easy.&lt;/p&gt;
&lt;p&gt;Btw, I proposed to incorporate 'release' statement (see &lt;a rel="nofollow" target="_new" href="http://developer.amd.com/assets/45432-ASF_Spec_2.1.pdf"&gt;http://developer.amd.com/assets/45432-ASF_Spec_2.1.pdf&lt;/a&gt;) into Intel STM, but they rejected the proposal. In you manual I see you mention 'open nesting' and 'abstract nested transaction' regarding linked list-problem. Are you going to incorporate something which will solve linked-list problem? Btw, does open nesting solve the problem? I'm not sure how...&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9852533" width="1" height="1"&gt;</description></item></channel></rss>