




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
高性能计算实验报告 学生姓名: X X 学 号: XXXXXXXXXX 班 号: 116122 指导教师: 郭明强 中国地质大学(武汉)信息工程学院第一题1.编写console程序2.由下图看出,电脑是双核CPU3.多线程程序,利用windowsAPI函数创建线程代码#include stdafx.h#include#include windows.husing namespace std;DWORD WINAPI first(PVOID pParam)for (int i = 0;i 10;i+) printf(1n);return 0;DWORD WINAPI second(PVOID pParam)for (int i = 0;i 10;i+)printf(2n);return 0;int main(int argc, char * argv)HANDLE hHandle_Calc2;hHandle_Calc0 = CreateThread(NULL, 0, first, NULL, 0, NULL);hHandle_Calc1 = CreateThread(NULL, 0, second, NULL, 0, NULL);WaitForMultipleObjects(2, hHandle_Calc, true, INFINITE);第二题多线程实现计算e和的乘积代码#include stdafx.h#include windows.h#define num_steps 2000000#include using namespace std;/计算eDWORD WINAPI ThreadCalc_E(PVOID pParam)/计算e子函数double factorial = 1;int i = 1;double e = 1;for (;i num_steps;i+)factorial *= i;e += 1.0 / factorial;*(double*)pParam) = e;printf(e done E =%2.5fn, e);return 0;/计算PIDWORD WINAPI ThreadCalc_PI(PVOID pParam)/计算pi子函数int i = 0;double pi = 0;for (;i num_steps * 10;i+)pi += 1.0 / (i*4.0 + 1.0);pi -= 1.0 / (i*4.0 + 3.0);pi = pi*4.0;*(double*)pParam) = pi;printf(pi done PI = %2.5fn, pi);return 0;int main(int argc,char * argv)/进程的主线程入口点HANDLE hHandle_Calc2;double result_e, result_pi;hHandle_Calc0 = CreateThread(NULL, 0, ThreadCalc_E, (void*)(&result_e), 0, NULL);hHandle_Calc1 = CreateThread(NULL, 0, ThreadCalc_PI, (void*)(&result_pi), 0, NULL);/附加线程的创建WaitForMultipleObjects(2, hHandle_Calc, true, INFINITE);/等待子线程计算结束printf(e* pi = %2.5fn, result_e*result_pi);/打印出e*pi结果 return 0;第三题1.Parallel语句#include stdafx.h#include windows.h#include omp.h#include using namespace std;void main()#pragma omp parallel num_threads(8)printf(Hello, World!, ThreadId=%dn, omp_get_thread_num();2.For语句#include stdafx.h#include windows.h#include omp.h#include using namespace std;void main()int j = 0;#pragma omp parallel#pragma omp forfor (j = 0;j 4;j+) printf(j=%d,threadid=%dn, j, omp_get_thread_num();3.Sections和section语句的用法#include stdafx.h#include windows.h#include omp.h#include using namespace std;void main(int argc, char * argv)#pragma omp parallel sections #pragma omp sectionprintf( section 1 threadid = %d n, omp_get_thread_num();#pragma omp sectionprintf( section 2 threadid = %d n, omp_get_thread_num();#pragma omp sectionprintf( section 3 threadid = %d n, omp_get_thread_num();#pragma omp sectionprintf( section 4 threadid = %d n, omp_get_thread_num();4.Threadprivate语句的用法#include stdafx.h#include windows.h#include omp.h#include using namespace std;int a, b, i, tid;float x;#pragma omp threadprivate(a,x)void main()/关闭动态线程分配omp_set_dynamic(0);printf(1st Parallel Region:n);#pragma omp parallel private(b,tid)tid = omp_get_thread_num();a = tid;b = tid;x = 1.1*tid + 1.0;printf(Threading %d: a,b,x = %d %d %fn, tid, a, b, x);/end of parallel sectionprintf(*n);printf(主线程中串行线程n);printf(*n);printf(2nd Parallel Region:n);#pragma omp parallel private(tid)tid = omp_get_thread_num();printf(Threading %d: a,b,x = %d %d %fn, tid, a, b, x);/end of parallel section5.reduction语句的用法#include stdafx.h#include windows.h#include omp.h#include using namespace std;#include void main() int i, n, chunk;float a100, b100, result;/变量的初始化n = 100;chunk = 10;result = 0.0;for (i = 0;i n;i+) ai = i*2.0;bi = i*3.0;#pragma omp parallel for default(shared) private(i)schedule(static, chunk)reduction(+:result)for (i = 0;i n;i+)result = result + (ai * bi);printf(Final result= %fn, result);第四题OpenMP实例分析与比较串行#include stdafx.h#include#define num_steps 20000000int main(int argc, char *argv)double start, stop;double e, pi, factorial, product;int i;/启动定时器start = clock();/首先运用taylor展开运算eprintf(e startedn);e = 1;factorial = 1;for (i = 1;i num_steps;i+)factorial *= i;e += 1.0 / factorial;printf(e donen);/然后计算pi运用taylor展开printf(pi startedn);pi = 0;for (i = 1;i num_steps * 10;i+)pi += 1.0/(i*4.0 + 1.0);pi -= 1.0/(i*4.0 + 3.0);pi = pi*4.0;printf(pi donen);product = e*pi;stop = clock();printf(Reached result %f in %.3f secondn, product, (stop - start)/1000);return 0;并行#include stdafx.h#include#define num_steps 20000000int main(int argc, char * argv)double start, stop;/任务开始double e, pi, factorial, product;int i;/启动定时器start = clock();/启动两个进程 分别计算e pi #pragma omp parallel sections shared(e,pi)#pragma omp sectionprintf(e startedn);e = 1;factorial = 1;for (i = 1;i num_steps;i+)factorial *= i;e += 1.0 / factorial;printf(e donen);#pragma omp sectionprintf(pi startedn);pi = 0;for (i = 1;i num_steps * 10;i+)pi += 1.0/(i*4.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新入职员工消防知识培训课件
- 辽宁省葫芦岛市绥中县2023-2024学年小升初语文试卷(含答案)
- 勿沉迷网络课件
- 净化灯具知识培训总结
- 商业计划书撰写技巧及模板下载
- 小学生手抄报设计及教学活动指导
- 中小学教师教学能力提升培训教材
- 冷镦件产品知识培训内容课件
- 中考政治高频考点速记与答题模版
- 新课标七年级英语Unit 7教案
- 消防基础知识与常识
- 2025年房地产开发商独家代理销售合作协议范本
- 排污许可审核方案投标文件(技术方案)
- 临床医学特招考试题及答案2025版
- 2025阿拉尔经济技术开发区第二轮(4人)考前自测高频考点模拟试题附答案详解
- 双拥经费管理办法
- 2025版小学语文新课程标准
- 山东档案职称考试《档案基础理论》完整题(附答案)
- 2025年中盐安徽红四方肥业股份有限公司招聘笔试参考题库附带答案详解
- GB/T 17642-2025土工合成材料非织造布复合土工膜
- ISO 37001-2025 反贿赂管理体系要求及使用指南(中文版-雷泽佳译-2025)
评论
0/150
提交评论