我在两个程序之间做了一些比较,这些程序用来自 mersenne twister 的伪随机整数填充给定向量,关键是 TBB 版本非常慢,当 TBB 需要时,std 版本在大约 0.6 秒内执行任务至少 1.1 秒。
我还注意到,TBB 并没有真正提供与容器一起使用的优化算法,但它只提供通用构造(parallel_for、parallel_for_each 和类似的)来处理通用任务,std::generate
在这种情况下,std 提供了更好、更清洁的解决方案。
您可以在此处下载我的带有 2 个小源文件 + 一个用于 gcc 的 Makefile 的小测试http://www.sendspace.com/file/ew73h8
我在这里做错了什么?我增加这个向量的大小越多,TBB 越慢,我在 Ubuntu 13.04 64 位下使用 Intel Q6600。
TBB 版本在某些方面会更好吗?
编辑:2个文件的完整来源
配置文件
#define N 10000000
标准cpp
#include <random>
#include <iostream>
#include <vector>
#include <algorithm>
#include "config.hpp"
int main() {
std::vector<u_int32_t> v(N);
std::mt19937 mt;
std::uniform_int_distribution<u_int32_t> dist(0,499);
std::generate(v.begin(),v.end(),[&]{return dist(mt);});
return(0);
}
tbb.cpp
#include <tbb/concurrent_vector.h>
#include <tbb/parallel_for_each.h>
#include <random>
#include <iostream>
#include "config.hpp"
int main()
{
tbb::concurrent_vector<u_int32_t> v(N);
std::mt19937 mt;
std::uniform_int_distribution<u_int32_t> dist(0, 499);
tbb::parallel_for_each(v.begin(),v.end(),[&](u_int32_t& e){e = dist(mt); });
return(0);
}