关于TBB如何实现Divide-And-Conquer算法的问题

feiyang21687 2007-12-13 06:11:56
比方说:使用归并排序法,对一个数组进行排序。我试了parallel_for和parellel_reduce都不能满足。
<code>
#include <vector>
#include <algorithm>

#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
#include "tbb/parallel_reduce.h"

using namespace std;
using namespace tbb;

class Body {
public:
Body(vector<int> *data) {
v = data;
}
Body(Body &b, split) {
v = b.v;
}

static bool compare(const int &a, const int &b) {
return a < b;
}
void operator()(const blocked_range<size_t> &r) {
stable_sort(v->begin() + r.begin(), v->begin() + r.end(), Body::compare);
}
void join(const Body& body) {

}

private:
vector<int> *v;
};

int main() {
task_scheduler_init init;
vector<int> *v = new vector<int>();
int data[100];
for(int i = 100; i >= 0; i--) {
v->push_back(i);
}
cout << "before parallel for:" << endl;
for(int i = 0; i < 100; i++) {
cout << v->at(i) << ",";
}
cout << endl;

Body b(v);
parallel_reduce(blocked_range<size_t>(0,100,10),b);

cout << "after parallel for" << endl;
for(int i = 0; i < 100; i++) {
cout << v->at(i) << ",";
}
cout << endl;
}
</code>
输出结果为:
before parallel for:
100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
after parallel for
95,96,97,98,99,100,89,90,91,92,93,94,83,84,85,86,87,88,76,77,78,79,80,81,82,70,71,72,73,74,75,64,65,66,67,68,69,58,59,60,61,62,63,51,52,53,54,55,56,57,45,46,47,48,49,50,39,40,41,42,43,44,33,34,35,36,37,38,26,27,28,29,30,31,32,20,21,22,23,24,25,14,15,16,17,18,19,8,9,10,11,12,13,1,2,3,4,5,6,7,

不知道这种在循环处理中要多数据源进行更改的算法,利用什么方法才能实现?
...全文
152 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangyixian525 2007-12-16
  • 打赏
  • 举报
回复
好好学习一下.对了请教一下.这种编程到底都有哪些实际的用处呢?请指教
feiyang21687 2007-12-14
  • 打赏
  • 举报
回复
为什么parallel_reduce方法没有调用join和split构造函数啊?按照文档所描述的,应该调用join合并结果才对啊

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧