TST: add SkylakeX AVX512 CI test
* adapt the C-level reproducer code for some recent SkylakeX AVX512 kernel issues, provided by Isuru Fernando and modified by Martin Kroeker, for usage in the utest suite * add an Intel SDE SkylakeX emulation utest run to the Azure CI matrix; a custom Docker build was required because Ubuntu image provided by Azure does not support AVX512VL instructions
This commit is contained in:
parent
9208ab8603
commit
a211bc9b6a
|
@ -25,3 +25,27 @@ jobs:
|
||||||
make -C utest $COMMON_FLAGS $BTYPE" > Dockerfile
|
make -C utest $COMMON_FLAGS $BTYPE" > Dockerfile
|
||||||
docker build .
|
docker build .
|
||||||
displayName: Run manylinux1 docker build
|
displayName: Run manylinux1 docker build
|
||||||
|
- job: Intel_SDE_skx
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-16.04'
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
# at the time of writing the available Azure Ubuntu vm image
|
||||||
|
# does not support AVX512VL, so use more recent LTS version
|
||||||
|
echo "FROM ubuntu:bionic
|
||||||
|
COPY . /tmp/openblas
|
||||||
|
RUN apt-get -y update && apt-get -y install \\
|
||||||
|
cmake \\
|
||||||
|
gfortran \\
|
||||||
|
make \\
|
||||||
|
wget
|
||||||
|
RUN mkdir /tmp/SDE && cd /tmp/SDE && \\
|
||||||
|
mkdir sde-external-8.35.0-2019-03-11-lin && \\
|
||||||
|
wget --quiet -O sde-external-8.35.0-2019-03-11-lin.tar.bz2 https://www.dropbox.com/s/fopsnzj67572sj5/sde-external-8.35.0-2019-03-11-lin.tar.bz2?dl=0 && \\
|
||||||
|
tar -xjvf sde-external-8.35.0-2019-03-11-lin.tar.bz2 -C /tmp/SDE/sde-external-8.35.0-2019-03-11-lin --strip-components=1
|
||||||
|
RUN cd /tmp/openblas && CC=gcc make QUIET_MAKE=1 DYNAMIC_ARCH=1 NUM_THREADS=32 BINARY=64
|
||||||
|
CMD cd /tmp/openblas && echo 0 > /proc/sys/kernel/yama/ptrace_scope && CC=gcc OPENBLAS_VERBOSE=2 /tmp/SDE/sde-external-8.35.0-2019-03-11-lin/sde64 -cpuid_in /tmp/SDE/sde-external-8.35.0-2019-03-11-lin/misc/cpuid/skx/cpuid.def -- make -C utest DYNAMIC_ARCH=1 NUM_THREADS=32 BINARY=64" > Dockerfile
|
||||||
|
docker build -t intel_sde .
|
||||||
|
# we need a privileged docker run for sde process attachment
|
||||||
|
docker run --privileged intel_sde
|
||||||
|
displayName: 'Run AVX512 SkylakeX docker build / test'
|
||||||
|
|
|
@ -38,6 +38,7 @@ if (NOT NO_LAPACK)
|
||||||
set(OpenBLAS_utest_src
|
set(OpenBLAS_utest_src
|
||||||
${OpenBLAS_utest_src}
|
${OpenBLAS_utest_src}
|
||||||
test_potrs.c
|
test_potrs.c
|
||||||
|
test_kernel_regress.c
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ OBJS=utest_main.o test_amax.o test_rotmg.o test_axpy.o test_dotu.o test_dsdot.o
|
||||||
|
|
||||||
ifneq ($(NO_LAPACK), 1)
|
ifneq ($(NO_LAPACK), 1)
|
||||||
OBJS += test_potrs.o
|
OBJS += test_potrs.o
|
||||||
|
OBJS += test_kernel_regress.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#this does not work with OpenMP nor with native Windows or Android threads
|
#this does not work with OpenMP nor with native Windows or Android threads
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
#include "openblas_utest.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <cblas.h>
|
||||||
|
|
||||||
|
#define LAPACK_ROW_MAJOR 101
|
||||||
|
blasint LAPACKE_dgesvd( blasint matrix_layout, char jobu, char jobvt,
|
||||||
|
blasint m, blasint n, double* a,
|
||||||
|
blasint lda, double* s, double* u, blasint ldu,
|
||||||
|
double* vt, blasint ldvt, double* superb );
|
||||||
|
|
||||||
|
|
||||||
|
#define DATASIZE 100
|
||||||
|
|
||||||
|
double s[DATASIZE];
|
||||||
|
double u[DATASIZE*DATASIZE];
|
||||||
|
double vt[DATASIZE*DATASIZE];
|
||||||
|
double X[DATASIZE*DATASIZE];
|
||||||
|
double superb[DATASIZE];
|
||||||
|
double tmp[DATASIZE*DATASIZE];
|
||||||
|
double m[DATASIZE*DATASIZE];
|
||||||
|
|
||||||
|
CTEST(kernel_regress,skx_avx)
|
||||||
|
{
|
||||||
|
double norm;
|
||||||
|
int i, j, info;
|
||||||
|
srand(0);
|
||||||
|
for (i = 0; i < DATASIZE*DATASIZE; i++) {
|
||||||
|
m[i] = (rand()+0.0)/RAND_MAX * 10;
|
||||||
|
tmp[i] = m[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
info = LAPACKE_dgesvd( LAPACK_ROW_MAJOR, 'A', 'A', DATASIZE, DATASIZE, m, DATASIZE,
|
||||||
|
s, u, DATASIZE, vt, DATASIZE, superb);
|
||||||
|
|
||||||
|
for (i = 0; i < DATASIZE; i++) {
|
||||||
|
for (j = 0; j < DATASIZE; j++) {
|
||||||
|
u[i*DATASIZE+j] = u[i*DATASIZE+j]*s[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
|
||||||
|
DATASIZE, DATASIZE, DATASIZE, 1, u, DATASIZE, vt, DATASIZE, 0, X, DATASIZE);
|
||||||
|
|
||||||
|
for (i = 0; i < DATASIZE*DATASIZE; i++) {
|
||||||
|
X[i] = X[i] - tmp[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
norm = cblas_dnrm2(DATASIZE*DATASIZE, X, 1);
|
||||||
|
ASSERT_DBL_NEAR_TOL(0.0, norm, 1e-10);
|
||||||
|
}
|
Loading…
Reference in New Issue