首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串联tbb concurrent_vectors?

串联tbb concurrent_vectors?
EN

Stack Overflow用户
提问于 2014-03-31 20:15:10
回答 1查看 404关注 0票数 2

我有多个大型英特尔TBB concurrent_vectors,我需要合并。它们太大了,因此不可能分配足够大小的新concurrent_vector。

...so下面的伪代码不能工作

代码语言:javascript
复制
concurrent_vector<myStruct> A(100000);
concurrent_vector<myStruct> B(100000);
...
concurrent_vector<myStruct> X(100000);

concurrent_vector<myStruct> combined;
combined.resize(A.size()+B.size()....X.size()); // This will fail

我想要做的是将第一组向量中的向量转移或交换到组合的向量中,这样A,B.X变成AB.X,我知道tbb支持单个向量的交换(),但我不知道如何交换或附加倍数。谁能给我指明正确的方向?提前谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-01 09:38:10

不幸的是,没有这样一种方法可以将多个concurrent_vector组合成一个不需要重新分配的方法。它来自于tbb::concurrent_vector严格的数据结构规则,其中每个元素段的大小必须与所有前几段之和的大小相同。

但是请记住,concurrent_vector是在没有重新分配的情况下生长的,所以最好的方法就是一个接一个地附加向量,在复制后立即销毁它们。这样,有更多的机会,足够大的内存块将被释放时,需要。

代码语言:javascript
复制
std::copy(B.begin(), B.end(), A.grow_by(B.size())); B.clear();
std::copy(C.begin(), C.end(), A.grow_by(C.size())); C.clear();
...
std::copy(X.begin(), X.end(), A.grow_by(X.size())); // X.clear();

不过,内存碎片会再次破坏一切。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22771320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档