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,沒什麼大用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章