00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 #ifndef config_cache_INCLUDED
00074 #define config_cache_INCLUDED
00075
00076 #ifdef _KEEP_RCS_ID
00077
00078 static char *config_cache_rcs_id = "$Source: /proj/osprey/CVS/open64/osprey1.0/common/com/config_cache.h,v $ $Revision: 1.1.1.1 $";
00079 #endif
00080
00081
00082
00083
00084
00085
00086
00087
00331 typedef enum MHD_TYPE {
00332 MHD_TYPE_NONE=222,
00333 MHD_TYPE_CACHE,
00334 MHD_TYPE_MEM
00335 } MHD_TYPE;
00336
00337 typedef struct MHD_LEVEL {
00338 MHD_TYPE Type;
00339 INT64 Size;
00340 INT64 Effective_Size;
00341 INT32 Line_Size;
00342 INT32 Clean_Miss_Penalty;
00343 INT32 Dirty_Miss_Penalty;
00344 INT32 Associativity;
00345 INT32 TLB_Entries;
00346 INT32 Page_Size;
00347 BOOL Prefetch_Level;
00348 INT32 TLB_Clean_Miss_Penalty;
00349 INT32 TLB_Dirty_Miss_Penalty;
00350
00351 double Typical_Outstanding;
00352 double Load_Op_Overlap_1;
00353 double Load_Op_Overlap_2;
00354 INT32 Pct_Excess_Writes_Nonhidable;
00355
00356
00357 char * CS_string;
00358 BOOL CMP_Set;
00359 BOOL DMP_Set;
00360 BOOL Is_Mem_Level;
00361 BOOL Is_Mem_Level_Set;
00362 INT32 Miss_Penalty;
00363 BOOL Miss_Penalty_Set;
00364 BOOL TLB_CMP_Set;
00365 BOOL TLB_DMP_Set;
00366 INT32 TLB_Miss_Penalty;
00367 BOOL TLB_MP_Set;
00368
00369 #if defined(_LANGUAGE_C_PLUS_PLUS)
00370 void operator = (const MHD_LEVEL&);
00371 void Print(FILE* f) const;
00372 void Merge_Options(const MHD_LEVEL& o);
00373 BOOL Valid() const;
00374 BOOL TLB_Valid() const;
00375
00376 MHD_LEVEL() : Type(MHD_TYPE_NONE),
00377 Size(-1), Line_Size(-1),
00378 Clean_Miss_Penalty(-1), Dirty_Miss_Penalty(-1),
00379 Associativity(-1), Effective_Size(-1),
00380 TLB_Entries(-1), Page_Size(-1), Prefetch_Level (-1),
00381 TLB_Clean_Miss_Penalty(-1), TLB_Dirty_Miss_Penalty(-1),
00382 Typical_Outstanding(-1.0),
00383 Load_Op_Overlap_1(-1.0), Load_Op_Overlap_2(-1.0),
00384 Pct_Excess_Writes_Nonhidable(-1),
00385 CS_string (NULL), CMP_Set (FALSE), DMP_Set (FALSE),
00386 Is_Mem_Level(-1), Is_Mem_Level_Set(FALSE),
00387 Miss_Penalty(-1), Miss_Penalty_Set(FALSE),
00388 TLB_CMP_Set (FALSE), TLB_DMP_Set (FALSE),
00389 TLB_Miss_Penalty(-1), TLB_MP_Set(FALSE) {}
00390 MHD_LEVEL(MHD_TYPE type, INT64 cs, INT32 ls, INT32 cmp, INT32 dmp,
00391 INT32 assoc, INT32 entries, INT32 pagesz,
00392 INT32 tlb_cmp, INT32 tlb_dmp,
00393 double outstanding, double op_overlap_1, double op_overlap_2,
00394 INT32 pct_excess_writes_nonhidable);
00395 ~MHD_LEVEL() {}
00396
00397 private:
00398
00399 void Compute_Effective_Size();
00400 #ifdef KEY
00401 void Reset_CS_String();
00402 #endif
00403 #endif
00404 } MHD_LEVEL;
00405
00406
00407 #define MHD_MAX_LEVELS 4
00408
00409 typedef struct MHD {
00410 INT32 Loop_Overhead_Base;
00411 INT32 Loop_Overhead_Memref;
00412 BOOL Non_Blocking_Loads;
00413 INT32 TLB_Trustworthiness;
00414 BOOL TLB_NoBlocking_Model;
00415 MHD_LEVEL L[MHD_MAX_LEVELS];
00416
00417 #if defined(_LANGUAGE_C_PLUS_PLUS)
00418 INT First();
00419 INT Next(INT);
00420 void Merge_Options(const MHD&);
00421 void Initialize();
00422 void Print(FILE*) const;
00423
00424 MHD() : Non_Blocking_Loads(-1),
00425 Loop_Overhead_Base(-1),
00426 Loop_Overhead_Memref(-1),
00427 TLB_Trustworthiness(-1),
00428 TLB_NoBlocking_Model(-1) {}
00429 ~MHD() {}
00430
00431 private:
00432
00433 MHD(const MHD&);
00434 #endif
00435 } MHD;
00436
00437 extern MHD Mhd;
00438 extern MHD Mhd_Options;
00439
00440 #endif