mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:07:10 +08:00
Enable VEC on Windows OS. 1. Fix some type defination gap between Windows and Linux. 2. Fix some operator not support on Windows, such as [], /. 3. Enable static sleef library build on Windows. 4. Disable unsupported function overloading on MSVC. 5. Upgrade submodule sleef lib, which fixed build issue on Windows. 6. Fixed bazel build issues. 7. Fix test app not link to sleef on Windows. Note: If rebuild fail after pulled this PR, please sync `sleef` submodule by run: ```cmd git submodule sync git submodule update --init --recursive ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/118980 Approved by: https://github.com/jgong5, https://github.com/ezyang, https://github.com/malfet
488 lines
12 KiB
Plaintext
488 lines
12 KiB
Plaintext
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
|
|
load("@pytorch//third_party:sleef.bzl", "sleef_cc_library")
|
|
|
|
SLEEF_COPTS = [
|
|
"-DHAVE_MALLOC_USABLE_SIZE=1",
|
|
"-DHAVE_MMAP=1",
|
|
"-DHAVE_SHM_OPEN=1",
|
|
"-DHAVE_SHM_UNLINK=1",
|
|
"-DIDEEP_USE_MKL",
|
|
"-DDNNL_CPU_RUNTIME=TBB",
|
|
"-DONNX_ML=1",
|
|
"-DONNX_NAMESPACE=onnx",
|
|
"-D_FILE_OFFSET_BITS=64",
|
|
"-ffp-contract=off",
|
|
"-fno-math-errno",
|
|
"-fno-trapping-math",
|
|
"-DCAFFE2_USE_GLOO",
|
|
"-std=gnu99",
|
|
]
|
|
|
|
SLEEF_COMMON_TARGET_COPTS = [
|
|
"-DSLEEF_STATIC_LIBS=1",
|
|
"-DENABLE_ALIAS=1",
|
|
]
|
|
|
|
SLEEF_PRIVATE_HEADERS = glob([
|
|
"build/include/*.h",
|
|
"src/arch/*.h",
|
|
"src/common/*.h",
|
|
"src/libm/*.h",
|
|
"src/libm/include/*.h",
|
|
])
|
|
|
|
SLEEF_PUBLIC_HEADERS = [
|
|
":sleef_h",
|
|
]
|
|
|
|
SLEEF_PRIVATE_INCLUDES = [
|
|
"-Iexternal/sleef/src/arch",
|
|
"-Iexternal/sleef/src/common",
|
|
"-Iexternal/sleef/src/libm",
|
|
]
|
|
|
|
SLEEF_PUBLIC_INCLUDES = [
|
|
"build/include",
|
|
]
|
|
|
|
SLEEF_VISIBILITY = [
|
|
"//visibility:public",
|
|
]
|
|
|
|
cc_binary(
|
|
name = "mkalias",
|
|
srcs = [
|
|
"src/libm/funcproto.h",
|
|
"src/libm/mkalias.c",
|
|
],
|
|
)
|
|
|
|
genrule(
|
|
name = "alias_avx512f_h",
|
|
outs = ["alias_avx512f.h"],
|
|
cmd = "{ " + "; ".join([
|
|
"$(location :mkalias) -16 __m512 __m512i e avx512f",
|
|
"$(location :mkalias) 8 __m512d __m256i e avx512f",
|
|
]) + "; } > $@",
|
|
tools = [":mkalias"],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "mkdisp",
|
|
srcs = [
|
|
"src/libm/funcproto.h",
|
|
"src/libm/mkdisp.c",
|
|
],
|
|
copts = SLEEF_COPTS,
|
|
)
|
|
|
|
genrule(
|
|
name = "dispavx_c",
|
|
srcs = ["src/libm/dispavx.c.org"],
|
|
outs = ["dispavx.c"],
|
|
cmd = "{ cat $(location src/libm/dispavx.c.org); $(location :mkdisp) 4 8 __m256d __m256 __m128i avx fma4 avx2; } > $@",
|
|
tools = [":mkdisp"],
|
|
)
|
|
|
|
genrule(
|
|
name = "dispsse_c",
|
|
srcs = ["src/libm/dispsse.c.org"],
|
|
outs = ["dispsse.c"],
|
|
cmd = "{ cat $(location src/libm/dispsse.c.org); $(location :mkdisp) 2 4 __m128d __m128 __m128i sse2 sse4 avx2128; } > $@",
|
|
tools = [":mkdisp"],
|
|
)
|
|
|
|
cc_binary(
|
|
name = "mkrename",
|
|
srcs = [
|
|
"src/libm/funcproto.h",
|
|
"src/libm/mkrename.c",
|
|
],
|
|
)
|
|
|
|
genrule(
|
|
name = "renameavx_h",
|
|
outs = ["renameavx.h"],
|
|
cmd = "$(location :mkrename) cinz_ 4 8 avx > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renameavx2_h",
|
|
outs = ["renameavx2.h"],
|
|
cmd = "$(location :mkrename) finz_ 4 8 avx2 > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renameavx2128_h",
|
|
outs = ["renameavx2128.h"],
|
|
cmd = "$(location :mkrename) finz_ 2 4 avx2128 > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renameavx512f_h",
|
|
outs = ["renameavx512f.h"],
|
|
cmd = "$(location :mkrename) finz_ 8 16 avx512f > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renameavx512fnofma_h",
|
|
outs = ["renameavx512fnofma.h"],
|
|
cmd = "$(location :mkrename) cinz_ 8 16 avx512fnofma > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renamefma4_h",
|
|
outs = ["renamefma4.h"],
|
|
cmd = "$(location :mkrename) finz_ 4 8 fma4 > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renamepurec_scalar_h",
|
|
outs = ["renamepurec_scalar.h"],
|
|
cmd = "$(location :mkrename) cinz_ 1 1 purec > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renamepurecfma_scalar_h",
|
|
outs = ["renamepurecfma_scalar.h"],
|
|
cmd = "$(location :mkrename) finz_ 1 1 purecfma > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renamesse2_h",
|
|
outs = ["renamesse2.h"],
|
|
cmd = "$(location :mkrename) cinz_ 2 4 sse2 > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "renamesse4_h",
|
|
outs = ["renamesse4.h"],
|
|
cmd = "$(location :mkrename) cinz_ 2 4 sse4 > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
genrule(
|
|
name = "sleef_h",
|
|
srcs = [
|
|
"src/libm/sleeflibm_header.h.org.in",
|
|
"src/libm/sleeflibm_footer.h.org",
|
|
],
|
|
outs = ["build/include/sleef.h"],
|
|
cmd = "{ " + "; ".join([
|
|
"cat $(location src/libm/sleeflibm_header.h.org.in)",
|
|
"$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__",
|
|
"$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse2",
|
|
"$(location :mkrename) cinz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ sse4",
|
|
"$(location :mkrename) cinz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__",
|
|
"$(location :mkrename) cinz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__ avx",
|
|
"$(location :mkrename) finz_ 4 8 __m256d __m256 __m128i \"struct { __m128i x, y; }\" __AVX__ fma4",
|
|
"$(location :mkrename) finz_ 4 8 __m256d __m256 __m128i __m256i __AVX__ avx2",
|
|
"$(location :mkrename) finz_ 2 4 __m128d __m128 __m128i __m128i __SSE2__ avx2128",
|
|
"$(location :mkrename) finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__",
|
|
"$(location :mkrename) finz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512f",
|
|
"$(location :mkrename) cinz_ 8 16 __m512d __m512 __m256i __m512i __AVX512F__ avx512fnofma",
|
|
"$(location :mkrename) cinz_ 1 1 double float int32_t int32_t __STDC__ purec",
|
|
"$(location :mkrename) finz_ 1 1 double float int32_t int32_t FP_FAST_FMA purecfma",
|
|
"cat $(location src/libm/sleeflibm_footer.h.org)",
|
|
]) + "; } > $@",
|
|
tools = [":mkrename"],
|
|
)
|
|
|
|
cc_library(
|
|
name = "sleef",
|
|
srcs = [
|
|
"src/libm/rempitab.c",
|
|
"src/libm/sleefdp.c",
|
|
"src/libm/sleefsp.c",
|
|
],
|
|
hdrs = SLEEF_PUBLIC_HEADERS,
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLEFLOAT128=1",
|
|
"-Wno-unused-result",
|
|
],
|
|
includes = SLEEF_PUBLIC_INCLUDES,
|
|
# -lgcc resolves
|
|
# U __addtf3
|
|
# U __eqtf2
|
|
# U __fixtfdi
|
|
# U __floatditf
|
|
# U __gttf2
|
|
# U __lttf2
|
|
# U __multf3
|
|
# U __subtf3
|
|
# in bazel-bin/external/sleef/_objs/sleef/sleefqp.pic.o
|
|
linkopts = [
|
|
"-lgcc",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
# The purpose of the lists in deps is to keep related pairs of
|
|
# libraries together. In particular, each pair that contains a *det*
|
|
# library originates with a sleef_cc_library().
|
|
deps = [
|
|
":common",
|
|
":dispavx",
|
|
":dispsse",
|
|
] + [
|
|
":sleefavx",
|
|
":sleefdetavx",
|
|
] + [
|
|
":sleefavx2",
|
|
":sleefdetavx2",
|
|
] + [
|
|
":sleefavx2128",
|
|
":sleefdetavx2128",
|
|
] + [
|
|
":sleefavx512f",
|
|
":sleefdetavx512f",
|
|
] + [
|
|
":sleefavx512fnofma",
|
|
":sleefdetavx512fnofma",
|
|
] + [
|
|
":sleeffma4",
|
|
":sleefdetfma4",
|
|
] + [
|
|
":sleefsse2",
|
|
":sleefdetsse2",
|
|
] + [
|
|
":sleefsse4",
|
|
":sleefdetsse4",
|
|
] + [
|
|
":sleefpurec_scalar",
|
|
":sleefdetpurec_scalar",
|
|
] + [
|
|
":sleefpurecfma_scalar",
|
|
":sleefdetpurecfma_scalar",
|
|
],
|
|
alwayslink = True,
|
|
)
|
|
|
|
cc_library(
|
|
name = "common",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/common/common.c",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + [
|
|
"-Wno-unused-result",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
cc_library(
|
|
name = "dispavx",
|
|
srcs = SLEEF_PRIVATE_HEADERS + SLEEF_PUBLIC_HEADERS + [
|
|
":dispavx_c",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DENABLE_AVX2=1",
|
|
"-DENABLE_FMA4=1",
|
|
"-mavx",
|
|
],
|
|
includes = SLEEF_PUBLIC_INCLUDES,
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
cc_library(
|
|
name = "dispsse",
|
|
srcs = SLEEF_PRIVATE_HEADERS + SLEEF_PUBLIC_HEADERS + [
|
|
":dispsse_c",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DENABLE_AVX2=1",
|
|
"-DENABLE_FMA4=1",
|
|
"-msse2",
|
|
],
|
|
includes = SLEEF_PUBLIC_INCLUDES,
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefavx512f",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":alias_avx512f_h",
|
|
":renameavx512f_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DALIAS_NO_EXT_SUFFIX=\\\"alias_avx512f.h\\\"",
|
|
"-DENABLE_AVX512F=1",
|
|
"-mavx512f",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefavx512fnofma",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renameavx512fnofma_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_AVX512FNOFMA=1",
|
|
"-mavx512f",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefavx",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renameavx_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_AVX=1",
|
|
"-mavx",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefavx2",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renameavx2_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_AVX2=1",
|
|
"-mavx2",
|
|
"-mfma",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefavx2128",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renameavx2128_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_AVX2128=1",
|
|
"-mavx2",
|
|
"-mfma",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleeffma4",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renamefma4_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_FMA4=1",
|
|
"-mfma4",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefsse2",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renamesse2_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_SSE2=1",
|
|
"-msse2",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefsse4",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renamesse4_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_SSE4=1",
|
|
"-msse4.1",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefpurec_scalar",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renamepurec_scalar_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_PUREC_SCALAR=1",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|
|
|
|
sleef_cc_library(
|
|
name = "sleefpurecfma_scalar",
|
|
srcs = SLEEF_PRIVATE_HEADERS + [
|
|
"src/libm/sleefsimddp.c",
|
|
"src/libm/sleefsimdsp.c",
|
|
":renamepurecfma_scalar_h",
|
|
],
|
|
copts = SLEEF_PRIVATE_INCLUDES + SLEEF_COPTS + SLEEF_COMMON_TARGET_COPTS + [
|
|
"-DDORENAME=1",
|
|
"-DENABLE_PURECFMA_SCALAR=1",
|
|
"-mavx2",
|
|
"-mfma",
|
|
],
|
|
linkstatic = True,
|
|
visibility = SLEEF_VISIBILITY,
|
|
alwayslink = True,
|
|
)
|