26 #ifndef G4FastPathHadronicCrossSection_hh 27 #define G4FastPathHadronicCrossSection_hh 34 #include <unordered_map> 90 uint64_t cacheHitCount;
91 uint64_t initCyclesFastPath;
92 uint64_t invocationCountSlowPath;
93 uint64_t totalCyclesSlowPath;
94 uint64_t invocationCountFastPath;
95 uint64_t totalCyclesFastPath;
96 uint64_t invocationCountTriedOneLineCache;
97 uint64_t invocationCountOneLineCache;
108 inline void MethodCalled();
109 inline void HitOneLine();
110 inline void FastPath();
111 inline void SlowPath();
112 inline void SampleZandA();
114 uint64_t methodCalled;
115 uint64_t hitOneLineCache;
118 uint64_t sampleZandA;
126 return hash_uint64_t(hash_uint64_t( ((uint64_t)(
x.first)) ) + hash_uint64_t(((uint64_t)(
x.second))));
134 return (lhs.first==rhs.first)&&(lhs.second == rhs.second);
147 std::less<G4CrossSectionDataStore_Key>
less;
159 controlFlag() : prevCalcUsedFastPath(false),useFastPathIfAvailable(false),initializationPhase(false) {}
169 sampleCount = 200000;
183 static inline void logHit(cycleCountEntry*);
207 if ( cl !=
nullptr ) ++(cl->invocationCountTriedOneLineCache);
210 if ( cl !=
nullptr ) ++(cl->invocationCountOneLineCache);
213 if ( cl !=
nullptr ) ++(cl->cacheHitCount);
217 if ( cl !=
nullptr ) ++(cl->invocationCountFastPath);
221 if ( cl !=
nullptr ) ++(cl->invocationCountSlowPath);
238 if (fast_entry !=
nullptr ) {
239 if ( entry->invocationCountFastPath == 0 ) {
303 os<<
"#DEBUG COUNTERS: count="<<fp.count<<
" slowpath_sum="<<fp.slowpath_sum<<
" max_delta="<<fp.max_delta;
304 os<<
" min_delta="<<fp.min_delta<<
" sum_delta="<<fp.sum_delta<<
" sum_delta_square="<<fp.sum_delta_square<<
"\n";
310 #endif //G4FastPathHadronicCrossSection_hh
static void logTotalCyclesSlowPath(cycleCountEntry *, timing &)
fastPathEntry(const G4ParticleDefinition *par, const G4Material *mat, G4double min_cutoff)
size_t operator()(const G4CrossSectionDataStore_Key &x) const
G4double GetCrossSection(G4double ene) const
void Initialize(G4CrossSectionDataStore *)
static void logTiming(cycleCountEntry *, fastPathEntry *, timing &)
const G4String & particle
std::hash< uint64_t > hash_uint64_t
const G4ParticleDefinition *const particle
G4bool prevCalcUsedFastPath
const G4double min_cutoff
static void logInvocationCountFastPath(cycleCountEntry *)
const G4Material *const material
const G4Material *const material
std::set< fastPathRequestConfig_t, fastPathRequestConfig_Less > G4CrossSectionDataStore_Requests
std::unordered_map< G4CrossSectionDataStore_Key, cycleCountEntry *, G4CrossSectionDataStore_Key_Hash, G4CrossSectionDataStore_Key_EqualTo > G4CrossSectionDataStore_Cache
static void logInvocationCountSlowPAth(cycleCountEntry *)
static void logInitCyclesFastPath(cycleCountEntry *, timing &)
void logStartCountCycles(timing &)
std::pair< const G4ParticleDefinition *, const G4Material * > G4CrossSectionDataStore_Key
const G4String & GetParticleName() const
G4bool useFastPathIfAvailable
std::ostream & operator<<(std::ostream &os, const G4FastPathHadronicCrossSection::fastPathEntry &fp)
static void logInvocationOneLine(cycleCountEntry *)
static void logHit(cycleCountEntry *)
G4double Value(G4double theEnergy, size_t &lastidx) const
std::less< G4CrossSectionDataStore_Key > less
G4CrossSectionDataStore_Key part_mat
bool operator()(const fastPathRequestConfig_t &lhs, const fastPathRequestConfig_t &rhs) const
unsigned long long rdtsc_start
static void logTotalCyclesFastPath(cycleCountEntry *, timing &)
static void logInvocationTriedOneLine(cycleCountEntry *)
bool operator()(const G4CrossSectionDataStore_Key &lhs, const G4CrossSectionDataStore_Key &rhs) const
const G4String & GetName() const
G4bool initializationPhase
unsigned long long rdtsc_stop
void logStopCountCycles(timing &)