Bug 1878695 - Add avx512vnni support to firefox translation engine r=marco,gcp

Differential Revision: https://phabricator.services.mozilla.com/D200682
This commit is contained in:
serge-sans-paille 2024-02-06 13:59:58 +00:00
parent aa6fed837d
commit 6e34389461
4 changed files with 42 additions and 1 deletions

View file

@ -3277,3 +3277,14 @@ set_config(
flags=["-mavx512bw", "-mavx512f", "-mavx512dq", "-mavx512cd"],
),
)
# AVX512VNNI can be based on either avx512bw or avx512vbmi. We choose the
# former.
set_config(
"AVX512VNNI_FLAGS",
["-mavx512vnni", "-mavx512bw", "-mavx512f", "-mavx512dq", "-mavx512cd"],
try_compile(
check_msg="for -mavx512vnni support",
flags=["-mavx512vnni", "-mavx512bw", "-mavx512f", "-mavx512dq", "-mavx512cd"],
),
)

View file

@ -21,7 +21,12 @@
#include "wasm/WasmLog.h"
#if defined(USE_AVX512BW)
# if defined(USE_AVXVNNI)
# if defined(USE_AVX512VNNI)
# define SUPPORTED_ARCHS \
xsimd::arch_list<xsimd::avx512vnni<xsimd::avx512bw>, \
xsimd::avx512bw, xsimd::avx2, \
xsimd::ssse3, xsimd::sse2>
# elif defined(USE_AVXVNNI)
# define SUPPORTED_ARCHS \
xsimd::arch_list<xsimd::avx512bw, xsimd::avxvnni, xsimd::avx2, \
xsimd::ssse3, xsimd::sse2>

View file

@ -49,6 +49,12 @@ if CONFIG["INTEL_ARCHITECTURE"]:
SOURCES[
"/third_party/gemmology/kernels/GemmologyEngineAVX512BW.cpp"
].flags += CONFIG["AVX512BW_FLAGS"]
if CONFIG["AVX512VNNI_FLAGS"]:
DEFINES["USE_AVX512VNNI"] = True
SOURCES += ["/third_party/gemmology/kernels/GemmologyEngineAVX512VNNI.cpp"]
SOURCES[
"/third_party/gemmology/kernels/GemmologyEngineAVX512VNNI.cpp"
].flags += CONFIG["AVX512VNNI_FLAGS"]
if CONFIG["TARGET_CPU"] == "aarch64":

View file

@ -0,0 +1,19 @@
/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* this source code form is subject to the terms of the mozilla public
* license, v. 2.0. if a copy of the mpl was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include <gemmology.h>
namespace gemmology {
template struct Engine<xsimd::avx512vnni<xsimd::avx512bw>>;
template void Engine<xsimd::avx512vnni<xsimd::avx512bw>>::SelectColumnsB(int8_t const*, int8_t*,
size_t, uint32_t const*,
uint32_t const*);
template void Engine<xsimd::avx512vnni<xsimd::avx512bw>>::Shift::Multiply(
uint8_t const*, int8_t const*, size_t, size_t, size_t,
gemmology::callbacks::UnquantizeAndAddBiasAndWrite);
template void Engine<xsimd::avx512vnni<xsimd::avx512bw>>::Shift::PrepareBias(
int8_t const*, size_t, size_t,
gemmology::callbacks::UnquantizeAndAddBiasAndWrite);
} // namespace gemmology