简易的程式平行化方法-OpenMP.pdf

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简易的程式平行化方法-OpenMP

簡易的程式平行化方法-OpenMP (一)簡介 本文原發表於:/blog/cns!E0070FB8ECF9015F!1018.entry 嗯~首先,Heresy 也是最近才開始試著用 openMP 的,所以其是這篇與其說是教學或介 紹,倒不如說是學習心得會更為恰當。會不會繼續用?說實話也是未知數。總之,看著辦囉~ 也希望有人對這東西有 研究的話,能多多指教。 多執行緒的概念 目前雙核心的 CPU 當道,AMD 的 Athlon64x2 、Intel 的 Pentium-D 、Core Duo,以及 即將上市的 Core 2 Duo ,儼然將成為下一代電腦的主流(尤其是超低價的 Pentium D ,絕 對是現階段 C/P 值極高的雙核心 CPU )。但是雙核心有什麼用呢? 對於一般單一執行緒(single thread )的程式,多核心的處理器並沒有辦法提升它的處理效 能;不過對於多執行緒(multi thread)的程式,就可以透過不同的核心同時計算,來達到 加速的目的了!簡單的例子,以單執行緒的程式來說,一件事做一次要十秒的話,要做十次, 都丟 給同一顆核心做的話,自然就是 10 秒 * 10 次,也就是 100 秒了;但是以多執行 緒的程式來說,它可以把這一件事,分給兩顆核心各自做,每顆核心各做 5 次,所以所需 要的時間就只需要 50 秒! 當 然,多執行緒的程式實際上沒這麼簡單。在工作的切割、結合上,也是要多花時間的, 所以在現實中,即使最佳狀況,雙核心的效能也不會是 1 + 1 = 2 這樣的理想化。除此之外, 也不是所有工作都是可以切割的!很多工作是有關聯性的,這樣如果直接切割給不同的處理 核心各自去平行運算,出來的結果是肯定有問 題的。而且,多執行緒的程式在編寫、維護 上,也都比單一執行緒的程式複雜上不少。 不過,如果電腦本身是多處理器、多核心處理器,或是 處理器擁有像 Intel Hyper-Threading Technology 這類的能在同一個時間處理多個執行緒的功能的話,那把各自獨立的工作由單 一執行緒改成多執行緒,在執行的效率上,大多還是會有增進的! 多執行緒的程式 寫程式的時候該怎麼去寫多 執行緒的程式呢?一般的方法,就是真的利用 thread 的控制, 去實際在程式中去產生其他的 thread 來處理。像 POSIX Threads 這套 library ,就是用來 產生、控制執行緒的函式庫。而像 Microsoft VisualStudio 2005 中,也有提供控制 thread 的 功能。這種方法,大多就是產生多個 thread ,而再由主要的 thread 把工作拆開,分給各 thread 去運算,最後再由主要的 thread 回收結果、整合。 但是,實際上要去控制 thread 是滿麻煩的~在程式的編寫上,也會複雜不少;而如果我們 只是想要把一些簡單的迴圈平行化處理,用 thread library 來控制,實在有點殺雞用牛刀的 感覺。這時候,用 Open MP 就簡單多了!OpenMP 是一種能透過高階指令,很簡單地將 程式平行化、多執行緒化的 API ;在最簡單的情形,甚至可以只加一行指令,就可以將迴 圈內的程式平行化處理了! OpenMP 的基本使用 要在 Visual C++ 2005 中使用 openMP 其實不難,只要將 Project 的 Properties 中 C/C++ 裡 Languag

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档