dot4p80_x1y1.c
来自「基于Blas CLapck的.用过的人知道是干啥的」· C语言 代码 · 共 43 行
C
43 行
#include "atlas_misc.h"#include "atlas_prefetch.h"TYPE ATL_UDOT(const int N, const TYPE *X, const int incX, const TYPE *Y, const int incY){ register TYPE dot0=ATL_rzero, dot1=ATL_rzero, dot2=ATL_rzero, dot3=ATL_rzero; const TYPE *stX, *stX0=X+N; int i; int cwrd = ATL_MulBySize(N)>>4; stX = X + ((N>>2)<<2); if (X != stX) { #ifdef ATL_AltiVec if (cwrd >= 64) { cwrd = (cwrd+31)>>5; cwrd = ATL_GetCtrl(512, cwrd <= 255 ? cwrd : 0, 0); } else cwrd = ATL_GetCtrl(64, (cwrd+3)>>2, 4); ATL_pfavR(X, cwrd, 0); ATL_pfavR(Y, cwrd, 1); #endif do { ATL_pfl1R(X+80); dot0 += *X * *Y; dot1 += X[1] * Y[1]; dot2 += X[2] * Y[2]; dot3 += X[3] * Y[3]; X += 4; Y += 4; } while (X != stX); dot0 += dot1; dot2 += dot3; dot0 += dot2; } while (X != stX0) dot0 += *X++ * *Y++; return(dot0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?