Octave剖析器,' self'时间占了什么?

时间:2016-03-07 14:08:43

标签: time octave profiler execution

我对八度音阶器输出的信息有疑问。

我有以下代码:

% script to illustrate the octave profiler

%% clean the environment
close all;
clear all;
clc;

%% draw gaussian multivariate random samples

% set the dimension of the r.v.
n       = 5000;

% set the parameters of the distribution
meanV       = ones(n, 1);
covM        = eye(n);

% set the number of samples to draw
nSamples    = 1000;

% start the profiler
profile on;

[smpls]     = getMvnSmpls(meanV, covM, nSamples);

% stop the profiler
profile off
% obtain the profiler data
profData    = profile("info");
% display the profiler info
profshow(profData, 20);

功能' getMvnSmpls'是以下

function [smpls] = getMvnSmpls(meanV, covM, nSamples)

    % determine the size of the r.v.
    n   = length(meanV);

    % allocate the memory to store the output samples
    smpls   = zeros(nSamples, n);

    % draw the samples
    for k=1:nSamples
        if mod(k, 50) == 0
            fprintf('iteration %d/%d \n', k, nSamples);
        smpls(k, :) = mvnrnd(meanV, covM);
    end

end

我从octave profiler得到的输出是:

   #    Function Attr     Time (s)        Calls
-----------------------------------------------
  26        chol            59.162           20
   9        norm             4.448           20
  10    binary *             0.678           60
   1 getMvnSmpls             0.294            1
   3       zeros             0.037            1
  11      mvnrnd             0.010           20
  27       randn             0.004           20
   6     fprintf             0.002           20
  23     warning             0.002           40
   4         mod             0.001         1000
  12    issquare             0.001           20
  25    binary +             0.001           40
   5   binary ==             0.001         1080
  20    isscalar             0.000           20
  24         eye             0.000           20
  16        size             0.000          100
  14   binary !=             0.000           81
   8         eps             0.000           20
  13      nargin             0.000           61
  22         any             0.000           20

我也运行了profexplore命令,结果如下:

profexplore(profData)

Top
  1) getMvnSmpls: 1 calls, 64.643 total, 0.294 self
  2) profile: 1 calls, 0.000 total, 0.000 self

profexplore> 1

Top
  getMvnSmpls: 1 calls, 64.643 total, 0.294 self
    1) mvnrnd: 20 calls, 59.860 total, 0.010 self
    2) norm: 20 calls, 4.448 total, 4.448 self
    3) zeros: 1 calls, 0.037 total, 0.037 self
    4) fprintf: 20 calls, 0.002 total, 0.002 self
    5) mod: 1000 calls, 0.001 total, 0.001 self
    6) binary ==: 1000 calls, 0.001 total, 0.001 self
    7) eps: 20 calls, 0.000 total, 0.000 self
    8) binary *: 20 calls, 0.000 total, 0.000 self
    9) length: 1 calls, 0.000 total, 0.000 self
    10) prefix -: 1 calls, 0.000 total, 0.000 self

我的问题是' self'时间代表功能' getMvnSmpls'?那个时候会考虑哪些操作?

当我看到函数的表达式时,我看到所有的函数调用,即长度,零,mod,fprintf,mvnrnd,都有自己的专用时间,所以我不确定什么是占用的执行时间功能本身。

我提出的例子是一个简单的例子。我描述的代码与我给出的示例非常相似。引起我兴趣的是,对于一个非常类似于' getMvnSmpls' (它包含一个for循环,几个变量初始化和for循环中出现的一些常量的预计算,它们有自己的计算时间)执行时间(self)接近6秒。确实,该函数被调用三次。但是,我发现函数本身的接近2秒执行时间有点多。如果可能的话,我希望减少执行时间,但由于我不知道函数本身的执行时间是什么,我不知道从哪里开始。

非常感谢, 安德烈

0 个答案:

没有答案