您的位置:程序门 -> 专题开发/技术/项目 -> 英特尔多核计算技术



关于tbb如何实现divide-and-conquer算法的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于tbb如何实现divide-and-conquer算法的问题
发表于:2007-12-13 18: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,

不知道这种在循环处理中要多数据源进行更改的算法,利用什么方法才能实现?
发表于:2007-12-14 15:03:151楼 得分:0
为什么parallel_reduce方法没有调用join和split构造函数啊?按照文档所描述的,应该调用join合并结果才对啊
发表于:2007-12-16 20:35:342楼 得分:0
好好学习一下.对了请教一下.这种编程到底都有哪些实际的用处呢?请指教


快速检索

最新资讯
热门点击