网站大量收购闲置独家精品文档,联系QQ:2885784924

多核报告gai多核报告gai.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多核报告gai多核报告gai

《多核架构及编程技术》设计报告综合设计学院: 电子信息学院专业: 电子信息工程学号: 2011301200025姓名: 江燕婷指导老师: 谢银波时 间:2014年5月20号综合设计姓名:江燕婷 专业:电子信息工程学号:2011301200025指导教师:谢银波一、设计原理1.OpenMP是面向共享内存与多分布式共享内存的多处理器多线程并行编程语言,具有良好的可移植性,支持多种编程语言,支持多种平台。基本的OpenMP编译制导语句有:parallel、for、parallel for、sections等,常用的库函数有omp_get_num_threads、omp_get _threads_num、omp_set_num_threads等。2.Intel IPP(integrated performance primitives)即Intel集成性能基元。它具有跨平台和操作系统的通用API,是一个交叉架构的跨平台软件库,提供了大量的库函数功能。Intel IPP中一维信号处理功能主要集中在计算滤波、分析、编码4个方面。Intel IPP提供了很多信号发生函数,可作为信号发生器使用Intel IPP中的频域滤波采用ippsFFT根函数或者ippsDFT根函数。3.使用Intel辅助软件工具可以对多核程序实现调试与性能优化。Intel C++编译器可针对采用C和C++语言编写的应用程序代码进行编译、链接和优化,充分发挥Intel多核处理器的潜能,提高该应用程序的性能。Intel VTune Amplifier可以帮助程序员定位并定性分析程序中与性能有关方面的内容,其主要功能有采样寻找热点问题、提供源代码级的性能问题信息、使用调用曲线图评测查找关键路径等。二、设计要求1、已知二维方阵:A[N] [N]、B[N] [N]、C[N] [N],N=800,C=A×B,采用随机函数srand产生[0-100]的随机整数,给矩阵A,B赋初始值,并计算C的值。要求:① 采用OpenMP进行并行处理;② 统计C矩阵生成所耗费的时间;③ 使用工具进行性能优化,比较优化前后时间差;2、求函数 y=|sin(ex)|在区间(0—5120)做单位采样后的DFT变换结果。要求:① 统计转换时间,并绘图显示C曲线;② 将DFT结果作DFT反变换,比较与原函数的差异;③ 回答是否采用了多线程方法,从什么地方可以得出这一结论?3、采用工具分析以上程序的热点问题及多线程性能情况三、设计内容一已知二维方阵:A[N] [N]、B[N] [N]、C[N] [N],N=800,C=A×B,采用随机函数srand产生[0-100]的随机整数,给矩阵A,B赋初始值,并计算C的值。1.用srand函数产生随机数的方法定义函数:voidsrand(unsigned int seed)srand()用来设置rand()产生随机数时的随机数种子,通常用时间来作为随机数生成器的种子,time的值每时每刻都不同,种子不同,所以产生的随机数也不同。srand(time(NULL))产生一个以当前时间为随机数的种子)rand()%100产生一个0到100的随机整数。需要的头文件为#includestdlib.h。2.使用定时器clock()可记录生成矩阵C所需要的时间。3.遇到的问题:程序编译通过后运行结果出错,如下图所示:图1当N值小于292时可正常运行,无错误提示,说明是由于数组较大(N×N=800×800)引起的。Windows默认的堆栈保留大小为1MB,而int型输出组为32位4字节,3组int[800][800]即为800*800*4*3位,为7680000字节,因此1MB的堆栈保留远远不够,导致运行出错。解决办法有两种,方法一可以直接修改系统保留堆栈大小,在VS2012的项目—属性—配置属性—链接器—所有选项里面的“堆栈保留大小”(单位是字节)修改为8000000即可。方法二是采用动态内存分配,因为动态内存分配用到的是堆段,而堆段是直接存到散碎的内存中而不需要入栈的,所以会避免堆栈过小而溢出的问题,具体见粘贴代码部分。方法一运行显示时间要比方法二时间短,这是由于修改堆栈时内存是固态,是连续的,而动态内存分配需要不断地更改地址,相乘计算所需时间较长。如下图所示:图2 方法一运算结果图3 方法二运算结果报告中均采用修改堆栈大小的程序。5.用OpenMP对程序进行并行处理,对矩阵A与矩阵B的相乘过程用parallel for编译制导语句实现并行化操作。即,#pragma omp parallel for shared(A,B,C) private(i,j,k)相乘计算的for循环体将被两条线程并行执行。并行处理前后的运行结果比较如下图所示:图4 并行处理前图5 并行处理后可见采用O

文档评论(0)

cduutang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档