Eigen性能测试

我在代码里使用了 Eigen,发现程序很慢,于是我用性能分析器分析,eigen竟然耗时一半有余。。。
而且最耗时的是Eigen::Vector3d对象的创建 / 销毁 / normalize() / 赋值 等最最基本的操作,我感觉眼睛有点发黑。
于是赶紧上网查这是怎么回事,网上给出解释,Eigen做了很多检查,在release模式的时候,就不检查了。舒了一大口气。
网友同时指出,使用宏 EIGEN_NO_DEBUGNDEBUG,可以避免这些检查。
于是我就试了下。先上代码,再看测试效果。

#include <Eigen/Dense>
#include <iostream>
#include <omp.h>

void testEigenNorm(){
	Eigen::Vector3d v(1, 1, 1);
	for (int i = 0; i < 10000; ++i)
		v.normalize();
}
void testArrayNorm(){
	double nums[3] = {1,1,1};
	double len = 0;
	for (int i = 0; i < 10000; ++i) {
		len = sqrt(nums[0] * nums[0] + nums[1] * nums[1] + nums[2] * nums[2]);
		for (int j = 0; j < 3; ++j)
			nums[j] /= len;
	}
}
int main(){
	double t1 = omp_get_wtime();
	testEigenNorm();
	double t2 = omp_get_wtime();
	printf("eigen normalize time : %lf\n", t2-t1);

	t1 = omp_get_wtime();
	testArrayNorm();
	t2 = omp_get_wtime();
	printf("array normalize time : %lf\n", t2-t1);
	system("pause");
	return 0;
}

测试结果:

debug
eigen normalize time : 0.030172
array normalize time : 0.000202

debug + EIGEN_NO_DEBUG
eigen normalize time : 0.038975
array normalize time : 0.000215

debug + NDEBUG
eigen normalize time : 0.019855
array normalize time : 0.000220

release
eigen normalize time : 0.000130
array normalize time : 0.000132

经过实验

release模式下,eigen性能有保证,而且eigen内部做了大量矩阵的优化处理。可以放心使用。
EIGEN_NO_DEBUGNDEBUG,没什么大用。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值