Benchmark分析1:Cortexsuite.svd3

1.热点分析
1.1热点函数
Benchmark分析1:Cortexsuite.svd3
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数据标签
Benchmark分析1:Cortexsuite.svd3
说明: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.加速分析

Benchmark分析1:Cortexsuite.svd3Benchmark分析1:Cortexsuite.svd3 Marco liyang 发布了13 篇原创文章 · 获赞 0 · 访问量 178 私信 关注
上一篇:Go入门笔记38-Go Benchmark


下一篇:【个人开源】论文复现SRN:Towards Accurate Scene Text Recognition with Semantic Reasoning Networks