- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个简单的代码来测试 prof
。
double bar_compute (double d) {
double t = std::abs(d);
t += std::sqrt(d);
t += std::cos(d);
return t;
}
// Do some computation n times
double foo_compute(unsigned n) {
std::random_device rd;
std::mt19937 mt(rd());
std::uniform_real_distribution<double> dist(0.0, 1.0);
double total = 0;
for (int i=0; i<n; i++) {
double d = dist(mt);
total += bar_compute(d);
}
return total;
}
当我运行 prof
并查看输出时,它是
56.14% runcode libm-2.23.so [.] __cos_avx
27.34% runcode runcode [.] _Z11foo_computej
13.92% runcode runcode [.] _Z11bar_computed
0.86% runcode libm-2.23.so [.] do_cos_slow.isra.1
0.44% runcode runcode [.] cos@plt
0.41% runcode libm-2.23.so [.] sloww1
0.35% runcode libm-2.23.so [.] __dubcos
0.17% runcode ld-2.23.so [.] _dl_lookup_symbol_x
do_cos_slow.isra
和 sloww1
是什么意思?
是否有更快的 cos
版本可供我使用?不然怎么会叫慢呢?
最佳答案
do_cos_slow
来自其在 glibc/sysdeps/ieee754/dbl-64/s_sin.c 中的声明.它被称为 do_cos_slow
因为它比它基于 do_cos
的函数更精确,根据它在 Line 164 上的声明上方的评论.
.isra
是因为该函数是 IPA SRA 根据以下 Stack Overflow Answer, What does the GCC function suffix “isra” mean? 优化的版本
sloww1
是一个根据上面的注释计算 sin(x+dx) 的函数。
关于更快的cos版本,我不确定有没有更快的版本,但是如果你更新你的glibc或者提供libm的libc实现,至少升级到glibc 2.28,那么你会得到Wilco Dijkstra移除的结果这些慢速路径函数和 dosincos 的重构可以提高速度。
Refactor the sincos implementation - rather than rely on odd partial inlining
of preprocessed portions from sin and cos, explicitly write out the cases.
This makes sincos much easier to maintain and provides an additional 16-20%
speedup between 0 and 2^27. The overall speedup of sincos is 48% over this range.
Between 0 and PI it is 66% faster.
您可以尝试的其他替代方案是其他 libc 或 libm 实现,或其他 cos 实现,包括 avx_mathfun或 avx_mathfun with some fixes for newer GCC或 supersimd .
关于glibc - do_cos_slow.isra 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55214621/
对使用gcc编译的程序进行性能分析时,我注意到诸如foo.isra.3之类的功能。 isra表示什么?我注意到其中一个函数仅在几个地方被调用,并且其中一个参数始终被指定为文字值。也许这意味着它是针对某
我写了一个简单的代码来测试 prof。 double bar_compute (double d) { double t = std::abs(d); t += std::sqrt(d
Linux 内核调用堆栈转储通常包含以“.isra.NNN”结尾的函数名,其中 NNN 是一些数字。例如,参见 here和 here . 这是什么意思,这个数字是什么意思? 最佳答案 isra is
我是一名优秀的程序员,十分优秀!