From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, Richard Henderson <richard.henderson@linaro.org>
Subject: Re: [PATCH] meson: drop --enable-avx* options
Date: Thu, 10 Oct 2024 10:24:48 +0100 [thread overview]
Message-ID: <ZwedYPrdBaOz0n2U@redhat.com> (raw)
In-Reply-To: <20241010091322.1790604-1-pbonzini@redhat.com>
On Thu, Oct 10, 2024 at 11:13:22AM +0200, Paolo Bonzini wrote:
> Just detect compiler support and always enable the optimizations if
> it is avilable; warn if the user did request AVX2/AVX512 use via
> -Dx86_version= but the intrinsics are not available.
>
> Suggested-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> meson.build | 30 +++++++++++++++++++-----------
> meson_options.txt | 4 ----
> scripts/meson-buildoptions.sh | 6 ------
> 3 files changed, 19 insertions(+), 21 deletions(-)
>
> diff --git a/meson.build b/meson.build
> index e4b2af138da..b4418d54e0a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2955,22 +2955,16 @@ config_host_data.set('CONFIG_ASM_HWPROBE_H',
> cc.has_header_symbol('asm/hwprobe.h',
> 'RISCV_HWPROBE_EXT_ZBA'))
>
> -config_host_data.set('CONFIG_AVX2_OPT', get_option('avx2') \
> - .require(have_cpuid_h, error_message: 'cpuid.h not available, cannot enable AVX2') \
> - .require(cc.links('''
> - #include <cpuid.h>
> +if have_cpuid_h
> + have_avx2 = cc.links('''
> #include <immintrin.h>
> static int __attribute__((target("avx2"))) bar(void *a) {
> __m256i x = *(__m256i *)a;
> return _mm256_testz_si256(x, x);
> }
> int main(int argc, char *argv[]) { return bar(argv[argc - 1]); }
> - '''), error_message: 'AVX2 not available').allowed())
> -
> -config_host_data.set('CONFIG_AVX512BW_OPT', get_option('avx512bw') \
> - .require(have_cpuid_h, error_message: 'cpuid.h not available, cannot enable AVX512BW') \
> - .require(cc.links('''
> - #include <cpuid.h>
> + ''')
> + have_avx512bw = cc.links('''
> #include <immintrin.h>
> static int __attribute__((target("avx512bw"))) bar(void *a) {
> __m512i *x = a;
> @@ -2978,7 +2972,21 @@ config_host_data.set('CONFIG_AVX512BW_OPT', get_option('avx512bw') \
> return res[1];
> }
> int main(int argc, char *argv[]) { return bar(argv[0]); }
> - '''), error_message: 'AVX512BW not available').allowed())
> + ''')
> + if get_option('x86_version') >= '3' and not have_avx2
> + warning('Cannot enable AVX optimizations due to missing intrinsics')
> + elif get_option('x86_version') >= '4' and not have_avx512bw
> + warning('Cannot enable AVX512 optimizations due to missing intrinsics')
> + endif
Should these perhaps be error() rather than warning() ?
We only support GCC & CLang. If both GCC 7.4.0 and CLang 10.0 (our
min versions) have the intrinsics, then I'd say this is an impossible
scenario if x86_version is large, and thus would deserve error()
> +else
> + have_avx2 = false
> + have_avx512bw = false
> + if get_option('x86_version') >= '3'
> + warning('Cannot enable AVX optimizations due to missing cpuid.h')
> + endif
> +endif
> +config_host_data.set('CONFIG_AVX2_OPT', have_avx2)
> +config_host_data.set('CONFIG_AVX512BW_OPT', have_avx512bw)
>
> # For both AArch64 and AArch32, detect if builtins are available.
> config_host_data.set('CONFIG_ARM_AES_BUILTIN', cc.compiles('''
> diff --git a/meson_options.txt b/meson_options.txt
> index 5a5c2300261..d5abf5193f5 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -119,10 +119,6 @@ option('tpm', type : 'feature', value : 'auto',
> option('membarrier', type: 'feature', value: 'disabled',
> description: 'membarrier system call (for Linux 4.14+ or Windows')
>
> -option('avx2', type: 'feature', value: 'auto',
> - description: 'AVX2 optimizations')
> -option('avx512bw', type: 'feature', value: 'auto',
> - description: 'AVX512BW optimizations')
> option('keyring', type: 'feature', value: 'auto',
> description: 'Linux keyring support')
> option('libkeyutils', type: 'feature', value: 'auto',
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 6d08605b771..dc796f48bad 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -94,8 +94,6 @@ meson_options_help() {
> printf "%s\n" ' alsa ALSA sound support'
> printf "%s\n" ' attr attr/xattr support'
> printf "%s\n" ' auth-pam PAM access control'
> - printf "%s\n" ' avx2 AVX2 optimizations'
> - printf "%s\n" ' avx512bw AVX512BW optimizations'
> printf "%s\n" ' blkio libblkio block device driver'
> printf "%s\n" ' bochs bochs image format support'
> printf "%s\n" ' bpf eBPF support'
> @@ -238,10 +236,6 @@ _meson_option_parse() {
> --audio-drv-list=*) quote_sh "-Daudio_drv_list=$2" ;;
> --enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
> --disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
> - --enable-avx2) printf "%s" -Davx2=enabled ;;
> - --disable-avx2) printf "%s" -Davx2=disabled ;;
> - --enable-avx512bw) printf "%s" -Davx512bw=enabled ;;
> - --disable-avx512bw) printf "%s" -Davx512bw=disabled ;;
> --enable-gcov) printf "%s" -Db_coverage=true ;;
> --disable-gcov) printf "%s" -Db_coverage=false ;;
> --enable-lto) printf "%s" -Db_lto=true ;;
> --
> 2.46.2
>
>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2024-10-10 9:25 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-10 9:13 [PATCH] meson: drop --enable-avx* options Paolo Bonzini
2024-10-10 9:24 ` Daniel P. Berrangé [this message]
2024-10-11 17:32 ` Richard Henderson
-- strict thread matches above, loose matches on Subject: below --
2025-05-08 9:50 Paolo Bonzini
2025-05-08 13:21 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZwedYPrdBaOz0n2U@redhat.com \
--to=berrange@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.