forked from boostorg/unordered
adapted post-#211
This commit is contained in:
@ -578,27 +578,27 @@ public:
|
|||||||
for(std::size_t i=0;i<M;++i){
|
for(std::size_t i=0;i<M;++i){
|
||||||
hashes[i]=this->hash_for(keys[i]);
|
hashes[i]=this->hash_for(keys[i]);
|
||||||
auto pos=this->position_for(hashes[i]);
|
auto pos=this->position_for(hashes[i]);
|
||||||
BOOST_UNORDERED_PREFETCH(this->arrays.groups+pos);
|
BOOST_UNORDERED_PREFETCH(this->arrays.groups()+pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(std::size_t i=0;i<M;++i){
|
for(std::size_t i=0;i<M;++i){
|
||||||
auto hash=hashes[i];
|
auto hash=hashes[i];
|
||||||
auto pos=this->position_for(hash);
|
auto pos=this->position_for(hash);
|
||||||
masks[i]=(this->arrays.groups+pos)->match(hash);
|
masks[i]=(this->arrays.groups()+pos)->match(hash);
|
||||||
if(masks[i]){
|
if(masks[i]){
|
||||||
BOOST_UNORDERED_PREFETCH(this->arrays.group_accesses+pos);
|
BOOST_UNORDERED_PREFETCH(this->arrays.group_accesses()+pos);
|
||||||
BOOST_UNORDERED_PREFETCH_ELEMENTS(this->arrays.elements+pos*N,N);
|
BOOST_UNORDERED_PREFETCH_ELEMENTS(this->arrays.elements()+pos*N,N);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(std::size_t i=0;i<M;++i){
|
for(std::size_t i=0;i<M;++i){
|
||||||
prober pb(this->position_for(hashes[i]));
|
prober pb(this->position_for(hashes[i]));
|
||||||
auto pos=pb.get();
|
auto pos=pb.get();
|
||||||
auto pg=this->arrays.groups+pos;
|
auto pg=this->arrays.groups()+pos;
|
||||||
auto mask=masks[i];
|
auto mask=masks[i];
|
||||||
element_type *p;
|
element_type *p;
|
||||||
if(mask){
|
if(mask){
|
||||||
p=this->arrays.elements+pos*N;
|
p=this->arrays.elements()+pos*N;
|
||||||
goto post_prefetch;
|
goto post_prefetch;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -606,10 +606,10 @@ public:
|
|||||||
}
|
}
|
||||||
do{
|
do{
|
||||||
pos=pb.get();
|
pos=pb.get();
|
||||||
pg=this->arrays.groups+pos;
|
pg=this->arrays.groups()+pos;
|
||||||
mask=pg->match(hashes[i]);
|
mask=pg->match(hashes[i]);
|
||||||
if(mask){
|
if(mask){
|
||||||
p=this->arrays.elements+pos*N;
|
p=this->arrays.elements()+pos*N;
|
||||||
BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
|
BOOST_UNORDERED_PREFETCH_ELEMENTS(p,N);
|
||||||
post_prefetch:
|
post_prefetch:
|
||||||
auto lck=access(group_shared{},pos);
|
auto lck=access(group_shared{},pos);
|
||||||
|
Reference in New Issue
Block a user