1.热点分析
1.1热点函数
1.2热点循环
格式说明: 热点循环(函数执行次数-各层执行总次数)
执行百分比:热点循环占本函数执行比例
函数: svd
svd.L1
svd.L1.1.1.1.1.1(1-500-500-500-499-124750-41666500)
执行百分比:5.8%
svd.L1.1.1.1.1.2(1-500-500-500-499-124750-41666500)
执行百分比:4.9%
svd.L1.2.1.1.1.1(1-500-499-499-499-124750-41541750)
执行百分比:4.7%
svd.L1.2.1.1.1.2(1-500-499-499-499-124750-41541750)
执行百分比:3.8%
svd.L2
svd.L2.1.1.1.1(1-500-499-499-124750-41541750)
执行百分比:4.7%
svd.L2.1.1.1.2(1-500-499-499-124750-41541750)
执行百分比:6.7%
svd.L3
svd.L3.1.1.1.1(1-500-500-499-124750-41541750)
执行百分比:5%
svd.L3.1.1.1.2(1-500-500-499-124750-41666500)
执行百分比:6.3%
svd.L4
svd.L4.1.1.1(1-500-1211-176680-88340000)
执行百分比:25.8%
svd.L4.1.1.2(1-500-1211-176680-88340000)
执行百分比:30.3%
1.3 热点代码
/* 函数svd */
// svd.L1
for (i = 0; i < n; i++)
{
if (i < m)
{
if (scale)
{
if (i != n - 1)
{
for (j = l; j < n; j++)
{
// svd.L1.1.1.1.1.1
for (s = 0.0, k = i; k < m; k++)
s += a(k,i) * a(k,j);
// svd.L1.1.1.1.1.2
for (k = i; k < m; k++)
a(k,j) += f * a(k,i);
}
}
}
}
if (i < m && i != n - 1)
{
if (scale)
{
if (i != m - 1)
{
for (j = l; j < m; j++)
{
// svd.L1.2.1.1.1.1
for (s = 0.0, k = l; k < n; k++)
s += a(j,k) * a(i,k);
// svd.L1.2.1.1.1.2
for (k = l; k < n; k++)
a(j,k) += s * rv1[k];
}
}
}
}
}
// svd.L2
for (i = n - 1; i >= 0; i--)
{
if (i < n - 1)
{
if (g)
{
for (j = l; j < n; j++)
{
// svd.L2.1.1.1.1
for (s = 0.0, k = l; k < n; k++)
s += a(i,k) * v(k,j);
// svd.L2.1.1.1.2
for (k = l; k < n; k++)
v(k,j) += s * v(k,i);
}
}
}
}
// svd.L3
for (i = n - 1; i >= 0; i--)
{
if (g)
{
if (i != n - 1)
{
for (j = l; j < n; j++)
{
// svd.L3.1.1.1.1
for (s = 0.0, k = l; k < m; k++)
s += a(k,i) * a(k,j);
// svd.L3.1.1.1.2
for (k = i; k < m; k++)
a(k,j) += f * a(k,i);
}
}
}
}
// svd.L4
for (k = n - 1; k >= 0; k--)
{
for (its = 0; its < 30; its++)
{
for (j = l; j <= nm; j++)
{
// svd.L4.1.1.1
for (jj = 0; jj < n; jj++)
{
// P1
v(jj,j) = (x * c + z * s);
// P2
v(jj,i) = (z * c - x * s);
}
// svd.L4.1.1.2
for (jj = 0; jj < m; jj++)
{
// P3
a(jj,j) = (y * c + z * s);
// P4
a(jj,i) = (z * c - y * s);
}
}
}
}
.
2.功能分析
2.1数据标签
说明:s,v,m,t(全局数据)svd. (局部数据)
2.2数据流分析
此例中仅对最热点的两个循环:svd.L4.1.1.1,svd.L4.1.1.2做分析
svd.L4.1.1.1(91-97行)
P1: (svd.m1[][i1],svd.s1), (svd.m1[][i2],svd.s2) ->svd.m1[][i1]
P2: (svd.m1[][i2],svd.s1), (svd.m1[][i1],svd.s2) ->svd.m1[][i2]
svd.L4.1.1.2(100-106行)
P3: (svd.m1[][i1],svd.s1), (svd.m1[][i2],svd.s2) ->svd.m1[][i1]
P4: (svd.m1[][i2],svd.s1), (svd.m1[][i1],svd.s2) ->svd.m1[][i2]
3.加速分析
Marco liyang 发布了13 篇原创文章 · 获赞 0 · 访问量 178 私信 关注