官术网_书友最值得收藏!

1.1 不同編程語言的實現(xiàn)

首先,采用三種常用的編程語言:Python、Java和C語言來實現(xiàn)矩陣乘法程序。為了突出性能優(yōu)化效果,這里采用了最簡單易讀的代碼實現(xiàn),源代碼參見代碼1.1~代碼1.3。

1.Python語言實現(xiàn)

矩陣乘法的Python語言實現(xiàn)如代碼1.1所示。

代碼1.1 矩陣乘法的Python語言實現(xiàn)

2.Java語言實現(xiàn)

矩陣乘法的Java語言實現(xiàn)如代碼1.2所示。

代碼1.2 矩陣乘法的Java語言實現(xiàn)

3.C語言實現(xiàn)

矩陣乘法的C語言實現(xiàn)如代碼1.3所示。

代碼1.3 矩陣乘法的C語言實現(xiàn)

為了后續(xù)實驗對比的一致性,我們統(tǒng)一采用Intel ICX編譯器對C語言版本的矩陣乘法進行編譯。不同的編譯器可能在具體實現(xiàn)上采取不同的編譯優(yōu)化手段,這些編譯優(yōu)化的手段會不同程度地影響程序在真實硬件上的運行性能。運行結果如表1.2所示。

表1.2 不同語言實現(xiàn)的矩陣乘法運行時間對比

根據(jù)實驗結果,Python語言實現(xiàn)的運行性能遠低于Java語言和C語言的實現(xiàn)。這是由于Python語言實現(xiàn)是通過Python解釋器進行動態(tài)解釋運行的。在執(zhí)行Python程序時,需要不斷地在解釋器中對Python語句進行解釋并進行相關對象的構造與銷毀,同時需要對解釋器的狀態(tài)進行動態(tài)更新,這就導致Python語言在實際執(zhí)行一條語句時比另外兩種語言更為耗時。

Java語言實現(xiàn)會先利用javac編譯器將源程序編譯為Java字節(jié)碼(bytecode),然后在Java程序?qū)嶋H運行時利用Java虛擬機(Java Virtual Machine,JVM)對編譯好的字節(jié)碼文件進行解釋或者即時(Just-In-Time,JIT)編譯成機器碼執(zhí)行。C語言實現(xiàn)則更加簡單直接,會由編譯器直接編譯成機器碼執(zhí)行。

通常來說,編譯型的C語言實現(xiàn)要快于混合了解釋和編譯的Java語言實現(xiàn)。然而,Java虛擬機會對Java程序做許多運行時優(yōu)化,比如將熱點代碼即時編譯成本地機器碼,以減少解釋執(zhí)行的開銷。所以,在C語言編譯器禁用優(yōu)化時(如,編譯時使用了-O0選項),Java語言實現(xiàn)可能比C語言實現(xiàn)要快。為了簡單起見,下面不考慮運行時優(yōu)化,繼續(xù)采用C語言的實現(xiàn)進行優(yōu)化。

主站蜘蛛池模板: 陆川县| 定南县| 邯郸县| 新绛县| 赫章县| 玛纳斯县| 五大连池市| 洞头县| 大渡口区| 万宁市| 彭州市| 屏山县| 乡宁县| 公主岭市| 莱州市| 监利县| 四会市| 金阳县| 神木县| 双流县| 长葛市| 巴东县| 宣威市| 高要市| 天峻县| 武冈市| 额尔古纳市| 收藏| 绵阳市| 遂昌县| 灵石县| 合山市| 常熟市| 手机| 涟源市| 普洱| 樟树市| 盐亭县| 永康市| 宣化县| 定安县|