fraunhoferhhi/vvdec

About AVX512 support..

oscarbg opened this issue · 1 comments

Hi,
support is not clear to me.. questions..
seems there is a define USE_AVX512 but defining it fails in compilating.. where to define?
also not much code only roundIntVector_SIMD uses it..
it's vvdec expected to get broad AVX512 optimizations in the future? and also what expected speedups vs AVX2 can we expect say on Zen4 processors?
also limited AVX512 support is due to using simde and simde still not having complete AVX512 support?
thanks..

So, there is the USE_AVX512 Macro, but it is only to be used for the files named *_avx512.cpp. There are no such files, since we don't generate AVX512 specific versions of our signal processing kernels. Its a very rigid build system convention, so no surprise the build is failing when you enable it. AVX512 is not really broadly supported, so including support would be a lot of work for marginal gains on very few CPUs. Also, vvdec is intended for end-users and not servers, which further decreases the range of supported CPUs.

About AVX2 speedups, it varies between CPUs. Generally, the newer the CPU the more speedup it would have. See https://dl.acm.org/doi/pdf/10.1145/3588444.3591001 for some numbers (2.4 vs 2.8 speedup over non-vectorized implementation for SSE42 and AVX2, respectively).

TLDR: AVX512 is not supported (in vvdec) because it's not supported (on end-user devices), USE_AVX512 is part of our build system, but not used. AVX2 provides 10-20% additional speed over SSE41.