您好,欢迎访问三七文档
一、选择(每小题2分,共40分)1.IntelCorei7处理器属于flynn分类法区分那种计算机类型(B)A.SISD单指令流单数据流计算机B.MIMD多指令流多数据流计算机C.SIMD单指令流多数据流计算机D.MISD多指令流单数据计算机2.以不属于线程状态的是(C)A.新建B.运行C.发布D.阻塞3.以下线程状态的转换不可能发生的是(B)A.新建-就绪B.新建-终止C.就绪-运行D.阻塞-就绪4.并行编程模型中属于显式模型的是(A)A.Win32APIB.OpenMPC.TBBD.PVM5.IEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准,这个标准的集合是(A)A.POSIXB.Win32C.LSBD.W3C6.能够在非共享内存系统使用的多核模型是(C)A.Win32APIB.OpenMPC.MPID.TBB7.IntelVtune的主要作用是(A)A.寻找程序热点B.检查堆栈使用C.排除数据竞争D.优化负载均衡8.IntelThreadProfiler主要用于解决何种问题(D)A.寻找程序热点B.检查堆栈使用C.排除数据竞争D.优化负载均衡9.不属于任务分解特点的是(B)A.基于应用的自身特点生成线程执行独立的任务。B.问题的步骤需要同步。C.线程间可异步执行。D.线程访问内存时要保证原子性,避免数据竞争。10.不属于数据分解特点的是(C)A.相同的操作请求不同的数据B.适合执行密集循环计算C.可以避免处理数据竞争的问题D.数据处理可以并行化11.以下软件工程中的场景,适合任务分解的是(B)A.机场使用不同的计算机处理军用和民用航班的信息B.大型软件安装过程中,显示该软件的介绍或教程C.网络游戏公司统计当天用户的平均游戏时间D.使用EditPlus编写代码点击保存时同时生成.bak备份文件12.以下软件工程中的场景,不适合数据分解的是(C)A.分析天文望远镜传回的巨幅照片,发现新的星系。B.股票交易软件分析历史数据,试图找到其中规律C.使用打开较大的MicrosoftWord文章时,用户能马上输入文字D.人口普查统计学龄儿童的人数13.OpenMP的调度策略中,将for循环做不平均分块的是(C)A.staticB.dynamicC.guidedD.runtime14.如果设定Ts表示串行程序在单核上执行的时间,Tp表示在多个核多线程执行的时间,p表示处理器的个数或多核处理器的核数目,关于效率Ep的计算公式是(B)A.Ep=Ts/TpB.Ep=Ts/Tp/pC.Ep=Ts/pD.Ep=Ts*p/Tp15.Win32API编程中创建线程的语句:HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParameter,DWORDdwCreationFlags,LPDWORDlpThreadId);其中lpStartAddress是指:(C)A.在系统中使用方法进程高级设置B.线程堆栈大小C.函数指针,指向实际运行的代码D.线程ID16.事件一般不适用那种情况(D)A.通知计算完成B.通知数据可用C.通知消息就绪D.通知外设状态异常17.不属于OMP对于for循环优化的约束是(D)A.循环语句中的第三个表达式(for循环的步长)必须是整数加或整数减操作,加减的数值必须是一个循环不变量。B.如果比较操作为,=,那么循环变量的值在每次迭代时都必须增加;相反,为,=,那么循环变量的值在每次迭代时都必须减少。C.循环必须是单入口、单出口,循环内不允许有能够到达循环外的跳转语句,循环外不允许有能够进入到循环内的跳转语句。D.必须使用MicrosoftVC++作为编程语言18.如果一个程序的全部(所有的代码)只能串行执行,那么(A)A.增加计算机的处理器数量无济于事B.应该使用OpenMP来优化C.应该使用Win32API来优化D.应该使用任务分解的方法19.线程检查器IntelThreadChecker的主要作用是监控程序执行过程中的线程行为,发现其中存在(A)A.竞争现象线程阻塞线程死锁问题B.C.D.20.以下那种软件使用了线程池技术:A.ApacheHttpdB.MSWordC.360安全卫士D.AutoCAD二、简答(每小题4分,20分)21.同时多线程(SMT)类型的处理器和单芯片多处理器(CMP)的本质区别是什么?CMP的执行核心是相互独立的处理器,有自己的执行单元和体系结构资源。SMT多个逻辑执行核心公用执行单元。22.试述进程和线程的关系(1)进程有独立的地址空间,线程共享进程空间(2)进程通讯使用操作系统原语,而线程使用的是设计语言原语。(3)进程上下文切换是重量级的,而线程是轻量级的。23.关于并行价值可以从哪些方面进行分析?并行代价(经济,资源,人力),资源利用,性能预测24.OpenMP使用三种调度策略:static静态,dynamic动态,guided指导来优化for循环的运行,其中guided策略与dynamic相比有什么特点?优点是什么?guided策略程序一次运行的循环块分块由大到小,dynamic策略则确定。guided策略块的数目一般比较小,减小调度开销。25.简述在Win32API编程中的事件操作中,人工重置事件和自动重置事件的区别。人工重置事件是指使用SetEvent,ResetEvent来激发状态。自动重置事件当时间被SetEnvet激活后等待时间线程中只要有一个返回,系统就会自动将事件设置为为激活状态。三、填空(每小题2分,共20分)程序:读取文本文件计算单词数#includewindows.h#includestdio.h(26)FILE*fd;intTotalEvenWords=0,TotalOddWords=0,TotalWords=0;constintNUMTHREADS=4;intGetNextLine(FILE*f,char*Line){if(fgets(Line,132,f)==NULL)if(feof(f))returnEOF;elsereturn1;}intGetWordAndLetterCount(char*Line){intWord_Count=0,Letter_Count=0;for(inti=0;i132;i++){if((Line[i]!='\0')&&(Line[i]!=0)&&(Line[i]!='\n'))Letter_Count++;else{if(Letter_Count!=0){if(Letter_Count%2){TotalOddWords++;Word_Count++;Letter_Count=0;}else{TotalEvenWords++;Word_Count++;Letter_Count=0;}}if(Line[i]==0)break;}}return(Word_Count);}DWORDWINAPICountWords(LPVOIDarg){BOOLbDone=FALSE;charinLine[132];while(!bDone){bDone=(GetNextLine(fd,inLine)==EOF);if(!bDone){TotalWords+=GetWordAndLetterCount(inLine);}}(27)return0;}intmain(){HANDLEhThread[NUMTHREADS];fd=fopen(InFile1.txt,r);//Openfileforreadfor(inti=0;iNUMTHREADS;i++)hThread[i]=(28)CreateThread(NULL,0,CountWords,NULL,0,NULL);WaitForMultipleObjects(NUMTHREADS,hThread,TRUE,INFINITE);fclose(fd);printf(TotalWords=%8d\n\n,TotalWords);printf(TotalEvenWords=%7d\nTotalOddWords=%7d\n,TotalEvenWords,TotalOddWords);}程序:积分法计算pi#includestdafx.h#includestdio.h#includetime.hlonglongnum_steps=1000000000;doublestep;int_tmain(intargc,_TCHAR*argv[]){clock_tstart,stop;doublex,pi,sum=0.0;inti;step=1./((29)double)num_steps;start=clock();#pragmaompparallelforprivate((30)x)(31)reduction(+:sum)for(i=0;inum_steps;i++){x=(i+.5)*step;sum=sum+4.0/(1.+x*x);}pi=sum*step;stop=clock();printf(ThevalueofPIis%15.12f\n,pi);printf(ThetimetocalculatePIwas%(32)fseconds\n,((double)(stop-start)/1000.0));return0;}程序,输入文件为一系列的单精度浮点数,找出连续4个浮点数乘积最大的情况,输出首单元序号#includestdafx.h#includestdio.h#includestdlib.h#includeconio.h#includewindows.h#includesys/stat.h#defineNUM_THREADS2HANDLE*threadHandles;intnum,index=0;float*farray,product=0;CRITICAL_SECTIONgCS;DWORDWINAPIcomp(LPVOIDpArg){floatproduct1,productmax;inti,part,indexfirst;part=*((int*)pArg);indexfirst=part;for(i=part;inum-3;i=i+NUM_THREADS){product1=farray[i]*farray[i+1]*farray[i+2]*farray[i+3];if(i==part)productmax=product1;else{if(product1productmax){productmax=product1;indexfirst=i;}}}(33)EnterCriticalSection(&gCS);if(productproductmax){product=productmax;index=indexfirst;}LeaveCriticalSection(&gCS);return0;}intmain(intargc,char*argv[]){structstatbuf;threadHandles=new(34)HANDLE[NUM_THREADS];inti;intarraynum[NUM_THREADS];/****************读取文件内容****************/if(stat(argv[1],&buf))//getthefilesize{exit(0);}num=buf.st_size/sizeof(float);farray=(float*)malloc(buf.st_size);FILE*fp=(35)fopen(argv[1],rb);fread(farray,sizeof(float),num,fp);fclose(fp);/****************
本文标题:多核编程-考前复习
链接地址:https://www.777doc.com/doc-2546554 .html