多核程序设计(燕山大学)试卷和答案.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
科目 多核程序设计 班级 姓名 学号 时间 09年 月 燕山大学试卷 -----密------封-------线-------- 共 5页 第 1 页 题号 一 二 三 四 总分 一、选择题(20分) 1.下列不是多核处理器的是 ( B ) INTEL酷睿2 E4500 AMD闪龙3000+ . cell处理器 2.若对于一个给定的应用,用串行算法执行的时间为24秒,用并行算法执行的时间为32秒,则加速比为: ( A ) A.0.75 B.1.33 C.1 3.OpenMP是哪种并行编程环境的代表? ( C ) 消息传递 B.数据并行 C.共享存储 4.针对“降低处理器二分之一的频率,会增加二分之一的功率消耗”的说法,下面的选项中哪个是正确的: A、这个说法是正确的 B、这个说法是错误的 C、对于台式机和服务器, 这个说法是正确的,但对于笔记本电脑,这个说法是错误的 CreateEvent(); 创建线程事件 简述下列Linux多线程程序设计中常用函数的含义( 10分) pthread_create(); 创建线程 pthread_join(); 线程阻塞(同步) pthread_attr_init(); 线程属性初始化 pthread_cancel(); 线程取消 sem_getvalue(); 获得线程信号量值 写出Openmp多线程程序设计中常用指导语句的含义. (10分) #pragma omp parallel for 循环并行化 #pragma omp parallel for firstprivate(val) lastprivate(val) 使一个全局文件作用域的变量在并行域内变成每个线程私有,线程结束后,私有变量变成公有变量。 #pragma omp parallel sections 并行区域编译指导语句 #pragma omp critical(name) 线程临界区及其命名 #pragma omp atomic 原子操作。 常用的并行程序性能优化技术有哪些? (5分) 减少通信量,提高通信粒度 全局通信尽量利用高效集合通信算法 挖掘算法的并行度,减少CPU空闲等待 负载平衡 通信,计算的重叠 通过引入重复计算来减少通信,即以计算换通信 简述多线程机制的优点. (5分) 创建一个线程比创建一个进程的代价要小 线程的切换比进程间的切换代价小 充分利用多处理器 数据共享 快速响应特性 可以是程序更加模块化,减少程序逻辑 四、编程题(15分) 写出蒙特卡洛法求Pi值的多线程并行程序。 #includestdio.h #includepthread.h #includetime.h #includestdlib.h #include sys/time.h #include unistd.h long cs=0; //总循环次数 long count=0; //主线程有效次数 long count_thread=0; //thread线程有效次数 struct timeval start, finish; //定义开始结束时间 double diffsec,diffusec; //thread线程计算量为总数的一半 void thread(void) { int i=0; double x,y; for(i=0;ics/2;i++) { x=(long double)rand()/(long double)RAND_MAX; y=(long double)rand()/(long double)RAND_MAX; if((x*x+y*y)=1) count_thread++; } } //主线程计算量为总数的一半 int main (void) { printf(Please input the number:); scanf(%d,cs); cs=cs*1000000; pthread_t id; int ret; srand( (unsigned)time( NULL ) ); ret=pthread_create(id,NULL,(void *) thread,NULL); //创建thread线程 gettimeofday(start,NULL); //记录开始时间 int i=0; double x,y; for(i=0;ics/2;i++) {

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档