1.热点分析
1.1热点函数
1.2热点循环
格式说明: 热点循环-各层执行总次数
执行百分比:热点循环占本函数执行比例
函数1: lda_inference
lda.L1.1.1 (6275-90634-44387371-133162113)
执行百分比:10.6% (41.4%,去掉lda.L1.1.2 中exp()库函数)
lda.L1.1.2 (6275-90634-44387371-133162113)
执行百分比:89.4% (58.6%,去掉lda.L1.1.2 中exp()库函数)
函数2: digamma
被调用循环:lda.L1.1.2 (6275-90634-44387371-133162113)
函数3: compute_likelihood
被调用循环:lda.L1(6275-90634)
热点循环:
comp.L1.1 (90634-271902-133162113)
执行百分比:100%
1.3 热点代码
/* 1.lda_inference */
// lda.L1
while ((converged > VAR_CONVERGED) &&((var_iter < VAR_MAX_ITER) || (VAR_MAX_ITER == -1)))
{
var_iter++;
// lda.L1.1
for (n = 0; n < doc->length; n++)
{
phisum = 0;
// lda.L1.1.1
for (k = 0; k < model->num_topics; k++)
{
// P1
oldphi[k] = phi[n][k];
// P2
phi[n][k] =digamma_gam[k] + model->log_prob_w[k][doc->words[n]];
if (k > 0)
phisum = log_sum(phisum, phi[n][k]);
else
// P3
phisum = phi[n][k]; // note, phi is in log space
}
// lda.L1.1.2
for (k = 0; k < model->num_topics; k++)
{
// P4
phi[n][k] = exp(phi[n][k] - phisum);
// P5
var_gamma[k] =var_gamma[k] + doc->counts[n]*(phi[n][k] - oldphi[k]);
// P6
digamma_gam[k] = digamma(var_gamma[k]);
}
}
// lda.L1
likelihood = compute_likelihood(doc, model, phi, var_gamma);
...
}
return(likelihood);
}
/* 2.digamma */
double digamma(double x)
{
double p;
x=x+6;
p=1/(x*x);
p=(((0.004166666666667*p-70.003968253986254)*p+0.008333333333333)*p-0.083333333333333)*p;
p=p+log(x)-0.5/x-1/(x-1)-1/(x-2)-1/(x-3)-1/(x-4)-1/(x-5)-1/(x-6);
return p;
}
/* 3.computer_likelihood */
// comp.L1
for (k = 0; k < model->num_topics; k++)
{
likelihood +=(model->alpha - 1)*(dig[k] - digsum) + lgamma(var_gamma[k])- (var_gamma[k] - 1)*(dig[k] - digsum);
// comp.L1.1
for (n = 0; n < doc->length; n++)
{
if (phi[n][k] > 0)
{
// P7
likelihood += doc->counts[n]*(phi[n][k]*((dig[k] - digsum) - log(phi[n][k])+ model->log_prob_w[k][doc->words[n]]));
}
}
}
2.功能分析
2.1数据标签
说明:s,v,m,t(全局数据)lda-、comp-(局部数据)
2.2数据流分析
函数1 lda_inference
lda.L1.1.1(14-26行)
P1: m1[i][] -> lda.v2
P2: m2[][i],lda.v1 -> m1[i][];数组求和
P3: m1[i][] -> lda.s1
lda.L1.1.2(29-34行)
P4: m1[i][],lda.s1 -> m1[i][] ;指数运算
P5: ( (m1[i][],lda.v2),v2),v1 -> v1
函数2 digamma
lda.L1.1.2(36行)
P6: v1 -> lda.v1
函数3 computer_likelihood
comp.L1.1(66-71行)
P7: ((comp.v1,comp.s2,m1[][i],m2[i][]),(m1[][i],v2)),comp.s1 -> comp.s1