⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atl_axpby.c

📁 基于Blas CLapck的.用过的人知道是干啥的
💻 C
字号:
/* *             Automatically Tuned Linear Algebra Software v3.8.0 *                    (C) Copyright 1999 R. Clint Whaley * * 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. *   3. The name of the ATLAS group or the names of its contributers may *      not be used to endorse or promote products derived from this *      software without specific written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ATLAS GROUP OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */#include "atlas_misc.h"#ifdef Conj_void Mjoin(Mjoin(Mjoin(PATL,axpbyConj),NM),BNM)/* * y = beta * y + alpha * conj(x) */#elsevoid Mjoin(Mjoin(Mjoin(PATL,axpby),NM),BNM)/* * y = beta*y + alpha*x */#endif   (const int N, const SCALAR alpha, const TYPE *X, const int incX,    const SCALAR beta, TYPE *Y, const int incY){   #ifdef ALPHA0      #if defined(BETA0)         Mjoin(PATL,zero)(N, Y, incY);      #elif defined(BETA1)         #ifndef Conj_            return;         #else            Mjoin(PATLU,scal)(N<<1, ATL_rnone, Y, incY<<1);         #endif      #else         #ifndef Conj_            Mjoin(PATL,scal)(N, beta, Y, incY);         #else            Mjoin(PATL,scalConj)(N, beta, Y, incY);         #endif      #endif   #elif defined(BETA0)      #ifdef ALPHA1         #ifndef Conj_            Mjoin(PATL,copy)(N, X, incX, Y, incY);         #else            Mjoin(PATL,copyConj)(N, X, incX, Y, incY);         #endif      #else         #ifndef Conj_            Mjoin(PATL,cpsc)(N, alpha, X, incX, Y, incY);         #else            Mjoin(PATL,moveConj)(N, alpha, X, incX, Y, incY);         #endif      #endif   #elif defined(BETA1)      #ifndef Conj_         Mjoin(PATL,axpy)(N, alpha, X, incX, Y, incY);      #else         Mjoin(PATL,axpyConj)(N, alpha, X, incX, Y, incY);      #endif   #elif defined(TREAL)      int i;      if (incX == 1 && incY == 1)         for (i=0; i != N; i++)            Y[i] = ATL_MulByBETA(Y[i]) + ATL_MulByALPHA(X[i]);      else         for (i=N; i; i--, X += incX, Y += incY)            *Y = ATL_MulByBETA(*Y) + ATL_MulByALPHA(*X);   #else      const int incx = incX<<1, incy = incY<<1;      int i;      const register TYPE ralpha = *alpha, ialpha = alpha[1];      const register TYPE rbeta = *beta, ibeta = beta[1];      #ifdef ALPHAXI0         #ifdef Conj_            const register TYPE conjal = -ralpha;         #else            #define conjal ralpha         #endif      #endif      register TYPE rx, ix, ry, iy, t0;      for (i=N; i; i--, X += incx, Y += incy)      {         rx = *X;         ix = X[1];         ry = *Y;         iy = Y[1];         #ifndef ALPHA1            #ifdef ALPHAXI0               rx *= ralpha;               ix *= conjal;            #else               t0 = rx;               #ifdef Conj_                  rx = rx * ralpha + ix * ialpha;                  ix = t0 * ialpha - ix * ralpha;               #else                  rx = rx * ralpha - ix * ialpha;                  ix = t0 * ialpha + ix * ralpha;               #endif            #endif         #endif         #ifdef BETAXI0            ry *= rbeta;            iy *= rbeta;         #else            t0 = ry;            ry = ry * rbeta - iy * ibeta;            iy = t0 * ibeta + iy * rbeta;         #endif         *Y = ry + rx;         Y[1] = iy + ix;      }   #endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -