ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:251.23KB ,
资源ID:19839507      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19839507.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(里仁多核程序设计实验报告文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

里仁多核程序设计实验报告文档格式.docx

1、for(inti=0;i10000;i+) intmain()doubledResult;longlBeforeclock(); #pragmaompparalleltest(i);dResult(double)(clock()-lBefore);printf(nTotalTime:%fms.n,dResult);system(pause);return五. 结果分析运行时间是串行的一半。明显降低了时间的消耗。实验二 各种同步机制的性能比较以矩阵乘进行并行串行比较四. 实验代码和结果实验代码:/ juzhencheng.cpp : 定义控制台应用程序的入口点。#include stdafx.h

2、#include #define NN 2000 int ANNNN, BNNNN;long long CNNNN;void solve(int n, int num_thread) int i, j, t, k, paralleltime, serialtime; clock_t startTime, endTime; long long sum; omp_set_num_threads(num_thread); /-对矩阵A和矩阵B进行初始化- for (i = 0; in; i+) t = i + 1; for (j = 0; j j+) Aij = t+; Bij = 1; /-矩阵乘

3、法并行算法- startTime = clock(); sum = 0;#pragma omp parallel shared(A,B,C) private(i,j,k) #pragma omp for schedule(dynamic) for (i = 0; for (j = 0; Cij = 0; for (k = 0; k k+) Cij += Aik * Bkj; i+) j+) sum += Cij; endTime = clock(); paralleltime = endTime - startTime; printf(矩阵C所有元素和为sum=%lld 并行计算时间time=

4、%dmsn, sum, paralleltime); Cij = 0; for (k = 0; Cij += Aik * Bkj; serialtime = endTime - startTime;矩阵C所有元素和为sum=%lld 串行计算时间time=%dmsn, sum, serialtime);相对加速比为: %d/%dn, serialtime, paralleltime);int _tmain(int argc, _TCHAR* argv) int n, num_thread;请输入矩阵的节数(整数Niostreamusing namespace std;static long n

5、um_steps=1000000000;/定义所分的块数 #define NUM_THREADS 2 /定义所开启的线程数 int _tmain(int argc, _TCHAR* argv) int i; omp_set_num_threads(NUM_THREADS);/开启线程 double x,sum=0.0,pi; clock_t start_time,end_time; double step=1.0/(double)num_steps; /并行- start_time=clock();#pragma omp parallel sections reduction(+:sum) p

6、rivate(x,i) #pragma omp section for (i=omp_get_thread_num();num_steps;i=i+NUM_THREADS) x=(i+0.5)*step; sum=sum+4.0/(1.0+x*x); pi=step*sum; end_time=clock(); coutPi=piendl;并行time=end_time-start_time /串行- sum=0.0; for (i=0;i+) 串行time= system(结果:实验四 多核并行排序实验1、熟悉快速排序的串行算法2、熟悉快速排序的并行算法 3、实现快速排序的并行算法 硬件环境

7、:。,OS:,软件工具:VC1、快速排序的基本思想2、快速排序算法的性能3、快速排序算法并行化/ bingxingpaixu.cpp :#include= u) return; m = l; for (i = l + 1; i = u; if (Ai Al)/*不管是选第一个元素作为pivot还是最后一个作为pivot,假如我们想得到的是从小到大的序列,那么最坏的输入情况就是从大到小的;如果我们想得到从大到小的序列,那个最坏的输入情况就是从小到大的序列*/ swap(A+m, Ai); swap(Al, Am); quicksort(A, l, m - 1); quicksort(A, m +

8、 1, u);void main(int argc, char *argv) omp_set_num_threads(2);/-设置线程数为2,因为是双核的CPU int k = 0, i = 0; int m = 0, n = 0; double cost = 0; int len = 10000; int short_len = len / 2; int B10000, C10000, D5000, E5000;/-将B分为两个小的数组,并行的对他们调用快速排序算法 #pragma omp parallel default(none) shared(B,C,len) private(i)/

9、-这个for循环是并行的 int j = 50000;#pragma omp for len; Bi = j-; Ci = j-; /初始化B,C数组 clock_t begin = clock();/-计时开始点 #pragma omp parallel default(none) shared(B,D,E,short_len) private(i)/-这个for循环是并行的 short_len; i+)/-这个for循环是并行的 Di = Bi;/将B的前5000个数放入D Ei = Bi + 5000;/将B的后5000个数放入E #pragma omp parallel default

10、(none) shared(E,D,short_len) /private(i)-快速排序的并行region #pragma omp parallel sections quicksort(D, 0, short_len - 1);/对D排序 quicksort(E, 0, short_len - 1);/对E排序 for (; k+)/-将D和E进行归并排序放入B里面 if (mshort_len & nshort_len) if (Dn = Em) Bk = Dn; n+; else Bk = Em; m+; if (m = short_len | n = short_len) if (m

11、 = short_len) Bk = Dn - 1; k += 1; break; if (/*m=short_len &*/ nshort_len) int tem = short_len - n; for (int p = 0; ptem; p+) Bk = Dn; n+; k+; else if (/*n=short_len &*/ m int tem = short_len - m; for (int q = 0; q q+) Bk = Em; m+; /-归并算法结束 clock_t end = clock();/-计时结束点 cost = (double)(end - begin); cout 并行时间 cost endl; /串行开始 begin = clock(); quicksort(C, 0, len - 1); end = clock();串行时间 system(封面设计: 贾丽地 址:中国河北省秦皇岛市河北大街438号邮 编:066004电 话:0335-*传 真:网 址:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1