/[escript]/trunk/cusplibrary/cusp/detail/host/transposed_spmv.h
ViewVC logotype

Diff of /trunk/cusplibrary/cusp/detail/host/transposed_spmv.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 5220 by caltinay, Mon Sep 15 01:25:23 2014 UTC revision 5221 by caltinay, Thu Oct 23 04:01:49 2014 UTC
# Line 134  void transposed_spmv_cds(const Matrix& Line 134  void transposed_spmv_cds(const Matrix&
134                  y[row+1] = sum2;                  y[row+1] = sum2;
135              }              }
136          }          }
137      } else {      } else { // block_size!=2
138  #pragma omp parallel for  #pragma omp parallel for
139          for (IndexType ch = 0; ch < num_cols; ch += chunksize) {          for (IndexType ch = 0; ch < num_cols; ch += chunksize) {
140              for (IndexType row = ch; row < std::min(ch+chunksize,num_cols); row++)              for (IndexType row = ch; row < std::min(ch+chunksize,num_cols); row++)
141              {              {
142                  y[row] = initialize(y[row]);                  y[row] = initialize(y[row]);
             }  
143    
144              // for each diagonal block                  // for each diagonal block
145              for (IndexType d = 0; d < num_diagonals; d++)                  for (IndexType d = 0; d < num_diagonals; d++)
             {  
                 const IndexType k = A.diagonal_offsets[d]*block_size;  
                 for (IndexType row=ch; row<std::min(ch+chunksize,num_cols); row+=block_size)  
146                  {                  {
147                      const IndexType col = row - k;                      const IndexType k = A.diagonal_offsets[d]*block_size;
148                      if (col >= 0 && col < A.num_rows-block_size)                      const IndexType col = block_size*(row/block_size) - k;
149                        if (col >= 0 && col <= A.num_rows-block_size)
150                      {                      {
151                          //y[row] = reduce(y[row], combine(A.values(col, d), x[col]));                          // for each column in block
152                            for (IndexType i = 0; i < block_size; i++)
153                            {
154                                const ValueType& Aij = A.values(col+i, d*block_size+row%block_size);
155                                const ValueType& xj = x[col + i];
156                                y[row] = reduce(y[row], combine(Aij, xj));
157                            }
158                      }                      }
159                  }                  } // diagonals
160              }              } // rows
161          }          } // chunks
162      }      } // block_size
163  }  }
164    
165  template <typename Matrix,  template <typename Matrix,

Legend:
Removed from v.5220  
changed lines
  Added in v.5221

  ViewVC Help
Powered by ViewVC 1.1.26