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