【发布时间】:2013-09-07 09:59:51
【问题描述】:
我正在编写一个很大程度上依赖于复杂加法和乘法的程序。我想知道我应该使用gsl_complex 还是std::complex。
我似乎没有在网上找到 GSL 复数算术与 std::complex 相比要好多少的比较。一个基本的谷歌搜索也没有帮助我找到 GSL 复合体的基准页面。
我编写了一个 20 行的程序,它生成两个随机复数数组(其中 1e7 个),然后使用来自 <ctime> 的 clock() 检查加法和乘法需要多长时间。使用这种方法(没有编译器优化)我知道gsl_complex_add 和gsl_complex_mul 的速度几乎分别是std::complex<double> 的+ 和* 的两倍。但是我以前从来没有做过这种事情,所以这就是你检查哪个更快的方式吗?
任何链接或建议都会有所帮助。谢谢!
编辑:
好的,所以我再次尝试使用 -O3 标志,现在结果非常不同! std::complex<float>::operator+ 的速度是 gsl_complex_add 的两倍多,而 gsl_complex_mul 的速度大约是 std::complex<float>::operator* 的 1.25 倍。如果我使用 double,gsl_complex_add 比 std::complex<double>::operator+ 快大约 30%,而 std::complex<double>::operator* 比 gsl_complex_mul 快大约 10%。我只需要浮点级别的精度,但我heard double 更快(而且内存对我来说不是问题)!所以现在我真的很困惑!
【问题讨论】:
-
有优化吗?
-
无论结果如何,您的基准测试几乎肯定被打破了。基准测试很难 ;-)
-
不,没有(就像我在问题中提到的那样)。
-
@delnan 好吧,也许我的意思并不是技术意义上的基准测试!我如何确定我应该使用什么?这张支票够好吗?
-
你能分享你的基准测试代码吗?
标签: c++ complex-numbers gsl