燕山大学多核程序设计实验报告

上传人:工**** 文档编号:499085698 上传时间:2022-09-28 格式:DOC 页数:46 大小:495.50KB
返回 下载 相关 举报
燕山大学多核程序设计实验报告_第1页
第1页 / 共46页
燕山大学多核程序设计实验报告_第2页
第2页 / 共46页
燕山大学多核程序设计实验报告_第3页
第3页 / 共46页
燕山大学多核程序设计实验报告_第4页
第4页 / 共46页
燕山大学多核程序设计实验报告_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《燕山大学多核程序设计实验报告》由会员分享,可在线阅读,更多相关《燕山大学多核程序设计实验报告(46页珍藏版)》请在金锄头文库上搜索。

1、WORD格式实验一 Windows多线程编程一、实验目的与要求了解 windows 多线程编程机制掌握线程同步的方法二、实验环境和软件WindowsXPVC6.0三、实验内容创建线程:HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,SIZE_TdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);四、实验程序#includestdafx.h#include#inclu

2、de#include#includeusingnamespacestd;voidThreadFrunc1(PVOIDparam)1专业资料整理格式while(1)Sleep(1000);coutThisisThreadFrunc1endl;voidThreadFrunc2(PVOIDparam)while(1)Sleep(1000);coutThisiskjjThreadFrunc2endl;intmain()inti=0;_beginthread(ThreadFrunc1,0,NULL);_beginthread(ThreadFrunc2,0,NULL);Sleep(3000);couten

3、dendl;return0;实验结果实验二蒙特卡罗法求PI一、实验目的和要求2专业资料整理格式蒙特卡洛算法可理解为通过大量实验,模拟实际行为,来收集统计数据。本例中,算法随机产生一系列点,模拟这些点落在如下图所示的正方形区域内的情况。其几何解释如下1轴YX 轴1图 1如图 1 所示,正方形边长为1,左下顶点与原点重合,两边分别与x ,y 轴重合。曲线为 1/4圆弧,圆心位于原点,与正方形左下定点重合,半径为1。正方形面积 S1=1,圆弧内面积121r 。算法模拟大量S2=44点随机落在此正方形区域内,落在圆弧内的点的数量(n2)与点的总数( n1)的比例与面积成正比关系。即nS4( 1)11n

4、S22由此可得4n2( 2)n1因此,只要计算出落在圆弧内的点的数量在点总数中所占的比例,就能求出的值。由图 1 可知,所有点均落在正方形范围内,因此点的x 坐标满足 0x1。圆弧范围内,则点的二维坐标关系满足 x1。2y2 又,当点落在检验每一个点是否满足此关系即可判定改点是否落在圆弧内。专业资料整理WORD格式3专业资料整理格式二、实验环境和软件编译器: MicrosoftVisualStudioC+6.0操作系统: WindowsXP三、实验内容3.1 串行算法本项目中使用了标准C 语言库中的产生随机数函数。该函数原型为:intrand(void);此函数产生随机数列,每次调用时均返回0

5、 到 RAND_MA之X 间的一个整数。voidsrand(unsignedintseed);此函数为 rand ()函数所生成的伪随机数序列设置起始点,使之产生不同的伪随机数。算法:产生 2n 个随机数据,范围 0 ,1 ,对每个数据点计算其坐标是否满足2y 2x1,统计满足此关系的点的数量count ,则count4 n3.2 并行算法描述算法步骤:1、确定需要产生的点的个数n,参与运行的处理器数m;2、对每一个处理器,生成两个随机数x , y ,范围 0 , 1 ;2y 23、判断两个随机数x , y 是否满足 x1 ;4、若满足,则变量COUNTi+;5、重复步骤 2-4 ,直至每个处

6、理器均生成n/m 个随机点;6、收集 COUNTi的值,并累加至变量 COUNT中,此即为随机点落在圆弧内的数量;7、通过( 2)式计算的值。3.3 并行算法在 Windows下的一个例子专业资料整理WORD格式4专业资料整理WORD格式#include#include#include/#include#include#include#includeusingnamespacestd;HANDLEevFinish;longcs=0;/总循环次数longcount=0;/主线程有效次数longcount_thread=0;/thread线程有效次数time_tstart,finish;/定义开始

7、结束时间/thread线程计算量为总数的一半DWORDWINAPIthread(LPVOIDparam)inti=0;doublex,y;for(i=0;ics/2;i+)x=(longdouble)rand()/(longdouble)RAND_MAX;y=(longdouble)rand()/(longdouble)RAND_MAX;if(x*x+y*y)=1)count_thread+;/printf(副 %d,i);SetEvent(evFinish);return0;/ 主线程计算量为总数的一半intmain(void)evFinish=CreateEvent(NULL,FALSE,

8、FALSE,NULL);printf(请输入总循环次数 :);scanf(%d,&cs);cs*=1000000;srand(unsigned)time(NULL);/用时间作随机数种子5专业资料整理WORD格式start=time(NULL);/ 记录开始时间 HANDLEid=CreateThread(NULL,0,thread,NULL,0,NULL);/ 创建thread 线程inti=0;doublex,y;for(i=0;ics/2;i+)x=(longdouble)rand()/(longdouble)RAND_MAX;y=(longdouble)rand()/(longdoub

9、le)RAND_MAX;if(x*x+y*y)=1)count+;/printf(主 %d,i);/printf(count%d,count);WaitForSingleObject(evFinish,INFINITE);/两线程同步count+=count_thread;finish=time(NULL);/记录结束时间printf(并行情况: nn);printf(用时 =%f秒 n,difftime(finish,start);/计算时间差 printf(总共的循环次数 =%d次 n,cs);printf(线程有效次数 =%d次 n,count);printf(pi=%fn,4*(double)count/(double)cs);printf(串行行情况: n);count=0;start=time(NULL);/记录开始时间f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号