微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行任何英特尔®AVXfunction后,math函数需要更多的周期

我注意到运行任何英特尔AVXfunction后,math函数(如ceil,round,…)需要更多的cpu周期。

看下面的例子:

#include <stdio.h> #include <math.h> #include <immintrin.h> static unsigned long int get_rdtsc(void) { unsigned int a,d; asm volatile("rdtsc" : "=a" (a),"=d" (d)); return (((unsigned long int)a) | (((unsigned long int)d) << 32)); } #define NUM_IteraTIONS 10000000 void run_round() { unsigned long int t1,t2,res,i; double d = 3.2; t1 = get_rdtsc(); for (i = 0 ; i < NUM_IteraTIONS ; ++i) { res = round(d*i); } t2 = get_rdtsc(); printf("round res %lu total cycles %lu CPI %lun",t2 - t1,(t2 - t1) / NUM_IteraTIONS); } int main () { __m256d a; run_round(); a = _mm256_set1_pd(1); run_round(); return 0; }

编译时使用:gcc -Wall -lm -mavx foo.c

输出是:

不在linux上运行的AVX优化代码redhat 5.6

在glibc中禁用AVX优化的函数(LD_HWCAP_MASK,/etc/ld.so.nohwcap)用于valgrind&gdblogging

AVX寄存器如何由通用调用约定来处理?

具有向后兼容性的gcc平台调优选项

是否有可能在AVX / SSE中获得多个正弦波?

总计周转次数31999997 224725952 CPI 22

轮回资源31999997总周期1900864520 CPI 190

请指教。

如何禁用Linux计算机上的avx指令?

在Linux上的AVX分段错误

哪个版本的Windows支持/需要哪个cpu多媒体扩展?

AVX内的VirtualBox虚拟机?

如何提高编译SSE和AVX的性能

反汇编生成代码

我的猜测是会有额外的寄存器保存/恢复,或类似的东西。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐