diff mbox

[FFmpeg-devel,1/8] configure: test whether x86 assembler supports AVX-512

Message ID 20171030130835.28327-2-jdarnley@obe.tv
State Superseded
Headers show

Commit Message

James Darnley Oct. 30, 2017, 1:08 p.m. UTC
---
 configure | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Hendrik Leppkes Oct. 30, 2017, 4:53 p.m. UTC | #1
On Mon, Oct 30, 2017 at 2:08 PM, James Darnley <jdarnley@obe.tv> wrote:
> ---
>  configure | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/configure b/configure
> index 2f259996ae..e172fe8571 100755
> --- a/configure
> +++ b/configure
> @@ -406,6 +406,7 @@ Optimization options (experts only):
>    --disable-fma3           disable FMA3 optimizations
>    --disable-fma4           disable FMA4 optimizations
>    --disable-avx2           disable AVX2 optimizations
> +  --disable-avx-512        disable AVX-512 optimizations

This should be avx512, to match the configure variable

>    --disable-aesni          disable AESNI optimizations
>    --disable-armv5te        disable armv5te optimizations
>    --disable-armv6          disable armv6 optimizations
> @@ -1840,6 +1841,7 @@ ARCH_EXT_LIST_X86_SIMD="
>      amd3dnowext
>      avx
>      avx2
> +    avx512
>      fma3
>      fma4
>      mmx
> @@ -2364,6 +2366,7 @@ xop_deps="avx"
>  fma3_deps="avx"
>  fma4_deps="avx"
>  avx2_deps="avx"
> +avx512_deps="avx2"
>
>  mmx_external_deps="x86asm"
>  mmx_inline_deps="inline_asm"
> @@ -5669,6 +5672,7 @@ EOF
>              elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
>          esac
>
> +        check_x86asm "vmovdqa32 [eax]{k1}{z}, zmm0"    || disable avx512_external
>          check_x86asm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
>          check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
>          check_x86asm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
> @@ -6800,6 +6804,7 @@ if enabled x86; then
>      echo "AESNI enabled             ${aesni-no}"
>      echo "AVX enabled               ${avx-no}"
>      echo "AVX2 enabled              ${avx2-no}"
> +    echo "AVX-512 enabled           ${avx512-no}"
>      echo "XOP enabled               ${xop-no}"
>      echo "FMA3 enabled              ${fma3-no}"
>      echo "FMA4 enabled              ${fma4-no}"
> --
> 2.14.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
James Almer Oct. 30, 2017, 5:40 p.m. UTC | #2
On 10/30/2017 10:08 AM, James Darnley wrote:
> ---
>  configure | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/configure b/configure
> index 2f259996ae..e172fe8571 100755
> --- a/configure
> +++ b/configure
> @@ -406,6 +406,7 @@ Optimization options (experts only):
>    --disable-fma3           disable FMA3 optimizations
>    --disable-fma4           disable FMA4 optimizations
>    --disable-avx2           disable AVX2 optimizations
> +  --disable-avx-512        disable AVX-512 optimizations
>    --disable-aesni          disable AESNI optimizations
>    --disable-armv5te        disable armv5te optimizations
>    --disable-armv6          disable armv6 optimizations
> @@ -1840,6 +1841,7 @@ ARCH_EXT_LIST_X86_SIMD="
>      amd3dnowext
>      avx
>      avx2
> +    avx512
>      fma3
>      fma4
>      mmx
> @@ -2364,6 +2366,7 @@ xop_deps="avx"
>  fma3_deps="avx"
>  fma4_deps="avx"
>  avx2_deps="avx"
> +avx512_deps="avx2"
>  
>  mmx_external_deps="x86asm"
>  mmx_inline_deps="inline_asm"
> @@ -5669,6 +5672,7 @@ EOF
>              elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
>          esac
>  
> +        check_x86asm "vmovdqa32 [eax]{k1}{z}, zmm0"    || disable avx512_external

Afaik nasm had a lot of bugs in the first few versions with support for
avx512, so maybe this check should make sure it accepts only NASM 2.13
or 2.13.01 as a minimum? Assuming it doesn't already, in which case
nevermind.

>          check_x86asm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
>          check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
>          check_x86asm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
> @@ -6800,6 +6804,7 @@ if enabled x86; then
>      echo "AESNI enabled             ${aesni-no}"
>      echo "AVX enabled               ${avx-no}"
>      echo "AVX2 enabled              ${avx2-no}"
> +    echo "AVX-512 enabled           ${avx512-no}"
>      echo "XOP enabled               ${xop-no}"
>      echo "FMA3 enabled              ${fma3-no}"
>      echo "FMA4 enabled              ${fma4-no}"
>
James Darnley Oct. 30, 2017, 5:48 p.m. UTC | #3
On 2017-10-30 17:53, Hendrik Leppkes wrote:
> On Mon, Oct 30, 2017 at 2:08 PM, James Darnley <jdarnley@obe.tv> wrote:
>> ---
>>  configure | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/configure b/configure
>> index 2f259996ae..e172fe8571 100755
>> --- a/configure
>> +++ b/configure
>> @@ -406,6 +406,7 @@ Optimization options (experts only):
>>    --disable-fma3           disable FMA3 optimizations
>>    --disable-fma4           disable FMA4 optimizations
>>    --disable-avx2           disable AVX2 optimizations
>> +  --disable-avx-512        disable AVX-512 optimizations
> 
> This should be avx512, to match the configure variable

Yes.  An oversight on my part.  Code is supposed to not have the hyphen
whereas descriptive text and comments should.
James Darnley Oct. 30, 2017, 5:50 p.m. UTC | #4
On 2017-10-30 18:40, James Almer wrote:
> On 10/30/2017 10:08 AM, James Darnley wrote:
>> @@ -5669,6 +5672,7 @@ EOF
>>              elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
>>          esac
>>  
>> +        check_x86asm "vmovdqa32 [eax]{k1}{z}, zmm0"    || disable avx512_external
> 
> Afaik nasm had a lot of bugs in the first few versions with support for
> avx512, so maybe this check should make sure it accepts only NASM 2.13
> or 2.13.01 as a minimum? Assuming it doesn't already, in which case
> nevermind.

I will look into that.  I remember hearing similar things in the past.
However my brief conversation with Gramner last week led to to believe
that 2.13 is good and that this check from x264 is enough.
diff mbox

Patch

diff --git a/configure b/configure
index 2f259996ae..e172fe8571 100755
--- a/configure
+++ b/configure
@@ -406,6 +406,7 @@  Optimization options (experts only):
   --disable-fma3           disable FMA3 optimizations
   --disable-fma4           disable FMA4 optimizations
   --disable-avx2           disable AVX2 optimizations
+  --disable-avx-512        disable AVX-512 optimizations
   --disable-aesni          disable AESNI optimizations
   --disable-armv5te        disable armv5te optimizations
   --disable-armv6          disable armv6 optimizations
@@ -1840,6 +1841,7 @@  ARCH_EXT_LIST_X86_SIMD="
     amd3dnowext
     avx
     avx2
+    avx512
     fma3
     fma4
     mmx
@@ -2364,6 +2366,7 @@  xop_deps="avx"
 fma3_deps="avx"
 fma4_deps="avx"
 avx2_deps="avx"
+avx512_deps="avx2"
 
 mmx_external_deps="x86asm"
 mmx_inline_deps="inline_asm"
@@ -5669,6 +5672,7 @@  EOF
             elf*) enabled debug && append X86ASMFLAGS $x86asm_debug ;;
         esac
 
+        check_x86asm "vmovdqa32 [eax]{k1}{z}, zmm0"    || disable avx512_external
         check_x86asm "vextracti128 xmm0, ymm0, 0"      || disable avx2_external
         check_x86asm "vpmacsdd xmm0, xmm1, xmm2, xmm3" || disable xop_external
         check_x86asm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4_external
@@ -6800,6 +6804,7 @@  if enabled x86; then
     echo "AESNI enabled             ${aesni-no}"
     echo "AVX enabled               ${avx-no}"
     echo "AVX2 enabled              ${avx2-no}"
+    echo "AVX-512 enabled           ${avx512-no}"
     echo "XOP enabled               ${xop-no}"
     echo "FMA3 enabled              ${fma3-no}"
     echo "FMA4 enabled              ${fma4-no}"