资源描述:
《多核架构及编程技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《多核架构及编程技术》设计报告基于OpenMP的二维方阵相乘及基于IPP的函数DFT及反变换学院:电子信息学院专业:通信工程学号:2011301200237姓名:叶子童指导老师:谢银波时间:2013年6月基于OpenMP的二维方阵相乘姓名:叶子童专业:通信工程学号:2011301200237指导教师:谢银波[设计原理]声明3个800阶的矩阵,用srand函数对A,B矩阵随机赋值,在主程序中用3个for循环来进行计算,用OpenMP实现循环并行化,用clock()函数统计运算时间并输出时间及C矩阵
2、。[主要功能]计算2个随机生成的800阶二维矩阵相乘的结果,统计运算时间并输出结果矩阵。[设计的主要内容]实验代码为:#include"stdafx.h"#include#include#include"stdlib.h"#include#includeinta[800][800],b[800][800],c[800][800];intmain(){inti,j,t,k;doubleduration;clock_tstart,
3、finish;for(inti=0;i<800;i++)for(intj=0;j<800;j++)a[i][j]=rand()%100;//随机产生-100的随机整数for(inti=0;i<800;i++)for(intj=0;j<800;j++)b[i][j]=rand()%100;start=clock();#pragmaompparallelshared(a,b,c)private(i,j,k)#pragmaompforschedule(dynamic)//循环动态分割成大小为chunk
4、的块,动态分割给线程for(i=0;i<800;i++){for(j=0;j<800;j++){c[i][j]=0;for(k=0;k<800;k++){c[i][j]+=a[i][k]*b[k][j];}}}printf("Timetodothecalculateis");finish=clock();duration=(double)(finish-start)/CLOCKS_PER_SEC;printf("%2.6fseconds",duration);Sleep(2000);for(
5、i=0;i<800;i++){for(j=0;j<800;j++){printf("%d",c[i][j]);}printf("");}return0;}输出的运算时间为3.483s。基于IPP的函数DFT及反DFT变换[设计原理]用DFT_RToC_32f32fc(Ipp32f*pSrc,Ipp32fc*pDst,intlen)函数实现DFT,用DFTInv_CToR_32f32fc(Ipp32f*pSrc2,Ipp32fc*pDst,intlen)实现IDFT,在主程序中用ippsVec
6、torJaehne_32f(pSrc,len,1.0);产生函数y=
7、sin(ex)
8、,直接调用2个函数进行运算,用spview显示图像。[主要功能]求函数y=
9、sin(ex)
10、在区间(0—5120)做单位采样后的DFT及IDFT变换结果,并输出图像。[设计的主要内容]实验代码为:#include"stdafx.h"#include"ipp.h"#include"tools.h"#include"stdio.h"#include"math.h"#include"time.h"voidDFT_RT
11、oC_32f32fc(Ipp32f*pSrc,Ipp32fc*pDst,intlen){IppsDFTSpec_R_32f*pDFTSpec;ippsDFTInitAlloc_R_32f(&pDFTSpec,len,IPP_FFT_DIV_INV_BY_N,ippAlgHintFast);ippsDFTFwd_RToCCS_32f(pSrc,(Ipp32f*)pDst,pDFTSpec,0);ippsConjCcs_32fc_I(pDst,len);ippsDFTFree_R_32f(pDFTS
12、pec);}voidDFTInv_CToR_32f32fc(Ipp32f*pSrc2,Ipp32fc*pDst,intlen){IppsDFTSpec_R_32f*pDFTSpec;ippsDFTInitAlloc_R_32f(&pDFTSpec,len,IPP_FFT_DIV_INV_BY_N,ippAlgHintFast);ippsDFTInv_CCSToR_32f((Ipp32f*)pDst,pSrc2,pDFTSpec,0);ippsConjCcs_32fc_I(pDst,len);ip