【发布时间】:2012-03-14 20:10:22
【问题描述】:
我正在阅读优化例程的代码(Nelder Mead、SQP...)。语言是 C++、Python。我观察到通常会执行从 double 到 float 的转换,或者使用 double resp 复制方法。浮动参数。为什么它在优化例程代码中是有利可图的,它是否重要?在我自己的 C++ 代码中,我应该注意 double 和 float 类型吗?为什么?
亲切的问候。
【问题讨论】:
-
如果您用 C++ 编写自己的代码,为什么没有适当地标记问题?我错过了一些微妙的东西吗?
-
@HighPerformanceMark 我正在浏览 python(特别是 scipy 源代码)和 c++ 中的代码,并结合几种方法编写我自己的例程。我也应该用 c++ 标记。
-
除了上面提到的,对于除法和平方根,float和double在性能上的差别还是挺大的。但无论如何,在性能代码中应该避免这些操作。
-
@harold 避免使用这些运算符并将 thm 替换为 ... 什么(例如,当它是用户给定的要优化的表单时)?
-
@dlib 视情况而定,并没有真正的替代品。例如,不是比较向量的长度,而是比较它们长度的平方。或者当一个向量除以一个标量时,将它乘以它的倒数(所以除法只发生一次 - 但对于 SIMD 中的短向量它只发生一次,所以它是关于比这更长的向量)。在 SSE 中有快速倒数平方根和倒数指令,但精度较低。有时这已经足够精确了。
标签: c++ python algorithm optimization scipy