| 发表于: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, 不知道这种在循环处理中要多数据源进行更改的算法,利用什么方法才能实现? |
|
|
|
|