Skip to content

Commit d67ace5

Browse files
committed
prefetch
1 parent 1fcae6f commit d67ace5

File tree

5 files changed

+24
-9
lines changed

5 files changed

+24
-9
lines changed

CondFormats/SiStripObjects/src/SiStripApvGain.cc

+2-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ const SiStripApvGain::Range SiStripApvGain::getRange(const uint32_t& DetId) cons
3434
else{
3535
unsigned int pd= p-v_detids.begin();
3636
unsigned int ibegin = *(v_ibegin.begin()+pd);
37-
unsigned int iend = *(v_iend.begin()+pd);
37+
unsigned int iend = *(v_iend.begin()+pd);
38+
__builtin_prefetch((&v_gains.front())+ibegin);
3839
return SiStripApvGain::Range(v_gains.begin()+ibegin,v_gains.begin()+iend);
3940
}
4041
}

CondFormats/SiStripObjects/src/SiStripBadStrip.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ const SiStripBadStrip::Range SiStripBadStrip::getRange(const uint32_t& DetId) co
2929
RegistryIterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiStripBadStrip::StrictWeakOrdering());
3030
if (p==indexes.end()|| p->detid!=DetId)
3131
return SiStripBadStrip::Range(v_badstrips.end(),v_badstrips.end());
32-
else
32+
else {
33+
__builtin_prefetch((&v_badstrips.front())+p->ibegin);
34+
__builtin_prefetch((&v_badstrips.front())+p->ibegin+24);
35+
__builtin_prefetch((&v_badstrips.front())+p->iend-24);
3336
return SiStripBadStrip::Range(v_badstrips.begin()+p->ibegin,v_badstrips.begin()+p->iend);
37+
}
3438
}
3539

3640

CondFormats/SiStripObjects/src/SiStripNoises.cc

+8-2
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,20 @@ const SiStripNoises::Range SiStripNoises::getRange(const uint32_t& DetId) const
3737
RegistryIterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiStripNoises::StrictWeakOrdering());
3838
if (p==indexes.end()|| p->detid!=DetId)
3939
return SiStripNoises::Range(v_noises.end(),v_noises.end());
40-
else
41-
return SiStripNoises::Range(v_noises.begin()+p->ibegin,v_noises.begin()+p->iend);
40+
else {
41+
__builtin_prefetch((&v_noises.front())+p->ibegin);
42+
__builtin_prefetch((&v_noises.front())+p->ibegin+96);
43+
__builtin_prefetch((&v_noises.front())+p->iend-96);
44+
return SiStripNoises::Range(v_noises.begin()+p->ibegin,v_noises.begin()+p->iend);
45+
46+
}
4247
}
4348

4449
void SiStripNoises::getDetIds(std::vector<uint32_t>& DetIds_) const {
4550
// returns vector of DetIds in map
4651
SiStripNoises::RegistryIterator begin = indexes.begin();
4752
SiStripNoises::RegistryIterator end = indexes.end();
53+
DetIds_.reserve(indexes.size());
4854
for (SiStripNoises::RegistryIterator p=begin; p != end; ++p) {
4955
DetIds_.push_back(p->detid);
5056
}

RecoLocalTracker/SiStripClusterizer/interface/StripClusterizerAlgorithm.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class StripClusterizerAlgorithm {
6060
}
6161
}
6262

63-
63+
std::vector<uint32_t> detIds;
6464
SiStripApvGain::Range gainRange;
6565
SiStripNoises::Range noiseRange;
6666
SiStripQuality::Range qualityRange;

RecoLocalTracker/SiStripClusterizer/src/StripClusterizerAlgorithm.cc

+8-4
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,21 @@ initialize(const edm::EventSetup& es) {
1414
uint32_t g_cache_id = es.get<SiStripGainRcd>().cacheIdentifier();
1515
uint32_t q_cache_id = es.get<SiStripQualityRcd>().cacheIdentifier();
1616

17-
if(n_cache_id != noise_cache_id) {
18-
es.get<SiStripNoisesRcd>().get( noiseHandle );
19-
noise_cache_id = n_cache_id;
20-
}
2117
if(g_cache_id != gain_cache_id) {
2218
es.get<SiStripGainRcd>().get( gainHandle );
2319
gain_cache_id = g_cache_id;
20+
if (detIds.empty()) gainHandle->getDetIds(detIds);
21+
std::vector<uint32_t> dum; gainHandle->getDetIds(dum); assert(detIds==dum);
22+
}
23+
if(n_cache_id != noise_cache_id) {
24+
es.get<SiStripNoisesRcd>().get( noiseHandle );
25+
noise_cache_id = n_cache_id;
26+
std::vector<uint32_t> dum; noiseHandle->getDetIds(dum); assert(detIds==dum);
2427
}
2528
if(q_cache_id != quality_cache_id) {
2629
es.get<SiStripQualityRcd>().get( qualityLabel, qualityHandle );
2730
quality_cache_id = q_cache_id;
31+
std::vector<uint32_t> dum; qualityHandle->getDetIds(dum); assert(detIds==dum);
2832
}
2933
}
3034

0 commit comments

Comments
 (0)