4 ms·
You have a faster CPU. "SSE sdot" and "SSE+tiling" are both faster on your machine. However, "Eigen" is slower. This suggests gpderetta might be right – MSVC is
by attractivechaos 10y ago
You have a faster CPU. "SSE sdot" and "SSE+tiling" are both faster on your machine. However, "Eigen" is slower. This suggests gpderetta might be right – MSVC is not as good as gcc to optimize Eigen, or conversely, Eigen has not been optimized for MSVC. Nonetheless, MSVC did fully vectorize the inner loop of non-SSE sdot, better than both gcc and clang (EDIT: of the versions I was using; it would be good to try the latest gcc/clang). It seems that explicit SSE vectorization is the most stable. Other implementations of "sdot" depend too much on the behavior of compilers.
Anyway, thanks a lot for this experiment. I rarely use MSVC these days. It is good to know where it stands.
- Const-me 10y agoBoth CPUs are same microarch, Haswell. Xeon has much more cache. The i5 has higher base frequency (3.2 vs 2.6) the Xeon however has higher turbo frequency (3.6 vs 3.4). OK, I’ve installed Cygwin and GCC, compiled and benchmarked the original code. I made the following changes in the makefile: (1) Replaced -O2 with -O3 (2) added -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 to the option, both C and C++. The results on GCC/i5/Windows 10 are very consistent with the OPs result on GCC/Xeon/Linux. Diagram: https://raw.githubusercontent.com/Const-me/matmul/master/results-gcc.png https://raw.githubusercontent.com/Const-me/matmul/master/res... Numbers: https://github.com/Const-me/matmul/blob/master/Run/result.xlsx?raw=true https://github.com/Const-me/matmul/blob/master/Run/result.xl...