1、实验一 多线程计算 ,性能分析1.1实验内容多线程计算 ,性能分析1.2 实验原理1.3 实现方法编程语言:c+多线程:windows 多线程 thread平台:windows 7600(32bit),Lenovo T400 Laptop,Intel Core 2 Duo P8400 2.26GHz集成开发环境:Visual Studio Team System 2008(32bit)1.4 程序流程图NidxNi 15.014140202 开始设定线程数 设定累加数N创建多线程并计时i=thread_num;i+=threadpSum+=pi(i)i=thread_num;i+=thread
2、pSum+=pi(i)i=thread_num;i+=threadpSum+=pi(i)i=thread_num;i+=threadpSum+=pi(i)线程归约Sum+=pSumn结束计时结束1.5 实验结果线程数 NUM_THREAD=4N Time-cost100 3.14160098692312 3ms1000 3.14159273692313 4ms10000 3.14159265442313 5ms100000 3.14159265359813 25ms1000000 3.14159265358990 82ms1.6 性能分析精度随叠加次数 N 的增大而趋近于 的真实值,计算时间也
3、随之增高;相同的叠加次数下,因为是双核处理器,线程数为 2 时计算性能最高。理论性能提升有极限值,所以不会因为线程的增多而性能无限增强。当线程数很大时,计算时间增加很快。1.7 总结展望第一次编写并行化的程序,对多线程编程有了初步的认识。由于是在 Visual Studio 平台下编程,很多知识是从 Lunix 平台移植过来的,虽然表现形式有少许差别,但核心思想一致。通过学习,对 windows 多线程编程有了一定的掌握。实验二 3PCF 计算多线程实现2.1 实验内容 定义: 点集 D、R。 定义 D 中的点为 aiD,R 中的点为 biR。 距离:r 1、r 2、r 3、err 求: 满足
4、以下条件的三元组(空间中三角形)的数目 ,|a i-bm|=r1err 且|a i-bn|=r2err 且|b m-bn|=r3err 2.2 实验原理对于 D 中每一点 ai,在 R 中找到与之距离为 r1的点集 R,找到与之距离为 r2的点集R。在点集 R与 R中,查找两点间距离为 r3的点组数目。累加。 多线程中将 D 点分组,分别验证符合要求的点组,累加数目。2.3 实现方法编程语言:c+多线程:windows 多线程 thread平台:windows 7600(32bit),Lenovo T400 Laptop,Intel Core 2 Duo P8400 2.26GHz集成开发环境
5、:Visual Studio Team System 2008(32bit)2.4 程序流程图开始设定线程数 设定累加数N创建多线程并计时i=thread_num;i+=thread验证点组符合就累加i=thread_num;i+=thread验证点组符合就累加i=thread_num;i+=thread验证点组符合就累加i=thread_num;i+=thread验证点组符合就累加线程归约Count+=tempSumn结束计时结束2.5 实验结果r1=0.4 r2=0.8 r3=0.7 err=0.2D/R count Time-cost32 3341 0256 1828275 0.2551
6、2 13908434 1.801024 115062333 14.562048 919041742 115.214096 7367826607 1048.492.6 性能分析相同的线程数,点集增大时,计算时间增多;相同的点集,线程增多时,计算时间先减少后增多。这与理论相符,点集增大,计算量随之增加;线程增多,程序并行化提高,但由于计算单元有限,无限制增加线程会提高线程间通信成本,导致计算性能降低。2.7 总结展望此次实验与第一次实验多线程实现方法相同,采用域划分,将相同的任务分配给不同的线程,将计算量均衡化,采用3PCF的基本思想,逐一验证三边,算法效率较低,可以设计新优化算法,利用矩阵乘法快
7、速求出3PCF的结果,待实现。实验三 MPI 实现 Jacobi 迭代3.1 实验内容3.2 实验原理通过 MPI 消息传递,实现并行计算。每个进程根据各自的 Rank 来划分数据域,并进行自己的迭代,覆盖原来的矩阵,进程之间互相通讯传递消息,继续循环迭代矩阵,直到达到迭代次数为止。将 1024*1024 的矩阵初始化,将边界设置为 10,不断进行迭代,可以看出矩阵向中央均衡化的过程,逐渐收敛。3.3 实现方法编程语言:c+多线程:MPI平台:windows 7600(32bit),Lenovo T400 Laptop,Intel Core 2 Duo P8400 2.26GHz集成开发环境:
8、Visual Studio Team System 2008(32bit)3.4 程序流程图YN消息传递 消息传递消息传递开始MPI 初始化 分区Jacobi 迭代分区Jacobi 迭代分区Jacobi 迭代分区Jacobi 迭代覆盖原矩阵结束循环结束分别输出迭代结果3.5 实验结果局部数据截图:3.6 总结展望学习并实践了一种新的并行程序设计方法,掌握应用了 MPI六个基本函数,对 MPI模型有了基本了解。MPI 是一种很好的实现并行计算的方法,并可应用于 Cluster中,适合多台计算机或集群并行计算。由于时间有限,现只实现了 MPI+VC的编程,未来将实现 MPI在 Lunix的应用。实
9、验四 基于 MapRedue 模型的 WordCount 算法4.1 实验内容基于 MapRedue 模型的 WordCount 算法在 Hadoop 上的实现4.2 实验原理将数据源中的 word 和 1 作为 map 函数中的对。map() 生成一个或多个中间结果,以及与 input 相对应的一个 output key。reduce()函数将这些中间结果组合为多个对应于同一 output key 的 final value,将相同word 中的 value 相加,最终的代表 key word 出现了 value 次。将基于 Mapreduce 的 WordCount 并行化,对每个文件分别
10、 Map,然后 Reduce,之后将各个线程的结果最终归约,得到求解。4.3 实现方法编程语言:java平台:双 i7 四核,Ubuntu ,SSH 远程登录4.4 伪代码map(String input_key, String input_value):/ input_key: document name/ input_value: document contentsfor each word w in input_value:EmitIntermediate(w, “1“);reduce(String output_key, Iterator intermediate_values):/
11、output_key: a word/ output_values: a list of countsint result = 0;for each v in intermediate_values:result += ParseInt(v);Emit(AsString(result);4.5 性能分析将 MapReduce 并行化之后,每个线程处理数据域的文档,各自 MapReduce 之后将结果进行归约,得到最终的方案。计算量一定,线程数增多,计算时间先减少后增加,符合理论值。因为计算单元有限,所以超过一定数量后,通信成本过高,程序效率下降。即使有无限个计算单元,由于本身程序的可并行化结构所占比例一定,效率提升有上限。4.6 总结展望了解并实践了 hadoop 的配置,实现了 hadoop 中 MapReduce 的 WordCount 功能。通过实践,对找 对有了一定的心得。MapReduce 的关键是找好 对,这样之后的 Map 和 Reduce 才能顺利进行下去,得到想要的结果。之后有时间计划研究一下X10,并实现相关功能。