Вставить в неупорядоченный бимап буст с помощью TBB

Я очень смущен в отношении TBB, Я пытаюсь вставить <key, value> пара в неупорядоченном бимапе, где key имеет тип uint64_t а также value имеет тип string, Я сделал попытку создать loop object, который в TBB.h файл, и выглядит как

void ParallelIndex(uint64_t &kmer_len, std::string &split_kmer, std::string &sequence_content,
uint64_t &sequence_length, size_t &kmer_position ) {
parallel_for( blocked_range<size_t>(0, sequence_length),
[&](const blocked_range<size_t>& r) {
for(i = r.begin(); i < r.end();  ++i ){
split_kmer = sequence_content.substr(i, kmer_len);
reference_index_vector.insert(position(kmer_position, split_kmer));
i += kmer_len-1;
kmer_position += kmer_len;

}
}
);
}

и в main функция, которая находится в TBB.cppЯ пытался вызвать функцию

index.ParallelIndex(index.kmer_len, index.split_kmer, index.sequence_content,
index.sequence_length, index.kmer_position );

Он начинается с 0 и проходит через n. Я пытаюсь увеличить i на 5 (первый ++i а также i +=kmer_len-1, лайк i = 0, 5, 10, 15, ... до п), но i увеличивается только на 1.

Полный код показано ниже:

TBB.cpp

#include <iostream>
#include <string>
#include <algorithm>
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <boost/bimap/unordered_multiset_of.hpp>
#include "tbb/parallel_for.h"#include "TBB.h"#include "tbb/tbb.h"#include <tbb/blocked_range.h>using namespace tbb;namespace bimaps = boost::bimaps;
typedef boost::bimap<bimaps::unordered_set_of<uint64_t>,
bimaps::unordered_multiset_of<std::string> > bimap_reference;
typedef bimap_reference::value_type position;
bimap_reference reference_index_vector;uint64_t thread_test::create_index::kmer_len = 5;
std::string thread_test::create_index::split_kmer = "";
std::string thread_test::create_index::sequence_content = "ABCDDBACDDDCBBAAACBDAADCBDAAADCBDADADACBDDCBBBCDCBCDAADCBBCDAAAD";
uint64_t thread_test::create_index::sequence_length = 0;
size_t thread_test::create_index::kmer_position = 0;
size_t thread_test::create_index::i = 0;
int main(){
thread_test::create_index index;
index.sequence_length = index.sequence_content.length();

index.ParallelIndex(index.kmer_len, index.split_kmer, index.sequence_content,
index.sequence_length, index.kmer_position );

for( bimap_reference::const_iterator iter = reference_index_vector.begin(), iend = reference_index_vector.end();
iter != iend; ++iter ) {
std::cout << iter->left << " <--> "<< iter->right <<std::endl;
}

}

TBB.h

#ifndef TBB_H_
#define TBB_H_

#include<iostream>
#include <algorithm>
#include <utility>
#include <boost/bimap.hpp>
#include <boost/bimap/unordered_set_of.hpp>
#include <boost/bimap/unordered_multiset_of.hpp>
#include "tbb/tbb.h"#include <tbb/parallel_for.h>
#include <tbb/blocked_range.h>
#include <tbb/mutex.h>using namespace tbb;namespace bimaps = boost::bimaps;

typedef boost::bimap<bimaps::unordered_set_of<uint64_t>,
bimaps::unordered_multiset_of<std::string > > bimap_reference;
typedef bimap_reference::value_type position;
extern bimap_reference reference_index_vector;namespace thread_test{

class create_index{

public:
static uint64_t kmer_len;
static std::string split_kmer;
static std::string sequence_content;
static uint64_t sequence_length;
static size_t kmer_position;
static size_t i;

//  using lambda function

void ParallelIndex(uint64_t &kmer_len, std::string &split_kmer, std::string &sequence_content,
uint64_t &sequence_length, size_t &kmer_position ) {
parallel_for( blocked_range<size_t>(0, sequence_length),
[&](const blocked_range<size_t>& r) {
for(i = r.begin(); i < r.end();  ++i ){
split_kmer = sequence_content.substr(i, kmer_len);
reference_index_vector.insert(position(kmer_position, split_kmer));
i += kmer_len-1;
kmer_position += kmer_len;
}
}
);
}
};
}

#endif /* TBB_H_ */

проблема в i увеличивается на 1, но я пытаюсь увеличить его на 5, как указано выше.

1

Решение

+ Изменить for(i = r.begin(); i < r.end(); ++i ) в for(; i < r.end(); ++i ), В первом случае вы переинициализируете i = r.begin(),

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector