複製鏈接
請複製以下鏈接發送給好友

運算效率

鎖定
運算效率是指計算機程序或算法運行時所需的時間或內存的多少。運算效率是衡量一個程序或一台計算機性能好壞重要標準之一。一般為了提高運算效率主要從兩方面着手:1、對計算機程序代碼進行優化;優化硬件設計或對硬件進行升級。
中文名
運算效率
外文名
computational efficiency
學    科
計算機
定    義
運算時所需的時間或內存的多少
作    用
衡量性能的標準
領    域
計算機系統

運算效率簡介

運算效率是指計算機程序或算法運行時所需的時間或內存的多少。提高運算效率是推動計算機科學發展的重要推動力之一,為了提高運算效率,人們不斷對計算機程序或硬件進行優化,即使用更少的時間和內存完成更多的工作。運算效率一般通過計算機性能分析工具得到。

運算效率計算機程序優化

計算機程序優化一般分為代碼優化算法優化

運算效率代碼優化

代碼優化是指對程序代碼進行等價(指不改變程序的運行結果)變換。程序代碼可以是中間代碼(如四元式代碼),也可以是目標代碼。等價的含義是使得變換後的代碼運行結果與變換前代碼運行結果相同。優化的含義是最終生成的目標代碼短(運行時間更短、佔用空間更小),時空效率優化。原則上,優化可以在編譯的各個階段進行,但最主要的一類是對中間代碼進行優化,這類優化不依賴於具體的計算機。在不改變程序運行效果的前提下,對被編譯的程序進行等價變換,使之能生成更加高效的目標代碼。改進、提高程序途徑:1)改進算法;2) 在源程序級上等價變換;3)充分利用系統提供的程序庫;4) 編譯時優化等 [1] 

運算效率算法優化

算法優化是指對算法的有關性能進行優化,如時間複雜度、空間複雜度、正確性、健壯性。大數據時代到來,算法要處理數據的數量級也越來越大以及處理問題的場景千變萬化。為了增強算法的處理問題的能力,對算法進行優化是必不可少的。算法優化一般是對算法結構和收斂性進行優化。

運算效率性能分析

軟件工程中,性能分析(performance analysis也稱為profiling),是以收集程序運行時信息為手段研究程序行為的分析方法,是一種動態程序分析的方法。性能分析量測像是程序的空間或時間複雜度、特定指令的使用情形、函數調用的頻率及運行時間等。性能分析的目的在於決定程序的哪個部分應該被優化,從而提高程序的速度或者內存使用效率。性能分析可以由程序的源代碼或是可執行文件進行.一般會使用稱為性能分析工具(profiler)的工具進行。性能分析工具會使用許多不同的技術,可能是以事件為基礎(Event-based)的、統計的、指令導向的,以及仿真的方法。性能分析工具常用在性能工程過程中使用。

運算效率分類

性能分析器本身也是程序,可以在被分析程序運行時收集相關信息,來分析該程序。根據收集到信息的細微度,以及收集信息的方式,可以分為事件為基礎的性能分析器,或是統計式的性能分析器。有些性能分析器為了收集信息,會中斷程序的運行,因此在時間量測上有一定的分辨率限制。
事件為基礎的性能分析器
以下列出的編程語言有事件為基礎的性能分析器:
Java:JVMTI(JVM工具接口)API,以前稱為JVMPI(JVM性能分析接口),提供給性能分析器的hook,可以抓到像函數調用、類別加載、卸載、線程的進入及離開等事件。
.NET框架:利用性能分析的API,可以連接到像是COM服務器的性能分析代理器(profiling agent)。像Java一様,在運行會提供許多回調函數給代理器,可以捕捉到像是方法JIT/進入/離開,對象創建及其他。特別的是性能分析代理器可以用任意方式改寫目的應用程序的字節碼。
Python:Python的性能分析包括profile模塊,以調用函數圖為基礎的hotshot,以及用'sys.setprofile'函數來捕捉像c_{call,return,exception}及python_{call,return,exception}的事件。
Ruby:Ruby也用類似Python的性能分析界面。目前有在profile.rb中的一般性能分析器及相關模塊。
統計式的性能分析器
有些性能分析器是用取様的方式運作。取様式的性能分析器利用操作系統的中斷,在固定時間取様目的程序的程序計數器。取様式的性能分析器在數值上較不精準,但對目的程序運行時間的影響最小,允許目的程序可以在接近全速的速度下運作。
所得到的數據不是精準值,只是統計上的近似值而已。“實際誤差的量一般會大於一個取樣時間.若芋某一數值是取様時間的n倍,其誤差約為n倍取様時間的平方根”。在實務上統計式的性能分析器會比其他的分析方式更能知道目的程序各部分佔的比例,而且相較之下有較少的邊際效應(例如內存緩存或是指令解碼的管道線等),由於統計式的性能分析器對程序運行速度的影響較小.因此可以偵測到一些其他方式偵測不到的問題。這種方式可以看出用户模式及可中斷系統模式(例如系統調用)分別佔的時間。不過由於系統程序需處理中斷,仍然會花一些CPU的運行週期,分散緩存的讀取,而且無法分辨在不可中斷核心模式下的行為。
有些特製的硬件可以克服這類的問題:有些最近MIPS微理器中,JTAG接口有一個PCSAMPLE寄存器,可以用一種無法偵測到的方式來取様程序計數器。最常用的統計式的性能分析器包括AMD的CodeAnalyst、蘋果公司的 Shark(OSX)、Intel的 VTune及Parallel Amplifier(Intel Parallel Studio的一部分)。
參考資料
  • 1.    陳英.編譯原理:清華大學出版社,2009年