并行编程报告.doc

上传人:飞****9 文档编号:134505977 上传时间:2020-06-05 格式:DOC 页数:18 大小:530KB
返回 下载 相关 举报
并行编程报告.doc_第1页
第1页 / 共18页
并行编程报告.doc_第2页
第2页 / 共18页
并行编程报告.doc_第3页
第3页 / 共18页
并行编程报告.doc_第4页
第4页 / 共18页
并行编程报告.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《并行编程报告.doc》由会员分享,可在线阅读,更多相关《并行编程报告.doc(18页珍藏版)》请在金锄头文库上搜索。

1、并 行 编 程 报 告课程名称: 并行编程原理 专业班级: 物联网1102 班 学号 : U201114483 学生姓名: 陈炳良 指导教师: 金海 报告日期: 2014-6-11 计算机科学与技术学院目录实验一:利用 pthread 并行实现矩阵的乘法运算.3实验目的.3实验概述.3实验结果.3实验代码.5实验总结.9实验二:使用并行方法优化 K-means 算法 .10实验目的.10实验概述.10实验结果.10实验代码. .11实验总结. .18实验一:利用 pthread 并行实现矩阵的乘法运算实验目的 该实验旨在让学生掌握利用 pthread 进行并行程序设计和性能优化的基本原理和方法

2、,了解并行程序设计中数据划分和任务划分的基本方法,并能够利用pthread 实现矩阵的乘法运算的并行算法,然后对程序执行结果进行简单分析和总结。具体包括:利用 for 循环编写串行的矩阵乘法运算;熟悉 pthread 进行线程创建、管理和销毁的基本原理和方法;利用 pthread 对上述串行的矩阵乘法运算加以改造;通过调整数据划分和任务划分的粒度(改变工作线程的数目),测试并行程序的执行效率;对实验结果进行总结和分析。实验概述使用 pThread 完成这项工作。创建一个新的线程:int pthread_create( pthread_t *thread,const pthread_attr_t

3、 *attr, void *(*func) (void *), void *arg);thread 表示线程 ID,与线程中的 pid 概念类似attr 表示设定线程的属性,可以暂时不用考虑func 表示新创建的线程会从这个函数指针处开始运行arg 表示这个函数的参数指针返回值为 0 代表成功,其他值为错误编号。主进程等待线程结束: int pthread_join( pthread_t thread, void *retval );thread 表示线程 ID,与线程中的 pid 概念类似retval 用于存储等待线程的返回值两个矩阵相乘: 一个 m 行 n 列的矩阵与一个 n 行 p 列的

4、矩阵可以相乘,得到的结果是一个m 行 p 列的矩阵,其中的第 i 行第 j 列位置上的数为第一个矩阵第 i 行上的 n 个数与第二个矩阵第 j 列上的 n 个数对应相乘后所得的 n 个乘积之和。实验结果实验随机产生的矩阵 B 的数据并行以及串行计算时间对比实验代码1. 并行计算矩阵相乘代码:#include#include#include#include#include#include /*定义矩阵中元素的上限,避免相乘后溢出*/#define RANGE 150/*矩阵A有M行N列,矩阵B有N行M列*/#define M 200#define N 300int matrixAMN;int m

5、atrixBNM;int arrMMN;int resMM=0;void *func(void *arg);void put();void *func(void *arg)/每个子线程要完成的任务 int k=*(int *)arg; int i,j; for(i=0;iM;i+) for(j=0;jM;j+) arrijk=matrixAik*matrixBkj; pthread_exit(NULL);main() /随即产生两个矩阵 int i,j,k; srand(unsigned)time(NULL); for(i=0;iM;i+) for(j=0;jN;j+) matrixAij =

6、 rand()%RANGE; for(i=0;iN;i+) for(j=0;jM;j+) matrixBij = rand()%RANGE; clock_t start=clock();/开始计时 pthread_t tidsN; for(i=0;iN;i+) if(pthread_create(&tidsi,NULL,func,(void *)&i) /产生线程,去完成矩阵相乘的部分工作量 perror(pthread_create); exit(1); for(i=0;iN;i+) pthread_join(tidsi,NULL);/等待所有的子线程计算结束 for(i=0;iM;i+)

7、/合。 for(j=0;jM;j+) for(k=0;kN;k+) resij+=arrijk; clock_t finish=clock();/结束计算 printf(并行计算用时%.2f秒n,(long)(finish-start)/1E6); put(); exit(0);void put() FILE *file1,*file2,*file3; if(file1=fopen(matrixA,wt)=NULL) perror(fopen); exit(1); if(file2=fopen(matrixB,wt)=NULL) perror(fopen); exit(1); if(file3

8、=fopen(res,wt)=NULL) perror(fopen); exit(1); int i,j,k; for(i=0;iM;i+) for(j=0;jN;j+) fprintf(file1,%-8d,matrixAij); fprintf(file1,n); fclose(file1); for(i=0;iN;i+) for(j=0;jM;j+) fprintf(file2,%-8d,matrixBij); fprintf(file2,n); fclose(file2); for(i=0;iM;i+) for(j=0;jM;j+) fprintf(file3,%-8d,resij);

9、 fprintf(file3,n); fclose(file3);2. 串行计算矩阵相乘代码:#include#include#include#include#include#include /*定义矩阵中元素的上限,避免相乘后溢出*/#define RANGE 150/*矩阵A有M行N列,矩阵B有N行M列*/#define M 200#define N 300int matrixAMN;int matrixBNM;int arrMMN;int resMM=0;void *func(void *arg);void put();main() /随即产生两个矩阵 int i,j,k; srand(unsigned)time(NULL); for(i=0;iM;i+) for(j=0;jN;j+) matrixAij = rand()%RANGE; for(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号