<?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: 多核多緒多樂趣</title>
	<atom:link href="http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun</link>
	<description>遊戲開發‧遊戲程式‧遊戲設計</description>
	<lastBuildDate>Tue, 07 Sep 2010 11:33:03 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-2193</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Wed, 15 Apr 2009 09:33:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-2193</guid>
		<description>@R2D2:
勇氣不可嘉。

各位好孩子千萬不要學哦～</description>
		<content:encoded><![CDATA[<p>@R2D2:<br />
勇氣不可嘉。</p>
<p>各位好孩子千萬不要學哦～</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: R2D2</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-2191</link>
		<dc:creator>R2D2</dc:creator>
		<pubDate>Tue, 14 Apr 2009 21:17:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-2191</guid>
		<description>剛去那邊繞了一圈 好像所有文章都是抄來的
要是我還不敢把自己相片和學校名字秀出來 哈哈</description>
		<content:encoded><![CDATA[<p>剛去那邊繞了一圈 好像所有文章都是抄來的<br />
要是我還不敢把自己相片和學校名字秀出來 哈哈</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-2185</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Mon, 13 Apr 2009 10:46:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-2185</guid>
		<description>@fr3@K:
這麼普通的文章也會被偷……囧。

感謝告知。</description>
		<content:encoded><![CDATA[<p>@fr3@K:<br />
這麼普通的文章也會被偷……囧。</p>
<p>感謝告知。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fr3@K</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-2177</link>
		<dc:creator>fr3@K</dc:creator>
		<pubDate>Thu, 09 Apr 2009 07:34:27 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-2177</guid>
		<description>http://g9677602.blogspot.com/2009/03/blog-post.html</description>
		<content:encoded><![CDATA[<p><a href="http://g9677602.blogspot.com/2009/03/blog-post.html" rel="nofollow">http://g9677602.blogspot.com/2009/03/blog-post.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: fr3@K</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-200</link>
		<dc:creator>fr3@K</dc:creator>
		<pubDate>Wed, 11 Jun 2008 14:54:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-200</guid>
		<description>不會 OMP 也不用怕, 用 &lt;a href=&quot;http://fsfoundry.org/codefreak/2008/04/15/the-free-launch-is-back/&quot; rel=&quot;nofollow&quot;&gt;MCSTL&lt;/a&gt; 也可以.

&lt;blockquote&gt;
&lt;strong&gt;半路：&lt;/strong&gt;
噢！這個實在太酷了～～
只要在程式中有使用到 sort, find, for_each 等 STL algorithm，
就能夠不改一行程式碼的享受到多核運算的好處。真是夠神！
如果有時間的話，應該要來試用看看。

非常感謝您的分享～ ：D
&lt;/blockquote&gt;</description>
		<content:encoded><![CDATA[<p>不會 OMP 也不用怕, 用 <a href="http://fsfoundry.org/codefreak/2008/04/15/the-free-launch-is-back/" rel="nofollow">MCSTL</a> 也可以.</p>
<blockquote><p>
<strong>半路：</strong><br />
噢！這個實在太酷了～～<br />
只要在程式中有使用到 sort, find, for_each 等 STL algorithm，<br />
就能夠不改一行程式碼的享受到多核運算的好處。真是夠神！<br />
如果有時間的話，應該要來試用看看。</p>
<p>非常感謝您的分享～ ：D
</p></blockquote>
]]></content:encoded>
	</item>
	<item>
		<title>By: Hua</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-116</link>
		<dc:creator>Hua</dc:creator>
		<pubDate>Mon, 05 May 2008 03:40:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-116</guid>
		<description>題外話--
增加核數目不一定會增加效能, 還要考慮程式的特性. 可以參考下篇:
http://blog.csdn.net/drzhouweiming/archive/2007/04/10/1559718.aspx

所以如果有許多執行緒有共用鎖的行為, 理論上最好能放在同一個核上執行.
多核中的記憶體同步是個有趣的研究問題, 不管在硬體設計或是編譯器, 作業系統支援.

&lt;blockquote&gt;
&lt;strong&gt;半路：&lt;/strong&gt;
感謝提供有用的知識連結～ ：D

原來鎖的存在會造成核心數目提升效能的瓶頸，
難怪要逐漸往 Lock-Free Algorithm 的方向前進了。
我想，未來的硬體架構，應該也會提供更好的多緒程式支援性。
目前的狀況下，還是盡可能減少鎖定的使用吧。
&lt;/blockquote&gt;</description>
		<content:encoded><![CDATA[<p>題外話&#8211;<br />
增加核數目不一定會增加效能, 還要考慮程式的特性. 可以參考下篇:<br />
<a href="http://blog.csdn.net/drzhouweiming/archive/2007/04/10/1559718.aspx" rel="nofollow">http://blog.csdn.net/drzhouweiming/archive/2007/04/10/1559718.aspx</a></p>
<p>所以如果有許多執行緒有共用鎖的行為, 理論上最好能放在同一個核上執行.<br />
多核中的記憶體同步是個有趣的研究問題, 不管在硬體設計或是編譯器, 作業系統支援.</p>
<blockquote><p>
<strong>半路：</strong><br />
感謝提供有用的知識連結～ ：D</p>
<p>原來鎖的存在會造成核心數目提升效能的瓶頸，<br />
難怪要逐漸往 Lock-Free Algorithm 的方向前進了。<br />
我想，未來的硬體架構，應該也會提供更好的多緒程式支援性。<br />
目前的狀況下，還是盡可能減少鎖定的使用吧。
</p></blockquote>
]]></content:encoded>
	</item>
	<item>
		<title>By: 半路</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-107</link>
		<dc:creator>半路</dc:creator>
		<pubDate>Mon, 21 Apr 2008 08:05:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-107</guid>
		<description>補充資料：&lt;strong&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyId=A36FE736-5FE7-4E08-84CF-ACCF801538EB&amp;displaylang=en&quot; rel=&quot;nofollow&quot;&gt;Getting More From Multicore&lt;/a&gt;&lt;/strong&gt;

這是微軟在 GDC 2008 的其中一篇演講資料，下載檔案中有包含投影片檔以及錄音檔。這個 PPT 的內容真的非常不錯，值得一讀！除了投影片的內容外，也別忘記閱讀底下備忘稿的部分，有更詳細的解釋與說明文字。或者也可以一面閱讀，一面聽內附的錄音檔。

其中提到了三種多緒的執行模型 (Execution Models)：
&lt;ul&gt;
&lt;li&gt;Bulk Synchronous Processing (BSP)&lt;/li&gt;
&lt;li&gt;Communication Sequential Processes (CSP)&lt;/li&gt;
&lt;li&gt;Task Pool&lt;/li&gt;
&lt;/ul&gt;

目前最熱門也是最複雜的技術，應該就屬 Task Pool 的執行模型了。
等我學習完之後，再寫範例程式來試試～：D</description>
		<content:encoded><![CDATA[<p>補充資料：<strong><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A36FE736-5FE7-4E08-84CF-ACCF801538EB&#038;displaylang=en" rel="nofollow">Getting More From Multicore</a></strong></p>
<p>這是微軟在 GDC 2008 的其中一篇演講資料，下載檔案中有包含投影片檔以及錄音檔。這個 PPT 的內容真的非常不錯，值得一讀！除了投影片的內容外，也別忘記閱讀底下備忘稿的部分，有更詳細的解釋與說明文字。或者也可以一面閱讀，一面聽內附的錄音檔。</p>
<p>其中提到了三種多緒的執行模型 (Execution Models)：</p>
<ul>
<li>Bulk Synchronous Processing (BSP)</li>
<li>Communication Sequential Processes (CSP)</li>
<li>Task Pool</li>
</ul>
<p>目前最熱門也是最複雜的技術，應該就屬 Task Pool 的執行模型了。<br />
等我學習完之後，再寫範例程式來試試～：D</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Milo</title>
		<link>http://blog.monkeypotion.net/gameprog/note/multicore-multithread-and-multifun/comment-page-1#comment-101</link>
		<dc:creator>Milo</dc:creator>
		<pubDate>Tue, 15 Apr 2008 16:59:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.monkeypotion.net/?p=107#comment-101</guid>
		<description>又是一篇很好的簡介。我還未有機會看 Gems 7...

除了以上介紹的方案，我覺得一個常用的多緒方式是 producer-consumer pattern。

而有時候，使用 multi-thread 不是因為 single thread 效能不足，而是因為要等 I/O，例如 background loading 就算是單核也需要 multi-thread。最近玩Xbox360，發覺不少遊戲還是在過關卡時等很長的載入時間，一般歐美遊戲在這方面比日本遊戲好。

另外，前文中的 

Lock kLock; 

我覺得應該改為 

Lock kLock(m_kMutex); 
// Lock::Lock(Mutex&amp; mutex) : mMutex(mutex) { mutex-&gt;Lock(); } 
// Lock::~Lock() { mMutex-&gt;Unlock() }

如果只是從 local variable (lock) 裡建立 mutex 就沒有意義了? 還是有其他背後的精妙之處?

&lt;blockquote&gt;
&lt;strong&gt;半路：&lt;/strong&gt;
Producer-Consumer Pattern 是指將 threads 當作 Consumer，由 Producer 產生任務分派給各個 threads 進行工作嗎？不知道和 threading pool 的概念有沒有相似性呢。

現在遊戲的資料量越來越龐大，Background Loading 的重要性也越來越高。如果在傳統單核心 CPU 的情況下使用多緒，會對遊戲主程式迴圈造成效能影響，但是如果在多核系統中，就應該能夠比較適當地使用 Background Loading 才對；但是不止日本遊戲在這方面做得不夠好，台灣也幾乎沒看過使用這項技術的遊戲。

沒錯，Lock kLock(m_kMutex) 才是正確的用法。 Orz
文章內容已更正，感謝堪誤。
&lt;/blockquote&gt;
</description>
		<content:encoded><![CDATA[<p>又是一篇很好的簡介。我還未有機會看 Gems 7&#8230;</p>
<p>除了以上介紹的方案，我覺得一個常用的多緒方式是 producer-consumer pattern。</p>
<p>而有時候，使用 multi-thread 不是因為 single thread 效能不足，而是因為要等 I/O，例如 background loading 就算是單核也需要 multi-thread。最近玩Xbox360，發覺不少遊戲還是在過關卡時等很長的載入時間，一般歐美遊戲在這方面比日本遊戲好。</p>
<p>另外，前文中的 </p>
<p>Lock kLock; </p>
<p>我覺得應該改為 </p>
<p>Lock kLock(m_kMutex);<br />
// Lock::Lock(Mutex&amp; mutex) : mMutex(mutex) { mutex-&gt;Lock(); }<br />
// Lock::~Lock() { mMutex-&gt;Unlock() }</p>
<p>如果只是從 local variable (lock) 裡建立 mutex 就沒有意義了? 還是有其他背後的精妙之處?</p>
<blockquote><p>
<strong>半路：</strong><br />
Producer-Consumer Pattern 是指將 threads 當作 Consumer，由 Producer 產生任務分派給各個 threads 進行工作嗎？不知道和 threading pool 的概念有沒有相似性呢。</p>
<p>現在遊戲的資料量越來越龐大，Background Loading 的重要性也越來越高。如果在傳統單核心 CPU 的情況下使用多緒，會對遊戲主程式迴圈造成效能影響，但是如果在多核系統中，就應該能夠比較適當地使用 Background Loading 才對；但是不止日本遊戲在這方面做得不夠好，台灣也幾乎沒看過使用這項技術的遊戲。</p>
<p>沒錯，Lock kLock(m_kMutex) 才是正確的用法。 Orz<br />
文章內容已更正，感謝堪誤。
</p></blockquote>
]]></content:encoded>
	</item>
</channel>
</rss>
