configure/swr: add KNL and SKX architecture targets
authorTim Rowley <timothy.o.rowley@intel.com>
Fri, 7 Jul 2017 18:58:09 +0000 (13:58 -0500)
committerTim Rowley <timothy.o.rowley@intel.com>
Wed, 19 Jul 2017 20:12:07 +0000 (15:12 -0500)
Not built by default.  Currently only builds with icc.

v2:
 * document knl,skx possibilities for swr_archs
 * merge with changed loader lib selection code

Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
configure.ac
src/gallium/drivers/swr/Makefile.am
src/gallium/drivers/swr/swr_loader.cpp

index cfc53de608ea5b18aceee2723c8cba0775017182..38cd1271ecf909e5594ca3dd18e5656968f5caed 100644 (file)
@@ -2357,7 +2357,7 @@ dnl Architectures to build SWR library for
 AC_ARG_WITH([swr-archs],
     [AS_HELP_STRING([--with-swr-archs@<:@=DIRS...@:>@],
         [comma delimited swr architectures list, e.g.
-        "avx,avx2" @<:@default="avx,avx2"@:>@])],
+        "avx,avx2,knl,skx" @<:@default="avx,avx2"@:>@])],
     [with_swr_archs="$withval"],
     [with_swr_archs="avx,avx2"])
 
@@ -2521,6 +2521,20 @@ if test -n "$with_gallium_drivers"; then
                     AC_SUBST([SWR_AVX2_CXXFLAGS])
                     HAVE_SWR_AVX2=yes
                     ;;
+                xknl)
+                    swr_require_cxx_feature_flags "KNL" "defined(__AVX512F__) && defined(__AVX512ER__)" \
+                        ",-march=knl,-xMIC-AVX512" \
+                        SWR_KNL_CXXFLAGS
+                    AC_SUBST([SWR_KNL_CXXFLAGS])
+                    HAVE_SWR_KNL=yes
+                    ;;
+                xskx)
+                    swr_require_cxx_feature_flags "SKX" "defined(__AVX512F__) && defined(__AVX512BW__)" \
+                        ",-march=skylake-avx512,-xCORE-AVX512" \
+                        SWR_SKX_CXXFLAGS
+                    AC_SUBST([SWR_SKX_CXXFLAGS])
+                    HAVE_SWR_SKX=yes
+                    ;;
                 *)
                     AC_MSG_ERROR([unknown SWR build architecture '$arch'])
                     ;;
@@ -2528,7 +2542,9 @@ if test -n "$with_gallium_drivers"; then
             done
 
             if test "x$HAVE_SWR_AVX" != xyes -a \
-                    "x$HAVE_SWR_AVX2" != xyes; then
+                    "x$HAVE_SWR_AVX2" != xyes -a \
+                    "x$HAVE_SWR_KNL" != xyes -a \
+                    "x$HAVE_SWR_SKX" != xyes -a; then
                AC_MSG_ERROR([swr enabled but no swr architectures selected])
             fi
 
@@ -2571,6 +2587,8 @@ fi
 
 AM_CONDITIONAL(HAVE_SWR_AVX, test "x$HAVE_SWR_AVX" = xyes)
 AM_CONDITIONAL(HAVE_SWR_AVX2, test "x$HAVE_SWR_AVX2" = xyes)
+AM_CONDITIONAL(HAVE_SWR_KNL, test "x$HAVE_SWR_KNL" = xyes)
+AM_CONDITIONAL(HAVE_SWR_SKX, test "x$HAVE_SWR_SKX" = xyes)
 
 dnl We need to validate some needed dependencies for renderonly drivers.
 
index f38ce7b1d97d279436472008fc3483b280fd9aad..6495021457263bdbf725894c892f96bdcf295e65 100644 (file)
@@ -63,6 +63,14 @@ if HAVE_SWR_AVX2
 libmesaswr_la_CXXFLAGS += -DHAVE_SWR_AVX2
 endif
 
+if HAVE_SWR_KNL
+libmesaswr_la_CXXFLAGS += -DHAVE_SWR_KNL
+endif
+
+if HAVE_SWR_SKX
+libmesaswr_la_CXXFLAGS += -DHAVE_SWR_SKX
+endif
+
 COMMON_SOURCES = \
        $(ARCHRAST_CXX_SOURCES) \
        $(COMMON_CXX_SOURCES) \
@@ -263,6 +271,36 @@ libswrAVX2_la_LDFLAGS = \
        $(COMMON_LDFLAGS)
 endif
 
+if HAVE_SWR_KNL
+lib_LTLIBRARIES += libswrKNL.la
+
+libswrKNL_la_CXXFLAGS = \
+       $(SWR_KNL_CXXFLAGS) \
+       -DKNOB_ARCH=KNOB_ARCH_AVX512 -DAVX512F_STRICT \
+       $(COMMON_CXXFLAGS)
+
+libswrKNL_la_SOURCES = \
+       $(COMMON_SOURCES)
+
+libswrKNL_la_LDFLAGS = \
+       $(COMMON_LDFLAGS)
+endif
+
+if HAVE_SWR_SKX
+lib_LTLIBRARIES += libswrSKX.la
+
+libswrSKX_la_CXXFLAGS = \
+       $(SWR_SKX_CXXFLAGS) \
+       -DKNOB_ARCH=KNOB_ARCH_AVX512 \
+       $(COMMON_CXXFLAGS)
+
+libswrSKX_la_SOURCES = \
+       $(COMMON_SOURCES)
+
+libswrSKX_la_LDFLAGS = \
+       $(COMMON_LDFLAGS)
+endif
+
 include $(top_srcdir)/install-gallium-links.mk
 
 # Generated gen_builder.hpp is not backwards compatible. So ship only one
index 4aa850a6b8d61513f78ae46f1e2611211f6959ac..e205fe2d7ef7212d17200e6518d7aa94553e8e88 100644 (file)
@@ -38,6 +38,26 @@ swr_create_screen(struct sw_winsys *winsys)
 
    util_cpu_detect();
 
+   if (!strlen(filename) &&
+       util_cpu_caps.has_avx512f && util_cpu_caps.has_avx512er) {
+#if HAVE_SWR_KNL
+      fprintf(stderr, "KNL ");
+      sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrKNL", UTIL_DL_EXT);
+#else
+      fprintf(stderr, "KNL (not built) ");
+#endif
+   }
+
+   if (!strlen(filename) &&
+       util_cpu_caps.has_avx512f && util_cpu_caps.has_avx512bw) {
+#if HAVE_SWR_SKX
+      fprintf(stderr, "SKX ");
+      sprintf(filename, "%s%s%s", UTIL_DL_PREFIX, "swrSKX", UTIL_DL_EXT);
+#else
+      fprintf(stderr, "SKX (not built) ");
+#endif
+   }
+
    if (!strlen(filename) && util_cpu_caps.has_avx2) {
 #if HAVE_SWR_AVX2
       fprintf(stderr, "AVX2 ");