测试你对多核多线程的认知程度
目前,多核多线程编程已经成为一种趋势,但大部分程序员还没有从串行程序的思维中走出来。即使有些人对多核多线程的概念有所了解,但也是一知半解,写起多核多线程程序来总是束手束脚。
据Intel预测,到2013年CPU将达到256核。掐指头算一算,也就是还有5年的时间,但留给我们程序员的时间却很少了。这不是危言耸听,现实情况确实如此。如果从现在就开始重视这一问题,不断的学习,并加以积累,相信不久的将来,也许你就比别人多了一次机会。
我曾经对周围的朋友做过一次有趣的调查,调查对象都曾有过多线程编码经验,以此来了解大家对多核与多线程的认知程度。当然不可否认,由于自身知识水平的有限,问卷存在一定的片面性。
样例程序:
-
#ifdef__cplusplus
-
extern"C"
- {
-
#endif
-
#include<stdio.h>
-
#include<sys/types.h>
-
#include<sys/time.h>
-
#include<pthread.h>
-
#include<unistd.h>
-
#defineORANGE_MAX_VALUE 1000000
-
#defineAPPLE_MAX_VALUE100000000
-
#defineMSECOND 1000000
-
structapple
- {
-
unsignedlonglonga;
-
unsignedlonglongb;
- };
-
structorange
- {
-
inta[ORANGE_MAX_VALUE];
-
intb[ORANGE_MAX_VALUE];
- };
-
intmain(intargc,constchar*argv[]){
-
-
structappletest;
-
structorangetest1={{0},{0}};
-
unsignedlonglongsum=0,index=0;
-
structtimevaltpstart,tpend;
-
floattimeuse;
- test.a=0;
- test.b=0;
-
- gettimeofday(&tpstart,NULL);
-
for(sum=0;sum<APPLE_MAX_VALUE;sum++)
- {
- test.a+=sum;
- test.b+=sum;
- }
-
for(index=0;index<ORANGE_MAX_VALUE;index++)
- {
- sum=test1.a[index]+test1.b[index];
- }
-
- gettimeofday(&tpend,NULL);
-
- timeuse=MSECOND*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
- timeuse/=MSECOND;
-
printf("mainthread:%x,UsedTime:%f/n",pthread_self(),timeuse);
-
printf("a=%llu,b=%llu,sum=%llu/n",test.a,test.b,sum);
-
return0;
- }
-
#ifdef__cplusplus
- }
-
#endif
假设有一台酷睿2代双核机器,在此机器上对上述程序进行如下优化,您会如何选择呢?
Q1: 您认为样例程序还有优化的空间吗? 如果有,优化后的效率将会提升:
A. 1%~30% B. 30%~50% C. 50%~90% D. 90%以上
Q2: 如果将样例程序修改为两个线程,一个线程用于计算apple的和,另外一个线程计算orange的和,您认为谁的效率会更高?
A. 两线程 B. 单线程(样例程序) C. 不确定
Q3: 基于Q2,再将计算apple的线程拆成两个线程,一个线程用于计算apple a的值(加锁访问),另外一个线程计算apple b的值(加锁访问),第三个线程计算orange的和,您认为谁的效率会更高?
A. 两线程 B. 单线程(样例程序) C. 三线程 D. 不确定
Q4: 基于Q2,在双核CPU系统上,将计算apple的线程绑定到 CPU 0上运行,将计算orange和的线程绑定到 CPU 1上运行,这种方法称为设置CPU亲和力( CPU Affinity ,也叫 CPU 绑定) 您认为谁的效率会更高?
A. 两线程 B. 单线程(样例程序) C. 两线程(CPU绑定) D. 不确定
Q5: 经过分析发现计算orange的和比较快,而计算apple的和比较慢。 基于Q3,将计算apple a的线程和计算orange和的线程绑定到CPU 0上运行,将计算apple b的线程绑定到 CPU 1上运行, 您认为谁的效率会更高?
A. 三线程 B. 单线程(样例程序) C. 三线程(CPU绑定) D. 不确定
Q6: 在Q3中,将程序拆成多线程,需要加锁来访问apple a和b的值,但由于他们访问的是数据结构中的不同属性,也可以不加锁, 此时您认为谁的效率会更高?
A. 加锁访问 B. 不加锁访问 C. 不确定
如果有兴趣的读者,想知道问题的答案,可以看看我的拙作《
利用多核多线程进行程序优化》。
另外一篇文章还在创作过程中,也是针对本文的样例程序进程一系列的优化,效率最终提升了92%。
欢迎大家拍砖!
分享到:
相关推荐
一款基于AI算法的调查问卷:从产品运营,到技术研发全过程深度剖析 .doc
问卷调查平台-小手拍拍问卷调查平台,拥有创新的编辑界面和结果分析界面;支持手机端发布模式。专注于为企业和个人提供问卷表单的创建,发布,管理,收集及分析服务。 二、功能介绍 具体功能如下: 用户前台 1、...
通过编制原始问卷,并对866名中学生进行测试,研究者们探讨了中学生元认知能力的心理结构,并表明所编制的问卷具有较好的信效度。 总结来说,中学生元认知能力的测量对于教育实践具有重要意义。有效的元认知能力...
《Vue实现的在线调查问卷项目》是一个基于Vue.js框架的Web应用程序,主要用于在线问卷调查的制作、发布、收集和统计分析。本资源包括完整的源代码及详细的开发说明,使开发者能够快速上手并完成自定义的在线调查问卷...
limesurvey问卷调查系统使用手册 limesurvey是开源的在线问卷调查系统,广泛应用于学术研究、市场研究、教育评估等领域。本手册旨在为用户提供limesurvey系统的安装、配置、使用和管理等方面的指导。 安装 ...
管理员模块主要实现的功能:1、登录:管理员登录网上问卷调查系统;2、增加调查问卷:管理员增加问卷,并设置开始时间和截止时间;3、增加问卷问题:管理员增加问卷的问题和问题的选择支;4、显示问卷及问题:管理员...
计算机应用基础是现代人必备的一项技能,此调查问卷旨在了解被调查者对于计算机的基本认知、使用情况以及学习目标。从问卷中我们可以提炼出以下几个关键的知识点: 1. **兴趣程度**:调查的第一部分询问被调查者对...
这份“大学生对菜鸟驿站满意度调查问卷”主要关注的是大学生群体对于校园内菜鸟驿站服务的满意程度,涵盖了快递服务的多个方面。以下是对调查问卷中涉及的知识点的详细说明: 1. **满意度调查**:这是一种评估服务...
【市场调查问卷设计】 市场调查问卷设计是进行有效的市场研究和预测的重要工具,它通过收集和分析数据帮助企业了解消费者需求、市场趋势以及产品或服务的满意度。本篇将详细阐述问卷设计的基本概念、类型和结构。 ...
通过第五题的问卷调查结果,可以看出中国大陆的大学生对中国传统文化还是有一定的涉猎。从第六题的调查结果看,当代大学生主要通过课本内容、课外书籍报刊杂志、电视节目、网络信息等途径了解中国传统文化。从这一点...
通过问卷调查,企业能够从年龄、性别、行业等多个维度对消费者进行细分,从而发现不同的消费者群体。了解这些群体的特定需求和偏好,企业可以设计出更有针对性的产品和营销活动,实现精准营销。 市场营销策略的制定...
问卷调查-问卷调查系统-问卷调查系统源码-问卷调查管理系统-问卷调查管理系统java代码-问卷调查系统设计与实现-基于ssm的问卷调查系统-基于Web的问卷调查系统设计与实现-问卷调查网站-问卷调查网站代码-问卷调查平台...
1. **传统节日认知**:问卷调查大学生对春节、元宵节、清明节、端午节、七夕、中秋节、重阳节等传统节日的了解程度,以及他们对这些节日的喜好和重视程度。 2. **信息获取渠道**:大学生了解传统节日主要通过网络、...
淘宝直播对消费者购买决策影响程度的调查问卷
- 这份问卷的目的是了解大庆地区居民对固定移动台的了解程度和需求情况,以便更好地完善当地的通讯网络服务。 - **问题设计**: - “您家里是否使用座机?”、“您的电话业务多么?以什么居多?”等具体问题可以...
【食品饮料行业调味品春节问卷调研系列:海天涪陵认知度最高,对健康概念需求强】 本报告基于东北证券的调味品春节问卷调研,针对244份有效问卷进行了深入分析,揭示了当前消费者在调味品选择上的行为特征与偏好。 ...
问卷调查-问卷调查系统-问卷调查系统源码-问卷调查管理系统-问卷调查管理系统java代码-问卷调查系统设计与实现-基于ssm的问卷调查系统-基于Web的问卷调查系统设计与实现-问卷调查网站-问卷调查网站代码-问卷调查平台...
基于springboot+vue开发的一个调查问卷系统 (源码+数据库),可用于个人学习,本科毕业设计,大作业等。项目经过严格测试,确保可以运行!基本功能: 调查问卷 (1)用户管理:登录、注册 (1)添加、编辑问卷 ...
通过对问卷调查数据的统计分析,揭示了小学生的元认知能力现状,并提出了相应的教学建议。这对于优化数学教学策略、提升学生的学习成效具有指导作用。 此外,研究中也体现了对小学生数学元认知能力培养的重视,指出...
在线问卷调查系统代码 java在线问卷调查系统代码 基于springboot的在线问卷调查系统代码 1、在线问卷调查系统的技术栈、环境、工具、软件: ① 系统环境:Windows/Mac ② 开发语言:Java ③ 框架:SpringBoot ④ ...