燕山大学试卷密封线共6页第1页科目多核程序设计班级姓名学号时间09年月燕山大学试卷-----密------封-------线--------共5页第1页题号一二三四总分一、选择题(20分)1.下列不是多核处理器的是(B)A.INTEL酷睿2E4500B.AMD闪龙3000+C..cell处理器2.若对于一个给定的应用,用串行算法执行的时间为24秒,用并行算法执行的时间为32秒,则加速比为:(A)A.0.75B.1.33C.13.OpenMP是哪种并行编程环境的代表?(C)A.消息传递B.数据并行C.共享存储4.针对“降低处理器二分之一的频率,会增加二分之一的功率消耗”的说法,下面的选项中哪个是正确的:(B)A、这个说法是正确的B、这个说法是错误的C、对于台式机和服务器,这个说法是正确的,但对于笔记本电脑,这个说法是错误的5.下面是线程创建函数,其中线程函数定义参数是:(A)HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,SIZE_TdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDIpParameter,DWORDdwCreationFlags,LPDWORDIpThreadId,);A.lpParamenterB.lpStartSddressC.lpThreadAttributes燕山大学试卷密封线共6页第2页二、填空题(20分)1并行计算机的两个最主要的组成部分是计算节点和节点间的通信与动作机制2.按计算内核的对等与否,CMP可分为同构多核和异构多核多核3.目前比较主流的片上高效通信机制有两种,一种是基于总线的Cache结构,一种是基于片上的互连结构.4.进程具有两个明显的特征,一个是资源特征,另一个是执行特征.5.线程有4个基本状态:就绪、运行、阻塞、终止三、简答题(45分)1.简述什么是cache映射策略及当前的三种cache映射策略(5分).Cache映射策略指的是内存块和cache线之间如何建立相互映射的关系.三种映射策略:直接映射策略,K-路组关联映射策略,全关联映射策略2.简述下列Windows多线程程序设计中常用函数的含义(10分)ResumeThread();被挂起线程的恢复运行TerminateThread();终止线程运行InitializeCriticalSection();初始化线程临界区CreateMutex();创建线程互斥量CreateEvent();燕山大学试卷密封线共6页第3页创建线程事件3.简述下列Linux多线程程序设计中常用函数的含义(10分)pthread_create();创建线程pthread_join();线程阻塞(同步)pthread_attr_init();线程属性初始化pthread_cancel();线程取消sem_getvalue();获得线程信号量值4.写出Openmp多线程程序设计中常用指导语句的含义.(10分)#pragmaompparallelfor循环并行化#pragmaompparallelforfirstprivate(val)lastprivate(val)使一个全局文件作用域的变量在并行域内变成每个线程私有,线程结束后,私有变量变成公有变量。#pragmaompparallelsections并行区域编译指导语句#pragmaompcritical(name)线程临界区及其命名#pragmaompatomic原子操作。5.常用的并行程序性能优化技术有哪些?(5分)减少通信量,提高通信粒度全局通信尽量利用高效集合通信算法挖掘算法的并行度,减少CPU空闲等待负载平衡通信,计算的重叠通过引入重复计算来减少通信,即以计算换通信6.简述多线程机制的优点.(5分)创建一个线程比创建一个进程的代价要小线程的切换比进程间的切换代价小燕山大学试卷密封线共6页第4页充分利用多处理器数据共享快速响应特性可以是程序更加模块化,减少程序逻辑四、编程题(15分)写出蒙特卡洛法求Pi值的多线程并行程序。#includestdio.h#includepthread.h#includetime.h#includestdlib.h#includesys/time.h#includeunistd.hlongcs=0;//总循环次数longcount=0;//主线程有效次数longcount_thread=0;//thread线程有效次数structtimevalstart,finish;//定义开始结束时间doublediffsec,diffusec;//thread线程计算量为总数的一半voidthread(void){inti=0;doublex,y;for(i=0;ics/2;i++){x=(longdouble)rand()/(longdouble)RAND_MAX;y=(longdouble)rand()/(longdouble)RAND_MAX;if((x*x+y*y)=1)count_thread++;}}//主线程计算量为总数的一半intmain(void){printf(Pleaseinputthenumber:);scanf(%d,&cs);cs=cs*1000000;pthread_tid;intret;srand((unsigned)time(NULL));ret=pthread_create(&id,NULL,(void*)thread,NULL);//创建thread线程gettimeofday(&start,NULL);//记录开始时间inti=0;doublex,y;for(i=0;ics/2;i++){x=(longdouble)rand()/(longdouble)RAND_MAX;y=(longdouble)rand()/(longdouble)RAND_MAX;燕山大学试卷密封线共6页第5页if((x*x+y*y)=1)count++;}pthread_join(id,NULL);//两线程同步count+=count_thread;gettimeofday(&finish,NULL);//记录结束时间//计算时间差diffsec=(double)finish.tv_sec-start.tv_sec;diffusec=(double)(finish.tv_usec-start.tv_usec)/(double)1000000;diffsec+=diffusec;//输出结果printf(Costtime=%fsecond\n,diffsec);printf(rooptimes=%d\n,cs);printf(effectivetimes=%d\n,count);printf(pi=%f\n,4*(double)count/(double)cs);return(0);}燕山大学试卷密封线共6页第6页