我正在优化简单的数组操作,例如
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 上运行。
问题是结果各不相同,很多。有时 op takse 3 秒,有时 4。这使得结果基本上无法使用。有什么想法可能是错的吗?正在处理的数组中的值始终相同,数组对齐到 32 字节边界。