Added libxsmm support to test/sup drivers.

Details:
- Modified test/sup/Makefile to build drivers that test the performance
  of skinny/small problems via libxsmm.
- Modified test/sup/runme.sh to run aforementioned drivers.
- Modified test/sup/test_gemm.c so that problem sizes are tested in
  reverse order (from largest to smallest). This can help avoid certain
  situations where the CPU frequency does not immediately throttle up
  to its maximum. Thanks to Robert van de Geijn for recommending this
  fix.
This commit is contained in:
Field G. Van Zee
2019-08-23 14:17:52 -05:00
parent 661681fe33
commit 57e422aa16
3 changed files with 33 additions and 7 deletions

View File

@@ -103,6 +103,9 @@ OPENBLASP_LIB := $(HOME_LIB_PATH)/libopenblasp.a
# BLASFEO
BLASFEO_LIB := $(HOME_LIB_PATH)/libblasfeo.a
# libxsmm
LIBXSMM_LIB := $(HOME_LIB_PATH)/libxsmm.a
# ATLAS
ATLAS_LIB := $(HOME_LIB_PATH)/libf77blas.a \
$(HOME_LIB_PATH)/libatlas.a
@@ -306,14 +309,18 @@ get-imp-defs = $(strip $(subst blissup,-DSTR=\"$(1)\" -DBLIS -DSUP, \
$(subst eigen,-DSTR=\"$(1)\" -DEIGEN, \
$(subst openblas,-DSTR=\"$(1)\" -DCBLAS, \
$(subst blasfeo,-DSTR=\"$(1)\" -DCBLAS, \
$(subst vendor,-DSTR=\"$(1)\" -DCBLAS,$(1))))))))
$(subst libxsmm,-DSTR=\"$(1)\" -DBLAS, \
$(subst vendor,-DSTR=\"$(1)\" -DCBLAS,$(1)))))))))
TRANS0 = $(call stripu,$(TRANS))
STORS0 = $(call stripu,$(STORS))
# Limit BLAS and Eigen to only using all row-stored, or all column-stored matrices.
# Also, limit libxsmm to using all column-stored matrices since it does not offer
# CBLAS interfaces.
BSTORS0 = rrr ccc
ESTORS0 = rrr ccc
XSTORS0 = ccc
#
@@ -339,6 +346,9 @@ OPENBLAS_ST_BINS := $(patsubst %.o,%.x,$(OPENBLAS_ST_OBJS))
BLASFEO_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),blasfeo)
BLASFEO_ST_BINS := $(patsubst %.o,%.x,$(BLASFEO_ST_OBJS))
LIBXSMM_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(XSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),libxsmm)
LIBXSMM_ST_BINS := $(patsubst %.o,%.x,$(LIBXSMM_ST_OBJS))
VENDOR_ST_OBJS := $(call get-st-objs,$(DTS),$(TRANS0),$(BSTORS0),$(SHAPES),$(SMS),$(SNS),$(SKS),vendor)
VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS))
@@ -351,6 +361,7 @@ VENDOR_ST_BINS := $(patsubst %.o,%.x,$(VENDOR_ST_OBJS))
$(EIGEN_ST_OBJS) \
$(OPENBLAS_ST_OBJS) \
$(BLASFEO_ST_OBJS) \
$(LIBXSMM_ST_OBJS) \
$(VENDOR_ST_OBJS)
@@ -365,9 +376,11 @@ blislpab: blislpab-st
eigen: eigen-st
openblas: openblas-st
blasfeo: blasfeo-st
libxsmm: libxsmm-st
vendor: vendor-st
st: blissup-st blislpab-st eigen-st openblas-st blasfeo-st vendor-st
st: blissup-st blislpab-st \
eigen-st openblas-st blasfeo-st libxsmm-st vendor-st
blis: blissup-st blislpab-st
blissup-st: $(BLISSUP_ST_BINS)
@@ -375,13 +388,14 @@ blislpab-st: $(BLISLPAB_ST_BINS)
eigen-st: $(EIGEN_ST_BINS)
openblas-st: $(OPENBLAS_ST_BINS)
blasfeo-st: $(BLASFEO_ST_BINS)
libxsmm-st: $(LIBXSMM_ST_BINS)
vendor-st: $(VENDOR_ST_BINS)
# --Object file rules --
# Define the implementations for which we will instantiate compilation rules.
BIMPLS := blissup blislpab openblas blasfeo vendor
BIMPLS := blissup blislpab openblas blasfeo libxsmm vendor
EIMPLS := eigen
# 1 2 3 4 567 8
@@ -447,6 +461,9 @@ test_%_openblas_st.x: test_%_openblas_st.o $(LIBBLIS_LINK)
test_%_blasfeo_st.x: test_%_blasfeo_st.o $(LIBBLIS_LINK)
$(CC) $(strip $< $(BLASFEO_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@)
test_%_libxsmm_st.x: test_%_libxsmm_st.o $(LIBBLIS_LINK)
$(CC) $(strip $< $(LIBXSMM_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@)
test_%_vendor_st.x: test_%_vendor_st.o $(LIBBLIS_LINK)
$(CC) $(strip $< $(VENDOR_LIB) $(LIBBLIS_LINK) $(LDFLAGS) -o $@)

View File

@@ -37,13 +37,14 @@ sns="8"
sks="4"
# Implementations to test.
impls="vendor blissup blislpab openblas eigen"
impls="vendor blissup blislpab openblas eigen libxsmm blasfeo"
#impls="vendor openblas eigen"
#impls="blislpab blissup"
#mpls="openblas eigen vendor"
#mpls="eigen"
#impls="openblas eigen vendor"
#impls="eigen"
#impls="blissup"
#impls="blasfeo"
#impls="libxsmm"
# Example: test_dgemm_nn_rrc_m6npkp_blissup_st.x
@@ -75,6 +76,13 @@ for th in ${threads}; do
continue;
fi
# Further limit execution of libxsmm to
# ccc storage cases.
if [ "${im:0:7}" = "libxsmm" ] && \
[ "${st}" != "ccc" ]; then
continue;
fi
# Extract the shape chars for m, n, k.
chm=${sh:0:1}
chn=${sh:1:1}

View File

@@ -158,7 +158,8 @@ int main( int argc, char** argv )
( unsigned long )0, 0.0 );
for ( p = p_begin; p <= p_max; p += p_inc )
//for ( p = p_begin; p <= p_max; p += p_inc )
for ( p = p_max; p_begin <= p; p -= p_inc )
{
obj_t a, b, c;
obj_t c_save;