首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MATLAB 程式碼執行耗時測量:支援 Code Generation 的 tic/toc 替代方案

     編輯:程式設計疑難解答

限制

MATLAB Coder 不支援 `coder.extrinsic('tic','toc')`,生成的 C 程式碼無法直接呼叫 MATLAB 計時函式。

解決方案:在生成的 C 程式碼中植入 `clock()`


// 在 MATLAB 程式碼對應位置插入以下 C 程式碼(透過 coder.ceval 或自定義模板)
clock_t begin, end;
double time_spent;
begin = clock();
// 你的 MATLAB 生成的 C 程式碼
end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
// 將 time_spent 回傳或寫入檔案/全域變數供外部讀取

MATLAB 端整合方式

  1. 編寫一個 C 函式 `double my_tic(); double my_toc();` 封裝上述邏輯。
  2. 使用 `coder.ceval('my_tic')`、`coder.ceval('my_toc')` 在 MATLAB 程式碼中呼叫。
  3. 在 `codegen` 時加入 `-customsource my_timer.c` 並確保編譯器可見 `time.h`。

替代方案:MATLAB 端純函式計時(僅仿真階段)

function elapsed = timeit_matlab(func, varargin)
    % 使用 timeit 函式 (R2013b+),自動多次執行取中位數,排除 JIT 預熱干擾
    elapsed = timeit(@() func(varargin{:}));
end

結語

代碼生成階段必須依賴目標平台的 C 標準庫計時函式(`clock`、`gettimeofday`、`QueryPerformanceCounter`)。在 MATLAB 程式碼中透過 `coder.ceval` 橋接,是支援 Code Generation 的標準做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved