里仁多核程序设计实验报告.docx
- 文档编号:6818000
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:13
- 大小:251.23KB
里仁多核程序设计实验报告.docx
《里仁多核程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《里仁多核程序设计实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
里仁多核程序设计实验报告
多核程序设计实验报告
Multi-coreProgrammingExperimentReport
学生所在学院:
里仁学院
学生所在班级:
学生姓名:
学生学号:
指导教师:
教务处
2014年4月
实验一Windows多线程编程
模块一:
基础练习
一.实验目的与要求
二.实验环境及软件
三.实验内容
四.实验代码
·#include
·#include
·#include
·#include
·void test(int n)
·{
· for (int i = 0; i< 10000; i++) {
· }
·}
·int main() {
· double dResult;
· long lBefore = clock();
·#pragma omp parallel for
· for (int i = 0; i < 10000; i++)
· test(i);
· dResult = (double)(clock() - lBefore);
· printf("\nTotal Time:
%f ms.\n", dResult);
· system("pause");
· return 0;
·}
五.结果分析
运行时间是串行的一半。
明显降低了时间的消耗。
实验二各种同步机制的性能比较
一.实验目的与要求
二.实验环境及软件
三.实验内容
以矩阵乘进行并行串行比较
四.实验代码和结果
实验代码:
//juzhencheng.cpp:
定义控制台应用程序的入口点。
#include"stdafx.h"
#include
#include
#include
#defineNN2000
intA[NN][NN],B[NN][NN];
longlongC[NN][NN];
voidsolve(intn,intnum_thread){
inti,j,t,k,paralleltime,serialtime;
clock_tstartTime,endTime;
longlongsum;
omp_set_num_threads(num_thread);
//--------------对矩阵A和矩阵B进行初始化-------------
for(i=0;i t=i+1; for(j=0;j A[i][j]=t++; B[i][j]=1; } } //----------------矩阵乘法并行算法------------------ startTime=clock(); sum=0; #pragmaompparallelshared(A,B,C)private(i,j,k) { #pragmaompforschedule(dynamic) for(i=0;i for(j=0;j C[i][j]=0; for(k=0;k C[i][j]+=A[i][k]*B[k][j]; } } } } for(i=0;i for(j=0;j sum+=C[i][j]; endTime=clock(); paralleltime=endTime-startTime; printf("矩阵C所有元素和为sum=%lld并行计算时间time=%dms\n",sum,paralleltime); startTime=clock(); sum=0; for(i=0;i for(j=0;j C[i][j]=0; for(k=0;k C[i][j]+=A[i][k]*B[k][j]; } } } for(i=0;i for(j=0;j sum+=C[i][j]; endTime=clock(); serialtime=endTime-startTime; printf("矩阵C所有元素和为sum=%lld串行计算时间time=%dms\n",sum,serialtime); printf("相对加速比为: %d/%d\n",serialtime,paralleltime); } int_tmain(intargc,_TCHAR*argv[]){ intn,num_thread; printf("请输入矩阵的节数(整数N<=2000),再输入并行的线程数。 \n\n"); while(scanf("%d%d",&n,&num_thread)! =EOF) { printf("你输入的矩阵节数为: %d并行线程数为: %d\n",n,num_thread); solve(n,num_thread); } return0; } 实验结果: 实验三蒙特卡洛法并行求解Pi值 一.实验目的与要求 二.实验环境及软件 三.实验内容 四.实验代码和结果 代码: //Pi.cpp: 定义控制台应用程序的入口点。 //求圆周率PI #include"stdafx.h" #include #include #include #include usingnamespacestd; staticlongnum_steps=1000000000;//定义所分的块数 #defineNUM_THREADS2//定义所开启的线程数 int_tmain(intargc,_TCHAR*argv[]){ inti; omp_set_num_threads(NUM_THREADS);//开启线程 doublex,sum=0.0,pi; clock_tstart_time,end_time; doublestep=1.0/(double)num_steps; //并行-------------------------------------- start_time=clock(); #pragmaompparallelsectionsreduction(+: sum)private(x,i) { #pragmaompsection { for(i=omp_get_thread_num();i { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } } #pragmaompsection { for(i=omp_get_thread_num();i { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } } } pi=step*sum; end_time=clock(); cout<<"Pi="< cout<<"并行time="< //串行----------------------------------- sum=0.0; start_time=clock(); for(i=0;i { x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); } pi=step*sum; end_time=clock(); cout<<"Pi="< cout<<"串行time="< system("pause"); return0; } 结果: 实验四多核并行排序实验 一.实验目的与要求 1、熟悉快速排序的串行算法 2、熟悉快速排序的并行算法 3、实现快速排序的并行算法 二.实验环境及软件 硬件环境: 。 。 。 ,OS: ,软件工具: VC 三.实验内容 1、快速排序的基本思想 2、快速排序算法的性能 3、快速排序算法并行化 四.实验代码和结果 实验代码: //bingxingpaixu.cpp: 定义控制台应用程序的入口点。 #include"stdafx.h" #include #include #include #include #include"omp.h" usingnamespacestd; //intcount=0; voidswap(int&a,int&b)// { inttmp; tmp=a; a=b; b=tmp; } voidquicksort(int*A,intl,intu) { inti,m,k; if(l>=u)return; m=l; for(i=l+1;i<=u;i++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多核 程序设计 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)