调查问卷:测试你对多核多线程的认知程度

考场安排---图的着色原理之运用 考场安排姓名:杨小华 【问题描述】设学校共有n门课,需要进行期末考试,因为不少学生不止选修一门课程,所以不能把同一个学生选修的两门课程安排在同一场次进行考试,问学期的期末考试最少需多少场次考完?(提示:如果两门课被同一个同学选上,则表示这两门课的顶点之间存在一条边)。试设计一算法,当给定一个图时G=(V,E),|V|=n,(Vi,Vj)ЄE,当且仅当有一个同学选了课程i和课 阅读详情
测试你对多核多线程的认知程度


        目前,多核多线程编程已经成为一种趋势,但大部分程序员还没有从串行程序的思维中走出来。即使有些人对多核多线程的概念有所了解,但也是一知半解,写起多核多线程程序来总是束手束脚。

        据Intel预测,到2013年CPU将达到256核。掐指头算一算,也就是还有5年的时间,但留给我们程序员的时间却很少了。这不是危言耸听,现实情况确实如此。如果从现在就开始重视这一问题,不断的学习,并加以积累,相信不久的将来,也许你就比别人多了一次机会。

        我曾经对周围的朋友做过一次有趣的调查,调查对象都曾有过多线程编码经验,以此来了解大家对多核与多线程的认知程度。当然不可否认,由于自身知识水平的有限,问卷存在一定的片面性。

        样例程序:
  1. #ifdef __cplusplus
  2. extern "C"
  3. {
  4. #endif
  5. #include <stdio.h>
  6. #include <sys/types.h>
  7. #include <sys/time.h>
  8. #include <pthread.h>
  9. #include <unistd.h>
  10.     
  11. #define ORANGE_MAX_VALUE       1000000
  12. #define APPLE_MAX_VALUE           100000000
  13. #define MSECOND                         1000000
  14. struct apple
  15. {
  16.     unsigned long long a;
  17.     unsigned long long b;
  18. };

  19. struct orange
  20. {
  21.     int a[ORANGE_MAX_VALUE];
  22.     int b[ORANGE_MAX_VALUE];
  23.     
  24. };

  25. int main (int argc, const char * argv[]) {
  26.     // insert code here...
  27.     struct apple test;
  28.     struct orange test1={{0},{0}};
  29.     
  30.     unsigned long long sum=0,index=0;
  31.     struct timeval tpstart,tpend;
  32.     float  timeuse; 
  33.     
  34.     test.a= 0;
  35.     test.b= 0;
  36.     
  37.     /*get start time*/
  38.     gettimeofday(&tpstart,NULL); 
  39.     
  40.     for(sum=0;sum<APPLE_MAX_VALUE;sum++)
  41.     {
  42.         test.a += sum;
  43.         test.b += sum;
  44.     }
  45.     
  46.     for(index=0;index<ORANGE_MAX_VALUE;index++)
  47.     {
  48.         sum=test1.a[index]+test1.b[index];
  49.     }
  50.     /*get start time*/
  51.     gettimeofday(&tpend,NULL); 
  52.     
  53.     /*calculate time*/
  54.     timeuse=MSECOND*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec; 
  55.     timeuse/=MSECOND; 
  56.     printf("main thread:%x,Used Time:%f/n",pthread_self(),timeuse); 
  57.     
  58.     printf("a = %llu,b = %llu,sum=%llu/n",test.a,test.b,sum);
  59.     
  60.     return 0;
  61. }
  62.     
  63. #ifdef __cplusplus
  64. }
  65. #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%。

         欢迎大家拍砖!



【信息科学与工程学】计算机科学与自动化——第六篇多媒体01 主要参数和算法 参数分类参数名称技术定义典型值范围测量方法优化目标采样参数采样频率每秒采集样本数8-384 kHz设备规格高保真≥48kHz量化参数采样深度每个样本量化位数8-32 bit设备规格高保真≥16bit声道配置声道数量独立音频通道数1-128声道配置参数立体声≥2声道音频格式格式类型音频数据格式PCM, ADPCM, MP3, AAC格式标识按需选择动态范围最大动态范围最大最小声压比40-144 dB声学测试越大越好频率响应频率范围可响应频率范围20-20kHz ±3dB频率扫描20-20kHz平坦信噪比信号噪 阅读详情

相关推荐

【信息科学与工程学】【数据中心】 第二十三篇 DDC网络-满足大规模训练、推理、存储区网络(Roce2组网)-第五篇 跨地域互联(公共服务区和存储区)

大规模智算中心跨区域互联

weixin_49199313的博客 1217

【转】为什么大多数游戏都不做多线程/多核优化?难点是什么?

这个回答非常形象,系统思维的模式。------------------------------------------------------作者:既让链接:https://www.zhihu.com/question/52957429/answer/272333887来源:知乎多核肯定是难的。主要是任务可分解性和结果可预期性。数据类的工作是很容易做到这点的。游戏并不是这种类型。多核、多线程、多g...

m0_37651448的博客 1万+

【信息科学与工程学】【数据中心】 第十五篇 智算中心DaaS数据消费场景02

智算中心DaaS数据共享场景的分级分类是一个复杂的系统工程,需要从技术、安全、合规、治理、运营等多个维度进行综合考虑。本分级分类体系为不同场景下的数据共享提供了详细的指导,包括安全分级、共享模式、技术架构、合规治理等方面。在实施数据共享平台时,应结合自身业务需求、技术能力和资源情况,选择适合的共享模式和实施路径。同时,要高度重视数据安全和隐私保护,采用先进的技术和管理手段,确保数据共享的安全可控。

weixin_49199313的博客 1万+

多线程你了解多少?看完你就全明白了!

什么是程序、进程、线程? 什么是程序? 程序是指令和数据的有序集合,其本身没有任何的运行含义,是一个静态的概念。就像我们写的代码就是程序。 什么是进程(Process)? 进程是操作系统结构的基础,是一次程序的执行,资源分配的基本单位。它是一个动态的概念。我们可以这样理解,一个正在操作系统中运行的exe程序可以理解为一个进程,进程是收操作系统管理的基本运行单元。就像我现在运行的谷歌浏览器、印象笔记他们就是一个进程。 windows中的进程图: linux中的进程图: 什么是线程(Thr

weixin_38007185的博客 3579

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 283

深入理解CCS**.*.*.***07:TI的Code Composer Studio新版本特性

本文还有配套的精品资源,点击获取 简介:CCS . .*. 07是德州仪器(Texas Instruments)发布的Code Composer Studio的一个更新版本。这个版本的Code Composer Studio为开发者提供了丰富的工具集,以支持在TI的微控制器和数字信号处理器上进行嵌入式软件开发和调试。Code Composer...

weixin_35879493的博客 1759

我的专题文章之三------对多核多线程的总结

    我的专题文章之三------对多核多线程的总结 杨小华      从开发第一个基于多线程的项目已经有四个年头了,一路也是跌跌撞撞,不断的更新自己对多核多线程的认知程度,不断的实践,不断的优化和总结。 在这个过程中,写了不少关于多线程的文章,既是总结,也是鞭策自己更加深入的了解。     写的第一篇多线程的文章,是关于编译方面的,当然这篇文章重点在于介绍autoc

极光 1万+

概率论 知识图谱 + 实战案例解析

本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。

weixin_29051193的博客 268

在 Preact 中使用 urql:@urql/preact 的安装、Provider 配置与 useQuery 组合式 GraphQL 数据流实战

urql 是一个高度可定制、可扩展的 GraphQL 客户端,而 `@urql/preact` 是它在 Preact 生态中的官方绑定包。本篇指南将围绕 [packages/preact-urql/README.md](https://link.gitcode.com/i/6b0a789e603319d0bc3939de7ee4b154) 讲解如何在 Preact 应用中安装并接入 urql,重点

gitblog_00731的博客 583

数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现

前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;

‘’ 2万+

Win10 / Win11 启用 Hyper-V 虚拟机详细教程(图文+命令行全攻略)

摘要:本文详细介绍Windows10/11系统启用Hyper-V虚拟化平台的方法,包含专业版/企业版的图形界面和PowerShell命令行操作,以及家庭版通过脚本强制启用的特殊方案。内容涵盖版本支持对比、操作步骤图解、常见问题解答和性能优化建议,帮助开发者快速搭建虚拟化环境进行多系统测试。附微软官方文档参考链接和详细操作示意图。

ElioXu 7083

软考高级-系统架构设计师 知识点整理【万字长文】

操作系统定义:能有效地组织和管理系统中的各种软/硬件资源,合理地组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。操作系统有三个重要的作用第一,管理计算机中运行的程序和分配各种软硬件资源;第二,为用户提供友善的人机界面。第三,为应用程序的开发和运行提供一个高效率的平台。操作系统的4个特征是并发性、共享性、虚拟性和不确定性。所谓信息摘要,就是一段数据的特征信息,当数据发生了改变,信息摘要也会发生改变。

qq8565408的博客 1921

机器人关节电机发热难题:从工程化角度拆解热管理解决方案(下)

摘要:本文系统分析了机器人关节电机与驱动系统的热管理方案,重点解决局部热点问题。针对不同功率场景提出了热管/均热板散热(适用于中小功率)和液冷散热(适用于高功率)的具体实施方案,详细比较了结构参数、材料选择、安装工艺和散热效果。特别强调了电机-驱动协同热管理的重要性,提出"工况联动+热路径共享"的核心理念,包括一体化散热结构设计和动态控制策略。最后介绍了热仿真与测试验证方法,确保方案的有效落地。通过系统级热管理,可显著降低温升(热点区域降温30-60℃),同时优化体积和能耗。

bother3000的博客 3330

软考-系统分析师-备考笔记

根据学习视频和一些资料整理的软考系统分析师考试笔记,2025年下半年通关

提子同学是我 1027

【AI开源】Understand-Anything 完整使用教程(2026最新版)

Understand-Anything是一款基于交互式知识图谱的AI学习与开发平台,能够将代码库转化为可视化知识结构,支持语义搜索、上下文问答和全流程开发。核心功能包括代码知识图谱化、AI辅助学习和多编码代理集成。支持TypeScript/JavaScript、Python等多种语言,要求Node.js 20+和16GB以上内存。提供NPM、Docker和源码三种安装方式,支持增量更新和团队知识共享。与同类产品相比,在交互式图谱、语义搜索和AI集成方面更具优势。适用于代码学习、大型项目维护和团队协作等场景。

与时俱进,开放共享 7230

Java Web 图书管理系统的制作指南

实现对图书信息的增删改查(CRUD)操作。支持用户登录与权限管理。图书借阅与归还功能。系统管理员可以管理用户信息和图书库存。

Xiaoxin的博客 1629

炉边夜话---多核多线程杂谈

炉边夜话---多核多线程杂谈(精简版)多核多线程已经成为当前一个时髦的话题,早在2005年C++大师Herb Sutter就说过免费的午餐已经结束,并发编程的时代已经来临。从接触第一个多线程项目以来,已经是第四个年头了,一直想把这几年的点点滴滴写成文章,让刚接触的人少走弯路,这便是我写这本书的初衷。很早就有了此想法,一是由于自己懒惰,二是业余时间比较少,三是才疏学浅不敢瞎写,所以一直未能成

极光 1万+

SIwave仿真手册——电源完整性仿真之PDN阻抗的提取(四)

(想不到我这个弱鸡的博主有一天也有被催更的时候,看到后台被催的消息,我慌了,赶紧写一篇把。) 文章目录3.1 PDN阻抗的提取3.1.1手动完成PDN阻抗的提取1、创建pin group2、创建端口3、数据文件的清理和检查(参考1.3.4&1.3.5)4、添加电容模型(参考2.2.1)(==这一步很重要==)5、开始仿真6、查看仿真结果3.1.2利用向导工具完成PDN阻抗的提取1、点击图标![在这里插入图片描述](https://img-blog.csdnimg.cn/36d974339ea5449

luohuo9844的博客 1万+

你的变量究竟存储在什么地方?

 你的变量究竟存储在什么地方?作者:杨小华       我相信大家都有过这样的经历,在面试过程中,考官通常会给你一道题目,然后问你某个变量存储在什么地方,在内存中是如何存储的等等一系列问题。不仅仅是在面试中,学校里面的考试也会碰到同样的问题。       如果你还不知道答案,请接着往下看。接下来,我们将在Linux操作系统上,以GCC编译器为例来讲解变量的存储。       在计算

极光 1万+

具身智能中的(VLA)算法与实践——第一讲 基础与概览

本文介绍了视觉-语言-动作(VLA)模型的基础概念及其在AI领域的重要性。VLA模型通过融合多模态数据实现具身智能,使AI系统能感知环境并执行物理动作。文章探讨了大型语言模型(LLMs)和视觉语言模型(VLMs)如何赋能具身智能,包括指令解析、场景理解和动作规划。同时提供了Python、PyTorch/TensorFlow开发环境的详细搭建指南,包含GPU配置建议和测试代码。VLA模型在机器人操作、导航、人机协作等领域具有广泛应用前景,是实现通用人工智能的关键技术。

u012133341的博客 1599

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

通过内核源码看函数调用之前世今生

通过内核源码看函数调用之前世今生                                                                             作者:杨小华栈(Stack):一个有序的积累或堆积                                                         

极光 9534

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

我的专题文章之一 --对变量的总结

我的专题文章之一 --对变量的总结 三篇文章总算完成了。可以说在6月8号就完成了。主要是由于工作的原因,比较忙,贴上来还要排版,所以最后一篇文章放上来的时间晚了点。在我word文档里面有很多箭头,而优快云的Blog里面不支持箭头,所以要花不少时间来排版。之所以要排版,是为了以后自己看的舒服一点,这样才有心情看下去。当我写完这三篇文章之后,自己觉得收获很大。在写这三篇文章的过程

极光 7766

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

盛夏大餐--水煮多线程

深度下潜――多线程篇 作者:杨小华 计算机系统变得越来越复杂,多线程机制给我们带来了能够继续管理它们的希望。――Andrew Koening and Barbara Moo一、      线程的基本概念进程(process)和文件(files)是UNIX/Linux操作系统两个最基本的抽象。进程是处于执行期的程序和它所包含的资源的总和,也就是说一个进程就是处于执行期的程

极光 6293
上一篇: 人月神话中的神话(二)
下一篇: 铁路与多核多线程
normalnotebook
博客等级 码龄24年 647粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值