@@ -0,0 +1,154 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifndef COMPLEX | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QGESV " | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DGESV " | |||||
#else | |||||
#define ERROR_NAME "SGESV " | |||||
#endif | |||||
#else | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XGESV " | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZGESV " | |||||
#else | |||||
#define ERROR_NAME "CGESV " | |||||
#endif | |||||
#endif | |||||
int NAME(blasint *N, blasint *NRHS, FLOAT *a, blasint *ldA, blasint *ipiv, | |||||
FLOAT *b, blasint *ldB, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *N; | |||||
args.n = *NRHS; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.b = (void *)b; | |||||
args.ldb = *ldB; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
if (args.ldb < MAX(1,args.m)) info = 7; | |||||
if (args.lda < MAX(1,args.m)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (args.m < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
args.alpha = NULL; | |||||
args.beta = NULL; | |||||
*Info = 0; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
args.n = *N; | |||||
info = GETRF_SINGLE(&args, NULL, NULL, sa, sb, 0); | |||||
if (info == 0){ | |||||
args.n = *NRHS; | |||||
GETRS_N_SINGLE(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#ifdef SMP | |||||
} else { | |||||
args.n = *N; | |||||
info = GETRF_PARALLEL(&args, NULL, NULL, sa, sb, 0); | |||||
if (info == 0){ | |||||
args.n = *NRHS; | |||||
GETRS_N_PARALLEL(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
*Info = info; | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, *N * *N, 2. / 3. * *N * *N * *N + *N * *N); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,109 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QGETF2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DGETF2" | |||||
#else | |||||
#define ERROR_NAME "SGETF2" | |||||
#endif | |||||
int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *M; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.m)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (args.m < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = GETF2(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,121 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QGETRF" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DGETRF" | |||||
#else | |||||
#define ERROR_NAME "SGETRF" | |||||
#endif | |||||
int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *M; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.m)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (args.m < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = GETRF_SINGLE(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = GETRF_PARALLEL(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,152 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QGETRS" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DGETRS" | |||||
#else | |||||
#define ERROR_NAME "SGETRS" | |||||
#endif | |||||
static blasint (*getrs_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
GETRS_N_SINGLE, GETRS_T_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*getrs_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
GETRS_N_PARALLEL, GETRS_T_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *TRANS, blasint *N, blasint *NRHS, FLOAT *a, blasint *ldA, | |||||
blasint *ipiv, FLOAT *b, blasint *ldB, blasint *Info){ | |||||
char trans_arg = *TRANS; | |||||
blas_arg_t args; | |||||
blasint info; | |||||
int trans; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *N; | |||||
args.n = *NRHS; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.b = (void *)b; | |||||
args.ldb = *ldB; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
TOUPPER(trans_arg); | |||||
trans = -1; | |||||
if (trans_arg == 'N') trans = 0; | |||||
if (trans_arg == 'T') trans = 1; | |||||
if (trans_arg == 'R') trans = 0; | |||||
if (trans_arg == 'C') trans = 1; | |||||
if (args.ldb < MAX(1, args.m)) info = 8; | |||||
if (args.lda < MAX(1, args.m)) info = 5; | |||||
if (args.n < 0) info = 3; | |||||
if (args.m < 0) info = 2; | |||||
if (trans < 0) info = 1; | |||||
if (info != 0) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
return 0; | |||||
} | |||||
args.alpha = NULL; | |||||
args.beta = NULL; | |||||
*Info = info; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
(getrs_single[trans])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
(getrs_parallel[trans])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2 * args.m * args.m * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,109 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
static int (*larf[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
LARF_L, LARF_R, | |||||
}; | |||||
int NAME(char *SIDE, blasint *M, blasint *N, FLOAT *v, blasint *incV, FLOAT *tau, FLOAT *c, blasint *ldC, FLOAT *work){ | |||||
blas_arg_t args; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
char side_arg = *SIDE; | |||||
int side; | |||||
PRINT_DEBUG_NAME; | |||||
TOUPPER(side_arg); | |||||
args.m = *M; | |||||
args.n = *N; | |||||
args.a = (void *)v; | |||||
args.lda = *incV; | |||||
args.c = (void *)c; | |||||
args.ldc = *ldC; | |||||
args.alpha = (void *)tau; | |||||
side = -1; | |||||
if (side_arg == 'L') side = 0; | |||||
if (side_arg == 'R') side = 1; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
#ifndef COMPLEX | |||||
if (*tau == ZERO) return 0; | |||||
#else | |||||
if ((*(tau + 0) == ZERO) && (*(tau + 1) == ZERO)) return 0; | |||||
#endif | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
larf[side](&args, NULL, NULL, sa, sb, 0); | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,110 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
static int (*laswp[])(BLASLONG, BLASLONG, BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, blasint *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
qlaswp_plus, qlaswp_minus, | |||||
#elif defined(DOUBLE) | |||||
dlaswp_plus, dlaswp_minus, | |||||
#else | |||||
slaswp_plus, slaswp_minus, | |||||
#endif | |||||
}; | |||||
int NAME(blasint *N, FLOAT *a, blasint *LDA, blasint *K1, blasint *K2, blasint *ipiv, blasint *INCX){ | |||||
blasint n = *N; | |||||
blasint lda = *LDA; | |||||
blasint k1 = *K1; | |||||
blasint k2 = *K2; | |||||
blasint incx = *INCX; | |||||
int flag; | |||||
#ifdef SMP | |||||
int mode, nthreads; | |||||
FLOAT dummyalpha[2] = {ZERO, ZERO}; | |||||
#endif | |||||
PRINT_DEBUG_NAME; | |||||
if (incx == 0 || n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
flag = (incx < 0); | |||||
#ifdef SMP | |||||
nthreads = num_cpu_avail(1); | |||||
if (nthreads == 1) { | |||||
#endif | |||||
(laswp[flag])(n, k1, k2, ZERO, a, lda, NULL, 0, ipiv, incx); | |||||
#ifdef SMP | |||||
} else { | |||||
#ifdef XDOUBLE | |||||
mode = BLAS_XDOUBLE | BLAS_REAL; | |||||
#elif defined(DOUBLE) | |||||
mode = BLAS_DOUBLE | BLAS_REAL; | |||||
#else | |||||
mode = BLAS_SINGLE | BLAS_REAL; | |||||
#endif | |||||
blas_level1_thread(mode, n, k1, k2, dummyalpha, | |||||
a, lda, NULL, 0, ipiv, incx, | |||||
laswp[flag], nthreads); | |||||
} | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE, n * (k2 - k1), 0); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,128 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QLAUU2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DLAUU2" | |||||
#else | |||||
#define ERROR_NAME "SLAUU2" | |||||
#endif | |||||
static blasint (*lauu2[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
qlauu2_U, qlauu2_L, | |||||
#elif defined(DOUBLE) | |||||
dlauu2_U, dlauu2_L, | |||||
#else | |||||
slauu2_U, slauu2_L, | |||||
#endif | |||||
}; | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = (lauu2[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,139 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QLAUUM" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DLAUUM" | |||||
#else | |||||
#define ERROR_NAME "SLAUUM" | |||||
#endif | |||||
static blasint (*lauum_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
LAUUM_U_SINGLE, LAUUM_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*lauum_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
LAUUM_U_PARALLEL, LAUUM_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = (lauum_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = (lauum_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,128 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QPOTF2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DPOTF2" | |||||
#else | |||||
#define ERROR_NAME "SPOTF2" | |||||
#endif | |||||
static blasint (*potf2[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
qpotf2_U, qpotf2_L, | |||||
#elif defined(DOUBLE) | |||||
dpotf2_U, dpotf2_L, | |||||
#else | |||||
spotf2_U, spotf2_L, | |||||
#endif | |||||
}; | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = (potf2[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,139 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QPOTRF" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DPOTRF" | |||||
#else | |||||
#define ERROR_NAME "SPOTRF" | |||||
#endif | |||||
static blasint (*potrf_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
POTRF_U_SINGLE, POTRF_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*potrf_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
POTRF_U_PARALLEL, POTRF_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = (potrf_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = (potrf_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,160 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QPOTRI" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "DPOTRI" | |||||
#else | |||||
#define ERROR_NAME "SPOTRI" | |||||
#endif | |||||
static blasint (*trtri_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
TRTRI_UN_SINGLE, TRTRI_LN_SINGLE, | |||||
}; | |||||
static blasint (*lauum_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
LAUUM_U_SINGLE, LAUUM_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*trtri_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
TRTRI_UN_PARALLEL, TRTRI_LN_PARALLEL, | |||||
}; | |||||
static blasint (*lauum_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
LAUUM_U_PARALLEL, LAUUM_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
info = (trtri_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
if (!info) { | |||||
info = (lauum_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
*Info = info; | |||||
#ifdef SMP | |||||
} else { | |||||
info = (trtri_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
if (!info) { | |||||
info = (lauum_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
*Info = info; | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, .5 * args.n * args.n, | |||||
args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ args.n * (1./3. + args.n * (-1./2. + args.n * 1./6.))); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,109 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XGETF2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZGETF2" | |||||
#else | |||||
#define ERROR_NAME "CGETF2" | |||||
#endif | |||||
int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *M; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.m)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (args.m < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = GETF2(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,122 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XGETRF" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZGETRF" | |||||
#else | |||||
#define ERROR_NAME "CGETRF" | |||||
#endif | |||||
int NAME(blasint *M, blasint *N, FLOAT *a, blasint *ldA, blasint *ipiv, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *M; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.m)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (args.m < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = GETRF_SINGLE(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = GETRF_PARALLEL(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,153 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XGETRS" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZGETRS" | |||||
#else | |||||
#define ERROR_NAME "CGETRS" | |||||
#endif | |||||
static blasint (*getrs_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
GETRS_N_SINGLE, GETRS_T_SINGLE, GETRS_R_SINGLE, GETRS_C_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*getrs_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
GETRS_N_PARALLEL, GETRS_T_PARALLEL, GETRS_R_PARALLEL, GETRS_C_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *TRANS, blasint *N, blasint *NRHS, FLOAT *a, blasint *ldA, | |||||
blasint *ipiv, FLOAT *b, blasint *ldB, blasint *Info){ | |||||
char trans_arg = *TRANS; | |||||
blas_arg_t args; | |||||
blasint info; | |||||
int trans; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.m = *N; | |||||
args.n = *NRHS; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
args.b = (void *)b; | |||||
args.ldb = *ldB; | |||||
args.c = (void *)ipiv; | |||||
info = 0; | |||||
TOUPPER(trans_arg); | |||||
trans = -1; | |||||
if (trans_arg == 'N') trans = 0; | |||||
if (trans_arg == 'T') trans = 1; | |||||
if (trans_arg == 'R') trans = 2; | |||||
if (trans_arg == 'C') trans = 3; | |||||
if (args.ldb < MAX(1, args.m)) info = 8; | |||||
if (args.lda < MAX(1, args.m)) info = 5; | |||||
if (args.n < 0) info = 3; | |||||
if (args.m < 0) info = 2; | |||||
if (trans < 0) info = 1; | |||||
if (info != 0) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
return 0; | |||||
} | |||||
args.alpha = NULL; | |||||
args.beta = NULL; | |||||
*Info = info; | |||||
if (args.m == 0 || args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
(getrs_single[trans])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
(getrs_parallel[trans])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2 * args.m * args.m * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,108 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
static int (*laswp[])(BLASLONG, BLASLONG, BLASLONG, FLOAT, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, blasint *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
xlaswp_plus, xlaswp_minus, | |||||
#elif defined(DOUBLE) | |||||
zlaswp_plus, zlaswp_minus, | |||||
#else | |||||
claswp_plus, claswp_minus, | |||||
#endif | |||||
}; | |||||
int NAME(blasint *N, FLOAT *a, blasint *LDA, blasint *K1, blasint *K2, blasint *ipiv, blasint *INCX){ | |||||
blasint n = *N; | |||||
blasint lda = *LDA; | |||||
blasint k1 = *K1; | |||||
blasint k2 = *K2; | |||||
blasint incx = *INCX; | |||||
int flag; | |||||
#ifdef SMP | |||||
int mode; | |||||
FLOAT dummyalpha[2] = {ZERO, ZERO}; | |||||
int nthreads; | |||||
#endif | |||||
PRINT_DEBUG_NAME; | |||||
if (incx == 0 || n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
flag = (incx < 0); | |||||
#ifdef SMP | |||||
nthreads = num_cpu_avail(2); | |||||
if (nthreads == 1) { | |||||
#endif | |||||
(laswp[flag])(n, k1, k2, ZERO, ZERO, a, lda, NULL, 0, ipiv, incx); | |||||
#ifdef SMP | |||||
} else { | |||||
#ifdef XDOUBLE | |||||
mode = BLAS_XDOUBLE | BLAS_COMPLEX; | |||||
#elif defined(DOUBLE) | |||||
mode = BLAS_DOUBLE | BLAS_COMPLEX; | |||||
#else | |||||
mode = BLAS_SINGLE | BLAS_COMPLEX; | |||||
#endif | |||||
blas_level1_thread(mode, n, k1, k2, dummyalpha, a, lda, NULL, 0, ipiv, incx, laswp[flag], nthreads); | |||||
} | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE, n * (k2 - k1), 0); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,129 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "QLAUU2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZLAUU2" | |||||
#else | |||||
#define ERROR_NAME "CLAUU2" | |||||
#endif | |||||
static blasint (*lauu2[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
xlauu2_U, xlauu2_L, | |||||
#elif defined(DOUBLE) | |||||
zlauu2_U, zlauu2_L, | |||||
#else | |||||
clauu2_U, clauu2_L, | |||||
#endif | |||||
}; | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = (lauu2[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
2. * args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 6. * 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,141 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XLAUUM" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZLAUUM" | |||||
#else | |||||
#define ERROR_NAME "CLAUUM" | |||||
#endif | |||||
static blasint (*lauum_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
LAUUM_U_SINGLE, LAUUM_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*lauum_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
LAUUM_U_PARALLEL, LAUUM_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = (lauum_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = (lauum_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
2. * args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,129 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XPOTF2" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZPOTF2" | |||||
#else | |||||
#define ERROR_NAME "CPOTF2" | |||||
#endif | |||||
static blasint (*potf2[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) = { | |||||
#ifdef XDOUBLE | |||||
xpotf2_U, xpotf2_L, | |||||
#elif defined(DOUBLE) | |||||
zpotf2_U, zpotf2_L, | |||||
#else | |||||
cpotf2_U, cpotf2_L, | |||||
#endif | |||||
}; | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n <= 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
info = (potf2[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
*Info = info; | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
2. * args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 6. * 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,141 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XPOTRF" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZPOTRF" | |||||
#else | |||||
#define ERROR_NAME "CPOTRF" | |||||
#endif | |||||
static blasint (*potrf_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
POTRF_U_SINGLE, POTRF_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*potrf_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
POTRF_U_PARALLEL, POTRF_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.common = NULL; | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
*Info = (potrf_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
#ifdef SMP | |||||
} else { | |||||
*Info = (potrf_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(1, .5 * args.n * args.n, | |||||
2. * args.n * (1./3. + args.n * ( 1./2. + args.n * 1./6.)) | |||||
+ 6. * 1./6. * args.n * (args.n * args.n - 1)); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |
@@ -0,0 +1,157 @@ | |||||
/*********************************************************************/ | |||||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||||
/* All rights reserved. */ | |||||
/* */ | |||||
/* Redistribution and use in source and binary forms, with or */ | |||||
/* without modification, are permitted provided that the following */ | |||||
/* conditions are met: */ | |||||
/* */ | |||||
/* 1. Redistributions of source code must retain the above */ | |||||
/* copyright notice, this list of conditions and the following */ | |||||
/* disclaimer. */ | |||||
/* */ | |||||
/* 2. 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. */ | |||||
/* */ | |||||
/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN ``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 UNIVERSITY OF TEXAS AT */ | |||||
/* AUSTIN 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. */ | |||||
/* */ | |||||
/* The views and conclusions contained in the software and */ | |||||
/* documentation are those of the authors and should not be */ | |||||
/* interpreted as representing official policies, either expressed */ | |||||
/* or implied, of The University of Texas at Austin. */ | |||||
/*********************************************************************/ | |||||
#include <stdio.h> | |||||
#include "common.h" | |||||
#ifdef FUNCTION_PROFILE | |||||
#include "functable.h" | |||||
#endif | |||||
#ifdef XDOUBLE | |||||
#define ERROR_NAME "XPOTRI" | |||||
#elif defined(DOUBLE) | |||||
#define ERROR_NAME "ZPOTRI" | |||||
#else | |||||
#define ERROR_NAME "CPOTRI" | |||||
#endif | |||||
static blasint (*trtri_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
TRTRI_UN_SINGLE, TRTRI_LN_SINGLE, | |||||
}; | |||||
static blasint (*lauum_single[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
LAUUM_U_SINGLE, LAUUM_L_SINGLE, | |||||
}; | |||||
#ifdef SMP | |||||
static blasint (*trtri_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
TRTRI_UN_PARALLEL, TRTRI_LN_PARALLEL, | |||||
}; | |||||
static blasint (*lauum_parallel[])(blas_arg_t *, BLASLONG *, BLASLONG *, FLOAT *, FLOAT *, BLASLONG) ={ | |||||
LAUUM_U_PARALLEL, LAUUM_L_PARALLEL, | |||||
}; | |||||
#endif | |||||
int NAME(char *UPLO, blasint *N, FLOAT *a, blasint *ldA, blasint *Info){ | |||||
blas_arg_t args; | |||||
blasint uplo_arg = *UPLO; | |||||
blasint uplo; | |||||
blasint info; | |||||
FLOAT *buffer; | |||||
#ifdef PPC440 | |||||
extern | |||||
#endif | |||||
FLOAT *sa, *sb; | |||||
PRINT_DEBUG_NAME; | |||||
args.n = *N; | |||||
args.a = (void *)a; | |||||
args.lda = *ldA; | |||||
TOUPPER(uplo_arg); | |||||
uplo = -1; | |||||
if (uplo_arg == 'U') uplo = 0; | |||||
if (uplo_arg == 'L') uplo = 1; | |||||
info = 0; | |||||
if (args.lda < MAX(1,args.n)) info = 4; | |||||
if (args.n < 0) info = 2; | |||||
if (uplo < 0) info = 1; | |||||
if (info) { | |||||
BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME)); | |||||
*Info = - info; | |||||
return 0; | |||||
} | |||||
*Info = 0; | |||||
if (args.n == 0) return 0; | |||||
IDEBUG_START; | |||||
FUNCTION_PROFILE_START(); | |||||
#ifndef PPC440 | |||||
buffer = (FLOAT *)blas_memory_alloc(1); | |||||
sa = (FLOAT *)((BLASLONG)buffer + GEMM_OFFSET_A); | |||||
sb = (FLOAT *)(((BLASLONG)sa + ((GEMM_P * GEMM_Q * COMPSIZE * SIZE + GEMM_ALIGN) & ~GEMM_ALIGN)) + GEMM_OFFSET_B); | |||||
#endif | |||||
#ifdef SMP | |||||
args.nthreads = num_cpu_avail(4); | |||||
if (args.nthreads == 1) { | |||||
#endif | |||||
info = (trtri_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
if (!info) { | |||||
info = (lauum_single[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
*Info = info; | |||||
#ifdef SMP | |||||
} else { | |||||
info = (trtri_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
if (!info) { | |||||
info = (lauum_parallel[uplo])(&args, NULL, NULL, sa, sb, 0); | |||||
} | |||||
*Info = info; | |||||
} | |||||
#endif | |||||
#ifndef PPC440 | |||||
blas_memory_free(buffer); | |||||
#endif | |||||
FUNCTION_PROFILE_END(COMPSIZE * COMPSIZE, args.m * args.n, 2. / 3. * args.m * args.n * args.n); | |||||
IDEBUG_END; | |||||
return 0; | |||||
} |