00001
00007 #if !defined(INC_OSKI_A_AND_AT_H) && !defined(OSKI_UNBIND)
00008
00009 #define INC_OSKI_A_AND_AT_H
00010
00011 #include <oski/matmult.h>
00012
00013 #if defined(DO_NAME_MANGLING)
00014
00016 #define oski_MatMultAndMatTransMult_funcpt \
00017 MANGLE_(oski_MatMultAndMatTransMult_funcpt)
00018 #define oski_MatReprMultAndMatReprTransMult_funcpt \
00019 MANGLE_(oski_MatReprMultAndMatReprTransMult_funcpt)
00020
00021 #define oski_MatMultAndMatTransMult \
00022 MANGLE_(oski_MatMultAndMatTransMult)
00023 #define oski_CheckArgsMatMultAndMatTransMult \
00024 MANGLE_(oski_CheckArgsMatMultAndMatTransMult)
00025
00026 #define oski_traceargs_MatMultAndMatTransMult_t \
00027 MANGLE_(oski_traceargs_MatMultAndMatTransMult_t)
00028 #define oski_MakeArglistMatMultAndMatTransMult \
00029 MANGLE_(oski_MakeArglistMatMultAndMatTransMult)
00030
00031 #endif
00032
00040 int oski_MatMultAndMatTransMult (const oski_matrix_t A_tunable,
00041 oski_value_t alpha,
00042 const oski_vecview_t x_view,
00043 oski_value_t beta, oski_vecview_t y_view,
00044 oski_matop_t opA, oski_value_t omega,
00045 const oski_vecview_t w_view,
00046 oski_value_t zeta, oski_vecview_t z_view);
00047
00053 int oski_CheckArgsMatMultAndMatTransMult (const oski_matrix_t A_tunable,
00054 oski_value_t alpha,
00055 const oski_vecview_t x_view,
00056 oski_value_t beta,
00057 oski_vecview_t y_view,
00058 oski_matop_t op, oski_value_t omega,
00059 const oski_vecview_t w_view,
00060 oski_value_t zeta,
00061 oski_vecview_t z_view,
00062 const char *caller);
00063
00067 typedef int (*oski_MatMultAndMatTransMult_funcpt) (const oski_matrix_t
00068 A_tunable,
00069 oski_value_t alpha,
00070 const oski_vecview_t
00071 x_view, oski_value_t beta,
00072 oski_vecview_t y_view,
00073 oski_matop_t opA,
00074 oski_value_t omega,
00075 const oski_vecview_t
00076 w_view, oski_value_t zeta,
00077 oski_vecview_t z_view);
00078
00083 typedef int (*oski_MatReprMultAndMatReprTransMult_funcpt) (const void *A,
00084 const
00085 oski_matcommon_t *
00086 props,
00087 oski_value_t alpha,
00088 const
00089 oski_vecview_t
00090 x_view,
00091 oski_value_t beta,
00092 oski_vecview_t
00093 y_view,
00094 oski_matop_t opA,
00095 oski_value_t omega,
00096 const
00097 oski_vecview_t
00098 w_view,
00099 oski_value_t zeta,
00100 oski_vecview_t
00101 z_view);
00102
00110 typedef struct
00111 {
00113
00114 oski_value_t alpha;
00115 oski_index_t num_vecs;
00116 oski_storage_t x_orient;
00117 oski_value_t beta;
00118 oski_storage_t y_orient;
00119 oski_matop_t opA;
00120 oski_value_t omega;
00121 oski_storage_t w_orient;
00122 oski_value_t zeta;
00123 oski_storage_t z_orient;
00125 }
00126 oski_traceargs_MatMultAndMatTransMult_t;
00127
00132 void oski_MakeArglistMatMultAndMatTransMult (oski_value_t alpha,
00133 const oski_vecview_t x_view,
00134 oski_value_t beta,
00135 const oski_vecview_t y_view,
00136 oski_matop_t opA,
00137 oski_value_t omega,
00138 const oski_vecview_t w_view,
00139 oski_value_t zeta,
00140 const oski_vecview_t z_view,
00141 oski_traceargs_MatMultAndMatTransMult_t
00142 * args);
00143
00145 #define GET_XFLOP_MatMultAndMatTransMult(args) \
00146 (4.0*((const oski_traceargs_MatMultAndMatTransMult_t *)(args))->num_vecs)
00147
00149 #endif
00150
00151 #if defined(OSKI_UNBIND)
00152 # include <oski/matmult.h>
00153 # undef INC_OSKI_A_AND_AT_H
00154 # undef oski_MatMultAndMatTransMult_funcpt
00155 # undef oski_MatReprMultAndMatReprTransMult_funcpt
00156 # undef oski_MatMultAndMatTransMult
00157 # undef oski_CheckArgsMatMultAndMatTransMult
00158 # undef oski_traceargs_MatMultAndMatTransMult_t
00159 # undef oski_MakeArglistMatMultAndMatTransMult
00160 # undef GET_XFLOP_MatMultAndMatTransMult
00161 #endif
00162
00163