OpenMP 线程化(Threading)基础(1)--并行计算简介
? 或許你手頭上有一些現成的代碼,你想把它們線程化以便能都更好地運行在多核的系統(Multicore System)上。再開始動手操作之前你需要知道些什么呢?
? 這篇文章將會告訴你如何通過使用openMP對你的代碼進行線程化,并幫助你決定哪些地方進行線程化,還會向你展示如何測試更改后的代碼。同時還會對一些典型的Win32 線程進行比較。??
? 今天你已經可以開到內核數不斷增長的多核處理器(Mulitcore Processors)。其結果就是,程序員們需要將線程的概念加入他們的代碼中以便可以利用多核的優點,并且將性能敏感(Performance-Sensitive)的代碼分離出來。然而,你的代碼一定要測試好,因為相同的代碼可能運行在單核(single-core),雙核(dual-core),四核(quad-core)甚至更多核的機器上。這一章里,將更多的著眼于通用線程化技術,并使用OpenMP 線程化庫,而且測試它們的性能。這些將會給你一些性能基線(Performance Baselines)做參考,你將學會如何線程化和測試你的代碼。
? OpenMP是一個用來編寫簡單線程代碼的函數庫。常常用來在原有的單線程代碼中加入線程代碼。我假設你熟悉線程基本概念,但是不要求你使用過openMP或者有編寫多線程代碼的經驗。
讓我們先來看一些簡單的代碼,使用OpenMP 對其進行線程化,再看看代碼在一臺雙核系統上的表現。這些將會讓你對OpenMP是如何執行的有更好的理解,同時你也會學到如何修改你的代碼和測試代碼。為了做比較,Win32線程化也會有所展示。
? 所有的代碼都是用C++編寫的,使用Intel C++ 9.0 編譯器編譯。在Windows XP SP2操作系統上進行測試。閱讀附錄有關測試平臺配置的章節可以獲得更詳細的信息。?
?? 這里所列出的示例代碼,如果強行執行在單線程上會有較小的性能降低。OpenMP 也擁有與Win32線程相似的開銷。然而,循環啟動的開銷對于OpenMP和Win32線程來說都是比較高的。
?? 這就是說,這種機制實現的線程化對于循環較少或是性能敏感度較高的程序來說并不準確。這些情況需要運用其他機制實現線程化,比如線程池(Thread Pools)。
??????
???未完待續......
?
轉載于:https://www.cnblogs.com/matrixnull/archive/2006/12/14/592598.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的OpenMP 线程化(Threading)基础(1)--并行计算简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .ascx是什么文件?
- 下一篇: 强大的.NET反编译工具Reflecto