1.LDA分析思路
本Benchmark 的分析围绕加速目的,每个热点函数按照下面几个部分展开:
#耗时分析(潜在加速片段)
##耗时区域(高密度循环体 和 函数调用高频循环体)
##耗时原因(量化指标)
#功能分析
##热点区域
(input, process, output)
##跨区域关系
(数据流动:生产-消费路径)
#加速分析
##有无加速机会
##加速模式
2.热点区域分析
且各函数中循环执行次数(执行次数为上层循环/函数执行一次 对应循环的执行次数)见下表:
lda_inference 是父函数,调用了compute_likelihood和digamma两个子函数,先从父函数分析(digamma在lda_inference函数中分析)
#函数1 lda_inference & 函数2 digamma
/* 1.lda_inference */
//循环1 调用了digamma函数
//model->num_topics=3
for (k = 0; k < model->num_topics; k++)
{
var_gamma[k] = model->alpha + (doc->total/((double) model->num_topics));
digamma_gam[k] = digamma(var_gamma[k]);
for (n = 0; n < doc->length; n++)
phi[n][k] = 1.0/model->num_topics;
}
var_iter = 0;
//循环2 外层调用了compute_likelihood函数,内层调用了digamma函数
//while循环次数 [9,20] model->num_topics [190,600]
while ((converged > VAR_CONVERGED) &&((var_iter < VAR_MAX_ITER) || (VAR_MAX_ITER == -1)))
{
var_iter++;
for (n = 0; n < doc->length; n++)
{
phisum =