收藏 分享(赏)

多核--求PI值.doc

上传人:hyngb9260 文档编号:6879623 上传时间:2019-04-25 格式:DOC 页数:4 大小:97.50KB
下载 相关 举报
多核--求PI值.doc_第1页
第1页 / 共4页
多核--求PI值.doc_第2页
第2页 / 共4页
多核--求PI值.doc_第3页
第3页 / 共4页
多核--求PI值.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、 求 PI 值一、程序代码:非多线程:#include#include #include const long num_steps=10000000;double step,pi;void main()clock_t start, stop; start = clock(); int i;double x,sum=0.0;step=1.0/(double)num_steps;for(i=0;i#include #include const long num_steps = 10000; const int gNumThreads = 15; double gStep = 0.0;double

2、gPi = 0.0;CRITICAL_SECTION gCS;DWORD WINAPI threadFunction(LPVOID pArg) int myNum = *(int *)pArg); double Sum = 0.0, x; / local to each thread for ( int i=myNum; inum_steps; i+=gNumThreads )/每次 gNumThreads 个线程运行 x = (i + 0.5f) / num_steps; Sum += 4.0f / (1.0f + x*x); /在每个线程计算 PI 值 EnterCriticalSecti

3、on(gPi += Sum * gStep; LeaveCriticalSection(return 0; void main() HANDLE threadHandlesgNumThreads; int tNumgNumThreads;clock_t start, stop; start = clock(); printf(“PI=“); InitializeCriticalSection( gStep = 1.0 / num_steps; for ( int i=0; igNumThreads; +i ) /创建线程 tNumi = i; threadHandlesi = CreateTh

4、read( NULL, 0, threadFunction, (LPVOID) WaitForMultipleObjects(gNumThreads, threadHandles, TRUE, INFINITE); DeleteCriticalSection(stop = clock(); printf(“%12.20fn“, gPi ); printf(“计算 PI 的时间为: %f 秒n“,(double)(stop - start)/1000.0);二、设计思想根据积分公式 即可求得值根据多线程并行执行思想可以将一个程序的执行顺序互不影响的步骤分开执行,即可以将这些每一个步骤都分为一个线

5、程,这样可以大幅度提高程序执行时间,但如果可并行执行的步骤过少时,时间减少的并不明显。本例由于求值时每个循环中先后并不影响,因此可以做成多线程并行执行。即非多线程时每次循环一次一次的执行,但当做成多线程时,每次相当于并行执行gNumThreads 次,所以当循环次数过多时可以显著减少程序的执行时间。三、运行结果:非多线程:num_steps=10000num_steps=10000000;多线程:num_steps = 10000gNumThreads = 15gNumThreads = 25num_steps = 10000000gNumThreads = 15gNumThreads = 25四、心得体会:感觉多线程的效率比较高,很明显执行时间减少了。虽然有些代码不是自己写的,但我还是收获很大的,至少我初步了解了多线程的一些知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报