使用 TBB 插入到无序提升双图中
Insert into an unordered boost bimap using TBB
我对TBB
感到非常困惑。我正在尝试在无序 bimap 中插入<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;
}
}
);
}
而在TBB.cpp
的main
函数中,我试图调用该函数
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, ...
直到 n(,但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。
将for(i = r.begin(); i < r.end(); ++i )
更改为for(; i < r.end(); ++i )
。在第一种情况下,您正在重新初始化i = r.begin()
.
相关文章:
- 递归无序映射
- c++找不到具有相同哈希的无序集合元素
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 如何使用set实现无序数据结构?
- 如何写向量的无序向量集,即unordered_set<向量<向量<int>>集合?
- 如何禁用 CPU 的无序执行
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 从C++无序集合中高效提取元素
- tbb::p arallel_for_each 在取消时未执行
- 打印无序映射的第二个元素,即集合
- 如何完全关闭 TBB 代码中的线程
- 当我将其插入无序地图时,矢量的容量为 0
- 代码块中无序多集的编译错误17.12
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 由并发无序映射查找线程调用的函数是否安全?
- 如何按值对无序哈希映射进行排序
- 注册 TBB 的环境变量
- 使用 TBB 插入到无序提升双图中
- 从boost无序到tbb并发哈希映射的转换