如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
多核程序设计实验报告Multi-coreProgrammingExperimentReport学生所在学院:里仁学院学生所在班级:学生姓名:学生学号:指导教师:教务处2014年4月PAGE\*MERGEFORMAT-16-实验一Windows多线程编程模块一:基础练习一.实验目的与要求二.实验环境及软件三.实验内容四.实验代码#include<stdio.h>#include<time.h>#include<stdlib.h>#include<omp.h>voidtest(intn){for(inti=0;i<10000;i++){}}intmain(){doubledResult;longlBefore=clock();#pragmaompparallelforfor(inti=0;i<10000;i++)test(i);dResult=(double)(clock()-lBefore);printf("\nTotalTime:%fms.\n",dResult);system("pause");return0;}五.结果分析运行时间是串行的一半。明显降低了时间的消耗。实验二各种同步机制的性能比较一.实验目的与要求二.实验环境及软件三.实验内容以矩阵乘进行并行串行比较四.实验代码和结果实验代码://juzhencheng.cpp:定义控制台应用程序的入口点。#include"stdafx.h"#include<omp.h>#include<stdio.h>#include<time.h>#defineNN2000intA[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<n;i++){t=i+1;for(j=0;j<n;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<n;i++){for(j=0;j<n;j++){C[i][j]=0;for(k=0;k<n;k++){C[i][j]+=A[i][k]*B[k][j];}}}}for(i=0;i<n;i++)for(j=0;j<n;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<n;i++){for(j=0;j<n;j++){C[i][j]=0;for(k=0;k<n;k++){C[i][j]+=A[i][k]*B[k][j];}}}for(i=0;i<n;i++)for(j=0;j<n;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(