Browse Source

Fix the compute error of gemv when incx and incy are negative numbers.

tags/v0.1.0^2
traz 14 years ago
parent
commit
a32e56500a
4 changed files with 25 additions and 22 deletions
  1. +13
    -10
      kernel/mips64/gemv_n_loongson3a.c
  2. +4
    -4
      kernel/mips64/gemv_t_loongson3a.c
  3. +4
    -4
      kernel/mips64/zgemv_n_loongson3a.c
  4. +4
    -4
      kernel/mips64/zgemv_t_loongson3a.c

+ 13
- 10
kernel/mips64/gemv_n_loongson3a.c View File

@@ -16,13 +16,16 @@
int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLONG LDA, FLOAT *X, BLASLONG INCX, FLOAT *Y, BLASLONG INCY, FLOAT *BUFFER)
{

BLASLONG kx=0, ky=0;
if(!ALPHA)
return 0;

if(INCX < 0)
INCX = -INCX;
if(INCY < 0)
INCY = -INCY;
//if(INCX < 0)
// kx = (1-N) * INCX;
// INCX = -INCX;
//if(INCY < 0)
// ky = (1-M) * INCY;
// INCY = -INCY;

BLASLONG fahead = 30;
BLASLONG spec_unroll = 4;
@@ -31,7 +34,7 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLO

if(ALPHA == 1) {
if(INCY == 1) {
for(; likely(j < N); j++, k += INCX) {
for(k=kx; likely(j < N); j++, k += INCX) {
BLASLONG i = 0;
for(; likely(i < tMQ);) {
prefetch(A[LDA * j + i + fahead]);
@@ -46,8 +49,8 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLO
}
}
} else {
for(; likely(j < N); j++, k += INCX) {
BLASLONG i = 0, h = 0;
for(k=kx; likely(j < N); j++, k += INCX) {
BLASLONG i = 0, h = ky;
for(; likely(i < tMQ);) {
prefetch(A[LDA * j + i + fahead]);
prefetch(Y[h + fahead]);
@@ -63,7 +66,7 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLO
}
} else {
if(INCY == 1) {
for(; likely(j < N); j++, k += INCX) {
for(k=kx; likely(j < N); j++, k += INCX) {
BLASLONG i = 0;
for(; likely(i < tMQ);) {
prefetch(A[LDA * j + i + fahead]);
@@ -78,8 +81,8 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLO
}
}
} else {
for(; likely(j < N); j++, k += INCX) {
BLASLONG i = 0, h = 0;
for(k=kx; likely(j < N); j++, k += INCX) {
BLASLONG i = 0, h = ky;
for(; likely(i < tMQ);) {
prefetch(A[LDA * j + i + fahead]);
prefetch(Y[h + fahead]);


+ 4
- 4
kernel/mips64/gemv_t_loongson3a.c View File

@@ -18,10 +18,10 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT ALPHA, FLOAT *A, BLASLO
if(!ALPHA)
return 0;

if(INCX < 0)
INCX = -INCX;
if(INCY < 0)
INCY = -INCY;
// if(INCX < 0)
// INCX = -INCX;
// if(INCY < 0)
// INCY = -INCY;

BLASLONG fahead = 30;
BLASLONG spec_unroll = 3;


+ 4
- 4
kernel/mips64/zgemv_n_loongson3a.c View File

@@ -19,10 +19,10 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT rALPHA, FLOAT iALPHA, F
if(!rALPHA && iALPHA)
return 0;

if(INCX < 0)
INCX = -INCX;
if(INCY < 0)
INCY = -INCY;
// if(INCX < 0)
// INCX = -INCX;
// if(INCY < 0)
// INCY = -INCY;

BLASLONG fahead = 60;
BLASLONG spec_unroll = 2;


+ 4
- 4
kernel/mips64/zgemv_t_loongson3a.c View File

@@ -18,10 +18,10 @@ int CNAME(BLASLONG M, BLASLONG N, BLASLONG UNUSED, FLOAT rALPHA, FLOAT iALPHA, F
if(!rALPHA && iALPHA)
return 0;

if(INCX < 0)
INCX = -INCX;
if(INCY < 0)
INCY = -INCY;
// if(INCX < 0)
// INCX = -INCX;
// if(INCY < 0)
// INCY = -INCY;

BLASLONG fahead = 30;
BLASLONG spec_unroll = 2;


Loading…
Cancel
Save