BeBOP Optimized Sparse Kernel Interface Library
1.0.1h
|
00001 00007 #if !defined(INC_HEUR_REGPROFMGR_H) 00008 #define INC_HEUR_REGPROFMGR_H 00009 00010 #include <oski/common.h> 00011 #include <oski/mangle.h> 00012 00013 #if defined(DO_NAME_MANGLING) 00014 00016 #define oski_regprof_t MANGLE_(oski_regprof_t) 00017 00018 #define oski_CreateRegProfile MANGLE_(oski_CreateRegProfile) 00019 #define oski_CopyRegProfile MANGLE_(oski_CopyRegProfile) 00020 #define oski_LoadRegProfile MANGLE_(oski_LoadRegProfile) 00021 #define oski_InitRegProfile MANGLE_(oski_InitRegProfile) 00022 #define oski_ResetRegProfile MANGLE_(oski_ResetRegProfile) 00023 #define oski_ZeroRegProfile MANGLE_(oski_ZeroRegProfile) 00024 #define oski_InvRegProfile MANGLE_(oski_InvRegProfile) 00025 #define oski_ScaleRegProfile MANGLE_(oski_InvRegProfile) 00026 #define oski_MinRegProfile MANGLE_(oski_MinRegProfile) 00027 #define oski_MaxRegProfile MANGLE_(oski_MaxRegProfile) 00028 #define oski_MulEqRegProfile MANGLE_(oski_MulEqRegProfile) 00029 #define oski_AddEqRegProfile MANGLE_(oski_AddEqRegProfile) 00030 #define oski_DestroyRegProfile MANGLE_(oski_DestroyRegProfile) 00031 #define oski_PrintDebugRegProfile MANGLE_(oski_PrintDebugRegProfile) 00032 00033 #define oski_CalcHarmonicMeanRegProfile \ 00034 MANGLE_(oski_CalcHarmonicMeanRegProfile) 00035 00036 #endif 00037 00039 typedef struct 00040 { 00041 oski_index_t max_r; 00042 oski_index_t max_c; 00043 double *perf; 00044 } oski_regprof_t; 00045 00051 #define REGPROF_GET(P, r, c) ((P)->perf[((r)-1)*(P)->max_c + (c)-1]) 00052 00056 #define REGPROF_MULEQ(P, r, c, a) (REGPROF_GET(P, r, c) *= (a)) 00057 00061 #define REGPROF_ADDEQ(P, r, c, a) (REGPROF_GET(P, r, c) += (a)) 00062 00068 #define REGPROF_SET(P, r, c, v) (REGPROF_GET(P, r, c) = (v)) 00069 00073 oski_regprof_t *oski_CreateRegProfile (oski_index_t max_r, 00074 oski_index_t max_c); 00075 00079 int oski_LoadRegProfile (const char *filename, oski_regprof_t * profile); 00080 00085 void oski_ResetRegProfile (oski_regprof_t * profile); 00086 00091 int oski_InitRegProfile (oski_regprof_t * profile, 00092 oski_index_t max_r, oski_index_t max_c); 00093 00097 void oski_ZeroRegProfile (oski_regprof_t * profile); 00098 00104 void oski_CopyRegProfile (const oski_regprof_t * src, oski_regprof_t * dest); 00105 00109 void oski_InvRegProfile (oski_regprof_t * profile); 00110 00114 void oski_ScaleRegProfile (oski_regprof_t * profile, double alpha); 00115 00123 void oski_MulEqRegProfile (oski_regprof_t * P1, const oski_regprof_t * P2); 00124 00132 void oski_AddEqRegProfile (oski_regprof_t * P1, const oski_regprof_t * P2); 00133 00140 void oski_CalcHarmonicMeanRegProfile (oski_regprof_t * P1, double w1, 00141 const oski_regprof_t * P2, double w2); 00142 00146 void oski_DestroyRegProfile (oski_regprof_t * profile); 00147 00151 double oski_MinRegProfile (const oski_regprof_t * profile, 00152 oski_index_t * p_r, oski_index_t * p_c); 00153 00157 double oski_MaxRegProfile (const oski_regprof_t * profile, 00158 oski_index_t * p_r, oski_index_t * p_c); 00159 00163 void oski_PrintDebugRegProfile (int debug_level, const char *title, 00164 const oski_regprof_t * profile); 00165 00166 #endif 00167 00168 /* eof */