哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何比較兩種截然不同的編程語言的性能

Q4MP_gh_c472c21 ? 來源:博客 ? 作者:Nibble Stew ? 2021-09-02 14:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

自從編程語言誕生以來,人們常常就哪種語言速度最快的問題爭論不休。無論是嚴肅的科學研究,還是深夜酒吧的喧囂,都不乏關于這個話題的爭執(zhí)。文本不打算就這個問題展開討論,我們不妨從一個更高的層面來看一看這個問題:

如何比較兩種截然不同的編程語言的性能。為了進行有意義的比較,我們必須使用兩種編程語言實現(xiàn)一系列測試程序,運行基準測試,然后再比較最后的結果。

實際上,這種比較的難度很大,有時甚至非常費時費力。盡管問題本身看起來很簡單,但大量可能出現(xiàn)錯誤的地方會導致一無所知的性能測試員遭遇坎坷,有時即使非常了解也無濟于事。

01 等效的實現(xiàn)?

為了公平地比較兩種語言的實現(xiàn),編寫出來的程序的質(zhì)量應該達到同等水平。也就是說,必須由某位對兩種編程語言以及領域知識的掌握程度大致相同的人來編寫程序。這本身就很難。如果由不同的人來編寫實現(xiàn),那么他們可能會選擇不同的算法來解決問題,這樣的性能比較就不再是編程語言本身的問題,而是每位程序員選擇的編程方法的問題。

即使兩個實現(xiàn)都是由同一個人使用相同的算法編寫的,仍然存在其他問題。通常,每個人都有自己擅長的語言。因此,他們會選擇自己喜歡的語言提供更快的實現(xiàn)。這就會引發(fā)偏差,因為這樣的性能比較衡量的不是編程語言本身,而更多的是程序員。這類的測試適合尋找易用性與生產(chǎn)力的差異,但對比較性能而言則不合適。

因此,你可能需要評估許多專業(yè)程序員已經(jīng)編寫好的程序。這是一個很好的方法,但有時即使是經(jīng)驗豐富的研究也會出錯。有一篇論文試圖通過這種方法比較不同的編程語言的性能和效率。

他們的測試結果表明,某個程序用C實現(xiàn)比C++實現(xiàn)快30%。這個測試結果影響了整個論文的基調(diào)。按照這個論斷,假設將所有 C 源代碼的文件擴展名 .c 改為.cpp并重新編譯,應該能得到大致相同的結果(可能會有幾個百分點的誤差)。所以我們只能得出以下結論(按照可能性從高到低排列):

C++版本的代碼比較差;

測試方法有明顯的瑕疵;

與C相比,該編譯器對C++的性能有重大的負面影響。換句話說,上述呈現(xiàn)的差異并非來自編程語言本身。

02 測量的難度

還有一個很大的問題是,如何測量某個程序的性能。一種常見的方法是連續(xù)運行多次測試,然后執(zhí)行如下操作:

處理異常值:去掉兩個極值(即最慢和最快的測量值);

計算剩余數(shù)據(jù)點的平均值和/或中位數(shù);

比較不同程序之間的結果,速度最快的程序獲勝。上過統(tǒng)計課程的人可能還記得如何計算標準差。這種方法看似合理且嚴謹,但其實包含多個系統(tǒng)誤差。其中最大的問題涉及測量中的噪聲。

大多數(shù)基本的統(tǒng)計工具都會假設誤差呈正態(tài)分布,平均值為零。如果測量的是溫度或速度之類,則這個假設是合理的。然而,對于編程語言的性能測量來說,這個假設并不合理。程序的運行時間包括實際上花費在解決問題上的時間,以及來自操作系統(tǒng)中斷、磁盤訪問等方面的開銷。如果我們假設噪聲為平均值為零的高斯噪聲,那么這意味著計算機有一些未知的過程,可以讓程序的運行速度超過完全無噪聲時的情況。這當然是不可能的。這里的噪聲肯定不是高斯噪聲,因為它永遠不會出現(xiàn)負值。

事實上,最接近柏拉圖式理想答案的測量結果就是最快的,因為這種情況下來自系統(tǒng)噪聲的干擾最少。這樣的測量結果會被上述第一步操作“處理異常值”刪除。有時,采用合理的、現(xiàn)成的措施只會讓事情變得更糟。

03 統(tǒng)計的難度更大

暫時撇開這一點不談,我們假設我們獲得了兩個程序的性能測試結果,且這個結果看似確實“很高斯”。數(shù)值分析表明,1號語言的運行花費了10秒,而2號語言花費了9秒。二者的差異為10%,因此我們就可以得出結論:2號語言的速度更快。這個結果正確嗎?

很遺憾,不正確。

右邊的那個更快,對不對?也許?大概?可能?為了正確回答這個問題,我們需要回顧一下大學學習的統(tǒng)計知識。首先,提出零假設,即假設兩個程序沒有性能差異。接著,計算這兩次測量結果來自同一個概率分布的概率。

如果概率非常?。ㄍǔ?%),則可以推翻零假設,從而證明其中一個程序比另一個快。這種方法叫做學生t檢驗,常用于大量數(shù)據(jù)的統(tǒng)計。請注意,測試的某些實現(xiàn)會假設數(shù)據(jù)符合高斯分布,如果你的數(shù)據(jù)呈現(xiàn)其他形狀,則結果可能并不可靠。

這種方式適用于一個程序,但嚴格的測試需要包含多個程序。這些評估也有一些統(tǒng)計方法,但會非常復雜。具體的做法留給讀者自行查閱。

04 所有計算機的對齊都是雙刃劍

雖然統(tǒng)計非常難,但幸運的是計算機很簡單,因為它們具有確定性、可靠,而且合乎邏輯。例如,如果在一個程序中添加一條NOP指令,則結果可能只是多了一個指令周期,對性能的影響小到無法測量。

但是,如果你非要測量,那么結果可能會讓你陷入不解和困惑。這個小小的改動有時會讓程序的運行時間增加10%(甚至更長),但也有可能縮短10%。你沒看錯,這類看似無意義的工作可以加快程序的運行速度。如果是第一次遇到這樣的問題,你可能壓根不會相信。

那么,問題在于,是否有可能讓CPU加倍努力,讓程序更快地運行呢?答案為否。實際的指令根本無關緊要。重點在于代碼的對齊。代碼在內(nèi)存中的不同位置會影響其性能特征。

如果一段經(jīng)常被執(zhí)行的循環(huán)跨越了緩存邊界,它就會變慢。將其移動到不跨越邊界的地方就能加快其速度。NOP指令并不一定要放在循環(huán)內(nèi),只要它能將整個代碼塊向上或向下移動,就可能導致這種差異。

假設你以非常嚴謹?shù)慕y(tǒng)計方式測量了兩個程序。如果二者之間的性能差異低于10%,則我們就無法斷言哪個程序更快,除非你使用的測量方式能夠消除對齊效應。

05 這是關于機器的性能測量,而不是語言

隨著程序的運行速度越來越快,優(yōu)化經(jīng)歷了一個有趣的階段轉變。一旦性能達到一定水平,系統(tǒng)就不再關心編譯器和CPU如何才能加快程序的運行速度。相反,變成了程序員如何盡可能有效地利用CPU,例如將數(shù)據(jù)排列成方便處理器處理的布局等。

這意味著用基于硬件的原語替換基于語言的原語。某些圈子采用的優(yōu)化方式非常奇怪,程序員甚至知道他們的循環(huán)應該被優(yōu)化成哪些SIMD指令,然后他們會不停地修改代碼,直到實現(xiàn)這種優(yōu)化。其實,這種優(yōu)化已經(jīng)與編程語言本身的功能沒有絲毫關系了。

這就是為什么C和Fortran之類的語言仍在許多性能基準測試中名列前茅的主要原因,但這些技巧并不限于這些語言。幾年前,我開發(fā)了一款規(guī)模非常大的Java應用程序,該應用程序經(jīng)過了非常徹底的優(yōu)化。

其內(nèi)部由整數(shù)數(shù)組組成。最常執(zhí)行的路徑中沒有類,甚至沒有Integer對象,基本上就形同于在Java語言內(nèi)部重塑了C語言。其實,幾乎任何編程語言都可以有類似的實現(xiàn)。

它們之間的性能差異主要取決于每個編譯器的優(yōu)化器。即便使用相同的編程語言,也會產(chǎn)生截然不同的性能結果,更不用說不同的編程語言了。因此,聲稱某一種編程語言在性能上有明顯的優(yōu)勢都是不合理的,因為說到底都是內(nèi)聯(lián)匯編程序。

原文鏈接:

https://nibblestew.blogspot.com/2021/02/why-most-programming-language.html?m=1

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    90

    文章

    3723

    瀏覽量

    97420
  • C++
    C++
    +關注

    關注

    22

    文章

    2124

    瀏覽量

    77347
  • 源代碼
    +關注

    關注

    96

    文章

    2953

    瀏覽量

    70623
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

    51883

原文標題:為什么大多數(shù)編程語言性能對比都有問題?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    別讓協(xié)議成為渣抓取的絆腳石EtherNet/IP轉Modbus RTU網(wǎng)關,一次握手,兩種語言

    別讓協(xié)議成為渣抓取的絆腳石EtherNet/IP轉Modbus RTU網(wǎng)關,一次握手,兩種語言 在高爐出渣現(xiàn)場,渣抓取設備的穩(wěn)定運行直接關系到生產(chǎn)節(jié)拍。某鋼鐵廠的高爐渣處理線曾長期被一個問題困擾
    的頭像 發(fā)表于 04-15 15:31 ?38次閱讀
    別讓協(xié)議成為渣抓取的絆腳石EtherNet/IP轉Modbus RTU網(wǎng)關,一次握手,<b class='flag-5'>兩種</b><b class='flag-5'>語言</b>

    編程直流電源與電子負載的區(qū)別

    在電子測試與測量領域,可編程直流電源與電子負載是兩種常見但功能截然不同的設備,盡管它們常協(xié)同工作,但其本質(zhì)角色、工作原理和應用場景存在根本性差異。
    的頭像 發(fā)表于 03-17 15:29 ?207次閱讀
    可<b class='flag-5'>編程</b>直流電源與電子負載的區(qū)別

    C語言與C++的區(qū)別及聯(lián)系

    C語言和C++到底是什么關系? 首先C++和C語言本來就是兩種不同的編程語言,但C++確實是對C語言
    發(fā)表于 12-24 07:23

    為什么單片機還在用C語言編程?

    最適合單片機開發(fā)的編程語言實在太過晦澀難懂,學習起來非常的不方便,并且每一單片機的匯編指令有很大區(qū)別,所以想把一個程序從這種單片機移植到另一單片機簡直是癡心妄想,重新寫一遍程序還來
    發(fā)表于 11-28 07:37

    用PLC實現(xiàn)卷徑計算的兩種算法

    卷徑計算,是動態(tài)計算如鋼卷,紙卷等存料量的一方法,它是實現(xiàn)張力控制和自動充放料、以及甩尾控制的重要前提。卷徑計算目前主流的方法有兩種,一是根據(jù)機列速度(產(chǎn)線速度)和和被測卷的轉動角速度求得;另一
    的頭像 發(fā)表于 11-14 16:54 ?2470次閱讀
    用PLC實現(xiàn)卷徑計算的<b class='flag-5'>兩種</b>算法

    航裕電源HY-LCS系列在低壓電器測試中的應用

    對此,工程師們常常面臨一個共性難題:如何用一臺設備同時滿足高電壓小電流與低電壓大電流這兩種截然不同的測試需求?
    的頭像 發(fā)表于 11-11 16:09 ?901次閱讀
    航裕電源HY-LCS系列在低壓電器測試中的應用

    一文了解Mojo編程語言

    Mojo 是一由 Modular AI 公司開發(fā)的編程語言,旨在將 Python 的易用性與 C 語言的高性能相結合,特別適合人工智能(A
    發(fā)表于 11-07 05:59

    兩種TVS有啥不同?

    當我們查看TVS二極管的規(guī)格書,常會看到有以下兩種種引腳功能標識圖:對于初學者,看到感到疑惑,他們一樣嗎?他們有啥區(qū)別?為啥有的個尖頭往外,陽極連在一起,有的個尖頭往里,陰極連在一起?一連三問。EMC小哥根據(jù)自己經(jīng)驗略作分析
    的頭像 發(fā)表于 09-15 20:27 ?948次閱讀
    這<b class='flag-5'>兩種</b>TVS有啥不同?

    兩種散熱路徑的工藝與應用解析

    背景:兩種常見的散熱設計思路 在大電流或高功率器件應用中,散熱和載流能力是PCB設計中必須解決的難題。常見的兩種思路分別是: 厚銅板方案:通過整體增加銅箔厚度(如3oz、6oz甚至更高),增強導熱
    的頭像 發(fā)表于 09-15 14:50 ?946次閱讀

    CMOS 2.0與Chiplet兩種創(chuàng)新技術的區(qū)別

    摩爾定律正在減速。過去我們靠不斷縮小晶體管尺寸提升芯片性能,但如今物理極限越來越近。在這樣的背景下,兩種創(chuàng)新技術站上舞臺:CMOS 2.0 和 Chiplet(芯粒)。它們都在解決 “如何讓芯片更強” 的問題,但思路卻大相徑庭。
    的頭像 發(fā)表于 09-09 15:42 ?1177次閱讀

    AD、Allegro、Pads的快捷鍵有什么不同

    在高速迭代的電子設計領域,快捷鍵是工程師與EDA工具對話的核心語言,縱觀EDA工具,AD的視覺化交互、Allegro的深度可編程性、Pads的無膜命令——三理念催生了截然不同的操作邏
    的頭像 發(fā)表于 08-06 13:49 ?2461次閱讀
    AD、Allegro、Pads的快捷鍵有什么不同

    【BPI-CanMV-K230D-Zero開發(fā)板體驗】+兩種開發(fā)板間的比較

    之所以產(chǎn)生出在兩種開發(fā)板間進行比較的想法,是與當初申請的一個想法相關的就是,就是利用該開發(fā)板來完成一個考生識別的作品。 但在后來的資料分析時才發(fā)現(xiàn),它可能并不具備這方面的基礎。這就有請我們的下一
    發(fā)表于 07-17 21:40

    貼片晶振中兩種常見封裝介紹

    貼片晶體振蕩器作為關鍵的時鐘頻率元件,其性能直接關系到系統(tǒng)運行的穩(wěn)定性。今天,凱擎小妹帶大家聊聊貼片晶振中兩種常見封裝——金屬面封裝與陶瓷面封裝。
    的頭像 發(fā)表于 07-04 11:29 ?1466次閱讀
    貼片晶振中<b class='flag-5'>兩種</b>常見封裝介紹

    兩種感應電機磁鏈觀測器的參數(shù)敏感性研究

    模式和發(fā)電模式下對閉環(huán)電壓電流模型磁鏈觀測器和滑模磁鏈觀測器參數(shù)敏感性進行了研究,通過仿真和實驗比較了這兩種觀測器對定、轉子電阻及勵磁電感的敏感性。同時還研究了基于這兩種觀測器的模型參考自適應系統(tǒng)
    發(fā)表于 06-09 16:16

    深入理解C語言:C語言循環(huán)控制

    改變程序的執(zhí)行流程,使代碼更加靈活和可控。本文將詳細介紹這些語句的作用及其應用場景,并通過示例代碼進行說明。Part.1break語句C語言中break語句有兩種
    的頭像 發(fā)表于 04-29 18:49 ?2198次閱讀
    深入理解C<b class='flag-5'>語言</b>:C<b class='flag-5'>語言</b>循環(huán)控制
    沙湾县| 丰原市| 滨海县| 正阳县| 绵竹市| 迁西县| 旅游| 满洲里市| 武宁县| 开封县| 广饶县| 江山市| 榆树市| 隆化县| 玛多县| 马山县| 东海县| 凉城县| 桂平市| 海城市| 长武县| 武城县| 苗栗县| 沁阳市| 岢岚县| 汉川市| 左权县| 新兴县| 敦化市| 于田县| 新密市| 灵台县| 宜黄县| 甘谷县| 建德市| 垫江县| 青河县| 嵊州市| 田东县| 祥云县| 成安县|