小编her*_*apa的帖子

更新glibc后,std :: tan()非常慢

我有一个C++程序,它调用很多trig函数.它已经运行了一年多了.我最近安装了gcc-4.8,并且同样去了,更新了glibc.这导致我的程序减慢了几乎x1000倍.使用gdb我发现减速的原因是调用std :: tan().当参数是pi或pi/2时,该函数需要很长时间才能返回.

这是一个MWE,如果没有优化编译就会重现问题(真实程序在有和没有-O2标志的情况下都有相同的问题).

#include <cmath>

int main() {
    double pi = 3.141592653589793;
    double approxPi = 3.14159;
    double ret = 0.;

    for(int i = 0; i < 100000; ++i) ret = std::tan(pi); //Very slow
    for(int i = 0; i < 100000; ++i) ret = std::tan(approxPi); //Not slow
}
Run Code Online (Sandbox Code Playgroud)

这是来自gdb的示例回溯(使用Ctrl + c随机中断程序后获得).从调用tan开始,回溯在MWE和我的真实程序中是相同的.

#0  0x00007ffff7b1d048 in __mul (p=32, z=0x7fffffffc740, y=0x7fffffffcb30, x=0x7fffffffc890) at ../sysdeps/ieee754/dbl-64/mpa.c:458
#1  __mul (x=0x7fffffffc890, y=0x7fffffffcb30, z=0x7fffffffc740, p=32) at ../sysdeps/ieee754/dbl-64/mpa.c:443
#2  0x00007ffff7b1e348 in cc32 (p=32, y=0x7fffffffc4a0, x=0x7fffffffbf60) at ../sysdeps/ieee754/dbl-64/sincos32.c:111 …
Run Code Online (Sandbox Code Playgroud)

c++ linux performance gcc glibc

14
推荐指数
1
解决办法
547
查看次数

标签 统计

c++ ×1

gcc ×1

glibc ×1

linux ×1

performance ×1