我注意到运行任何英特尔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分段错误
AVX内的VirtualBox虚拟机?
如何提高编译SSE和AVX的性能?
我的猜测是会有额外的寄存器保存/恢复,或类似的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。