revert using pointers and references in cube pruning classes, instead create bitmap. Faster, at least for single threaded operation. Kinda strange

This commit is contained in:
Hieu Hoang 2015-10-26 11:25:01 +00:00
parent 73d8dff5fe
commit d30a10e52c
4 changed files with 6 additions and 6 deletions

View File

@ -202,7 +202,7 @@ public:
class BitmapContainer
{
private:
const Bitmap &m_bitmap;
const Bitmap m_bitmap;
HypothesisStackCubePruning &m_stack;
HypothesisSet m_hypotheses;
BackwardsEdgeSet m_edges;

View File

@ -288,19 +288,19 @@ HypothesisStackCubePruning::AddHypothesesToBitmapContainers()
for (iter = m_hypos.begin() ; iter != m_hypos.end() ; ++iter) {
Hypothesis *h = *iter;
const Bitmap &bitmap = h->GetWordsBitmap();
BitmapContainer *container = m_bitmapAccessor[&bitmap];
BitmapContainer *container = m_bitmapAccessor[bitmap];
container->AddHypothesis(h);
}
}
BitmapContainer *HypothesisStackCubePruning::AddBitmapContainer(const Bitmap &bitmap, HypothesisStackCubePruning &stack)
{
_BMType::iterator iter = m_bitmapAccessor.find(&bitmap);
_BMType::iterator iter = m_bitmapAccessor.find(bitmap);
BitmapContainer *bmContainer;
if (iter == m_bitmapAccessor.end()) {
bmContainer = new BitmapContainer(bitmap, stack, m_deterministic);
m_bitmapAccessor[&bitmap] = bmContainer;
m_bitmapAccessor[bitmap] = bmContainer;
} else {
bmContainer = iter->second;
}

View File

@ -37,7 +37,7 @@ class BitmapContainer;
class TranslationOptionList;
class Manager;
typedef boost::unordered_map<const Bitmap*, BitmapContainer*, UnorderedComparer<Bitmap>, UnorderedComparer<Bitmap> > _BMType;
typedef boost::unordered_map<Bitmap, BitmapContainer*, UnorderedComparer<Bitmap>, UnorderedComparer<Bitmap> > _BMType;
/** A stack for phrase-based decoding with cube-pruning. */
class HypothesisStackCubePruning : public HypothesisStack

View File

@ -181,7 +181,7 @@ void SearchCubePruning::CreateForwardTodos(HypothesisStackCubePruning &stack)
stack.AddHypothesesToBitmapContainers();
for (iterAccessor = bitmapAccessor.begin() ; iterAccessor != bitmapAccessor.end() ; ++iterAccessor) {
const Bitmap &bitmap = *iterAccessor->first;
const Bitmap &bitmap = iterAccessor->first;
BitmapContainer &bitmapContainer = *iterAccessor->second;
if (bitmapContainer.GetHypothesesSize() == 0) {