From b18db527085be6fa09c098485fd814d491924402 Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Thu, 12 Dec 2019 13:36:24 -0800 Subject: [PATCH] Import XNNPACK library and its dependencies This is a preparatory step for releasing XNNPACK integration into TensorFlow Lite. PiperOrigin-RevId: 285260004 Change-Id: I758f996a5351e65967f1c6af613719d644a49f49 --- tensorflow/workspace.bzl | 20 +++ third_party/FXdiv/BUILD | 1 + third_party/FXdiv/BUILD.bazel | 15 ++ third_party/FXdiv/workspace.bzl | 15 ++ third_party/clog/BUILD | 1 + third_party/clog/BUILD.bazel | 35 ++++ third_party/clog/workspace.bzl | 15 ++ third_party/cpuinfo/BUILD | 1 + third_party/cpuinfo/BUILD.bazel | 222 ++++++++++++++++++++++++++ third_party/cpuinfo/workspace.bzl | 15 ++ third_party/psimd/BUILD | 1 + third_party/psimd/BUILD.bazel | 15 ++ third_party/psimd/workspace.bzl | 15 ++ third_party/pthreadpool/BUILD | 1 + third_party/pthreadpool/BUILD.bazel | 32 ++++ third_party/pthreadpool/workspace.bzl | 15 ++ 16 files changed, 419 insertions(+) create mode 100644 third_party/FXdiv/BUILD create mode 100644 third_party/FXdiv/BUILD.bazel create mode 100644 third_party/FXdiv/workspace.bzl create mode 100644 third_party/clog/BUILD create mode 100644 third_party/clog/BUILD.bazel create mode 100644 third_party/clog/workspace.bzl create mode 100644 third_party/cpuinfo/BUILD create mode 100644 third_party/cpuinfo/BUILD.bazel create mode 100644 third_party/cpuinfo/workspace.bzl create mode 100644 third_party/psimd/BUILD create mode 100644 third_party/psimd/BUILD.bazel create mode 100644 third_party/psimd/workspace.bzl create mode 100644 third_party/pthreadpool/BUILD create mode 100644 third_party/pthreadpool/BUILD.bazel create mode 100644 third_party/pthreadpool/workspace.bzl diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl index 1fe6ff9ed2e..f21f6954693 100755 --- a/tensorflow/workspace.bzl +++ b/tensorflow/workspace.bzl @@ -22,7 +22,10 @@ load( "def_file_filter_configure", ) load("//third_party/FP16:workspace.bzl", FP16 = "repo") +load("//third_party/FXdiv:workspace.bzl", FXdiv = "repo") load("//third_party/aws:workspace.bzl", aws = "repo") +load("//third_party/clog:workspace.bzl", clog = "repo") +load("//third_party/cpuinfo:workspace.bzl", cpuinfo = "repo") load("//third_party/flatbuffers:workspace.bzl", flatbuffers = "repo") load("//third_party/highwayhash:workspace.bzl", highwayhash = "repo") load("//third_party/hwloc:workspace.bzl", hwloc = "repo") @@ -33,11 +36,16 @@ load("//third_party/opencl_headers:workspace.bzl", opencl_headers = "repo") load("//third_party/kissfft:workspace.bzl", kissfft = "repo") load("//third_party/keras_applications_archive:workspace.bzl", keras_applications = "repo") load("//third_party/pasta:workspace.bzl", pasta = "repo") +load("//third_party/psimd:workspace.bzl", psimd = "repo") +load("//third_party/pthreadpool:workspace.bzl", pthreadpool = "repo") def initialize_third_party(): """ Load third party repositories. See above load() statements. """ FP16() + FXdiv() aws() + clog() + cpuinfo() flatbuffers() highwayhash() hwloc() @@ -48,6 +56,8 @@ def initialize_third_party(): nasm() opencl_headers() pasta() + psimd() + pthreadpool() # Sanitize a dependency so that it works correctly from code that includes # TensorFlow as a submodule. @@ -127,6 +137,16 @@ def tf_repositories(path_prefix = "", tf_repo_name = ""): print("path_prefix was specified to tf_workspace but is no longer used " + "and will be removed in the future.") + tf_http_archive( + name = "XNNPACK", + sha256 = "24b6285c679dece8805d2a7d63cc567413b7670279bc0c66a99e555123fe4700", + strip_prefix = "XNNPACK-9a88efe2d84fef93eb2b8acb6f0ac8f3cacee8b5", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/google/XNNPACK/archive/9a88efe2d84fef93eb2b8acb6f0ac8f3cacee8b5.zip", + "https://github.com/google/XNNPACK/archive/9a88efe2d84fef93eb2b8acb6f0ac8f3cacee8b5.zip", + ], + ) + # Important: If you are upgrading MKL-DNN, then update the version numbers # in third_party/mkl_dnn/mkldnn.BUILD. In addition, the new version of # MKL-DNN might require upgrading MKL ML libraries also. If they need to be diff --git a/third_party/FXdiv/BUILD b/third_party/FXdiv/BUILD new file mode 100644 index 00000000000..82bab3ffd96 --- /dev/null +++ b/third_party/FXdiv/BUILD @@ -0,0 +1 @@ +# This empty BUILD file is required to make Bazel treat this directory as a package. diff --git a/third_party/FXdiv/BUILD.bazel b/third_party/FXdiv/BUILD.bazel new file mode 100644 index 00000000000..ef2853b7ceb --- /dev/null +++ b/third_party/FXdiv/BUILD.bazel @@ -0,0 +1,15 @@ +# Description: +# C99/C++ library for division via fixed-point multiplication by inverse + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +cc_library( + name = "FXdiv", + hdrs = glob(["include/fxdiv.h"]), + includes = ["include"], + strip_include_prefix = "include", +) diff --git a/third_party/FXdiv/workspace.bzl b/third_party/FXdiv/workspace.bzl new file mode 100644 index 00000000000..91a6a6ce860 --- /dev/null +++ b/third_party/FXdiv/workspace.bzl @@ -0,0 +1,15 @@ +"""Loads the FXdiv library, used by XNNPACK & pthreadpool.""" + +load("//third_party:repo.bzl", "third_party_http_archive") + +def repo(): + third_party_http_archive( + name = "FXdiv", + strip_prefix = "FXdiv-f8c5354679ec2597792bc70a9e06eff50c508b9a", + sha256 = "7d3215bea832fe77091ec5666200b91156df6724da1e348205078346325fc45e", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/Maratyszcza/FXdiv/archive/f8c5354679ec2597792bc70a9e06eff50c508b9a.tar.gz", + "https://github.com/Maratyszcza/FXdiv/archive/f8c5354679ec2597792bc70a9e06eff50c508b9a.tar.gz", + ], + build_file = "//third_party/FXdiv:BUILD.bazel", + ) diff --git a/third_party/clog/BUILD b/third_party/clog/BUILD new file mode 100644 index 00000000000..82bab3ffd96 --- /dev/null +++ b/third_party/clog/BUILD @@ -0,0 +1 @@ +# This empty BUILD file is required to make Bazel treat this directory as a package. diff --git a/third_party/clog/BUILD.bazel b/third_party/clog/BUILD.bazel new file mode 100644 index 00000000000..e2b20a8946d --- /dev/null +++ b/third_party/clog/BUILD.bazel @@ -0,0 +1,35 @@ +# Description: +# C-style (a-la printf) logging library + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +cc_library( + name = "clog", + srcs = [ + "deps/clog/src/clog.c", + ], + hdrs = [ + "deps/clog/include/clog.h", + ], + copts = [ + "-Wno-unused-result", + ], + linkopts = select({ + ":android": [ + "-llog", + ], + "//conditions:default": [ + ], + }), + strip_include_prefix = "deps/clog/include", +) + +config_setting( + name = "android", + values = {"crosstool_top": "//external:android/crosstool"}, + visibility = ["//visibility:public"], +) diff --git a/third_party/clog/workspace.bzl b/third_party/clog/workspace.bzl new file mode 100644 index 00000000000..05b29805328 --- /dev/null +++ b/third_party/clog/workspace.bzl @@ -0,0 +1,15 @@ +"""Loads the clog library, used by cpuinfo and XNNPACK.""" + +load("//third_party:repo.bzl", "third_party_http_archive") + +def repo(): + third_party_http_archive( + name = "clog", + strip_prefix = "cpuinfo-d5e37adf1406cf899d7d9ec1d317c47506ccb970", + sha256 = "3f2dc1970f397a0e59db72f9fca6ff144b216895c1d606f6c94a507c1e53a025", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz", + "https://github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz", + ], + build_file = "//third_party/clog:BUILD.bazel", + ) diff --git a/third_party/cpuinfo/BUILD b/third_party/cpuinfo/BUILD new file mode 100644 index 00000000000..82bab3ffd96 --- /dev/null +++ b/third_party/cpuinfo/BUILD @@ -0,0 +1 @@ +# This empty BUILD file is required to make Bazel treat this directory as a package. diff --git a/third_party/cpuinfo/BUILD.bazel b/third_party/cpuinfo/BUILD.bazel new file mode 100644 index 00000000000..ccec4c2d872 --- /dev/null +++ b/third_party/cpuinfo/BUILD.bazel @@ -0,0 +1,222 @@ +# cpuinfo, a library to detect information about the host CPU +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +C99OPTS = [ + "-std=gnu99", # gnu99, not c99, because dprintf is used + "-Wno-vla", + "-D_GNU_SOURCE=1", # to use CPU_SETSIZE + "-DCPUINFO_INTERNAL=", + "-DCPUINFO_PRIVATE=", +] + +# Source code common to all platforms. +COMMON_SRCS = [ + "src/api.c", + "src/init.c", +] + +# Architecture-specific sources and headers. +X86_SRCS = [ + "src/x86/cache/descriptor.c", + "src/x86/cache/deterministic.c", + "src/x86/cache/init.c", + "src/x86/info.c", + "src/x86/init.c", + "src/x86/isa.c", + "src/x86/name.c", + "src/x86/topology.c", + "src/x86/uarch.c", + "src/x86/vendor.c", +] + +ARM_SRCS = [ + "src/arm/cache.c", + "src/arm/uarch.c", +] + +# Platform-specific sources and headers +LINUX_SRCS = [ + "src/linux/cpulist.c", + "src/linux/current.c", + "src/linux/multiline.c", + "src/linux/processors.c", + "src/linux/smallfile.c", +] + +MOCK_LINUX_SRCS = [ + "src/linux/mockfile.c", +] + +MACH_SRCS = [ + "src/mach/topology.c", +] + +EMSCRIPTEN_SRCS = [ + "src/emscripten/init.c", +] + +PNACL_SRCS = [ + "src/pnacl/init.c", +] + +LINUX_X86_SRCS = [ + "src/x86/linux/cpuinfo.c", + "src/x86/linux/init.c", +] + +LINUX_ARM_SRCS = [ + "src/arm/linux/chipset.c", + "src/arm/linux/clusters.c", + "src/arm/linux/cpuinfo.c", + "src/arm/linux/hwcap.c", + "src/arm/linux/init.c", + "src/arm/linux/midr.c", +] + +LINUX_ARM32_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch32-isa.c"] + +LINUX_ARM64_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch64-isa.c"] + +ANDROID_ARM_SRCS = [ + "src/arm/android/properties.c", +] + +WINDOWS_X86_SRCS = [ + "src/x86/windows/init.c", +] + +MACH_X86_SRCS = [ + "src/x86/mach/init.c", +] + +MACH_ARM_SRCS = [ + "src/arm/mach/init.c", +] + +cc_library( + name = "cpuinfo_impl", + srcs = select({ + ":linux_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, + ":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, + ":android_armv7": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS + ANDROID_ARM_SRCS, + ":android_arm64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS + ANDROID_ARM_SRCS, + ":android_x86": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, + ":android_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, + ":emscripten_wasm": COMMON_SRCS + EMSCRIPTEN_SRCS, + }), + copts = C99OPTS + [ + "-Iexternal/cpuinfo/include", + "-Iexternal/cpuinfo/src", + ], + linkstatic = True, + # Headers must be in textual_hdrs to allow us to set the standard to C99 + textual_hdrs = [ + "include/cpuinfo.h", + "src/linux/api.h", + "src/mach/api.h", + "src/cpuinfo/common.h", + "src/cpuinfo/internal-api.h", + "src/cpuinfo/log.h", + "src/cpuinfo/utils.h", + "src/x86/api.h", + "src/x86/cpuid.h", + "src/x86/linux/api.h", + "src/arm/android/api.h", + "src/arm/linux/api.h", + "src/arm/linux/cp.h", + "src/arm/api.h", + "src/arm/midr.h", + ], + deps = [ + "@clog", + ], +) + +cc_library( + name = "cpuinfo", + hdrs = [ + "include/cpuinfo.h", + ], + strip_include_prefix = "include", + deps = [ + ":cpuinfo_impl", + ], +) + +############################# Build configurations ############################# + +config_setting( + name = "linux_x86_64", + values = {"cpu": "k8"}, + visibility = ["//visibility:public"], +) + +config_setting( + name = "macos_x86_64", + values = { + "apple_platform_type": "macos", + "cpu": "darwin", + }, +) + +config_setting( + name = "android_armv7", + values = { + "crosstool_top": "//external:android/crosstool", + "cpu": "armeabi-v7a", + }, + visibility = ["//visibility:public"], +) + +config_setting( + name = "android_arm64", + values = { + "crosstool_top": "//external:android/crosstool", + "cpu": "arm64-v8a", + }, + visibility = ["//visibility:public"], +) + +config_setting( + name = "android_x86", + values = { + "crosstool_top": "//external:android/crosstool", + "cpu": "x86", + }, + visibility = ["//visibility:public"], +) + +config_setting( + name = "android_x86_64", + values = { + "crosstool_top": "//external:android/crosstool", + "cpu": "x86_64", + }, + visibility = ["//visibility:public"], +) + +config_setting( + name = "emscripten_wasm", + values = { + "cpu": "wasm", + }, +) + +config_setting( + name = "emscripten_wasmsimd", + values = { + "cpu": "wasm", + "features": "wasm_simd", + }, +) + +config_setting( + name = "emscripten_asmjs", + values = { + "cpu": "asmjs", + }, +) diff --git a/third_party/cpuinfo/workspace.bzl b/third_party/cpuinfo/workspace.bzl new file mode 100644 index 00000000000..25b85c645b2 --- /dev/null +++ b/third_party/cpuinfo/workspace.bzl @@ -0,0 +1,15 @@ +"""Loads the cpuinfo library, used by XNNPACK.""" + +load("//third_party:repo.bzl", "third_party_http_archive") + +def repo(): + third_party_http_archive( + name = "cpuinfo", + strip_prefix = "cpuinfo-d5e37adf1406cf899d7d9ec1d317c47506ccb970", + sha256 = "3f2dc1970f397a0e59db72f9fca6ff144b216895c1d606f6c94a507c1e53a025", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz", + "https://github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz", + ], + build_file = "//third_party/cpuinfo:BUILD.bazel", + ) diff --git a/third_party/psimd/BUILD b/third_party/psimd/BUILD new file mode 100644 index 00000000000..82bab3ffd96 --- /dev/null +++ b/third_party/psimd/BUILD @@ -0,0 +1 @@ +# This empty BUILD file is required to make Bazel treat this directory as a package. diff --git a/third_party/psimd/BUILD.bazel b/third_party/psimd/BUILD.bazel new file mode 100644 index 00000000000..fe101815c5f --- /dev/null +++ b/third_party/psimd/BUILD.bazel @@ -0,0 +1,15 @@ +# Description: +# Portable 128-bit SIMD intrinsics + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +cc_library( + name = "psimd", + hdrs = glob(["include/psimd.h"]), + includes = ["include"], + strip_include_prefix = "include", +) diff --git a/third_party/psimd/workspace.bzl b/third_party/psimd/workspace.bzl new file mode 100644 index 00000000000..49e2be0b684 --- /dev/null +++ b/third_party/psimd/workspace.bzl @@ -0,0 +1,15 @@ +"""Loads the psimd library, used by XNNPACK.""" + +load("//third_party:repo.bzl", "third_party_http_archive") + +def repo(): + third_party_http_archive( + name = "psimd", + strip_prefix = "psimd-8fd2884b88848180904a40c452a362d1ee429ad5", + sha256 = "9d4f05bc5a93a0ab8bcef12027ebe54cfddd0050d4862442449c8de11b4e8c17", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/Maratyszcza/psimd/archive/8fd2884b88848180904a40c452a362d1ee429ad5.tar.gz", + "https://github.com/Maratyszcza/psimd/archive/8fd2884b88848180904a40c452a362d1ee429ad5.tar.gz", + ], + build_file = "//third_party/psimd:BUILD.bazel", + ) diff --git a/third_party/pthreadpool/BUILD b/third_party/pthreadpool/BUILD new file mode 100644 index 00000000000..82bab3ffd96 --- /dev/null +++ b/third_party/pthreadpool/BUILD @@ -0,0 +1 @@ +# This empty BUILD file is required to make Bazel treat this directory as a package. diff --git a/third_party/pthreadpool/BUILD.bazel b/third_party/pthreadpool/BUILD.bazel new file mode 100644 index 00000000000..1267e4f3736 --- /dev/null +++ b/third_party/pthreadpool/BUILD.bazel @@ -0,0 +1,32 @@ +# Description: +# Portable pthread-based thread pool for C and C++ + +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +exports_files(["LICENSE"]) + +cc_library( + name = "pthreadpool", + srcs = [ + "src/threadpool-pthreads.c", + "src/threadpool-utils.h", + ], + hdrs = [ + "include/pthreadpool.h", + ], + copts = [ + "-O2", + ], + defines = [ + "PTHREADPOOL_NO_DEPRECATED_API", + ], + includes = [ + "include", + ], + strip_include_prefix = "include", + deps = [ + "@FXdiv", + ], +) diff --git a/third_party/pthreadpool/workspace.bzl b/third_party/pthreadpool/workspace.bzl new file mode 100644 index 00000000000..b21c9ca12f8 --- /dev/null +++ b/third_party/pthreadpool/workspace.bzl @@ -0,0 +1,15 @@ +"""Loads the pthreadpool library, used by XNNPACK.""" + +load("//third_party:repo.bzl", "third_party_http_archive") + +def repo(): + third_party_http_archive( + name = "pthreadpool", + strip_prefix = "pthreadpool-7ad026703b3109907ad124025918da15cfd3f100", + sha256 = "96eb4256fc438b7b8cab40541d383efaf546fae7bad380c24ea601c326c5f685", + urls = [ + "https://storage.googleapis.com/mirror.tensorflow.org/github.com/Maratyszcza/pthreadpool/archive/7ad026703b3109907ad124025918da15cfd3f100.tar.gz", + "https://github.com/Maratyszcza/pthreadpool/archive/7ad026703b3109907ad124025918da15cfd3f100.tar.gz", + ], + build_file = "//third_party/pthreadpool:BUILD.bazel", + )