资源简介
天津大学并行计算实验报告第一二次的实验,最好还是自己动手做啊,这个只是用来参考的。而且这么简单的实验,有抄袭的必要么?那也太弱了。
![](http://www.nz998.com/pic/34385.jpg)
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/
long long maxn ; //计算规模
double ans = 0; //结果
long long pnum = 10;//线程数
long long maxn2; //
long long over; //线程结束数
struct node{ //保存每个线程计算的起点和终点
long long beginend;
};
void *thread(void*xx) //线程执行指令
{
double x = 0yy;
node y = *(node*)xx;
long long maxn1 = (long long)maxn*maxn;
for(long long i = y.begin;i < y.end; i++) //每个线程的计算任务
{
x += 1.0/(maxn1+(i+0.5)*(i+0.5));
}
pthread_mutex_lock(&mutex); //加锁更新总结果以及更新线程结束的个数
ans += x;
over++;
pthread_mutex_unlock(&mutex);//解锁
void *statu;
pthread_exit(&statu);//结束线程
}
int main(int argc char*argv[])
{
struct timeval tv;
gettimeofday(&tv NULL);
double time_start time_end; //保存程序开始时间和结束时间
//获取当前开始时间
time_start = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
pnum = atoi(argv[1]); //获取线程数
maxn = atoi(argv[2]); //获取数据规模
pthread_t pid[1000]; //保存线程id
node xx[1000];
maxn2= (long long )maxn*maxn;
over = 0;
//给每个线程分配计算的开始和结束位置,并创建线程
long long begin = 0 length = (maxn+pnum-1)/pnum;
for(long long i = 0;i < pnum; i++)
{
xx[i].begin = begin;
xx[i].end = min((long long)maxnbegin+length);
begin = begin+length;
pthread_create(&pid[i]NULLthread&xx[i]);
}
while(over != pnum) {usleep(5);} //查看是否所有线程完成任务
ans = 4.0*ans*maxn;
pthread_mutex_destroy(&mutex);
gettimeofday(&tv NULL); //获取当前结束时间
time_end = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
//输出结果
printf(“pnum:%lld scale:%lld the pi result:%0.10lf thetimecost:%lf\n“pnummaxnanstime_end-time_start);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 154624 2014-03-28 20:49 1_多线程求pi - 副本.doc
文件 1350144 2014-03-28 20:49 2_多线程求卷积 - 副本.doc
目录 0 2014-03-20 09:29 test1\
文件 371 2014-03-18 10:41 test1\shell1.txt
文件 2188 2014-03-20 08:50 test1\test1.cpp
目录 0 2014-03-20 09:29 test2\
文件 71 2014-03-20 13:26 test2\2.txt
文件 525798 2014-03-21 12:37 test2\dataout0.txt
文件 526769 2014-03-21 12:37 test2\dataout1.txt
文件 527484 2014-03-21 12:37 test2\dataout2.txt
文件 527492 2014-03-21 12:37 test2\dataout3.txt
文件 527501 2014-03-21 12:37 test2\dataout4.txt
文件 3096826 2014-03-21 14:10 test2\dataout5.txt
文件 2691 2014-03-21 15:06 test2\test2.cpp
- 上一篇:高数课本基础知识整理
- 下一篇:射频通信原理
相关资源
- 数学建模实验报告(八个全)
- 数字逻辑与数字系统实验报告
- 多媒体综合设计报告(附作品)
- ubuntu9.10 可加载内核模块和字符设备驱
- 操作系统 LRU算法 实验报告 及 程序代
- 西安电子科技大学 并行计算 霍红卫
- 迈克尔逊干涉仪的调整与使用实验报
- 利用启发式搜索解决八数码难题程序
- 比较两个字符串大小汇编语言源代码
- linux实验报告及心得体会
- 数据结构实验-魔王语言-源码加实验报
- 2FSK2PSK信号产生器实验实验报告
- 软件工程课程设计【网上选课系统】
- 表达式求值C 代码(附实验报告)
- 湖南大学操作系统实验报告
- 哈夫曼树编码和译码实验报告+运行视
- 哈工大威海-嵌入式实验报告答案
- 银行储蓄系统实验报告
- 操作系统实验报告哲学家就餐问题、
- 基于Spark的PSO并行计算
- 北航研究生计网实验报告.rar
- PS作业 实验报告 11
- 数据结构算术表达式求值实验报告
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 软件项目管理实验报告
- 天津大学中特&自然辩证法课件
- 数字图像处理课程设计 实验报告
- 河北工业大学编译原理实验代码及实
- 东北大学软件学院编译方法两次实验
评论
共有 条评论