/*********************************************************************//* 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 <ctype.h>#include "common.h"#ifdef FUNCTION_PROFILE#include "functable.h"#endif#ifdef XDOUBLE#define ERROR_NAME "QSYR2 "#elif defined(DOUBLE)#define ERROR_NAME "DSYR2 "#else#define ERROR_NAME "SSYR2 "#endifstatic int (*syr2[])(BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *) = {#ifdef XDOUBLEqsyr2_U, qsyr2_L,#elif defined(DOUBLE)dsyr2_U, dsyr2_L,#elsessyr2_U, ssyr2_L,#endif};#ifdef SMPstatic int (*syr2_thread[])(BLASLONG, FLOAT, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, BLASLONG, FLOAT *, int) = {#ifdef XDOUBLEqsyr2_thread_U, qsyr2_thread_L,#elif defined(DOUBLE)dsyr2_thread_U, dsyr2_thread_L,#elsessyr2_thread_U, ssyr2_thread_L,#endif};#endif#ifndef CBLASvoid NAME(char *UPLO, blasint *N, FLOAT *ALPHA,FLOAT *x, blasint *INCX, FLOAT *y, blasint *INCY, FLOAT *a, blasint *LDA){char uplo_arg = *UPLO;blasint n = *N;FLOAT alpha = *ALPHA;blasint lda = *LDA;blasint incx = *INCX;blasint incy = *INCY;blasint info;int uplo;FLOAT *buffer;#ifdef SMPint nthreads;#endifPRINT_DEBUG_NAME;TOUPPER(uplo_arg);uplo = -1;if (uplo_arg == 'U') uplo = 0;if (uplo_arg == 'L') uplo = 1;info = 0;if (lda < MAX(1, n)) info = 9;if (incy == 0) info = 7;if (incx == 0) info = 5;if (n < 0) info = 2;if (uplo < 0) info = 1;if (info != 0) {BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME));return;}#elsevoid CNAME(enum CBLAS_ORDER order, enum CBLAS_UPLO Uplo, blasint n, FLOAT alpha, FLOAT *x, blasint incx, FLOAT *y, blasint incy, FLOAT *a, blasint lda) {FLOAT *buffer;int uplo;blasint info;#ifdef SMPint nthreads;#endifPRINT_DEBUG_CNAME;uplo = -1;info = 0;if (order == CblasColMajor) {if (Uplo == CblasUpper) uplo = 0;if (Uplo == CblasLower) uplo = 1;info = -1;if (lda < MAX(1, n)) info = 9;if (incy == 0) info = 7;if (incx == 0) info = 5;if (n < 0) info = 2;if (uplo < 0) info = 1;}if (order == CblasRowMajor) {if (Uplo == CblasUpper) uplo = 1;if (Uplo == CblasLower) uplo = 0;info = -1;if (lda < MAX(1, n)) info = 9;if (incy == 0) info = 7;if (incx == 0) info = 5;if (n < 0) info = 2;if (uplo < 0) info = 1;}if (info >= 0) {BLASFUNC(xerbla)(ERROR_NAME, &info, sizeof(ERROR_NAME));return;}#endifif (n == 0) return;if (alpha == ZERO) return;IDEBUG_START;if (incx == 1 && incy == 1 && n < 100) {blasint i;if (!uplo) {for (i = 0; i < n; i++){AXPYU_K(i + 1, 0, 0, alpha * x[i], y, 1, a, 1, NULL, 0);AXPYU_K(i + 1, 0, 0, alpha * y[i], x, 1, a, 1, NULL, 0);a += lda;}} else {for (i = 0; i < n; i++){AXPYU_K(n - i, 0, 0, alpha * x[i], y + i, 1, a, 1, NULL, 0);AXPYU_K(n - i, 0, 0, alpha * y[i], x + i, 1, a, 1, NULL, 0);a += 1 + lda;}}return;}FUNCTION_PROFILE_START();if (incx < 0 ) x -= (n - 1) * incx;if (incy < 0 ) y -= (n - 1) * incy;buffer = (FLOAT *)blas_memory_alloc(1);#ifdef SMPnthreads = num_cpu_avail(2);if (nthreads == 1) {#endif(syr2[uplo])(n, alpha, x, incx, y, incy, a, lda, buffer);#ifdef SMP} else {(syr2_thread[uplo])(n, alpha, x, incx, y, incy, a, lda, buffer, nthreads);}#endifblas_memory_free(buffer);FUNCTION_PROFILE_END(1, n * n / 2 + 2 * n, 2 * n * n);IDEBUG_END;return;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。