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 &)