后摩尔定律时代,什么将推动计算机性能优化的发展?

在摩尔定律时代,每两年芯片上的晶体管数量就会翻一番,这一看似不可避免的趋势被称为摩尔定律,它极大地促进了计算机性能的提高。然而,硅基晶体管不可能一直小下去,半导体晶体管的微型化推动了计算机性能的提升,但是这种提升已经持续了 50 多年。随着微型化接近极限,摩尔定律将走向终结,我们应该探索其他方法来保持性能的增长,这些方向主要包括:软件、算法和硬件架构。

f3545a8fb86d7a6114d8308293985384.png

1

   

如何让代码跑得更快?

我认为主要有 2 个方面

首先要计算机编程语言要适配硬件,现代计算机提供了旨在让代码运行得更快的架构特性。例如:同时执行多个操作的能力,代码可以多核并行执行;缓存的局部性,即计算机在内存中共置数据元素(空间局部性)或最近被访问过数据元素(时间局部性)时能够有效地访问数据元素。为了提高性能,程序需要暴露更多的并行性和局部性、甚至底层指令供上层编程利用。这就需要计算机编程语言充分利用硬件特性,如:如同步多线程、动态电压和频率调整、直接映射缓存和各种专用指令。提供简单而引人注目的抽象,使硬件的红利尽可能被利用。不出意外的话,未来 10 年,特定场景的计算机编程语言将出现井喷式的发展。

然后推行性能工程,简化软件膨胀问题,特别是一些编程语言和底层框架,简化的思想是这样的。假设你是一名程序员,被分配了一个问题 A 需要解决。你可以编写专门的代码直接解决 A,但你可能会注意到相关问题 B 已经得到解决。通过将 A 转换为可以使用 B 的现有代码解决的问题(相当于稍微修改一下 B,使其适配 A),即通过将 A 简化为 B ,你将花费更少的精力来解决 A 问题。

效率低下既可能来自归并本身(将 A 转换为 B ),也可能来自 B 的通用性(B 的解决方案并非专门针对 A 而定制)。但最大的膨胀来自不相干的复合:将 A 归并到 B,将 B 归并到 C,将 C 归并到 D。即使每次归并都能实现令人印象深刻的 80% 开发效率,但两次独立归约的序列只能实现 80% × 80% = 64%。再复合 20 次,效率将低于 1%,膨胀倍数为 100 倍,其效率不敢想象。

因为只考虑了功能的完整性,没有考虑性能,所以这种快速开发完成的代码往往很慢,再加上过去很少有用火焰图、全链路追踪等指标去衡量一段代码是否慢,到底慢在哪里.... 所以为了创造一个可以轻松编写快速代码的世界,程序编写者必须具备性能设计的知识和技能,并且必须大大改进辅助生产力工具。

从抽象角度来看,软件性能工程可以看作是一个涉及单个循环的简单过程,其中衡量指标主要包括耗时和资源占用:

  • (i)测量程序 A 的性能。

  • (ii)对程序 A 进行更改,以生成有望更快的程序 A ′。

  • (iii)测量程序 A ′的性能。

  • (iv)如果 A ′ 优于 A,则设置 A = A ′。

  • (v)如果 A 仍然不够快,则转到 (ii)。

由于摩尔时代多年的简化设计造成的累积膨胀,有很大的机会让程序运行得更快。不幸的是,使用专门的软件直接解决问题 A,需要 A 领域和性能工程方面的专业知识,这使得该过程比简单地修改 B 更昂贵且风险更大,所以解决 A 的最终专用软件通常比将 A 简化为 B 的软件更复杂。

2

   

算法

常规的性能优化的都是时间换空间,比如离线运行,懒加载等,代码运行速度变慢了,资源节约了;空间换时间,比如缓存、多线程等,代码运行速度变快了,同时资源消耗增加了。唯独算法优化,它是凌驾在常规性能优化之上,一个斐波那契数列从递归优化到普通循环,复杂度可以从 O(2^n)次方优化到 O(n)。随着问题规模增加至数十亿或万亿个数据点时,就平均年改进率而言,算法改进的重要性比硬件或摩尔定律重要得多。特别是在拥有大规模数据集的数据分析和机器学习领域,算法改进尤为重要。

3

   

硬件架构

从历史上看,计算机硬件架构师使用越来越多的晶体管来加快串行计算的速度,从而大大增加了处理核心的复杂性,尽管随着时间的推移,性能的提升收益逐渐减少。在后摩尔时代,架构师需要采取相反的策略,专注于硬件精简:使用更少的晶体管和更少的硅片面积来实现硬件功能。我们将看到,硬件精简的主要优势在于为更多电路提供额外的芯片面积,以便并行运行。因此,具有足够并行性的应用程序将获得最大的好处。事实上,对于没有太多并行性的应用程序,硬件的性能已经停滞不前。但在许多新兴应用领域,如机器学习、图形、视频和图像处理、传感计算和信号处理,都存在大量并行性。计算机架构师应该能够设计精简的架构,以便在摩尔定律结束后的许多年里为这些领域和其他领域提供更高的性能。

推荐


性能优化的实践派与学院派


高性能服务器架构设计与调优


原创不易,随手关注或者”在看“,诚挚感谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/940440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文

题目 最少到最多的提示使大型语言模型能够进行复杂的推理 论文地址:https://arxiv.org/abs/2205.10625 摘要 思路链提示在各种自然语言推理任务中表现出色。然而,它在需要解决比提示中显示的示例更难的问题的任务上表现不佳。为了克服这种由易到难的概括…

0101多级nginx代理websocket配置-nginx-web服务器

1. 前言 项目一些信息需要通过站内信主动推动给用户,使用websocket。web服务器选用nginx,但是域名是以前通过阿里云申请的,解析ip也是阿里云的服务器,甲方不希望更换域名。新的系统需要部署在内网服务器,简单拓扑图如…

Mysql8版本的下载安装配置,无痛使用!!!!

mysql8.x版本和msyql5.x版本zip安装的方式大同小异,但是在mysql8.0版本不用手动创建data数据目录,初始化的时候会自动安装的。而且mysql8.0版本性能官方表示比mysql 5.7的快两倍! 可以查看文章看5.7版本的安装 MySql5.7安装、配置最新版_my…

《商业模式2.0图鉴》读书笔记(如何构建创新驱动的商业模式:打破定律与重塑价值)

文章目录 引言一、构建创新商业模式的核心原则二、创新商业模式的构建维度三、商业模式设计的实践工具与方法四、从现状到未来:商业模式的演进路径结论附录标题图 引言 商业模式是企业连接资源与客户的桥梁,是价值创造与捕获的核心框架。随着市场需求和…

【数据结构】数据结构整体大纲

数据结构用来干什么的?很简单,存数据用的。 (这篇文章仅介绍数据结构的大纲,详细讲解放在后面的每一个章节中,逐个击破) 那为什么不直接使用数组、集合来存储呢 ——> 如果有成千上亿条数据呢&#xff…

Flutter组件————FloatingActionButton

FloatingActionButton 是Flutter中的一个组件,通常用于显示一个圆形的按钮,它悬浮在内容之上,旨在吸引用户的注意力,并代表屏幕上的主要动作。这种按钮是Material Design的一部分,通常放置在页面的右下角,但…

python rabbitmq实现简单/持久/广播/组播/topic/rpc消息异步发送可配置Django

windows首先安装rabbitmq 点击参考安装 1、环境介绍 Python 3.10.16 其他通过pip安装的版本(Django、pika、celery这几个必须要有最好版本一致) amqp 5.3.1 asgiref 3.8.1 async-timeout 5.0.1 billiard 4.2.1 celery 5.4.0 …

【Verilog】期末复习

数字逻辑电路分为哪两类?它们各自的特点是什么? 组合逻辑电路:任意时刻的输出仅仅取决于该时刻的输入,而与电路原来的状态无关 没有记忆功能,只有从输入到输出的通路,没有从输出到输入的回路 时序逻辑电路&…

光伏电站无人机巡检都有哪些功能?

焱图慧云光伏智能巡检系统主要依托于先进的无人机技术、传感器技术、图像处理技术和智能分析技术。 一、无人机自主飞行与航迹控制 全自主飞行:无人机能够按照预设的飞行路线自主飞行,完成指定的巡检任务,无需人工干预,大大提高了…

图书馆管理系统(三)基于jquery、ajax

任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面,这里我分别制作了两个网页分别用来借书和还书。此页面,也是通过获取books.txt内容然后添加到表格中,但是借还的操作没有添加到后端中去,只是一个简单的前端操作。…

如何使用 WebAssembly 扩展后端应用

1. WebAssembly 简介 随着互联网的发展,越来越多的应用借助 Javascript 转到了 Web 端,但人们也发现,随着移动互联网的兴起,需要把大量的应用迁移到手机端,随着手端的应用逻辑越来越复杂,Javascript 的解析…

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》已于近日上市,该书由北京大学出版社出版。距离第1版上市已经过去二年半多。本文希望与读者朋友们分享下这本书里面的大致内容。 封面部分 首先是介绍封面部分。 《鸿蒙HarmonyOS应用开发从入门…

Linux -- 线程控制相关的函数

目录 pthread_create -- 创建线程 参数 返回值 代码 -- 不传 args: 编译时带 -lpthread 运行结果 为什么输出混杂? 如何证明两个线程属于同一个进程? 如何证明是两个执行流? 什么是LWP? 代码 -- 传 args&a…

VTK知识学习(26)- 图像基本操作(一)

1、前言 图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息、访问和修改图像像素值、图像显示、图像类型转换等。熟练掌握这些基本操作有助于使用 VTK进行图像处理应用程序的快速开发。 2、图像信息的访问与修改 1)利用vtkIamgeData…

【WPF】把DockPanel的内容生成图像

要在WPF中将一个 DockPanel 的内容生成为图像并保存,可以按照与之前类似的步骤进行,但这次我们将专注于 DockPanel 控件而不是整个窗口。 DockPanel的使用 WPF(Windows Presentation Foundation)中的 DockPanel 是一种布局控件&…

【Linux】处理用户输入

一、基本介绍 1、如何传递参数 向shell脚本传递数据的最基本方法就是通过命令行参数。如下,这条命令会向test.sh脚本传递10和20这两个参数。 ./test.sh 10 20 2、如何读取参数 bash shell会将所有的命令行参数都指派给称作位置参数(positional parame…

SpringBoot+Vue3实现阿里云视频点播 实现教育网站 在上面上传对应的视频,用户开会员以后才能查看视频

要使用阿里云视频点播(VOD)实现一个教育网站,其中用户需要成为会员后才能查看视频,这个过程包括上传视频、设置权限控制、构建前端播放页面以及确保只有付费会员可以访问视频内容。 1. 视频上传与管理 创建阿里云账号&#xff…

POI-TL插件开发-表格分组插件

POI-TL版本:1.12.2 改造于:LoopRowTableRenderPolicy 模板设计: 分组之前: 分组之后: 代码实现: public class LoopRowGroupTableRenderPolicy implements RenderPolicy {private String prefix;privat…

发送webhook到飞书机器人

发送webhook到飞书机器人 参考链接 自定义机器人使用指南 创建自定义机器人 邀请自定义机器人进群。 进入目标群组,在群组右上角点击更多按钮,并点击 设置。 在右侧 设置 界面,点击 群机器人。 在 群机器人 界面点击 添加机器人。 在 添…

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器,用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…