实验原理及内容
- 利用蒙特卡洛(Monte Carlo)方法计算π值的原理
Monte Carlo方法又称计算机随机模拟方法,是利用随机试验求解问题的方法。
Monte Carlo法计算π值构造一个单位正方形和一个单位圆,往整个区域内随机投入点,根据点到原点的距离判断点是否落在圆内,从而根据落在圆内的点数和在正方形内的总的点数,求出两个区域点数的比值,进而利用下面的公式求出圆周率π。
π=4*(圆内点数)/(总的点数) 其中:“圆内点”满足x2+y2≤1
2.初步实现
使用编辑器gedit新建一个monteCarlo.c源文件,并输入后面的范例代码,存盘后退出。
#include#include #include #include #include int intervals=1000; //控制随机点的个数 int main() { clock_t start,delta; //用于统计程序运行时间 start=clock(); unsigned seed=time(NULL); int circle_points=0; int i; double pi; for(i=0;i 在终端先后执行,查看执行结果。
gcc monteCarlo.c -o monteCarlo
./ monteCarlo3.自定义函数calculate_pi计算π值,主函数中10次调用该函数,在每次调用中增加随机点总数,比对计算结果和运行时间。
使用编辑器gedit新建一个mcMultitask.c源文件,并输入后面的范例代码,存盘退出。
#include#include #include #include #include void calculate_pi(int intervals) { int circle_points=0; int i; double pi; unsigned seed=time(NULL); for(i=0;i 在Terminal中先后执行下述两条命令,查看并说明执行结果。
gcc mcMultitask.c -o mcMultitask
time ./mcMultitask
注:time命令获取其后命令的执行时间,其中包括命令的实际运行时间(real time),以及运行在用户态的时间(user time)和内核态的时间(sys time)。
4.通过多线程编程,改写上述mcMultitask.c,对执行结果进行分析比对。
- 使用编辑器gedit新建一个mcMultithreads.c源文件,并输入后面的范例代码,存盘退出。
#include#include #include #include #include #include void* calculate_pi(void* arg) { int circle_points=0; int i; double pi; int intervals=*((int*)arg); //线程函数参数用于控制循环次数 unsigned seed=time(NULL); for(i=0;i 在Terminal先后执行下述2条命令,查看执行结果,对比mcMultitask的执行结果,理解多线程并发执行对计算性能的提升。
gcc mcMultithreads.c -o mcMultithreads -pthread
time ./mcMultithreads
关闭虚拟机,编辑虚拟机设置,尝试调整处理器数量和/或每个处理器的内核数量,再次执行和对比以下命令的运行时间。
time ./mcMultitask
time ./mcMultithreads
time命令获取其后命令的执行时间,其中包括命令的实际运行时间(real time),以及运行在用户态的时间(user time)和内核态的时间(sys time)。



