资源描述:
《系统结构实验二12121469》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、计算机系统结构实验报告专业:计算机科学与技术指导老师:雷咏梅姓名:钱成浩学号:12121469计算机工程与科学学院实验二多核环境下OpenMP并行编程实验2-1.OpenMP程序的编译和运行1.实验目的1)在Linux平台上编译和运行OpenMP程序;2)在Windows平台上编译和运行OpenMP程序。3)掌握OpenMP并行编程基础。2.实验环境1)硬件环境:i5双核四线程pc机2)软件环境:centos6+gcc,以及win8.1+VisualStudio20133.运行内容代码如下:#include#includ
2、eintmain(){intnthreads,tid;omp_set_num_threads(8);#pragmaompparallelprivate(nthreads,tid){tid=omp_get_thread_num();printf("HelloWorldfromOMPthread%d",tid);if(tid==0){nthreads=omp_get_num_threads();printf("Numberofthreadsis%d",nthreads);}}}1.运行结果linuxWindows
3、实验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的
4、相乘程序,结果存放在方阵c中,其中乘法用for编译制导语句实现并行化操作,并调节for编译制导中schedule的参数,使得执行时间最短,写出代码。方阵a和b的初始值如下:输入:方阵的阶n、并行域的线程数输出:c中所有元素之和、程序的执行时间提示:a,b,c的元素定义为int型,c中所有元素之和定义为longlong型。Windows计时:用中的clock_tclock(void)函数得到当前程序执行的时间在windows下使用MicrosofeVisualStudio编程,源代码如下:#include5、>#include#includevoidcomput(float*A,float*B,float*C)//两个矩阵相乘传统方法{intx,y;for(y=0;y<4;y++){for(x=0;x<4;x++){C[4*y+x]=A[4*y+0]*B[4*0+x]+A[4*y+1]*B[4*1+x]+A[4*y+2]*B[4*2+x]+A[4*y+3]*B[4*3+x];}}}intmain(){doubleduration;clock_ts,f;intx=0;inty=0;intn=0;intk=0;f
6、loatA[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};floatB[]={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};floatC[16];s=clock();//#pragmaompparallelif(false)for(n=0;n<1000000;n++){comput(A,B,C);}f=clock();duration=(double)(f-s)/CL
7、OCKS_PER_SEC;printf("s---1,000,000:%f",duration);for(y=0;y<4;y++){for(x=0;x<4;x++){printf("%f,",C[y*4+x]);}printf("");}printf("======================");s=clock();//parallel2#pragmaompparallelforfor(n=0;n<2;n++)////CPU是核线程的{for(k=0;k<500000;k++)//每个线程管个循环{comput(
8、A,B,C);}}f=clock();duration=(double)(f-s)/CLOCKS_PER_SEC;printf("p2-1,000,000:%f",duration);//parallel3s=clo