[FFmpeg-devel] [PATCH] configure: set IceLake-AVX512 as the minimum baseline

Wu, Jianhua jianhua.wu at intel.com
Wed Aug 18 05:13:13 EEST 2021


 James Almer W	rote: 
> On 8/17/2021 4:24 PM, James Almer wrote:
> > On 8/17/2021 12:25 PM, Ronald S. Bultje wrote:
> >> Hi,
> >>
> >> On Tue, Aug 17, 2021 at 2:33 AM Hendrik Leppkes <h.leppkes at gmail.com>
> >> wrote:
> >>
> >>> On Tue, Aug 17, 2021 at 8:30 AM Wu Jianhua <jianhua.wu at intel.com>
> wrote:
> >>>> Based on IceLake-AVX512 and newer architecture, a broad range of
> >>>> the subsets of AVX512 could be supported.
> >>>
> >> [..]
> >>
> >>>> -        enabled avx512 && check_x86asm avx512_external "vmovdqa32
> >>> [eax]{k1}{z}, zmm0"
> >>>> +        # Only IceLake and newer architectures could enable AVX512
> >>>> +        #
> >>>
> F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VA
> ES/VPCLMU
> >>> LQDQ
> >>>> +        enabled avx512 && check_x86asm avx512_external "vpdpwssds
> >>> zmm31{k1}{z}, zmm29, zmm28"
> >>>>           enabled avx2   && check_x86asm avx2_external
> >>>> "vextracti128
> >>> xmm0, ymm0, 0"
> >>>>           enabled xop    && check_x86asm xop_external    "vpmacsdd
> >>>> xmm0,
> >>> xmm1, xmm2, xmm3"
> >>>>           enabled fma4   && check_x86asm fma4_external   "vfmaddps
> >>>> ymm0,
> >>> ymm1, ymm2, ymm3"
> >>>
> >>> Note that you are just checking the functionality of the assembler
> >>> here, not having a runtime impact.
> >>> What you would likely want is to update avutil/x86/cpu.c as well to
> >>> only enable the AVX512 flag on those CPUs.
> >>>
> >>
> >> [After IRC discussion] you want runtime checks for the
> >> variants/combinations-of-subsets that we want to support. Right now,
> >> avx512
> >> means skylake, so you may want to rename that flag to "avx512skl",
> >> and add a new runtime flag + check for the icelake subset called
> >> "avx512icl".
> >> Then
> >> in your implementations, you use the appropriate flag, and code
> >> components can individually choose to use skylake- and/or
> >> icelake-optimized ax512 functions.
> >
> > Does it really mean Skylake-X? Afaik the flag checks in cpu.c
> > currently look for AVX-512 Foundation and ZMM support, so it means
> > Knights Landing or newer.
> 
> Nevermind, just noticed the comment in cpu.c that mentions the Skylake-X
> extensions.
> 
> >
> > What about just making the existing AVX512 flag mean F+VL+DQ+BW, so
> > Skylake-X (Anything older just lacks useful instructions for
> > multimedia), and if needed for this new code add a new avx512icl flag
> > that also looks for something like GFNI.
> 
> Assuming making Ice Lake the minimum supported SKU is not acceptable,
> then your suggestion is fine (Sans the renaming, since it's a breaking change).
> 
Hi,

The reason why we set the icelake-avx512 as the minimum baseline is that
we don't want FFmpeg run on a processor downclocking heavily, hence, keep
the current flag and add a new AVX512ICL make no sense. 

I was supposed to add a cpuid check for F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/
VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ in cpu.c in v2 patch
and no need to change flags. 

Jianhua


More information about the ffmpeg-devel mailing list