00001
00009 #if !defined(INCLUDE_SPMV_GCB_H)
00010 #define INCLUDE_SPMV_GCB_H
00011
00012 typedef struct tagSparseMatrixGeneralCSR SparseMatrixGeneralCSR;
00013
00014 typedef enum
00015 { gcsrTypeBlockRows, gcsrTypeSparseRows } gcsr_type;
00016
00017 struct tagSparseMatrixGeneralCSR
00018 {
00019 gcsr_type type;
00020
00021 int row;
00022 int col_min;
00023 int m;
00024 int n;
00025 int nnz;
00026
00027 int *row_ptr;
00028 int *col_ind;
00029 double *val;
00030
00031
00032 SparseMatrixGeneralCSR *next;
00033
00034
00035 int *row_ind;
00036 };
00037
00038 typedef struct tagSparseMatrixCacheBlockedGCSR
00039 {
00040 int m, n;
00041 int nnz;
00042
00043 int num_blocks;
00044 SparseMatrixGeneralCSR *mats;
00045 } SparseMatrixCacheBlockedGCSR;
00046
00047 extern void convert_csr2cbgcsr (int R, int C,
00048 int m, int n, const int *ptr, const int *ind,
00049 const double *val,
00050 SparseMatrixCacheBlockedGCSR * B);
00051
00052
00053
00054
00055
00056
00057
00058 extern void destroy_cbgcsr (SparseMatrixCacheBlockedGCSR * B);
00059
00060 extern void spmv_cbgcsr (const SparseMatrixCacheBlockedGCSR * B,
00061 const double *x, double *y);
00062
00063
00064 #endif
00065
00066
00067
00068
00069
00070
00071
00072
00073