TI中文支持网
TI专业的中文技术问题搜集分享网站

如何比较程序利用OpenMP优化前后的性能?

对一个计算pi的程序进行了OpenMP优化:

#include <ti/omp/omp.h>

#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <time.h>

#define NTHREADS  4

#define NUM_STEPS 100000
double step, pi;

void main()
{
	omp_set_num_threads(NTHREADS);
	int i;
	double x, sum = 0.0;
	step = 1.0/(double)NUM_STEPS;
#pragma omp parallel for reduction(+:sum) private(x)
	for(i = 0; i < NUM_STEPS; i++){
		x = (i + 0.5)*step;
		sum = sum + 4.0/(1.0 + x*x);
	}
	pi = step * sum;
	printf("Pi = %f\n", pi);
}

利用Profiler工具查看了优化前后的时钟周期数,发现在4核的情况下main函数的时钟数相差甚大:

优化前(即单核)为32598913,而优化后(4核)查看core0的main函数时钟数为3179633,相差近十倍。

明显4核的情况下不会达到这样的优化效果,但我又不知道该去如何比较…求教该如何比较真实的优化效果(包括时间上的和空间上的)?

Andy Yin1:

可以通过读取TSC记录程序执行前后的时间,取两者差得到允许的时长。

Kris Wang:

回复 Andy Yin1:

TSC?能够详细说明一下TSC吗?

另外,为什么使用Profiler得到的main函数的统计数据相差这么大?是我比较的函数不对吗?能否用Profiler去比较优化前后的差异呢?

谢谢~

yuanwen dong:

回复 Kris Wang:

TSCL是每个CorePac核的内部测量计数单元,基数是cycle,如果主频1G,那么一个基数就是1ns。

用法如下:

extern volatile cregister unsigned int TSCL;

然后可以直接读取 TSCL的值,从测量开始到结束,取差值。

Br

William.dong@enea.com

赞(0)
未经允许不得转载:TI中文支持网 » 如何比较程序利用OpenMP优化前后的性能?
分享到: 更多 (0)