00001
00007 #if !defined(INC_OSKI_MATPOW_H) && !defined(OSKI_UNBIND)
00008
00009 #define INC_OSKI_MATPOW_H
00010
00011 #include <oski/matmult.h>
00012
00013 #if defined(DO_NAME_MANGLING)
00014
00016 #define oski_MatPowMult_funcpt MANGLE_(oski_MatPowMult_funcpt)
00017 #define oski_MatReprPowMult_funcpt \
00018 MANGLE_(oski_MatReprPowMult_funcpt)
00019
00020 #define oski_CheckArgsMatPowMult MANGLE_(oski_CheckArgsMatPowMult)
00021 #define oski_MatPowMult MANGLE_(oski_MatPowMult)
00022
00023 #define oski_traceargs_MatPowMult_t \
00024 MANGLE_(oski_traceargs_MatPowMult_t)
00025 #define oski_MakeArglistMatPowMult \
00026 MANGLE_(oski_MakeArglistMatPowMult)
00027
00028 #endif
00029
00036 int oski_MatPowMult (const oski_matrix_t A_tunable,
00037 oski_matop_t opA, int power,
00038 oski_value_t alpha, const oski_vecview_t x_view,
00039 oski_value_t beta, oski_vecview_t y_view,
00040 oski_vecview_t T_view);
00041
00045 int oski_CheckArgsMatPowMult (const oski_matrix_t A_tunable,
00046 oski_matop_t opA, int power,
00047 oski_value_t alpha, const oski_vecview_t x_view,
00048 oski_value_t beta, oski_vecview_t y_view,
00049 oski_vecview_t T_view, const char *caller);
00050
00054 typedef int (*oski_MatPowMult_funcpt) (const oski_matrix_t A_tunable,
00055 oski_matop_t opA, int power,
00056 oski_value_t alpha,
00057 const oski_vecview_t x_view,
00058 oski_value_t beta,
00059 oski_vecview_t y_view,
00060 oski_vecview_t T_view);
00061
00066 typedef int (*oski_MatReprPowMult_funcpt) (const void *A,
00067 const oski_matcommon_t * props,
00068 oski_matop_t opA, int power,
00069 oski_value_t alpha,
00070 const oski_vecview_t x_view,
00071 oski_value_t beta,
00072 oski_vecview_t y_view,
00073 oski_vecview_t T_view);
00074
00082 typedef struct
00083 {
00085
00086 oski_matop_t opA;
00087 int power;
00088 oski_index_t num_vecs;
00089 oski_value_t alpha;
00090 oski_storage_t x_orient;
00091 oski_value_t beta;
00092 oski_storage_t y_orient;
00093 oski_storage_t t_orient;
00095 }
00096 oski_traceargs_MatPowMult_t;
00103 void
00104 oski_MakeArglistMatPowMult (oski_matop_t op, int power,
00105 oski_value_t alpha, const oski_vecview_t x_view,
00106 oski_value_t beta, const oski_vecview_t y_view,
00107 const oski_vecview_t T_view,
00108 oski_traceargs_MatPowMult_t * args);
00109
00111 #define GET_XFLOP_MatPowMult( args ) \
00112 (2.0 * ((const oski_traceargs_MatPowMult_t *)(args))->num_vecs \
00113 * ((const oski_traceargs_MatPowMult_t *)(args))->power)
00114
00115 #endif
00116
00117 #if defined(OSKI_UNBIND)
00118 # include <oski/matmult.h>
00119 # undef INC_OSKI_MATPOW_H
00120 # undef GET_XFLOP_MatPowMult
00121 # undef oski_MatPowMult_funcpt
00122 # undef oski_MatReprPowMult_funcpt
00123 # undef oski_CheckArgsMatPowMult
00124 # undef oski_MatPowMult
00125 # undef oski_traceargs_MatPowMult_t
00126 # undef oski_MakeArglistMatPowMult
00127 #endif
00128
00129
00130