我对八度音阶器输出的信息有疑问。
我有以下代码:
% 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秒执行时间有点多。如果可能的话,我希望减少执行时间,但由于我不知道函数本身的执行时间是什么,我不知道从哪里开始。
非常感谢, 安德烈