网上下载tbb40_20110809oss解压 安装具体过程 详细见http://bbs.elecfans.com/blog-710245-234834.html
重点讲下TBB的配置,其实跟opencv的配置一样,就是把include和lib 分别添加到包含目录和库目录,如下所示
在<包含目录>里面添加TBB40的Include文件夹:D:\design software\tbb40_20110809oss\include
在<库目录>里添加TBB40的LIB文件位置:D:\design software\tbb40_20110809oss\lib\ia32\vc10
添加好之后,在头文件中添加:
#include "tbb/tbb_stddef.h" #if TBB_VERSION_MAJOR*100 + TBB_VERSION_MINOR >= 202 #include "tbb/tbb.h" #include "tbb/task.h" #undef min #undef max #endif #pragma comment(lib, "tbb.lib") using namespace tbb;
typedef struct gData { int idx; Mat fFeatMat; } gFeatureData; class testTBB { public: void operator () (const blocked_range<size_t>& r) const { for (size_t i = r.begin(); i != r.end(); ++ i) { . . Mat fFeatMat; gFeatureData gFeacture; gFeacture.idx =i; grborImg.copyTo(FeatMat); gFeactures->push_back(gFeacture); } } testTBB(const Mat& _grayImg ,concurrent_vector< gFeatureData >& _gFeactures) { grayImg = _grayImg; gFeactures = &_gFeactures; } Mat grayImg; concurrent_vector<gFeatureData> *gFeactures; };
调用示例:
concurrent_vector<gFeatureData> gFeactures; parallel_for(blocked_range<size_t>(0, n), testTBB (grayImg ,gFeactures));
这里要用concurrent_vector是为了在用push_back压入结果是防止访问冲突;
其他的结果在不涉及在输出结果时同时访问问题,其参数类型跟一般的一样