并行编程中用来分解数据的数据结构以及手动分配任务方法
2012-03-08 23:06
302 查看
struct { int start; int end; }value[] = { {0 , NUMBER >> 1}, {NUMBER >> 1, NUMBER} };
以上代码是用于实现数据分解归约的数据结构。示例中此结构将数据分成两段分别取得首尾,方便函数调用。
/* 自己手动分配任务(类似与划分与调度策略的static,轮转分配)
* 第一种是每个线程分配的块里的任务是连续的, id*(N/Nthrds)-->(id+1) * (N / Nthrds);
* 第二种每个线程分配的块里的任务是分散的,第id个,第id+Nthrrds个,第id+2*Nthrds。。。只到
id+m*Nthrds>=N,。
* 这两种思想的区别值得借鉴。
*/
// 方法一
printf("/n------------------------ 手动分配任务,方法一 ------------------
--------/n");
#pragma omp parallel
{
int i, istart, iend;
int Nthrds = omp_get_num_threads(), id = omp_get_thread_num();
if (N/Nthrds == 0)
{
istart = id * (N / Nthrds);
// 每个线程都完成N/Nthrds个任务,就是将N个任务平均分给Nthrds个线程,最后一个线程可能不足
N/Nthrds个任务
iend = (id+1) * (N / Nthrds);
}
else{
istart = id * (N/Nthrds + 1);
// 每个线程都完成N/Nthrds + 1个任务,最后一个线程可能不足N/Nthrds + 1个任务。或者可以每个线
程完成N/Nthrds个,最后一个线程多完成剩余的
iend = (id+1) * (N/Nthrds + 1);
}
for(i=istart; i<iend && i<N; i++)
{
c[i] = a[i] + b[i];
printf("threadnum=%d, c[%d]=%d/n", id, i, c[i]);
}
}
for (int i=0;i<N;i++)
{
printf("c[%d]=%d/t", i, c[i]);
c[i] = 0;
}
printf("/n------------------------ 手动分配任务,方法二 -------------------------
/n");
// 方法二
#pragma omp parallel
{
int i, istart, iend;
int Nthrds = omp_get_num_threads(), id = omp_get_thread_num();
iend = N;
for(i=id; i<iend; i+=Nthrds)
// 每个线程一次完成第id个任务,第id+Nthrrds个,第id+2*Nthrds。。。只到id+m*Nthrds>=N
{
c[i] = a[i] + b[i];
printf("threadnum=%d, c[%d]=%d/n", id, i, c[i]);
}
}
for (int i=0;i<N;i++)
{
printf("c[%d]=%d/t", i, c[i]);
c[i] = 0;
}
return 0;
}
相关文章推荐
- 个人练习数据结构之--------------关于线性数据的有序数组以及之上的二分法查找、不同排序方法的学习
- Ubuntu16.04+cuda8.0+cudnn5.1配置faster-rcnn的方法以及训练自己的数据出现的问题
- C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对分数的几个运算。一则巩固基于对象编程的方法,
- Activiti删除测试数据(存储过程,手动SQL两种方法)
- 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
- valuestack,stackContext,ActionContext.之间的关系以及action的数据在页面中取得的方法
- FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法
- ArcEngine,C#数据删除几种方法以及性能比较
- xpath的数据和节点类型以及XPath中节点匹配的基本方法
- 在getView方法产生给用户item的视图以及数据
- 使用sklearn进行对数据标准化、归一化以及将数据还原的方法
- 问题:CSS样式引入方法以及CSS权重分配问题.........
- Oracle批量更新任务分解(数据量过亿)
- python基本数据类型list,tuple,set,dict用法以及遍历方法
- 下列哪些方法可以用来对高维数据进行降维:
- 关于CSV文件导入到数据的方法以及遇到的问题和解决方案
- MySQL大数据优化以及分解(下篇)
- float类型数据在计算机中的表示方法以及转换方法
- 在网页中页中加入CSS有几种方法!以及在样式定义有冲突时的优先级如何分配!
- 抽象数据结构(ADT)中的初始化以及在调用函数中改变值的方法