- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)