00001 00007 #if !defined(INC_BENCH_KEROPTS_H) 00008 #define INC_BENCH_KEROPTS_H 00009 00010 #include <stdio.h> 00011 00012 #if defined(DO_NAME_MANGLING) 00013 00014 #define kerargs_MatMult_t MANGLE_(kerags_MatMult_t) 00015 #define kerargs_MatTrisolve_t MANGLE_(kerags_MatTrisolve_t) 00016 #define kerargs_MatTransMatMult_t MANGLE_(kerags_MatTransMatMult_t) 00017 #define kerargs_MatMultAndMatTransMult_t \ 00018 MANGLE_(kerags_MatMultAndMatTransMult_t) 00019 #define kerargs_MatPowMult_t MANGLE_(kerags_MatPowMult_t) 00020 #define keropts_process MANGLE_(keropts_process) 00021 #endif 00022 00024 typedef enum 00025 { 00026 KERNEL_NULL = 0, 00027 KERNEL_MatMult = 1, 00028 KERNEL_MatTrisolve = 2, 00029 KERNEL_MatTransMatMult = 3, 00030 KERNEL_MatMultAndMatTransMult = 4, 00031 KERNEL_MatPowMult = 5 00032 } kernel_types_t; 00033 00038 typedef struct 00039 { 00040 int num_calls; 00041 oski_index_t num_vecs; 00042 oski_matop_t op; 00043 oski_value_t alpha; 00044 oski_vecview_t x; 00045 oski_storage_t x_layout; 00046 oski_value_t beta; 00047 oski_vecview_t y; 00048 oski_storage_t y_layout; 00049 } kerargs_MatMult_t; 00050 00055 typedef struct 00056 { 00057 int num_calls; 00058 oski_index_t num_vecs; 00059 oski_matop_t op; 00060 oski_value_t alpha; 00061 oski_vecview_t x; 00062 oski_storage_t x_layout; 00063 } kerargs_MatTrisolve_t; 00064 00069 typedef struct 00070 { 00071 int num_calls; 00072 oski_index_t num_vecs; 00073 oski_ataop_t op; 00074 oski_value_t alpha; 00075 oski_vecview_t x; 00076 oski_storage_t x_layout; 00077 oski_value_t beta; 00078 oski_vecview_t y; 00079 oski_storage_t y_layout; 00080 oski_vecview_t t; 00081 oski_storage_t t_layout; 00082 } kerargs_MatTransMatMult_t; 00083 00089 typedef struct 00090 { 00091 int num_calls; 00092 oski_index_t num_vecs; 00093 oski_matop_t op; 00094 oski_value_t alpha; 00095 oski_vecview_t x; 00096 oski_storage_t x_layout; 00097 oski_value_t beta; 00098 oski_vecview_t y; 00099 oski_storage_t y_layout; 00100 oski_value_t omega; 00101 oski_vecview_t w; 00102 oski_storage_t w_layout; 00103 oski_value_t zeta; 00104 oski_vecview_t z; 00105 oski_storage_t z_layout; 00106 } kerargs_MatMultAndMatTransMult_t; 00107 00111 typedef struct 00112 { 00113 int num_calls; 00114 oski_index_t num_vecs; 00115 oski_matop_t op; 00116 int power; 00117 oski_value_t alpha; 00118 oski_vecview_t x; 00119 oski_storage_t x_layout; 00120 oski_value_t beta; 00121 oski_vecview_t y; 00122 oski_storage_t y_layout; 00123 oski_vecview_t t; 00124 oski_storage_t t_layout; 00125 } kerargs_MatPowMult_t; 00126 00128 typedef struct 00129 { 00130 kernel_types_t kernel; 00133 union 00134 { 00135 kerargs_MatMult_t MatMult; 00136 kerargs_MatTrisolve_t MatTrisolve; 00137 kerargs_MatTransMatMult_t MatTransMatMult; 00138 kerargs_MatMultAndMatTransMult_t MatMultAndMatTransMult; 00140 kerargs_MatPowMult_t MatPowMult; 00141 } args; 00142 } kernel_t; 00143 00145 void keropts_Usage (FILE * fp); 00146 00148 int keropts_Process (int argc, char *argv[], int i_start, kernel_t ** p_opt); 00149 00150 #endif 00151 00152 /* eof */