在上一節的說明,我們可以將每個函式(包含 M 檔案、內建指令等)的運算次數與時間統計出來,並且顯示在 Profiler 瀏覽器。事實上,profile 指令還提供一些非常方便的功能,可以將所有的資訊以變數傳回,例如,profile('status')可傳回計時器的狀態:
>> status = profile('status') ProfilerStatus: 'off' DetailLevel: 'builtin' Timer: 'cpu' HistoryTracking: 'on' HistorySize: 1000000 而所有的計時資訊都可由 profile('info') 傳回,例如在執行前一節的第一個範例後,我們可以下達下列指令:
>> info = profile('info') info = FunctionTable: [9x1 struct] FunctionHistory: [2x20002 double] ClockPrecision: 1.0000e-003 ClockSpeed: 2.2000e+009 Name: 'MATLAB' Overhead: 0 此時回傳值 info.FunctionTable 代表在前述統計表的10個指令及其相關資訊等,例如,若要取得與 inv 指令相關的計時資訊,可輸入如下:
>> info.FunctionTable(4) ans = CompleteName: [1x65 char] FunctionName: 'mean' FileName: 'C:\Program Files\MATLAB\R2011a\toolbox\matlab\datafun\mean.m' Type: 'M-function' Children: [4x1 struct] Parents: [0x1 struct] ExecutedLines: [4x3 double] IsRecursive: 0 TotalRecursiveTime: 0 PartialData: 0 NumCalls: 1000 TotalTime: 0.0430 換句話說,如果我們要使用程式碼來抓取每一個函式的計時結果,就可以使用 profile('info') 所傳回來的物件以及 FunctionTable 的欄位來達成所需的功能。
MATLAB程式設計:進階篇