運算效率

運算效率

運算效率是指電腦程式或算法運行時所需的時間或記憶體的多少。運算效率是衡量一個程式或一台計算機性能好壞重要標準之一。一般為了提高運算效率主要從兩方面著手:1、對電腦程式代碼進行最佳化;最佳化硬體設計或對硬體進行升級。

簡介

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

電腦程式最佳化

電腦程式最佳化一般分為代碼最佳化和算法最佳化。

代碼最佳化

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

算法最佳化

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

性能分析

概述

在軟體工程中,性能分析(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的一部分)。

相關詞條

熱門詞條

聯絡我們