OpenMP使用體驗報告(概述)
(本文原創,首次使用OpenMP,將使用體會記錄下來供學習)
OpenMP是啥玩意???
多核多線程處理器的出現,讓並行計算成為可能。在此之前,單核處理器並不能並行計算,這是很顯然的,只有一個核心只能做到並發處理(與並行處理區別),這是一種虛擬化的技術,讓用戶感覺計算機在同時處理多任務,而事實上是通過分時算法來分割、分配任務,從而給用戶多任務同時處理的錯覺。
現在的個人機可以進行真正的並行處理,但是幾乎低段位的程序員會主動創建、銷毀線程來實現並行計算,因為這要進行算法設計,但是程序員比較懶。為此,OpenMP的一幫高階程序員開發了一套工具,試圖讓多線程並行計算變得輕松簡單。就像IDE是為了讓程序員更輕松的開發程序,省去分開編輯、編譯、鏈接、調試的麻煩,集成化的環境讓Coding變得輕松一點。
因此,OpenMP是一套工具,用以輕松地實現並行計算。
啟示錄:計算機行業的名言——”不要重復造輪子“,代碼復用、泛型程序設計、各種API、SDK、框架... 因此學習計算機技術很重要的一點就是搞清楚什麽是輪子、什麽是車子,輪子不用重造,但是車子的原理要清楚,這中間的平衡很難辦到。
並行計算怎麽辦到的?
如果要深入分析怎麽實現並行化的,這其實是OpenMP的工程師幹的事情,他們就是想把這些底層的實現封裝起來。除非你確有必要知道底層實現,否則就和我一樣,只需要知道OpenMP怎麽用,這也是本文討論的內容。
講兩個概念:運行時庫函數和編譯指導語句。
運行時庫是動態鏈接庫,在程序運行過程中進行動態鏈接,確保並行算法順利運行。這和靜態庫差不多,不用特別關註。
而編譯指導語句是程序從源代碼到可執行文件過程中,用來指導編譯的語句。顧名思義即可。在我看來這是學習OpenMP最重要的部分,理解並合理使用編譯指導語句,才能有效、高效的實現串行程序到並行程序的轉換。
例如下面這句編譯指導語句,就是用來指導符合條件的for循環從串行運行轉換為並行運行。
#pragma omp parallel for
沒有很復雜的技術,只是這次學習OpenMP有所感悟,覺得計算機從技術角度來看,有很多整體性的思考。比如學習一種技術的學習路徑如何制定,這是很有必要花時間思考的。就如軟件工程中主要的時間花在了需求分析和設計上,真正用來編程實現的部分倒是次要的。
開心每一天!
OpenMP使用體驗報告(概述)