我正在优化简单的数组操作,例如
for (int i=0; i<cnt; i++) dst[i] = src1[i] * src2[i];
其中cnt通常为32到1024,这是我应用程序中的典型情况。我正在比较Intel IPP,MSVC 2017本机矢量化程序,并且还在MSVC中利用AVX和AVX512的内在函数。我将线程优先级设置为“关键”,并将线程相似性掩码设置为“ 1”。然后,我使用QueryPerformanceCounter来计算“操作”开始和结束时的时间,该操作包括运行循环数百万次。在具有10个内核的新i9上运行。
问题是结果很多,很多。有时选择3秒,有时选择4秒。这使得结果基本上无法使用。任何想法可能有什么问题吗?正在处理的数组中的值始终相同,并且数组对齐到32个字节的边界。
答案 0 :(得分:0)
您的CPU或操作系统可能正在限制内核的频率。它可能一次以3.6 GHZ运行,而另一次为2.8 GHz。有多种方法可以在Windows和/或您的BIOS中防止这种情况,但我不记得具体情况。
此简单操作还将受内存限制,因此编译器之间或AVX2与AVX512之间的差异将是微不足道的。