<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic About lockfree_mpmc ... in Intel® Moderncode for Parallel Architectures</title>
    <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780029#M235</link>
    <description>&lt;DIV&gt;&lt;BR /&gt;Hello all,&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;I think i have discovered a problem with lockfree_mpmc:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;You will find the source code of lockfree_mpmc at:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://pages.videotron.com/aminer/"&gt;http://pages.videotron.com/aminer/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So please follow with me:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;If you take a look at the lockfree_mpmc , here is the source code &lt;/DIV&gt;
&lt;DIV&gt;of the push() method:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;---&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;function TLockfree_MPMC.push(tm : tNodeQueue):boolean;&lt;BR /&gt;var 
lasttail,newtemp:long;&lt;BR /&gt;i,j:integer;&lt;BR /&gt;begin&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;if getlength &amp;gt;= fsize &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; 
result:=false;&lt;BR /&gt; exit;&lt;BR /&gt; end; &lt;BR /&gt;result:=true;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;newTemp:=LockedIncLong(temp);&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;[1] lastTail:=newTemp-1;&lt;BR /&gt;[2] setObject(lastTail,tm);&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;repeat&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;if CAS(tail,lasttail,newtemp) &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; exit; 
&lt;BR /&gt; end;&lt;BR /&gt;sleep(0);&lt;BR /&gt;until false;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;end;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;---&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;As you know in the x86 architectureLoads may be reordered with older 
stores &lt;/DIV&gt;
&lt;DIV&gt;to different locations.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So in line[2] there is a load of tail and lasttail to the registers of the 
processor &lt;/DIV&gt;
&lt;DIV&gt;before calling setobject()and just before on line [1] there is a store 
tolasttail.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So as you have noticed the processor can then reorder the loads on line [2] 
with the older &lt;/DIV&gt;
&lt;DIV&gt;store on line[1] and this will cause a problem, so i thinki have to 
insert a load between &lt;/DIV&gt;
&lt;DIV&gt;line [1] and line [2].&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;What do you think ?&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Sincerely,&lt;/DIV&gt;
&lt;DIV&gt;Amine Moulay Ramdane.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Sun, 22 Jul 2012 22:25:24 GMT</pubDate>
    <dc:creator>aminer10</dc:creator>
    <dc:date>2012-07-22T22:25:24Z</dc:date>
    <item>
      <title>About lockfree_mpmc ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780029#M235</link>
      <description>&lt;DIV&gt;&lt;BR /&gt;Hello all,&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;I think i have discovered a problem with lockfree_mpmc:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;You will find the source code of lockfree_mpmc at:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://pages.videotron.com/aminer/"&gt;http://pages.videotron.com/aminer/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So please follow with me:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;If you take a look at the lockfree_mpmc , here is the source code &lt;/DIV&gt;
&lt;DIV&gt;of the push() method:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;---&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;function TLockfree_MPMC.push(tm : tNodeQueue):boolean;&lt;BR /&gt;var 
lasttail,newtemp:long;&lt;BR /&gt;i,j:integer;&lt;BR /&gt;begin&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;if getlength &amp;gt;= fsize &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; 
result:=false;&lt;BR /&gt; exit;&lt;BR /&gt; end; &lt;BR /&gt;result:=true;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;newTemp:=LockedIncLong(temp);&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;[1] lastTail:=newTemp-1;&lt;BR /&gt;[2] setObject(lastTail,tm);&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;repeat&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;if CAS(tail,lasttail,newtemp) &lt;BR /&gt; then &lt;BR /&gt; begin&lt;BR /&gt; exit; 
&lt;BR /&gt; end;&lt;BR /&gt;sleep(0);&lt;BR /&gt;until false;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;end;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;---&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;As you know in the x86 architectureLoads may be reordered with older 
stores &lt;/DIV&gt;
&lt;DIV&gt;to different locations.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So in line[2] there is a load of tail and lasttail to the registers of the 
processor &lt;/DIV&gt;
&lt;DIV&gt;before calling setobject()and just before on line [1] there is a store 
tolasttail.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;So as you have noticed the processor can then reorder the loads on line [2] 
with the older &lt;/DIV&gt;
&lt;DIV&gt;store on line[1] and this will cause a problem, so i thinki have to 
insert a load between &lt;/DIV&gt;
&lt;DIV&gt;line [1] and line [2].&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;What do you think ?&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Sincerely,&lt;/DIV&gt;
&lt;DIV&gt;Amine Moulay Ramdane.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sun, 22 Jul 2012 22:25:24 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780029#M235</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2012-07-22T22:25:24Z</dc:date>
    </item>
    <item>
      <title>About lockfree_mpmc ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780030#M236</link>
      <description>&lt;DIV&gt;&lt;BR /&gt;I wrote:&lt;/DIV&gt;
&lt;DIV&gt;&amp;gt; So as you have noticed the processor can then reorder the loads on 
line [2] &lt;BR /&gt;&amp;gt; with the older&lt;BR /&gt;&amp;gt; store on line [1] and this will cause a 
problem, so i think i have to insert &lt;BR /&gt;&amp;gt; a load between&lt;BR /&gt;&amp;gt; line [1] 
and line [2].&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Even if i insert a load beween line [1] and [2] this will not work , &lt;/DIV&gt;
&lt;DIV&gt;i have to insert an mfence between line [1] and [2].&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;What do you think ?&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Sincerely,&lt;/DIV&gt;
&lt;DIV&gt;Amine Moulay Ramdane.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sun, 22 Jul 2012 22:35:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780030#M236</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2012-07-22T22:35:40Z</dc:date>
    </item>
    <item>
      <title>About lockfree_mpmc ...</title>
      <link>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780031#M237</link>
      <description>&lt;DIV&gt;&lt;BR /&gt;Hello,&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;BR /&gt;I have inserted an mfence between line [1] and [2] in lockfree_mpmc andi 
have &lt;/DIV&gt;
&lt;DIV&gt;updated all my programs that uses lockfree_mpmc,and you can download all 
&lt;/DIV&gt;
&lt;DIV&gt;the source codes of my programs from:&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="http://pages.videotron.com/aminer/"&gt;http://pages.videotron.com/aminer/&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;
&lt;DIV&gt;Sincerely,&lt;/DIV&gt;
&lt;DIV&gt;Amine Moulay Ramdane.&lt;/DIV&gt;
&lt;DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sun, 22 Jul 2012 22:53:01 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-Moderncode-for-Parallel/About-lockfree-mpmc/m-p/780031#M237</guid>
      <dc:creator>aminer10</dc:creator>
      <dc:date>2012-07-22T22:53:01Z</dc:date>
    </item>
  </channel>
</rss>

