




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机系统结构实验报告专业:计算机科学与技术指导老师: 雷咏梅 姓名: 钱成浩 学号: 12121469 计算机工程与科学学院实验二 多核环境下OpenMP并行编程实验2-1. OpenMP程序的编译和运行1. 实验目的1) 在Linux平台上编译和运行OpenMP程序;2) 在Windows平台上编译和运行OpenMP程序。3) 掌握OpenMP并行编程基础。2. 实验环境1) 硬件环境:i5双核四线程pc机2) 软件环境:centos6+gcc,以及win8.1+Visual Studio20133. 运行内容代码如下:#include #include int main()int nthreads,tid;omp_set_num_threads(8);#pragma omp parallel private(nthreads,tid)tid=omp_get_thread_num();printf(Hello World from OMP thread %dn,tid);if(tid=0)nthreads=omp_get_num_threads();printf(Number of threads is %dn,nthreads);4. 运行结果linuxWindows实验2-2 矩阵乘法的OpenMP实现及性能分析1. 实验目的1) 用OpenMP实现最基本的数值算法“矩阵乘法”2) 掌握for编译制导语句3) 对并行程序进行简单的性能调优2. 实验要求1) 运行并测试OpenMP编写两个n阶的方阵a和b的相乘程序,结果存放在方阵c中,其中乘法用for编译制导语句实现并行化操作,并调节for编译制导中schedule的参数,使得执行时间最短。要求在window环境(不用虚拟机),在linux环境(用和不用虚拟机情况下)测试程序的性能,并写出详细的分析报告。3.实验内容1. 用OpenMP编写两个n阶的方阵a和b的相乘程序,结果存放在方阵c中,其中乘法用for编译制导语句实现并行化操作,并调节for编译制导中schedule的参数,使得执行时间最短,写出代码。方阵a和b的初始值如下: 输入:方阵的阶n、并行域的线程数输出:c中所有元素之和、程序的执行时间提示:a,b,c的元素定义为int型,c中所有元素之和定义为long long型。Windows计时:用中的clock_t clock( void )函数得到当前程序执行的时间在windows下使用Microsofe Visual Studio编程,源代码如下:#include#include#includevoid comput(float* A, float* B, float* C)/两个矩阵相乘传统方法int x, y;for (y = 0; y4; y+)for (x = 0; x4; x+)C4 * y + x = A4 * y + 0 * B4 * 0 + x + A4 * y + 1 * B4 * 1 + x +A4 * y + 2 * B4 * 2 + x + A4 * y + 3 * B4 * 3 + x;int main()double duration;clock_t s, f;int x = 0;int y = 0;int n = 0;int k = 0;float A = 1, 2, 3, 4,5, 6, 7, 8,9, 10, 11, 12,13, 14, 15, 16 ;float B = 0.1f, 0.2f, 0.3f, 0.4f,0.5f, 0.6f, 0.7f, 0.8f,0.9f, 0.10f, 0.11f, 0.12f,0.13f, 0.14f, 0.15f, 0.16f ;float C16;s = clock();/#pragma omp parallel if(false)for (n = 0; n1000000; n+)comput(A, B, C);f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf(s-1,000,000 :%fn, duration);for (y = 0; y4; y+)for (x = 0; x4; x+)printf(%f, Cy * 4 + x);printf(n);printf(n=n);s = clock();/parallel 2#pragma omp parallel forfor (n = 0; n2; n+)/CPU是核线程的for (k = 0; k500000; k+)/每个线程管个循环comput(A, B, C);f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf(p2- 1,000,000:%fn, duration);/parallel 3s = clock();#pragma omp parallel forfor (n = 0; n4; n+)/CPU是核线程的for (k = 0; k250000; k+)/每个线程管个循环comput(A, B, C);f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf(p3- 1,000,000:%fn, duration);/parallel 1s = clock();#pragma omp parallel forfor (n = 0; n1000000; n+)comput(A, B, C);f = clock();duration = (double)(f - s) / CLOCKS_PER_SEC;printf(p1- 1,000,000 :%fn, duration);for (y = 0; y4; y+)for (x = 0; x4; x+)printf(%f, Cy * 4 + x);printf(n);getchar();return 0;4. 运行结果Linux(shell中运行)Windows线程为2 线程为4线程为82)请自己找一个需要大量计算但是程序不是很长的程序,实现OMP的多线程并行计算,要求写出并行算法,并分析并行的效果(注:必须核对串行和并行的计算结果,保证正确性)运行代码:1 #include2 #include3 #include4 #include5 #include6 using std:cout;7 using std:setprecision;8 using std:endl;9 void derivative(double x,double y,double result)10 11 result = (x + y)*(x + y) - x*x)/y;12 1314 int main()15 16 double duration;17 clock_t s, f;18 int n = 0;19 int k = 0;20 double x = 2.0, y = 0.01;21 double result;22 s = clock();23 #pragma omp parallel if(false)24 for (n = 0; n1000000; n+)25 26 derivative(x, y, result);27 /*for (int i = 0; i 10; +i)28 29 derivative(x, y, result);30 cout setprecision(20) result endl;31 y /= 10;32 */33 34 f = clock();35 duration = (double)(f - s) / CLOCKS_PER_SEC;36 cout s-1000000: duration endl;37 for (int i = 0; i10; +i)38 39 cout setprecision(20) result endl;40 y /= 10;41 42 cout = endl;43 s = clock();44 #pragma omp parallel for45 for (n = 0; n2; n+)46 47 for (k = 0; k500000; k+)48 49 derivative(x, y, result);50 51 52 f = clock();53 duration = (double)(f - s) / CLOCKS_PER_SEC;54 cout p2-1000000: duration endl;55 s = clock();56 #pragma omp parallel for57 for (n = 0; n4; n+)58 59 for (k = 0; k250000; k+)60 61 derivative(x, y, result);62 63 64 f = clock();65 duration = (double)(f - s) / CLOCKS_PER_SEC;6667 cout p3-1000000: duration endl;68 s = clock();69 #pragma omp parallel for70 for (n = 0; n1000000; n+)71 72 derivative(x, y, result);73 74 f = clock();75 duration = (double)(f - s) / CLOCKS_PER_SEC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度河北省护师类之护士资格证通关题库(附带答案)
- 2025江苏连云港市赣榆区招聘乡村振兴专干31人笔试备考题库及参考答案详解一套
- 2025江苏扬州宝应县“乡村振兴青年人才”招聘67人笔试参考题库附答案详解
- 2024年河北邯郸丛台区公开招聘教师200名笔试备考题库完整参考答案详解
- 2022年河北邯郸丛台区招聘社区工作者100人备考题库及一套答案详解
- 2025年人教部编版语文四年级下册第一次月考测试题(共2套配有答案)
- 2024 - 2025学年湘艺版小学音乐四年级下册期末考试卷附答案(三套)
- 陕西省2024-2025学年高二下学期3月月考物理试题(解析版)
- 陕西省宝鸡市金台区2024-2025学年高一上学期期中质量检测数学试题(解析版)
- 山东省青岛市黄岛区2024-2025学年高一上学期11月期中考试数学试题(解析版)
- 山东省省直机关公开遴选公务员笔试模拟真题及答案解析
- 工贸企业常见安全隐患剖析
- 2017内蒙古自治区农牧业丰收奖
- 水泥混凝土路面钢筋用量表
- J22J262 被动式超低能耗建筑节能构造(九)(钢丝网架珍珠岩复合保温板)DBJT02-215-2022
- 新编建筑施工扣件式钢管脚手架安全技术规范
- 俄罗斯文学导论智慧树知到答案章节测试2023年黑龙江大学
- 物业工程人员服务意识培训
- 莆田十中文印室承包招标方案
- YS/T 1109-2016有机硅用硅粉
- HY/T 0314-2021海水入侵监测与评价技术规程
评论
0/150
提交评论