Clang performs better than MSVC on Windows

Viewed 1153

The c++ code compiled by clang runs a lot faster than the same code compiled by MSVC. And I checked the ASM code, found out that clang automatically uses SIMD instructions for speed purposes. So I rewrite the main calculation part by using AVX Intrinsics code. Still, the program compiled by Clang gains a 10% benefit of speed. Is it common sense that Clang performs better than MSVC on Windows? Or I missed some important optimization configurations of MSVC.

I've tested these code:

static __inline int RGBToY(unsigned char r, unsigned char g, unsigned char b) {
  return (66 * r + 129 * g + 25 * b + 0x1080) >> 8;
}

void ToYRow_C(const unsigned char* src_argb0, unsigned char* dst_y, int width) {
  int x;
  for (x = 0; x < width; ++x) {
    dst_y[0] = RGBToY(src_argb0[2], src_argb0[1], src_argb0[0]);
    src_argb0 += 3;
    dst_y += 1;
  }
}

And the compiling flags for Clang: -O2 -mavx2, flags for MSVC: /O2 /arch:AVX2. Processing a 2560x1440 image on a clang-compiled program costs 1.2ms, and 4.2ms for a MSVC-compiled program.

0 Answers
Related