Removed duplicate cpp and testcpp folders.

The cpp and testcpp folder exists in root directory as well as vendor
directory. Only folder in vendor directory are needed.

Removed duplicate directories and updated makefiles to pick the
sources from vendor folder.

AMD-Internal: [CPUPL-1834]
Change-Id: I178043a09fd746660938b89ecce73c53d6c53409
This commit is contained in:
Dipal M Zambare
2021-09-01 10:01:39 +05:30
parent 41a86c2463
commit d1fb770f1c
50 changed files with 5 additions and 11433 deletions

View File

@@ -532,7 +532,7 @@ add_subdirectory(aocl_dtl)
add_subdirectory(test)
add_subdirectory(testsuite)
if(ENABLE_TESTCPP_TESTING)
add_subdirectory(testcpp)
add_subdirectory(vendor/testcpp)
endif()
if (ENABLE_BLASTEST)
add_subdirectory(blastest)

View File

@@ -257,16 +257,9 @@ ifeq ($(MK_ENABLE_CBLAS),yes)
HEADERS_TO_INSTALL += $(CBLAS_H_FLAT)
endif
# Install BLIS CPP Template header files
HEADERS_TO_INSTALL += $(CPP_HEADER_DIR)/*.hh
# If requested, include AMD's C++ template header files in the list of headers
# Include AMD's C++ template header files in the list of headers
# to install.
ifeq ($(INSTALL_HH),yes)
HEADERS_TO_INSTALL += $(wildcard $(VEND_CPP_PATH)/*.hh)
endif
#
# --- public makefile fragment definitions -------------------------------------
@@ -903,7 +896,7 @@ endif
# Check results of BLIS CPP Template tests
checkbliscpp:
$(MAKE) -C $(CPP_TEST_DIR)
$(MAKE) -C $(VEND_TESTCPP_DIR)
# Check the results of the BLIS testsuite.
checkblis: testsuite-run
@@ -1246,13 +1239,13 @@ ifeq ($(IS_CONFIGURED),yes)
ifeq ($(ENABLE_VERBOSE),yes)
- $(FIND) $(TESTSUITE_DIR)/$(OBJ_DIR) -name "*.o" | $(XARGS) $(RM_F)
- $(RM_F) $(TESTSUITE_DIR)/$(TESTSUITE_BIN)
- $(MAKE) -C $(CPP_TEST_DIR) clean
- $(MAKE) -C $(VEND_TESTCPP_DIR) clean
else
@echo "Removing object files from $(TESTSUITE_DIR)/$(OBJ_DIR)"
@- $(FIND) $(TESTSUITE_DIR)/$(OBJ_DIR) -name "*.o" | $(XARGS) $(RM_F)
@echo "Removing binary $(TESTSUITE_DIR)/$(TESTSUITE_BIN)"
@- $(RM_F) $(TESTSUITE_DIR)/$(TESTSUITE_BIN)
@$(MAKE) -C $(CPP_TEST_DIR) clean
@$(MAKE) -C $(VEND_TESTCPP_DIR) clean
endif # ENABLE_VERBOSE
endif # IS_CONFIGURED

View File

@@ -303,8 +303,6 @@ LIB_DIR := lib
INCLUDE_DIR := include
BLASTEST_DIR := blastest
TESTSUITE_DIR := testsuite
CPP_HEADER_DIR := cpp
CPP_TEST_DIR := testcpp
VEND_DIR := vendor
VEND_CPP_DIR := $(VEND_DIR)/cpp

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,208 +0,0 @@
# BLIS
# An object-based framework for developing high-performance BLAS-like
# libraries.
#
# Copyright (C) 2014, The University of Texas at Austin
# Copyright (C) 2017 - 2019, Advanced Micro Devices, Inc.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# - Neither the name(s) of the copyright holder(s) nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
#
# Makefile
#
# Field G. Van Zee
#
# Makefile for standalone BLIS test drivers.
#
#
# --- Makefile PHONY target definitions ----------------------------------------
#
.PHONY: all \
blis \
clean cleanx
#
# --- Determine makefile fragment location -------------------------------------
#
# Comments:
# - DIST_PATH is assumed to not exist if BLIS_INSTALL_PATH is given.
# - We must use recursively expanded assignment for LIB_PATH and INC_PATH in
# the second case because CONFIG_NAME is not yet set.
ifneq ($(strip $(BLIS_INSTALL_PATH)),)
LIB_PATH := $(BLIS_INSTALL_PATH)/lib
INC_PATH := $(BLIS_INSTALL_PATH)/include/blis
SHARE_PATH := $(BLIS_INSTALL_PATH)/share/blis
else
DIST_PATH := ..
LIB_PATH = ../lib/$(CONFIG_NAME)
INC_PATH = ../include/$(CONFIG_NAME)
SHARE_PATH := ..
endif
#
# --- Include common makefile definitions --------------------------------------
#
# Include the common makefile fragment.
-include $(SHARE_PATH)/common.mk
#
# --- BLAS and LAPACK implementations ------------------------------------------
#
# BLIS library and header path. This is simply wherever it was installed.
#BLIS_LIB_PATH := $(INSTALL_PREFIX)/lib
#BLIS_INC_PATH := $(INSTALL_PREFIX)/include/blis
# BLIS library.
#BLIS_LIB := $(BLIS_LIB_PATH)/libblis.a
# BLAS library path(s). This is where the BLAS libraries reside.
BLAS_LIB_PATH := $(HOME)/flame/lib
#
# --- General build definitions ------------------------------------------------
#
TEST_SRC_PATH := .
CPP_SRC_PATH := ../cpp/
TEST_OBJ_PATH := .
# Gather all local object files.
TEST_OBJS := $(patsubst $(TEST_SRC_PATH)/%.c, \
$(TEST_OBJ_PATH)/%.o, \
$(wildcard $(TEST_SRC_PATH)/*.c))
# Override the value of CINCFLAGS so that the value of CFLAGS returned by
# get-user-cflags-for() is not cluttered up with include paths needed only
# while building BLIS.
CINCFLAGS := -I$(INC_PATH)
CXX = g++
# Use the CFLAGS for the configuration family.
override CFLAGS += $(call get-sandbox-cxxflags-for,$(CONFIG_NAME))
# Add local header paths to CFLAGS
#CFLAGS = -O0 -g -Wall
#CFLAGS += -I$(INC_PATH)
override CFLAGS += -I$(TEST_SRC_PATH)
override CFLAGS += -I$(CPP_SRC_PATH)
LINKER = $(CXX)
# Locate the libblis library to which we will link.
LIBBLIS_LINK := $(LIB_PATH)/$(LIBBLIS_L)
#
# --- Targets/rules ------------------------------------------------------------
#
# Complete list of possible targets when defining 'all':
#
# blis
#
all: blis
blis: test_asum_blis.x \
test_axpy_blis.x \
test_copy_blis.x \
test_dot_blis.x \
test_dotc_blis.x \
test_gbmv_blis.x \
test_gemm_blis.x \
test_gemv_blis.x \
test_ger_blis.x \
test_gerc_blis.x \
test_geru_blis.x \
test_hemm_blis.x \
test_hemv_blis.x \
test_her2_blis.x \
test_her_blis.x \
test_herk_blis.x \
test_hpr2_blis.x \
test_hpr_blis.x \
test_nrm2_blis.x \
test_rot_blis.x \
test_rotg_blis.x \
test_rotm_blis.x \
test_rotmg_blis.x \
test_scal_blis.x \
test_sdsdot_blis.x \
test_spr2_blis.x \
test_spr_blis.x \
test_swap_blis.x \
test_symm_blis.x \
test_syr2_blis.x \
test_syr2k_blis.x \
test_syr_blis.x \
test_syrk_blis.x \
test_tbmv_blis.x \
test_tbsv_blis.x \
test_tpmv_blis.x \
test_tpsv_blis.x \
test_trmm_blis.x \
test_trsm_blis.x \
test_trsv_blis.x
# --Object file rules --
$(TEST_OBJ_PATH)/%.o: $(TEST_SRC_PATH)/%.cc
$(CXX) $(CFLAGS) -c $< -o $@
test_%_blis.o: test_%.cc
@$(CXX) $(CFLAGS) -c $< -o $@
# -- Executable file rules --
test_%_blis.x: test_%_blis.o $(LIBBLIS_LINK)
@$(LINKER) $^ $(LIBBLIS_LINK) $(LDFLAGS) -o $@
./$@
# -- Clean rules --
clean: cleanx
cleanx:
- $(RM_F) *.o *.x

View File

@@ -1,219 +0,0 @@
/*
* --------------------------------------------------------------------------
* BLISLAB
* --------------------------------------------------------------------------
* Copyright (C) 2016, The University of Texas at Austin
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of The University of Texas nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* test.hh
*
*
* Purpose:
* this header file contains all function prototypes.
*
* Todo:
*
*
* Modification:
*
*
* */
#ifndef TEST_HH
#define TEST_HH
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define min( i, j ) ( (i)<(j) ? (i): (j) )
#define A( i, j ) A[ (j)*lda + (i) ]
#define A_ref( i, j ) A_ref[ (j)*lda_ref + (i) ]
#define B( i, j ) B[ (j)*ldb + (i) ]
#define B_ref( i, j ) B_ref[ (j)*ldb_ref + (i) ]
#define C( i, j ) C[ (j)*ldc + (i) ]
#define C_ref( i, j ) C_ref[ (j)*ldc_ref + (i) ]
#define X( i ) X[ incx + (i) ]
#define X_ref( i, j ) X_ref[ (j)*incx_ref + (i)
#define Y( i ) Y[ incy + (i) ]
#define Y_ref( i ) Y_ref[ incy_ref + (i) ]\
// Allocate memory and initialise memory with random values
void allocate_init_buffer(int *aIn, int m, int n)
{
aIn = new int [m*n];
for ( int i = 0; i < m*n; i ++ ) {
aIn[ i ] = ((int) rand() / ((int) RAND_MAX / 2.0)) - 1.0;
}
}
void allocate_init_buffer(float *&aIn, int m, int n)
{
aIn = new float [m*n];
for ( int i = 0; i < m*n; i ++ ) {
aIn[ i ] = ((float) rand() / ((float) RAND_MAX / 2.0)) - 1.0;
}
}
void allocate_init_buffer(double *&aIn, int m, int n)
{
aIn = new double [m*n];
for ( int i = 0; i < m*n; i ++ ) {
aIn[ i ] = ((double) rand() / ((double) RAND_MAX / 2.0)) - 1.0;
}
}
void allocate_init_buffer(complex<float> *&aIn, int m, int n)
{
aIn = new complex<float> [m*n];
for ( int i = 0; i < m*n; i ++ ) {
float real = ((float) rand() / ((float) RAND_MAX / 2.0)) - 1.0;
float imag = ((float) rand() / ((float) RAND_MAX / 2.0)) - 1.0;
aIn[i] = {real,imag};
}
}
void allocate_init_buffer(complex<double> *&aIn, int m, int n)
{
aIn = new complex<double> [m*n];
for ( int i = 0; i < m*n; i ++ ) {
double real = ((double) rand() / ((double) RAND_MAX / 2.0)) - 1.0;
double imag = ((double) rand() / ((double) RAND_MAX / 2.0)) - 1.0;
aIn[i] = {real,imag};
}
}
template< typename T >
void copy_buffer(T *aSrc, T *&aDest, int m, int n)
{
aDest = new T [m*n];
for ( int i = 0; i < m*n; i ++ ) {
aDest[i] = aSrc[i];
}
}
template< typename T >
int computeErrorM(
int lda,
int lda_ref,
int m,
int n,
T *A,
T *A_ref
)
{
int i, j;
int ret = 0;
for ( i = 0; i < m; i ++ ) {
for ( j = 0; j < n; j ++ ) {
if ( (fabs (A( i, j )) - fabs( A_ref( i, j ))) > 0.0000001 ) {
cout << A(i,j) << A_ref(i,j);
ret = 1;
break;
}
}
}
return ret;
}
template< typename T >
int computeErrorV(
int incy,
int incy_ref,
int n,
T *Y,
T *Y_ref
)
{
int i;
int ret = 0;
for ( i = 0; i < n; i ++ ) {
if ( (fabs( Y_ref[ i ]) - fabs(Y[ i ] ) ) > 0.00001) {
cout << Y[i] << Y_ref[i];
ret = 1;
break;
}
}
return ret;
}
/*
*printing matix and vector
*
*/
template <typename T>
void printmatrix(
T *A,
int lda,
int m,
int n,
char *func_str
)
{
int i, j;
cout << func_str <<"\n";
for ( i = 0; i < m; i ++ ) {
for ( j = 0; j < n; j ++ ) {
cout<< A[j * lda + i]<<" ";
}
printf("\n");
}
printf("\n");
}
template <typename T>
void printvector(
T *X,
int m,
char *func_str
)
{
int i;
cout << func_str <<"\n";
for ( i = 0; i < m; i ++ ) {
cout<< X[i]<<" ";
cout<<"\n";
}
printf("\n");
}
#endif

View File

@@ -1,46 +0,0 @@
echo Build BLIS CPP Template tests
make clean
make
echo Run tests
./test_asum_blis.x
./test_axpy_blis.x
./test_copy_blis.x
./test_dot_blis.x
./test_dotc_blis.x
./test_gbmv_blis.x
./test_gemm_blis.x
./test_gemv_blis.x
./test_ger_blis.x
./test_gerc_blis.x
./test_geru_blis.x
./test_hemm_blis.x
./test_hemv_blis.x
./test_her2_blis.x
./test_her_blis.x
./test_herk_blis.x
./test_hpr2_blis.x
./test_hpr_blis.x
./test_nrm2_blis.x
./test_rot_blis.x
./test_rotg_blis.x
./test_rotm_blis.x
./test_rotmg_blis.x
./test_scal_blis.x
./test_sdsdot_blis.x
./test_spr2_blis.x
./test_spr_blis.x
./test_swap_blis.x
./test_symm_blis.x
./test_syr2_blis.x
./test_syr2k_blis.x
./test_syr_blis.x
./test_syrk_blis.x
./test_tbmv_blis.x
./test_tbsv_blis.x
./test_tpmv_blis.x
./test_tpsv_blis.x
./test_trmm_blis.x
./test_trsm_blis.x
./test_trsv_blis.x

View File

@@ -1,127 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP asum routine and reference blis asum routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
#define ALPHA 0.5
template< typename T, typename TR>
void ref_asum(int64_t n,
T *X,
TR *asum
)
{
obj_t obj_x;
obj_t obj_asum;
num_t dt, dtR;
if(is_same<T , float>::value)
dt = BLIS_FLOAT;
else if(is_same<T , double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T , complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T , complex<double>>::value)
dt = BLIS_DCOMPLEX;
if(is_same<TR , float>::value)
dtR = BLIS_FLOAT;
else if(is_same<TR , double>::value)
dtR = BLIS_DOUBLE;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dtR, 1, 1, asum, 1, 1,&obj_asum );
bli_asumv(&obj_x, &obj_asum);
}
template< typename T, typename TR>
void test_asum()
{
T *X, *X_ref;
TR asum, asum_ref;
int n;
int incx;
n = N;
incx = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
copy_buffer(X, X_ref , n ,1);
#ifdef PRINT
printvector(X, n,(char *) "X");
#endif
asum = blis::asum<T>(
n,
X,
incx
);
#ifdef PRINT
cout<< "Sum of all values in Vector X: " << asum << "\n";
#endif
ref_asum(n, X_ref, &asum_ref );
#ifdef PRINT
cout<< "Ref Sum of all values in Vector X: " << asum_ref << "\n";
#endif
if(computeErrorV(incx, incx, 1, &asum, &asum_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( X_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_asum<float, float>( );
test_asum<double, double>( );
test_asum<std::complex<float>, float>( );
test_asum<std::complex<double>, double>( );
return 0;
}

View File

@@ -1,138 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
#define ALPHA 1.0
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void ref_axpy(int64_t n,
T * alpha,
T *X,
T *Y
)
{
obj_t obj_x, obj_y, obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_axpyv( &obj_alpha,
&obj_x,
&obj_y
);
}
template< typename T >
void test_axpy( )
{
T *X, *Y,*Y_ref;
T alpha = ALPHA;
int n;
int incx, incy;
n = N;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(Y, Y_ref , n ,1);
#ifdef PRINT
printvector(X, n,(char *) "X");
printvector(Y, n, (char *) "Y");
#endif
blis::axpy(
n,
alpha,
X,
incx,
Y,
incy
);
#ifdef PRINT
printvector(Y, n,(char *) "Y output");
#endif
ref_axpy(n , &alpha , X, Y_ref );
#ifdef PRINT
printvector(Y_ref, n, (char *) "Y ref output");
#endif
if(computeErrorV(incy, incy , n, Y, Y_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( Y );
delete[]( Y_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_axpy<float>( );
test_axpy<double>( );
test_axpy<complex<float>>( );
test_axpy<complex<double>>( );
return 0;
}

View File

@@ -1,132 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void ref_copy(int64_t n,
T *X,
T *Y
)
{
obj_t obj_x, obj_y;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_copyv( &obj_x,
&obj_y
);
}
template< typename T >
void test_copy( )
{
T *X, *X_ref, *Y,*Y_ref;
int n;
int incx, incy;
n = N;
incx = 1;
incy = 1;
Y = new T[n];
Y_ref = new T[n];
srand (time(NULL));
allocate_init_buffer(X , n , 1);
copy_buffer(X, X_ref , n ,1);
#ifdef PRINT
printvector(X, n,(char *) "X");
#endif
blis::copy(
n,
X,
incx,
Y,
incy
);
#ifdef PRINT
printvector(Y, n,(char *) "Y output");
#endif
ref_copy(n , X_ref, Y_ref );
#ifdef PRINT
printvector(Y_ref, n,(char *) "Y ref output");
#endif
if(computeErrorV(incy , incy , n, Y, Y_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( X_ref );
delete[]( Y );
delete[]( Y_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_copy<float>( );
test_copy<double>( );
test_copy<std::complex<float>>();
test_copy<std::complex<double>>();
return 0;
}

View File

@@ -1,131 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T, typename TR>
void ref_dot(int64_t n,
T *X,
T *Y,
TR *res_ref
)
{
obj_t obj_x;
obj_t obj_y;
obj_t obj_res;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T,double>::value)
dt = BLIS_DOUBLE;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_obj_create_with_attached_buffer( dt, 1, 1, res_ref, 1, 1,&obj_res );
bli_dotv(&obj_x,
&obj_y,
&obj_res );
}
template< typename T, typename TR>
void test_dot()
{
T *X, *Y;
int n;
int incx, incy;
TR res = 0, res_ref = 0;
n = N;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
#ifdef PRINT
printvector(X, n, (char *)"X");
printvector(Y, n, (char *)"Y");
#endif
res = blis::dot<T, TR>(
n,
X,
incx,
Y,
incy
);
#ifdef PRINT
printf("Dot product = %E \n", res);
#endif
ref_dot(n, X, Y , &res_ref );
#ifdef PRINT
printf("Dot product ref_dot %E \n", res_ref);
#endif
if(res != res_ref )
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( Y );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_dot<float , float>( );
//test_dot<float , double>( );
test_dot<double , double>( );
return 0;
}

View File

@@ -1,127 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP dotc routine and reference blis dotc routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 16
template< typename T >
void ref_dotc(int64_t n,
T *X,
T *Y,
T *res_ref
)
{
obj_t obj_x;
obj_t obj_y;
obj_t obj_res;
num_t dt;
if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n, &obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n, &obj_y );
bli_obj_set_conj(BLIS_CONJUGATE,&obj_x);
bli_obj_create_with_attached_buffer( dt, 1, 1, res_ref, 1, 1,&obj_res );
bli_dotv(&obj_x,
&obj_y,
&obj_res );
}
template< typename T >
void test_dotc()
{
T *X, *Y;
int n;
int incx, incy;
T res = 0, res_ref = 0;
n = N;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
#ifdef PRINT
printvector(X, n,(char *) "X");
printvector(Y, n,(char *) "Y");
#endif
res = blis::dotc<T>(
n,
X,
incx,
Y,
incy
);
#ifdef PRINT
cout<< "Dot product \n" << res << "\n";
#endif
ref_dotc(n, X, Y , &res_ref );
#ifdef PRINT
cout<< "Dot product ref\n" << res_ref << "\n";;
#endif
if(res != res_ref )
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( Y );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_dotc<complex<float>>( );
test_dotc<complex<double>>( );
return 0;
}

View File

@@ -1,109 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA -1.0
#define BETA -1.0
#define M 3
#define N 4
template< typename T >
void test_gbmv( )
{
// int i, j, p;
T alpha, beta;
int m,n;
int KL = 1;
int KU = 1;
int lda = 4;
T A[] = { 0.423f, -0.143f, -0.182f, -0.076f, -0.855f, 0.599f, 0.389f, -0.473f, 0.493f, -0.902f, -0.889f, -0.256f, 0.112f, 0.128f, -0.277f, -0.777f };
T X[] = { 0.488f, 0.029f, -0.633f, 0.84f };
int incX = -1;
T Y[] = { 0.874f, 0.322f, -0.477f };
int incY = -1;
T Y_ref[] = { -0.656261f, 0.19575f, 0.055905f };
alpha = ALPHA;
beta = BETA;
m = M;
n = N;
#ifdef PRINT
printmatrix(A, lda ,m,n,(char *) "A");
printvector(Y, m, (char *)"m");
#endif
blis::gbmv(
CblasColMajor,
CblasNoTrans,
m,
n,KL,KU,
alpha,
A,
lda,
X,
incX,
beta,
Y,
incY
);
#ifdef PRINT
printvector(Y, m,(char *)"Y blis:gbmv");
printvector(Y_ref, m, (char *) "Y_ref blis:gbmv" );
#endif
if(computeErrorV(incY,incY, m, Y, Y_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_gbmv<double>( );
test_gbmv<float>( );
test_gbmv<complex<float>>( );
test_gbmv<complex<double>>( );
return 0;
}

View File

@@ -1,163 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define M 5
#define N 6
#define K 4
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_gemm(int64_t m, int64_t n, int64_t k,
T * alpha,
T *A,
T *B,
T * beta,
T *C )
{
obj_t obj_a, obj_b, obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, m, k, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, k, n, B,1,k,&obj_b );
bli_obj_create_with_attached_buffer( dt, m, n, C, 1,m,&obj_c );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_a );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_b );
bli_gemm( &obj_alpha,
&obj_a,
&obj_b,
&obj_beta,
&obj_c );
}
template< typename T >
void test_gemm( )
{
T *A, *B, *C, *C_ref;
T alpha, beta;
int m,n,k;
int lda, ldb, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
m = M;
k = K;
n = N;
lda = m;
ldb = k;
ldc = m;
ldc_ref = m;
srand (time(NULL));
allocate_init_buffer(A , m , k);
allocate_init_buffer(B , k , n);
allocate_init_buffer(C , m , n);
copy_buffer(C, C_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,k , (char *)"A");
printmatrix(B, ldb ,k,n, (char *)"B");
printmatrix(C, ldc ,m,n, (char *)"C");
#endif
blis::gemm(
CblasColMajor,
CblasNoTrans,
CblasNoTrans,
m,
n,
k,
alpha,
A,
lda,
B,
ldb,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C,ldc ,m,n , (char *)"C output");
#endif
ref_gemm(m, n, k, &alpha, A, B, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,m,n, (char *)"C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, m, n, C, C_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
delete[]( A );
delete[]( B );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_gemm<double>( );
test_gemm<float>( );
test_gemm<complex<float>>( );
test_gemm<complex<double>>( );
return 0;
}

View File

@@ -1,110 +0,0 @@
/*
* --------------------------------------------------------------------------
* BLISLAB
* --------------------------------------------------------------------------
* Copyright (C) 2016, The University of Texas at Austin
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - Neither the name of The University of Texas nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* test_gemm.hh
*
*
* Purpose:
* this header file contains all function prototypes.
*
* Todo:
*
*
* Modification:
*
*
* */
#ifndef TEST_GEMM_HH
#define TEST_GEMM_HH
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define min( i, j ) ( (i)<(j) ? (i): (j) )
#define A( i, j ) A[ (j)*lda + (i) ]
#define B( i, j ) B[ (j)*ldb + (i) ]
#define C( i, j ) C[ (j)*ldc + (i) ]
#define C_ref( i, j ) C_ref[ (j)*ldc_ref + (i) ]
template< typename T >
int computeError(
int ldc,
int ldc_ref,
int m,
int n,
T *C,
T *C_ref
)
{
int i, j;
int ret = 0;
for ( i = 0; i < m; i ++ ) {
for ( j = 0; j < n; j ++ ) {
if ( C( i, j ) != C_ref( i, j ) ) {
printf( "C[ %d ][ %d ] != C_ref, %E, %E\n", i, j, C( i, j ), C_ref( i, j ) );
ret = 1;
break;
}
}
}
return ret;
}
/*
*
*
*/
template <typename T>
void bl_dgemm_printmatrix(
T *A,
int lda,
int m,
int n
)
{
int i, j;
for ( i = 0; i < m; i ++ ) {
for ( j = 0; j < n; j ++ ) {
cout<< A[j * lda + i]<<" ";
}
printf("\n");
}
printf("\n");
}
#endif

View File

@@ -1,162 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define M 5
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_gemv(int64_t m, int64_t n,
T * alpha,
T *A,
T *X,
T * beta,
T *Y )
{
obj_t obj_a, obj_x, obj_y;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, m, n, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1,n,&obj_x );
bli_obj_create_with_attached_buffer( dt, m, 1, Y, 1,m,&obj_y );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_a );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_x);
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_y);
bli_gemv( &obj_alpha,
&obj_a,
&obj_x,
&obj_beta,
&obj_y );
}
template< typename T >
void test_gemv( )
{
T *A, *Y, *Y_ref, *X;
T alpha, beta;
int m,n;
int lda, incx, incy, incy_ref;
alpha = ALPHA;
beta = BETA;
m = M;
n = N;
lda = m;
incx = 1;
incy = 1;
incy_ref = 1;
srand (time(NULL));
allocate_init_buffer(A , m , n);
allocate_init_buffer(X , m , 1);
allocate_init_buffer(Y , m , 1);
copy_buffer(Y, Y_ref , m ,1);
#ifdef PRINT
printmatrix(A, lda ,m,n,(char *) "A");
printvector(X, m,(char *) "X");
printvector(Y, m, (char *)"Y");
#endif
blis::gemv(
CblasColMajor,
CblasNoTrans,
m,
n,
alpha,
A,
lda,
X,
incx,
beta,
Y,
incy
);
#ifdef PRINT
printvector(Y, m, (char *)"Y output");
#endif
ref_gemv(m, n, &alpha, A, X, &beta, Y_ref);
#ifdef PRINT
printvector(Y_ref, m, (char *) "Y_Ref output");
#endif
if(computeErrorV(incy,incy_ref, m , Y, Y_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( Y_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_gemv<float>( );
test_gemv<double>( );
test_gemv<complex<float>>( );
test_gemv<complex<double>>( );
return 0;
}

View File

@@ -1,150 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define M 5
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_ger(int64_t m, int64_t n,
T * alpha,
T *X,
T *Y,
T *A )
{
obj_t obj_a;
obj_t obj_x;
obj_t obj_y;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, m, n, A, 1, m, &obj_a );
bli_obj_create_with_attached_buffer( dt, m, 1, X, 1, m,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
//bli_obj_set_struc( BLIS_HERMITIAN, &obj_a );
//bli_obj_set_uplo( BLIS_LOWER, &obj_a);
bli_ger( &obj_alpha,
&obj_x,
&obj_y,
&obj_a );
}
template< typename T >
void test_ger( )
{
T *A, *X, *Y, *A_ref;
T alpha;
int m,n;
int lda, incx, incy, lda_ref;
alpha = ALPHA;
m = M;
n = N;
lda = m;
lda_ref = m;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(A , m , n);
allocate_init_buffer(X , m , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(A, A_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,n,(char *) "A");
printvector(X, m,(char *) "X");
printvector(Y, n,(char *) "Y");
#endif
blis::ger(
CblasColMajor,
m,
n,
alpha,
X,
incx,
Y,
incy,
A,
lda
);
#ifdef PRINT
printmatrix(A, lda , m ,n ,(char *) "A output");
#endif
ref_ger(m, n, &alpha, X, Y, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda ,m,n, (char *)"A_ref output");
#endif
if(computeErrorM(lda, lda_ref, m, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_ger<float>( );
test_ger<double>( );
return 0;
}

View File

@@ -1,174 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define M 5
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_gerc(int64_t m, int64_t n,
T * alpha,
T *X,
T *Y,
T *A )
{
obj_t obj_a;
obj_t obj_x;
obj_t obj_y;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
if(dt == BLIS_FLOAT){
bli_obj_create_with_attached_buffer( BLIS_FLOAT, 1, 1, alpha, 1,1,&obj_alpha );
}
else if(dt == BLIS_DOUBLE){
bli_obj_create_with_attached_buffer( BLIS_DOUBLE, 1, 1, alpha, 1,1,&obj_alpha );
}
if(dt == BLIS_SCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_SCOMPLEX, 1, 1, alpha, 1,1,&obj_alpha );
}
else if(dt == BLIS_DCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_DCOMPLEX, 1, 1, alpha, 1,1,&obj_alpha );
}
bli_obj_create_with_attached_buffer( dt, m, n, A, 1, m, &obj_a );
bli_obj_create_with_attached_buffer( dt, m, 1, X, 1, m,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_obj_set_conj(BLIS_CONJUGATE,&obj_y);
bli_ger( &obj_alpha,
&obj_x,
&obj_y,
&obj_a );
}
template< typename T >
void test_gerc( )
{
T *A, *X, *Y, *A_ref;
T alpha;
int m,n;
int lda, incx, incy, lda_ref;
alpha = ALPHA;
m = M;
n = N;
lda = m;
lda_ref = m;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(A , m , n);
allocate_init_buffer(X , m , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(A, A_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,n,(char *)"A");
printvector(X, m, (char *)"X");
#endif
blis::gerc(
CblasColMajor,
m,
n,
alpha,
X,
incx,
Y,
incy,
A,
lda
);
#ifdef PRINT
printmatrix (A, lda ,m , n,(char *)"A blis::gerc\n");
#endif
ref_gerc(m, n, &alpha, X, Y, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda_ref, m, n, (char *)"A_ref output\n");
#endif
if(computeErrorM(lda, lda_ref, m, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_gerc<complex<float>>( );
test_gerc<complex<double>>( );
return 0;
}

View File

@@ -1,169 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define M 5
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_geru(int64_t m, int64_t n,
T * alpha,
T *X,
T *Y,
T *A )
{
obj_t obj_a;
obj_t obj_x;
obj_t obj_y;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
if(dt == BLIS_FLOAT){
bli_obj_create_with_attached_buffer( BLIS_FLOAT, 1, 1, alpha, 1,1,&obj_alpha );
}
else if(dt == BLIS_DOUBLE){
bli_obj_create_with_attached_buffer( BLIS_DOUBLE, 1, 1, alpha, 1,1,&obj_alpha );
}
if(dt == BLIS_SCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_SCOMPLEX, 1, 1, alpha, 1,1,&obj_alpha );
}
else if(dt == BLIS_DCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_DCOMPLEX, 1, 1, alpha, 1,1,&obj_alpha );
}
bli_obj_create_with_attached_buffer( dt, m, n, A, 1, m, &obj_a );
bli_obj_create_with_attached_buffer( dt, m, 1, X, 1, m,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_ger( &obj_alpha,
&obj_x,
&obj_y,
&obj_a );
}
template< typename T >
void test_geru( )
{
T *A, *X, *Y, *A_ref;
T alpha;
int m,n;
int lda, incx, incy, lda_ref;
alpha = ALPHA;
m = M;
n = N;
lda = m;
lda_ref = m;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(A , m , n);
allocate_init_buffer(X , m , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(A, A_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,n,(char *)"A");
printvector(X, m,(char *) "X");
#endif
blis::geru(
CblasColMajor,
m,
n,
alpha,
X,
incx,
Y,
incy,
A,
lda
);
#ifdef PRINT
printmatrix (A, lda ,m,n,(char *)"A output");
printvector (X, m,(char *) "X");
#endif
ref_geru(m, n, &alpha, X, Y, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda_ref, m,n,(char *)"A_ref output" );
#endif
if(computeErrorM(lda, lda_ref, m, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_geru<complex<float>>( );
test_geru<complex<double>>( );
return 0;
}

View File

@@ -1,164 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define M 5
#define N 5
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_hemm(int64_t m, int64_t n,
T * alpha,
T *A,
T *B,
T * beta,
T *C )
{
obj_t obj_a, obj_b, obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, m, m, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, m, n, B, 1,n,&obj_b );
bli_obj_create_with_attached_buffer( dt, m, n, C, 1,m,&obj_c );
bli_obj_set_struc( BLIS_HERMITIAN, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_mkherm(&obj_a);
bli_mktrim(&obj_a);
bli_hemm( BLIS_LEFT,
&obj_alpha,
&obj_a,
&obj_b,
&obj_beta,
&obj_c );
}
template< typename T >
void test_hemm( )
{
T *A, *B, *C, *C_ref;
T alpha, beta;
int m,n;
int lda, ldb, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
m = M;
n = N;
lda = m;
ldb = n;
ldc = m;
ldc_ref = m;
srand48 (time(NULL));
srand (time(NULL));
allocate_init_buffer(A , m , m);
allocate_init_buffer(B , m , n);
allocate_init_buffer(C , m , n);
copy_buffer(C, C_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,m,(char *) "A");
printmatrix(B, ldb ,m,n,(char *) "B");
printmatrix(C, ldc ,m,n,(char *) "C");
#endif
blis::hemm(
CblasColMajor,
CblasLeft,
CblasLower,
m,
n,
alpha,
A,
lda,
B,
ldb,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C, ldc ,m,n,(char *) "C output");
#endif
ref_hemm(m, n, &alpha, A, B, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,m,n,(char *) "C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, m, n, C, C_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
delete[]( A );
delete[]( B );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_hemm<complex<float>>( );
test_hemm<complex<double>>( );
return 0;
}

View File

@@ -1,157 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_hemv(int64_t n,
T * alpha,
T *A,
T *X,
T * beta,
T *Y )
{
obj_t obj_a, obj_x, obj_y;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, n, n, A, 1,n,&obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1,n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1,n,&obj_y );
bli_obj_set_struc( BLIS_HERMITIAN, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_hemv( &obj_alpha,
&obj_a,
&obj_x,
&obj_beta,
&obj_y );
}
template< typename T >
void test_hemv( )
{
T *A, *Y, *Y_ref, *X;
T alpha, beta;
int n;
int lda, incx, incy, incy_ref;
alpha = ALPHA;
beta = BETA;
n = N;
lda = n;
incx = 1;
incy = 1;
incy_ref = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(Y, Y_ref , n ,1);
#ifdef PRINT
printmatrix(A, lda ,n,n, (char *)"A");
printvector(X, n, (char *)"X");
printvector(Y, n, (char *)"Y");
#endif
blis::hemv(
CblasColMajor,
CblasLower,
n,
alpha,
A,
lda,
X,
incx,
beta,
Y,
incy
);
#ifdef PRINT
printvector(Y, n, (char *)"Y output");
#endif
ref_hemv(n, &alpha, A, X, &beta, Y_ref);
#ifdef PRINT
printvector(Y_ref, n,(char *) "Y_ref output");
#endif
if(computeErrorV(incy,incy_ref, n, Y, Y_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( Y_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_hemv<complex<float>>( );
test_hemv<complex<double>>( );
return 0;
}

View File

@@ -1,141 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_her(int64_t n,
real_type<T> * alpha,
T *X,
T *A )
{
obj_t obj_a;
obj_t obj_x;
obj_t obj_alpha;
num_t dt;
if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
if(dt == BLIS_SCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_FLOAT, 1, 1, alpha, 1,1,&obj_alpha );
}
else if(dt == BLIS_DCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_DOUBLE, 1, 1, alpha, 1,1,&obj_alpha );
}
bli_obj_create_with_attached_buffer( dt, n, n, A, 1, n, &obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_set_struc( BLIS_HERMITIAN, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a);
bli_her( &obj_alpha,
&obj_x,
&obj_a );
}
template< typename T >
void test_her( )
{
T *A, *X, *A_ref;
real_type<T> alpha;
int n;
int lda, incx, lda_ref;
alpha = ALPHA;
n = N;
lda = n;
lda_ref = n;
incx = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
copy_buffer(A, A_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *) "A");
printvector(X, n,(char *) "X");
#endif
blis::her(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incx,
A,
lda
);
#ifdef PRINT
printmatrix(A, lda ,n,n, (char *)"A output");
#endif
ref_her(n, &alpha, X, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda_ref, n,n ,(char *) "A refoutput");
#endif
if(computeErrorM(lda, lda_ref, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_her<complex<float>>( );
test_her<complex<double>>( );
return 0;
}

View File

@@ -1,147 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_her2(int64_t n,
T * alpha,
T *X,
T *Y,
T *A )
{
obj_t obj_a;
obj_t obj_x, obj_y;
obj_t obj_alpha;
num_t dt;
if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer(dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, n, n, A, 1, n, &obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_obj_set_struc( BLIS_HERMITIAN, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a);
bli_her2( &obj_alpha,
&obj_x,
&obj_y,
&obj_a );
}
template< typename T >
void test_her2( )
{
T *A, *X, *Y, *A_ref;
T alpha;
int n;
int lda, incx, incy, lda_ref;
alpha = ALPHA;
n = N;
lda = n;
lda_ref = n;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(A, A_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *) "A");
printvector(X, n,(char *) "X");
printvector(Y, n, (char *)"Y");
#endif
blis::her2(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incx,
Y,
incy,
A,
lda
);
#ifdef PRINT
printmatrix(A, lda , n , n,(char *) "A output");
#endif
ref_her2(n, &alpha, X, Y, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda , n, n, (char *)"A_ref output");
#endif
if(computeErrorM(lda, lda_ref, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_her2<complex<float>>( );
test_her2<complex<double>>( );
return 0;
}

View File

@@ -1,155 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP herk routine and reference blis herk routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define N 6
#define K 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_herk(int64_t n, int64_t k,
real_type<T> * alpha,
T *A,
real_type<T> * beta,
T *C )
{
obj_t obj_a,obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
if(dt == BLIS_SCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_FLOAT, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( BLIS_FLOAT, 1, 1, beta, 1,1,&obj_beta );
}
else if(dt == BLIS_DCOMPLEX){
bli_obj_create_with_attached_buffer( BLIS_DOUBLE, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( BLIS_DOUBLE, 1, 1, beta, 1,1,&obj_beta );
}
bli_obj_create_with_attached_buffer( dt, n, k, A, 1,n,&obj_a );
bli_obj_create_with_attached_buffer( dt, n, n, C, 1,n,&obj_c );
bli_obj_set_struc( BLIS_HERMITIAN, &obj_c );
bli_obj_set_uplo( BLIS_LOWER, &obj_c );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_c );
bli_herk( &obj_alpha,
&obj_a,
&obj_beta,
&obj_c );
}
template< typename T >
void test_herk( )
{
T *A, *C, *C_ref;
real_type<T> alpha;
real_type<T> beta;
int n,k;
int lda, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
k = K;
n = N;
lda = k;
ldc = n;
ldc_ref = n;
srand (time(NULL));
allocate_init_buffer(A , n , k);
allocate_init_buffer(C , n , n);
copy_buffer(C, C_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,k, (char *)"A");
printmatrix(C, ldc ,n,n, (char *)"C");
#endif
blis::herk(
CblasColMajor,
CblasLower,
CblasNoTrans,
n,
k,
alpha,
A,
lda,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C, ldc ,n,n, (char *)"C output");
#endif
ref_herk(n, k, &alpha, A, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,n,n, (char *)"C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, n, n, C, C_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_herk<complex<float>>( );
test_herk<complex<double>>( );
return 0;
}

View File

@@ -1,112 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 2
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_hpr( )
{
int n;
real_type<T> alpha;
int incX = -1;
alpha = 1.0;
n = N;
T A[4];
A[0] = { 0.265, 0.362};
A[1] = {-0.855, 0.035};
A[2] = {0.136, 0.133 };
A[3] = { 0.00, 0.00};
T X[2];
X[0] = { -0.278, -0.686};
X[1] = {-0.736, -0.918 };
T A_ref[4];
A_ref[0] = { 1.64942, 0.0};
A_ref[1] = {-0.020644, 0.284692};
A_ref[2] = {0.68388, 0.0 };
A_ref[3] = {0.00, 0.00 };
#ifdef PRINT
printmatrix(A, n,n, n,(char *) "A");
printvector(X, n, (char *)"X");
#endif
blis::hpr(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incX,
A
);
#ifdef PRINT
printmatrix(A, n , n, n,(char *)"A blis:hpr\n");
printmatrix(A_ref, n, n, n,(char *)"A_ref output\n");
#endif
if(computeErrorM(n, n, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_hpr<complex<float>>( );
test_hpr<complex<double>>( );
return 0;
}

View File

@@ -1,93 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
#define N 1
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_hpr2( )
{
int n;
int incX = -1;
int incY = -1;
n = N;
T alpha = {-0.3, 0.1};
T A[1];
A[0] = { 0.772, 0.997 };
T X[1];
X[0] = { -0.173, -0.839 };
T Y[1];
Y[0] = { 0.941, -0.422 };
T A_ref[1];
A_ref[0] = { 0.829742, 0.0 };
blis::hpr2(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incX,
Y,
incY,
A
);
if(computeErrorM(1, 1, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_hpr2<complex<float>>( );
printf("**************\n");
test_hpr2<complex<double>>( );
return 0;
}

View File

@@ -1,100 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP nrm2 routine and reference blis nrm2 routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 2
#define ALPHA 0.5
#define TOLERANCE 0.0000001
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void test_nrm2()
{
T X[N];
T nrm2, nrm2_ref;
int n;
int incx;
n = N;
incx = 1;
if(is_same<T , float>::value)
{
X[0] = 0.14f;
X[1] = -0.632f;
nrm2_ref = 0.647320631527f;
}
else if(is_same<T , double>::value)
{
X[0] = 0.696;
X[1] = -0.804;
nrm2_ref = 1.06340584915;
}
#ifdef PRINT
printvector(X, n,(char *) "Vector X after blis::nrm2");
#endif
nrm2 = blis::nrm2<T>(
n,
X,
incx
);
#ifdef PRINT
printf("Norm of a Vector %E \n", nrm2);
printf("Ref Norm of a Vector %E \n", nrm2_ref);
#endif
if (fabs(nrm2 - nrm2_ref) > TOLERANCE)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_nrm2<float>( );
test_nrm2<double>( );
return 0;
}

View File

@@ -1,102 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP rot routine and reference blis rot routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 1
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void test_rot()
{
T c, s;
T X[N], X_ref[N];
T Y[N], Y_ref[N];
int n;
int incx, incy;
n = N;
incx = 1;
incy = 1;
if(is_same<T , float>::value){
c = -1.0f;
s = 0.0f;
X[0] = { -0.314f };
Y[0] = { -0.406f };
X_ref[0] = { 0.314f };
Y_ref[0] = { 0.406f };
}else{
c = -1;
s = 0;
X[0] = { -0.176 };
Y[0] = { -0.165 };
X_ref[0] = { 0.176 };
Y_ref[0] = { 0.165 };
}
#ifdef PRINT
printvector(X, n, (char *)"Before blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
blis::rot<T>( N, X, incx, Y, incy, c, s);
#ifdef PRINT
printvector(X, n, (char *)"After blis::rot\nVector X");
printvector(Y, n, (char *) "Vector Y");
printvector(X, n, (char *) "Expected Output from blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
if((computeErrorV(incx, incx , n, X, X_ref )==1) || (computeErrorV(incy, incy , n, Y, Y_ref )==1))
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_rot<float>( );
test_rot<double>( );
return 0;
}

View File

@@ -1,108 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP rotg routine and reference blis rotg routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void test_rotg()
{
T a, b, c, s;
T a_ref, b_ref, c_ref, s_ref;
if(is_same<T , float>::value)
{
a = 1.0f;
b = 1.0f;
a_ref = 1.41421356237f;
b_ref = 1.41421356237f;
c_ref = 0.707106781187f;
s_ref = 0.707106781187f;
}else{
a = 1;
b = 0;
a_ref = 1;
b_ref = 0;
c_ref = 1;
s_ref = 0;
}
#ifdef PRINT
cout<< "Before blis::rotg \na Value : " << a << "\n" ;
cout<< "b Value : " << b << "\n" ;
#endif
blis::rotg<T>(
&a,
&b,
&c,
&s
);
#ifdef PRINT
cout<< "After blis::rotg \na Value : " << a << "\n" ;
cout<< "b Value : " << b << "\n" ;
cout<< "c Value : " << c << "\n" ;
cout<< "s Value : " << s << "\n" ;
#endif
#ifdef PRINT
cout<< "Expected Output\na Value : " << a_ref << "\n" ;
cout<< "b Value : " << b_ref << "\n" ;
cout<< "c Value : " << c_ref << "\n" ;
cout<< "s Value : " << s_ref << "\n" ;
#endif
if( (a != a_ref ) || (b != b_ref ) || (c != c_ref ) || (s != s_ref ))
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_rotg<float>( );
test_rotg<double>( );
return 0;
}

View File

@@ -1,106 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP rotm routine and reference blis rotm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 1
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void test_rotm()
{
T X[N], X_ref[N];
T Y[N], Y_ref[N];
int n;
int incx, incy;
const T P[5] = { -1.0f, -4.44982e+03f, -15.5826f, 7.091334e+04f, 2.95912e+04f };
const T P_double[5] = { 1.0, -1.244580625511e+03, 1.11154682624,
2.269384716089e-05, -0.0143785338883 };
n = N;
incx = 1;
incy = 1;
if(is_same<T , float>::value)
{
X[0] = { -0.034f };
Y[0] = { -0.56f };
X_ref[0] = { -3.956017e+04f };
Y_ref[0] = { -1.657054e+04f };
}else{
X[0] = { 0.84 };
Y[0] = { -0.711 };
X_ref[0] = { -1.046158725429e+03 };
Y_ref[0] = { -0.829776862405 };
}
#ifdef PRINT
printvector(X, n, (char *)"Before blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
if(is_same<T , float>::value)
{
blis::rotm<T>( N, X, incx, Y, incy, P);
}else{
blis::rotm<T>( N, X, incx, Y, incy, P_double);
}
#ifdef PRINT
printvector(X, n, (char *)"After blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
printvector(X, n, (char *)"Expected Output from blis::rot\nVector X");
printvector(Y, n, (char *)"Vector Y");
#endif
if((computeErrorV(incx, incx , n, X, X_ref )==1)
|| (computeErrorV(incy, incy , n, Y, Y_ref )==1))
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_rotm<float>( );
test_rotm<double>( );
return 0;
}

View File

@@ -1,137 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP rotmg routine and reference blis rotmg routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void test_rotmg()
{
T d1, d2, b1, b2;
T d1_ref, d2_ref, b1_ref;
T h[5] = { -999.0f, -999.1f, -999.2f, -999.3f, -999.4f };
T h_ref[5] = {-1.0f, 0.0f, 0.0f, 0.0f,0.0f};
T h_double[5] = { -999.0, -999.1, -999.2, -999.3, -999.4 };
T h_ref_double[5] = { 1, 0, 0, 0};
if(is_same<T , float>::value)
{
d1 = -1630.28519312f;
d2 = 44320.1964703f;
b1 = 1274.7681352f;
b2 = 0.983006912864f;
d1_ref= 0.0f;
d2_ref= 0.0f;
b1_ref= 0.0f;
}else{
d1 = -49.1978123005;
d2 = 0.228703451277;
b1 = 1.8901039144;
b2 = 7081.47754386;
d1_ref= 0;
d2_ref= 0;
b1_ref= 0;
}
#ifdef PRINT
cout<< "Before blis::rotmg \nd1 Value : " << d1 << "\n" ;
cout<< "d2 Value : " << d2 << "\n" ;
cout<< "b1 Value : " << b1 << "\n" ;
printvector(h, 5,(char *) "param");
#endif
if(is_same<T , float>::value)
{
blis::rotmg<T>(
&d1,
&d2,
&b1,
b2,
h
);
}else{
blis::rotmg<T>(
&d1,
&d2,
&b1,
b2,
h_double
);
}
#ifdef PRINT
cout<< "After blis::rotmg \nd1 Value : " << d1 << "\n" ;
cout<< "d2 Value : " << d2 << "\n" ;
cout<< "b1 Value : " << b1 << "\n" ;
printvector(h, 5,(char *) "param");
#endif
#ifdef PRINT
cout<< "Expected Output from blis::rotmg \nd1 Value : " << d1_ref << "\n" ;
cout<< "d2 Value : " << d2_ref << "\n" ;
cout<< "b1 Value : " << b1_ref << "\n" ;
printvector(h_ref, 5,(char *) "param");
#endif
if( (d1 != d1_ref ) || (d2 != d2_ref ) || (b1 != b1_ref ) )
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else if(is_same<T , float>::value){
if(computeErrorV(1, 1 , 5, h, h_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}else if(is_same<T , float>::value){
if(computeErrorV(1, 1 , 5, h_double, h_ref_double )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_rotmg<float>( );
test_rotmg<double>( );
return 0;
}

View File

@@ -1,138 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
#define ALPHA 0.5
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename TA,typename TB>
void ref_scal(int64_t n,
TA * alpha,
TB *X
)
{
obj_t obj_x;
obj_t obj_alpha;
num_t dt_x , dt_alpha;
if(is_same<TB , float>::value)
dt_x = BLIS_FLOAT;
else if(is_same<TB , double>::value)
dt_x = BLIS_DOUBLE;
else if(is_same<TB , complex<float>>::value)
dt_x = BLIS_SCOMPLEX;
else if(is_same<TB , complex<double>>::value)
dt_x = BLIS_DCOMPLEX;
if(is_same<TA , float>::value)
dt_alpha = BLIS_FLOAT;
else if(is_same<TA , double>::value)
dt_alpha = BLIS_DOUBLE;
else if(is_same<TA , complex<float>>::value)
dt_alpha = BLIS_SCOMPLEX;
else if(is_same<TA , complex<double>>::value)
dt_alpha = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt_alpha, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt_x, n, 1, X, 1, n,&obj_x );
bli_scalv(&obj_alpha,
&obj_x
);
}
template< typename TA, typename TB>
void test_scal()
{
TB *X, *X_ref;
TA alpha = ALPHA;
int n;
int incx;
n = N;
incx = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
copy_buffer(X, X_ref , n ,1);
#ifdef PRINT
printvector(X, n, (char *)"X");
#endif
blis::scal<TA, TB>(
n,
alpha,
X,
incx
);
#ifdef PRINT
printvector(X, n, (char *)"X output");
#endif
ref_scal(n , &alpha , X_ref );
#ifdef PRINT
printvector(X_ref, n, (char *)"X ref output");
#endif
if(computeErrorV(incx, incx , n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( X_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_scal<float , float>( );
test_scal<double , double>( );
test_scal<std::complex<float> , std::complex<float>>( );
test_scal<std::complex<double> , std::complex<double>>( );
test_scal<float , std::complex<float>>( );
test_scal<double , std::complex<double>>( );
return 0;
}

View File

@@ -1,134 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP sdsdot routine and reference blis sdsdot routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 1
#define ALPHA 0
/*
* Test application assumes matrices to be column major, non-transposed
*/
#if 0
template< typename T >
void ref_sdsot(int64_t n,
T alpha,
T *X,
T *Y,
T *res_ref
)
{
obj_t obj_x;
obj_t obj_y;
obj_t obj_res;
obj_t obj_alpha;
num_t dt;
if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_obj_create_with_attached_buffer( dt, 1, 1, &alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, res_ref, 1, 1,&obj_res );
bli_ddots( &obj_x,
&obj_y,
&obj_res );
}
#endif
template< typename T >
void test_sdsdot()
{
T X[N], Y[N];
int n;
int incx, incy;
T res = 0, res_ref = 0;
n = N;
incx = 1;
incy = 1;
//srand (time(NULL));
//allocate_init_buffer(X , n , 1);
//allocate_init_buffer(Y , n , 1);
X[0] = { 0.733f };
Y[0] = { 0.825f };
res_ref = 0.604725f;
res = blis::sdsdot<T>(
n,
ALPHA,
X,
incx,
Y,
incy
);
#ifdef PRINT
printf("Dot product = %E \n", res);
#endif
//ref_sdsot(n, aplha, X, Y , &res_ref );
#ifdef PRINT
printf("Ref Dot product %E \n", res_ref);
#endif
if(res != res_ref )
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_sdsdot<float>( );
return 0;
}

View File

@@ -1,97 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 2
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_spr( )
{
int n;
int incX = -1;
T alpha = -1;
n = N;
T A[] = { 0.819, 0.175, -0.809 };
T X[] = { -0.645, -0.222 };
T A_ref[] = { 0.769716, 0.03181, -1.225025 };
#ifdef PRINT
printmatrix(A, n, n, n,(char *) "A");
printvector(X, n,(char *) "X");
#endif
blis::spr(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incX,
A
);
#ifdef PRINT
printmatrix (A, n ,n, n, (char *)"A blis:spr\n");
printmatrix(A_ref, n, n, n,(char *)"A_ref blis:spr \n");
#endif
if(computeErrorM(1, 1, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_spr<double>( );
test_spr<float>( );
return 0;
}

View File

@@ -1,107 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA -1.0f
#define N 2
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_spr2( )
{
int n;
int incX = -1;
int incY = -1;
T alpha;
alpha = ALPHA;
n = N;
T A[] = { 0.493f, -0.175f, -0.831f };
T X[] = { -0.163f, 0.489f };
T Y[] = { 0.154f, 0.769f };
T A_ref[]= { -0.259082f, -0.124959f, -0.780796f };
#ifdef PRINT
printf("Matrix A\n");
printmatrix(A, incX, n,n,(char *)"A");
printf("Vector X \n");
printvector(X, n, (char *)"X");
#endif
blis::spr2(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incX,
Y,
incY,
A
);
#ifdef PRINT
printf("Matrix A after blis:spr2\n");
printmatrix (A,1 ,n, n,(char *)"A");
printf("A_ref \n");
printmatrix(A_ref, 1, n,n,(char *)"A_ref output");
#endif
if(computeErrorM(1, 1, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_spr2<double>( );
test_spr2<float>( );
return 0;
}

View File

@@ -1,136 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T>
void ref_swap(int64_t n,
T *X,
T *Y
)
{
obj_t obj_x, obj_y;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_swapv( &obj_x,
&obj_y
);
}
template< typename T >
void test_swap( )
{
T *X, *X_ref, *Y,*Y_ref;
int n;
int incx, incy;
n = N;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(X, X_ref , n ,1);
copy_buffer(Y, Y_ref , n ,1);
#ifdef PRINT
printvector(X, n, (char *)"X");
printvector(Y, n, (char *)"Y");
#endif
blis::swap(
n,
X,
incx,
Y,
incy
);
#ifdef PRINT
printvector(X, n, (char *)"X output");
printvector(Y, n, (char *)"Y output");
#endif
ref_swap(n , X_ref, Y_ref );
#ifdef PRINT
printvector(X_ref, n, (char *)"X ref output");
printvector(Y_ref, n, (char *)"Y ref output");
#endif
if((computeErrorV(incy, incy,n, Y, Y_ref )==1)||(computeErrorV(incx, incx, n, X, X_ref )==1))
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( X );
delete[]( Y );
delete[]( Y_ref );
delete[]( X_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_swap<float>( );
test_swap<double>( );
test_swap<complex<float>>( );
test_swap<complex<double>>( );
return 0;
}

View File

@@ -1,164 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP symm routine and reference blis symm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define M 5
#define N 5
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_symm(int64_t m, int64_t n,
// side_t side,
T * alpha,
T *A,
T *B,
T * beta,
T *C )
{
obj_t obj_a, obj_b, obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, m, m, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, m, n, B, 1,n,&obj_b );
bli_obj_create_with_attached_buffer( dt, m, n, C, 1,m,&obj_c );
bli_obj_set_struc( BLIS_SYMMETRIC, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_symm( BLIS_LEFT,
&obj_alpha,
&obj_a,
&obj_b,
&obj_beta,
&obj_c );
}
template< typename T >
void test_symm( )
{
T *A, *B, *C, *C_ref;
T alpha, beta;
int m,n;
int lda, ldb, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
m = M;
n = N;
lda = m;
ldb = n;
ldc = m;
ldc_ref = m;
srand (time(NULL));
allocate_init_buffer(A , m , m);
allocate_init_buffer(B , m , n);
allocate_init_buffer(C , m , n);
copy_buffer(C, C_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,m, (char *)"A");
printmatrix(B, ldb ,m,n, (char *)"B");
printmatrix(C, ldc ,m,n, (char *)"C");
#endif
blis::symm(
CblasColMajor,
CblasLeft,
CblasLower,
m,
n,
alpha,
A,
lda,
B,
ldb,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C, ldc ,m,n, (char *)"C output");
#endif
// ref_symm(m, n, side, &alpha, A, B, &beta, C_ref);
ref_symm(m, n, &alpha, A, B, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,m,n, (char *)"C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, m, n, C, C_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__ );
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__ );
delete[]( A );
delete[]( B );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_symm<double>( );
test_symm<float>( );
test_symm<complex<float>>( );
test_symm<complex<double>>( );
return 0;
}

View File

@@ -1,140 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_syr(int64_t n,
T * alpha,
T *X,
T *A )
{
obj_t obj_a;
obj_t obj_x;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, n, n, A, 1, n, &obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_set_struc( BLIS_SYMMETRIC, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a);
bli_syr( &obj_alpha,
&obj_x,
&obj_a );
}
template< typename T >
void test_syr( )
{
T *A, *X, *A_ref;
T alpha;
int n;
int lda, incx, lda_ref;
alpha = ALPHA;
n = N;
lda = n;
lda_ref = n;
incx = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
copy_buffer(A, A_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,n, (char *)"A");
printvector(X, n,(char *) "X");
#endif
blis::syr(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incx,
A,
lda
);
#ifdef PRINT
printmatrix(A, lda , n , n,(char *) "A output");
#endif
ref_syr(n, &alpha, X, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda , n, n, (char *)"A ref output");
#endif
if(computeErrorM(lda, lda_ref, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_syr<double>( );
test_syr<float>( );
return 0;
}

View File

@@ -1,149 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_syr2(int64_t n,
T * alpha,
T *X,
T *Y,
T *A )
{
obj_t obj_a;
obj_t obj_x, obj_y;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, n, n, A, 1, n, &obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1, n,&obj_x );
bli_obj_create_with_attached_buffer( dt, n, 1, Y, 1, n,&obj_y );
bli_obj_set_struc( BLIS_SYMMETRIC, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a);
bli_syr2( &obj_alpha,
&obj_x,
&obj_y,
&obj_a );
}
template< typename T >
void test_syr2( )
{
T *A, *X, *Y, *A_ref;
T alpha;
int n;
int lda, incx, incy, lda_ref;
alpha = ALPHA;
n = N;
lda = n;
lda_ref = n;
incx = 1;
incy = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
allocate_init_buffer(Y , n , 1);
copy_buffer(A, A_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *) "A");
printvector(X, n, (char *)"X");
printvector(Y, n, (char *)"Y");
#endif
blis::syr2(
CblasColMajor,
CblasLower,
n,
alpha,
X,
incx,
Y,
incy,
A,
lda
);
#ifdef PRINT
printmatrix(A, lda , n , n,(char *) "A output");
#endif
ref_syr2(n, &alpha, X, Y, A_ref);
#ifdef PRINT
printmatrix(A_ref, lda , n, n, (char *)"A_ref output");
#endif
if(computeErrorM(lda, lda_ref, n, n, A, A_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( Y );
delete[]( A_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_syr2<double>( );
test_syr2<float>( );
return 0;
}

View File

@@ -1,163 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP syr2k routine and reference blis syr2k routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define N 6
#define K 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_syr2k(int64_t n, int64_t k,
T * alpha,
T *A,
T *B,
T * beta,
T *C )
{
obj_t obj_a, obj_b, obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, n, k, A, 1,n,&obj_a );
bli_obj_create_with_attached_buffer( dt, k, n, B,1,k,&obj_b );
bli_obj_create_with_attached_buffer( dt, n, n, C, 1,n,&obj_c );
bli_obj_set_struc( BLIS_SYMMETRIC, &obj_c );
bli_obj_set_uplo( BLIS_LOWER, &obj_c );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_c );
bli_syr2k( &obj_alpha,
&obj_a,
&obj_b,
&obj_beta,
&obj_c );
}
template< typename T >
void test_syr2k( )
{
T *A, *B, *C, *C_ref;
T alpha;
T beta;
int n,k;
int ldb, lda, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
k = K;
n = N;
lda = n;
ldb = k;
ldc = n;
ldc_ref = n;
srand (time(NULL));
allocate_init_buffer(A , n , k);
allocate_init_buffer(B , k , n);
allocate_init_buffer(C , n , n);
copy_buffer(C, C_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,k,(char *) "A");
printmatrix(B, ldb ,k,n,(char *) "B");
printmatrix(C, ldc ,n,n,(char *) "C");
#endif
blis::syr2k(
CblasColMajor,
CblasLower,
CblasNoTrans,
n,
k,
alpha,
A,
lda,
B,
ldb,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C, ldc ,n,n,(char *) "C output");
#endif
ref_syr2k(n, k, &alpha, A, B, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,n,n,(char *) "C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, n, n, C, C_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( B );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_syr2k<double>( );
test_syr2k<float>( );
test_syr2k<complex<float>>( );
test_syr2k<complex<double>>( );
return 0;
}

View File

@@ -1,152 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define BETA 0.0
#define N 6
#define K 4
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_syrk(int64_t n, int64_t k,
T * alpha,
T *A,
T * beta,
T *C )
{
obj_t obj_a,obj_c;
obj_t obj_alpha, obj_beta;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, 1, 1, beta, 1,1,&obj_beta );
bli_obj_create_with_attached_buffer( dt, n, k, A, 1,n,&obj_a );
bli_obj_create_with_attached_buffer( dt, n, n, C, 1,n,&obj_c );
bli_obj_set_struc( BLIS_SYMMETRIC, &obj_c );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_c );
bli_obj_set_uplo( BLIS_LOWER, &obj_c );
bli_syrk( &obj_alpha,
&obj_a,
&obj_beta,
&obj_c );
}
template< typename T >
void test_syrk( )
{
T *A, *C, *C_ref;
T alpha, beta;
int n,k;
int lda, ldc, ldc_ref;
alpha = ALPHA;
beta = BETA;
k = K;
n = N;
lda = n;
ldc = n;
ldc_ref = n;
srand (time(NULL));
allocate_init_buffer(A , n , k);
allocate_init_buffer(C , n , n);
copy_buffer(C, C_ref , n ,n);
#ifdef PRINT
printmatrix(A, lda ,n,k, (char *)"A");
printmatrix(C, ldc ,n,n, (char *)"C");
#endif
blis::syrk(
CblasColMajor,
CblasLower,
CblasNoTrans,
n,
k,
alpha,
A,
lda,
beta,
C,
ldc
);
#ifdef PRINT
printmatrix(C, ldc ,n,n, (char *)"C output");
#endif
ref_syrk(n, k, &alpha, A, &beta, C_ref);
#ifdef PRINT
printmatrix(C_ref, ldc_ref ,n,n, (char *)"C ref output");
#endif
if(computeErrorM(ldc, ldc_ref, n, n, C, C_ref )==1)
printf("%s TEST FAIL\n" ,__PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( C );
delete[]( C_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_syrk<double>( );
test_syrk<float>( );
test_syrk<complex<float>>( );
test_syrk<complex<double>>( );
return 0;
}

View File

@@ -1,103 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
//#define PRINT
#define N 3
#define K 1
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_tbmv( )
{
int n,k,lda;
k = K;
n = N;
lda = n;
T A[] = { 0.439f, -0.484f, -0.952f, -0.508f, 0.381f, -0.889f, -0.192f, -0.279f, -0.155f };
T X[] = { -0.089f, -0.688f, -0.203f };
int incX = -1;
T X_ref[] = { -0.24504f, 0.447756f, -0.089117f };
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *)"A");
printvector(X, n,(char *)"X");
#endif
blis::tbmv(
CblasColMajor,
CblasLower,
CblasNoTrans,
CblasNonUnit,
n,
k,
A,
lda,
X,
incX
);
#ifdef PRINT
printvector(X, n,(char *)"X");
printvector(X_ref ,n,(char *) "X output");
#endif
if(computeErrorV(incX, incX, n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_tbmv<double>( );
test_tbmv<float>( );
test_tbmv<complex<float>>( );
test_tbmv<complex<double>>( );
return 0;
}

View File

@@ -1,104 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
//#define PRINT
#define K 1
#define N 3
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_tbsv( )
{
int n,k,lda;
k = K;
n = N;
lda = n;
T A[] = { -0.681f, 0.209f, 0.436f, -0.369f, 0.786f, -0.84f, 0.86f, -0.233f, 0.734f };
T X[] = { -0.305f, 0.61f, -0.831f };
int incX = -1;
T X_ref[] = { 0.524539f, -0.961964f, 1.22026f };
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *)"A");
printvector(X, n,(char *) "X");
#endif
blis::tbsv(
CblasColMajor,
CblasLower,
CblasNoTrans,
CblasNonUnit,
n,
k,
A,
lda,
X,
incX
);
#ifdef PRINT
printvector(X, n, (char *)"X blis::tbsv\n");
printvector(X_ref, n,(char *) "X_ref blis::tbsv output");
#endif
if(computeErrorV(1,1, n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_tbsv<double>( );
test_tbsv<float>( );
test_tbsv<complex<float>>( );
test_tbsv<complex<double>>( );
return 0;
}

View File

@@ -1,84 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
#define N 2
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_tpmv( )
{
int n;
n = N;
T A[] = { -0.587f, 0.14f, 0.841f };
T X[] = { -0.213f, 0.885f };
int incX = -1;
T X_ref[] = { -0.055233f, -0.519495f };
blis::tpmv(
CblasColMajor,
CblasLower,
CblasNoTrans,
CblasNonUnit,
n,
A,
X,
incX
);
if(computeErrorV(incX, incX, n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_tpmv<double>( );
test_tpmv<float>( );
test_tpmv<complex<float>>( );
test_tpmv<complex<double>>( );
return 0;
}

View File

@@ -1,87 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
#define N 2
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void test_tpsv( )
{
int n;
n = N;
T A[] = { -0.381f, 0.53f, 0.451f };
T X[] = { 0.144f, 0.032f };
int incX = -1;
T X_ref[] = { 0.417992f, -0.0839895f };
blis::tpsv(
CblasColMajor,
CblasLower,
CblasNoTrans,
CblasNonUnit,
n,
A,
X,
incX
);
if(computeErrorV(1,1, n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_tpsv<double>( );
test_tpsv<float>( );
test_tpsv<complex<float>>( );
test_tpsv<complex<double>>( );
return 0;
}

View File

@@ -1,153 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP trmm routine and reference blis trmm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define M 6
#define N 4
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_trmm(int64_t m, int64_t n,
T * alpha,
T *A,
T *B
)
{
obj_t obj_a, obj_b;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, m, m, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, m, n, B, 1,m,&obj_b );
bli_obj_set_struc( BLIS_TRIANGULAR, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_a );
bli_obj_set_diag( BLIS_NONUNIT_DIAG, &obj_a );
bli_trmm( BLIS_LEFT,
&obj_alpha,
&obj_a,
&obj_b
);
}
template< typename T >
void test_trmm( )
{
T *A, *B, *B_ref;
T alpha;
int m,n;
int lda, ldb, ldb_ref;
alpha = ALPHA;
m = M;
n = N;
lda = m;
ldb = m;
ldb_ref = m;
srand (time(NULL));
allocate_init_buffer(A , m , m);
allocate_init_buffer(B , m , n);
copy_buffer(B, B_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,m, (char *)"A");
printmatrix(B, ldb ,m,n, (char *)"B");
#endif
blis::trmm(
CblasColMajor,
CblasLeft,
CblasLower,
CblasNoTrans,
CblasNonUnit,
m,
n,
alpha,
A,
lda,
B,
ldb
);
#ifdef PRINT
printmatrix(B, ldb ,m,n, (char *)"B output");
#endif
ref_trmm(m, n, &alpha, A, B_ref);
#ifdef PRINT
printmatrix(B_ref, ldb_ref ,m,n, (char *)"B ref output");
#endif
if(computeErrorM(ldb, ldb_ref, m, n, B, B_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( B );
delete[]( B_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_trmm<double>( );
test_trmm<float>( );
test_trmm<complex<float>>( );
test_trmm<complex<double>>( );
return 0;
}

View File

@@ -1,154 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP trsm routine and reference blis trsm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
#define ALPHA 1.0
#define M 5
#define N 4
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_trsm(int64_t m, int64_t n,
T * alpha,
T *A,
T *B
)
{
obj_t obj_a, obj_b;
obj_t obj_alpha;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, 1, 1, alpha, 1,1,&obj_alpha );
bli_obj_create_with_attached_buffer( dt, m, m, A, 1,m,&obj_a );
bli_obj_create_with_attached_buffer( dt, m, n, B, 1,m,&obj_b );
bli_obj_set_struc( BLIS_TRIANGULAR, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_obj_set_conjtrans( BLIS_NO_TRANSPOSE, &obj_a );
bli_obj_set_diag( BLIS_NONUNIT_DIAG, &obj_a );
bli_trsm( BLIS_LEFT,
&obj_alpha,
&obj_a,
&obj_b
);
}
template< typename T >
void test_trsm( )
{
T *A, *B, *B_ref;
T alpha;
int m,n;
int lda, ldb, ldb_ref;
alpha = ALPHA;
m = M;
n = N;
lda = m;
ldb = m;
ldb_ref = m;
srand (time(NULL));
allocate_init_buffer(A , m , m);
allocate_init_buffer(B , m , n);
copy_buffer(B, B_ref , m ,n);
#ifdef PRINT
printmatrix(A, lda ,m,m, (char *)"A");
printmatrix(B, ldb ,m,n, (char *)"B");
#endif
blis::trsm(
CblasColMajor,
CblasLeft,
CblasLower,
CblasNoTrans,
CblasNonUnit,
m,
n,
alpha,
A,
lda,
B,
ldb
);
#ifdef PRINT
printmatrix(B, ldb ,m,n, (char *)"B output");
#endif
ref_trsm(m, n, &alpha, A, B_ref);
#ifdef PRINT
printmatrix(B_ref, ldb_ref ,m,n, (char *)"B ref output");
#endif
if(computeErrorM(ldb, ldb_ref, m, n, B, B_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( B );
delete[]( B_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_trsm<double>( );
test_trsm<float>( );
test_trsm<complex<float>>( );
test_trsm<complex<double>>( );
return 0;
}

View File

@@ -1,142 +0,0 @@
/*
BLISPP
C++ test driver for BLIS CPP gemm routine and reference blis gemm routine.
Copyright (C) 2019, Advanced Micro Devices, Inc.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name(s) of the copyright holder(s) nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <complex>
#include <iostream>
#include "blis.hh"
#include "test.hh"
using namespace blis;
using namespace std;
//#define PRINT
//#define PRINT
#define M 5
#define N 6
/*
* Test application assumes matrices to be column major, non-transposed
*/
template< typename T >
void ref_trsv(int64_t n,
T *A,
T *X
)
{
obj_t obj_a, obj_x;
num_t dt;
if(is_same<T, float>::value)
dt = BLIS_FLOAT;
else if(is_same<T, double>::value)
dt = BLIS_DOUBLE;
else if(is_same<T, complex<float>>::value)
dt = BLIS_SCOMPLEX;
else if(is_same<T, complex<double>>::value)
dt = BLIS_DCOMPLEX;
bli_obj_create_with_attached_buffer( dt, n, n, A, 1,n,&obj_a );
bli_obj_create_with_attached_buffer( dt, n, 1, X, 1,n,&obj_x );
bli_obj_set_struc( BLIS_TRIANGULAR, &obj_a );
bli_obj_set_uplo( BLIS_LOWER, &obj_a );
bli_obj_set_onlytrans( BLIS_NO_TRANSPOSE, &obj_a );
bli_obj_set_diag( BLIS_NONUNIT_DIAG, &obj_a );
bli_trsv( &BLIS_ONE,
&obj_a,
&obj_x
);
}
template< typename T >
void test_trsv( )
{
T *A, *X, *X_ref;
int n;
int lda, incx, incx_ref;
n = N;
lda = n;
incx = 1;
incx_ref = 1;
srand (time(NULL));
allocate_init_buffer(A , n , n);
allocate_init_buffer(X , n , 1);
copy_buffer(X, X_ref , n ,1);
#ifdef PRINT
printmatrix(A, lda ,n,n,(char *) "A");
printvector(X, n,(char *) "X");
#endif
blis::trsv(
CblasColMajor,
CblasLower,
CblasNoTrans,
CblasNonUnit,
n,
A,
lda,
X,
incx
);
#ifdef PRINT
printvector(X, n,(char *) "X output");
#endif
ref_trsv(n, A, X_ref);
#ifdef PRINT
printvector(X_ref, n,(char *) "X ref output");
#endif
if(computeErrorV(incx, incx_ref, n, X, X_ref )==1)
printf("%s TEST FAIL\n" , __PRETTY_FUNCTION__);
else
printf("%s TEST PASS\n" , __PRETTY_FUNCTION__);
delete[]( A );
delete[]( X );
delete[]( X_ref );
}
// -----------------------------------------------------------------------------
int main( int argc, char** argv )
{
test_trsv<double>( );
test_trsv<float>( );
test_trsv<complex<float>>( );
test_trsv<complex<double>>( );
return 0;
}