Amdahl 定律

基本思想 当我们加速系统中某一部分时,整体性能的提升取决于可加速部分在原系统中的占比 $\alpha$ 和加速倍数 $k$。即被优化部分必须足够大且快,才能整体显著加速。 公式推导 程序总时间: $$ T_{old} $$ 可优化部分: $$ \alpha T_{old} $$ 优化后这部分时间: $$ \frac{\alpha T_{old}}{k} $$ 新的总时间: $$ T_{new} = (1-\alpha)T_{old} + \frac{\alpha T_{old}}{k} = T_{old}\big[(1-\alpha) + \frac{\alpha}{k}\big] $$ 加速比: $$ S = \frac{T_{old}}{T_{new}} = \frac{1}{(1-\alpha)+\alpha/k} $$ 如果 𝑘 趋向于 ∞ 时,这部分几乎不花费时间: $$ S_{\infty} = \frac{1}{1-\alpha} $$ 例 当 $\alpha = 0.6$,$k=3$ 时: $$ S = \frac{1}{0.4+0.6/3} = 1.67\times $$ 得出:即使当 60% 的部分提速三倍,整体只快了 1.67 倍。 所以,整体加速受限于未优化部分,优化要尽可能覆盖大比例的系统。 ...

八月 25, 2025 · 林墨瀚

并发和并行

背景知识:线程与进程 在计算机的发展中,有两个持续的追求:让计算机能做更多事情和让计算机运行的更快。这两个目标都可以通过让 CPU 同时执行多个任务来实现。于是衍生出了两个概念: 并发(Concurrency):系统中存在多个同时进行的活动。 并行(Parallelism):利用并发来提高系统运行速度。 并行可以在计算机的多个层次上体现,以下从高到低说明三种类型。 并行和并发的形式 线程级并发(Thread-Level Concurren) 线程级并发基于进程的概念,可以让多个控制流同时执行。 时间共享(time-sharing):20 世纪 60 年代,出现了时间共享系统,计算机通过快速上下文切换实现模拟并发执行。 Categorizing different processor configurations. 单处理器系统(Uniprocessor):通过时间共享实现模拟并发。 多处理器系统(Multiprocessor):多个 CPU(核心)由操作系统统一控制,可实现真正的并行。 多核处理器(Multi-core):在同一颗芯片上集成多个 CPU 核心,每个核心有独立的 L1、L2,共享 L3 和 RAM。 超线程技术 / 同时多线程(Hyperthreading/Simultaneous Multi-Threading):单个 CPU(核心)可以同时执行多个线程,利用空闲资源提高性能.如 AMD RYZEN 9 9950X 的 16 核 CPU 可以同时执行 32 个线程。 Multi-core processor organization. 指令级并行 了解指令级并行,需要先了解几个和 CPU 时钟有关的概念。 CPU 时钟(Clock):CPU时钟是中央处理器自带的计时单元,其基本工作单位为时钟周期,即处理器执行操作的最小时间单位。 时钟周期(Clock Cycle):时钟频率的倒数,是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU 仅完成一个最基本的动作。 时钟频率 / 时钟速度(Clock Frequency / Clock Rate):CPU 每秒能完成的时钟周期数,单位为 Hz、GHz。决定 CPU 执行指令的速度。时钟频率越高,理论上 CPU 执行指令越快。 时钟周期时间= 1 时钟频率 ...

八月 22, 2025 · 林墨瀚

线程与进程

注:本片文章讨论的“线程”,是软件线程,而不是硬件线程 进程 定义 关于进程,CSAPP 给出的定义是: A process is the operating system’s abstraction for a running program. It consists of the program code, its current activity (program counter and registers), and the process’s resources (memory, files, etc.). 这一段比较难懂,我们来剖析定义: A process is the operating system’s abstraction for a running program. 进程是操作系统对正在运行的程序的抽象。 理解这句话,我们先来理解什么是“正在运行的程序”。 程序只是在 ROM 里的一堆数据和指令。 而进程就是程序被操作系统加载到 ROM 中开始执行的状态。 It consists of the program code, its current activity, and the process’s resources. 进程包含程序代码、执行状态和资源。 执行状态包括 CPU 寄存器、PC、SP 等。 ...

八月 21, 2025 · 林墨瀚

Ubuntu Server 24.04 + Nextcloud 安装食用指北

因为新电脑到手,陪伴了我五年的第一台个人电脑终于从一线退役了。不过退役不等于闲置,正好想起之前折腾过的 Nextcloud。虽然这台电脑性能有点差,但拿来做个私有云服务器还是绰绰有余的。 Step 1:安装 Ubuntu Server 24.04 因为熟悉 Ubuntu,就直接选它了。 首先从 Ubuntu 官网 下载服务器版本镜像。 (我这里用虚拟机重现安装过程) 语言选择英语,无需多言。 键盘布局默认即可。 如果没有特别需求,不建议选“最小安装”。推荐勾选安装第三方驱动,可以省去后续手动装驱动的麻烦。 实体机安装建议使用有线网,或手机通过 USB 共享网络。 代理地址一般不需要配置。 系统会自动查找最近的镜像源。 硬盘选择默认即可,如果有多块硬盘要注意选对目标盘。 建议给根分区(/)多分点空间,不然装东西容易捉襟见肘。 我另外还分了个 /home 分区。 (分区时,输入一个很大的数字即可分配剩余所有空间) 接着继续即可。 设置账户和密码。 这一步……广告时间? 我的 笔记本 服务器长期放角落,所以选上安装 SSH,方便远程登录。 没有特别需要的服务,直接跳过。 耐心等待安装过程结束。 看到提示重启就说明安装完成! Step 2:配置静态 IP 运行以下命令查看网卡配置文件名: ls /etc/netplan 比如我的文件是 50-cloud-init.yaml,接着编辑它: sudo vim /etc/netplan/50-cloud-init.yaml ...

七月 8, 2025 · 林墨瀚

进制转换

日常生活中我们使用十进制(0-9),但在计算机领域中,二进制(0-1)、八进制(0-7)和十六进制(0-9, A-F)更为常见。进制转换的核心是通过数学运算在不同基数(Base)之间转换数的表示形式。理解这一原理不仅是计算机科学的基础,也是编程、网络通信甚至密码学的必备技能。 为什么学习进制转换? 考试需求 信息学竞赛(如CSP、NOI)中频繁出现进制转换题目。例如,2024年山东CSP-J第一轮测试中便有一道关于二进制与十六进制转换的单选题。 计算机原理基础 计算机硬件基于二进制逻辑运行,而八进制、十六进制常用于简化二进制的表示(如内存地址、机器指令)。 编程实践 编程中常需处理不同进制的数据(如Python的bin()、hex()函数,C/C++的格式化输出)。 实际应用场景 计算机系统:二进制用于硬件设计,十六进制简化调试(如内存地址显示为0x1A3F)。 网络与编码:IPv6地址使用十六进制(如2001:0db8::ff00),ASCII码用十进制或十六进制表示字符。 密码学:大数运算(如RSA密钥)常以十六进制存储。 装逼 进制转换的核心原理 一、进制的基本概念 基数(Base):进制使用的符号数量。 十进制(Base 10):0-9 二进制(Base 2):0-1 十六进制(Base 16):0-9 + A-F(A=10, B=11, …, F=15) 权值(Positional Value) 每一位数字的值由其位置决定,计算公式为: 数值 ...

三月 28, 2025 · 林墨瀚