@@ -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; | |||
} |