使用intel提供的多线程函数

低调华龙 2008-08-05 09:57:55
在实际中使用过intel提供的多线程函数,今天看了他的getting starting.pdf,看了半天也没看明白是怎么用的,请使用过的大师给介绍介绍啊,它是用c++实现的,不知道用c可以不,请指教,当然在使用过程中有什么好的建议或要注意的地饭或者有代码的话请给我点
我学习下
谢谢!
以下是代码:
#include <iostream>
#include <string>
#include <algorithm>
#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_for.h"
#include "tbb/blocked_range.h"
#include "tbb/tick_count.h"

using namespace tbb;
using namespace std;
static const size_t N = 22;

void SerialSubStringFinder ( const string &str, size_t *max_array, size_t *pos_array) {
for ( size_t i = 0; i < str.size(); ++i ) {
size_t max_size = 0, max_pos = 0;
for (size_t j = 0; j < str.size(); ++j)
if (j != i) {
size_t limit = str.size()-( i > j ? i : j );
for (size_t k = 0; k < limit; ++k) {
if (str[i + k] != str[j + k]) break;
if (k > max_size) {
max_size = k;
max_pos = j;
}
}
}
max_array[i] = max_size;
pos_array[i] = max_pos;
}
}

class SubStringFinder {
const string str;
size_t *max_array;
size_t *pos_array;
public:
void operator() ( const blocked_range<size_t>& r ) const {
for ( size_t i = r.begin(); i != r.end(); ++i ) {
size_t max_size = 0, max_pos = 0;
for (size_t j = 0; j < str.size(); ++j)
if (j != i) {
size_t limit = str.size()-( i > j ? i : j );
for (size_t k = 0; k < limit; ++k) {
if (str[i + k] != str[j + k]) break;
if (k > max_size) {
max_size = k;
max_pos = j;
}
}
}
max_array[i] = max_size;
pos_array[i] = max_pos;
}
}
SubStringFinder(string &s, size_t *m, size_t *p) :
str(s), max_array(m), pos_array(p) { }
};

int main(size_t argc, char *argv[]) {
task_scheduler_init init;

string str[N] = { string("a"), string("b") };
for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
string &to_scan = str[N-1];

size_t *max = new size_t[to_scan.size()];
size_t *max2 = new size_t[to_scan.size()];
size_t *pos = new size_t[to_scan.size()];
size_t *pos2 = new size_t[to_scan.size()];
cout << " Done building string." << endl;


tick_count serial_t0 = tick_count::now();
SerialSubStringFinder(to_scan, max2, pos2);
tick_count serial_t1 = tick_count::now();
cout << " Done with serial version." << endl;

tick_count parallel_t0 = tick_count::now();
parallel_for(blocked_range<size_t>(0, to_scan.size(), 100),
SubStringFinder( to_scan, max, pos ) );
tick_count parallel_t1 = tick_count::now();
cout << " Done with parallel version." << endl;

for (size_t i = 0; i < to_scan.size(); ++i) {
if (max[i] != max2[i] || pos[i] != pos2[i]) {
cout << "ERROR: Serial and Parallel Results are Different!" << endl;
}
}
cout << " Done validating results." << endl;

cout << "Serial version ran in " << (serial_t1 - serial_t0).seconds() << " seconds" << endl
<< "Parallel version ran in " << (parallel_t1 - parallel_t0).seconds() << " seconds" << endl
<< "Resulting in a speedup of " << (serial_t1 - serial_t0).seconds() / (parallel_t1 - parallel_t0).seconds() << endl;
return 0;
}

...全文
203 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
formajia3 2008-09-24
  • 打赏
  • 举报
回复
好铁需要人气!加油!
lehedele 2008-09-24
  • 打赏
  • 举报
回复
潜水多年,今日上岸,继续学习
intel_iclifort 2008-08-29
  • 打赏
  • 举报
回复
C不支持的

去 http://www.threadingbuildingblocks.org/,特别是 Code Sample 和 Forum
低调华龙 2008-08-28
  • 打赏
  • 举报
回复
看来是没人知道了
hero_love 2008-08-25
  • 打赏
  • 举报
回复
再等等或许有人知道呢
低调华龙 2008-08-06
  • 打赏
  • 举报
回复
没人知道吗?
哭了
请大师指导指导啊

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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