Amiriox's Storage

Declaration does not declare anything.

amiriox@terminal: ~/journey
$ whoami > /dev/null ## Tutorial TLDR $ tldr amiriox 折鸦/折鸦夜明け前/無暝; Amiriox Makinohara > 极端社恐, 所以线上线下基本上是两个人 > 计算机科学狂热爱好者, OS/C++/Rust, Vim 党 > 并非 geek, 并非 nerd, 找不到可以定义自己的标签, 也因此常常觉得没有归属感 > 大多数时候情绪低落会显得比较冷漠, 放置一会即可 $ vim ~/anime.rs const anime_arr : [anime; 10] = [末日三问, 虚构推理, 魔女之旅, 四叠半时光机, 浪客剑心, 葬送的芙莉莲, 我心危, 比翼之吻, 孤独摇滚, GBC]; // 轻度看番, 按看完的时间排序 -- INSERT -- 1, 1 All # cat ~/hobbies.md * 游戏: 空洞骑士/只狼:影逝二度/怪物猎人/赛博朋克2077/明日方舟暂退坑但仍然关注 * 听音乐: * J-POP: 可惜夜/夜鹿/majiko/Reol/Aimer/花谱/结束乐队( * Vocaloid: 洛天依/诗岸 * R&B: 陶喆/王力宏 * 摇滚: 草东/南青 * 欧美: 梦龙/林肯公园/烟鬼/共和时代/AJR * 其他类型: 后朋, Future Bass 风格的 EDM, Lofi & Chill Beats * 正在培养的爱好: 板绘/像素画/摄影/文学/戏剧 ## 不断 refactor 的灵魂 $ objdump -s -j .rodata /usr/bin/amiriox_soul | grep -oP '\s\K[^\0]*' 0x00401000 保持必要的力量与清醒, 去努力维持您自己的宁静与尊严 0x0040104C 水利万物而不争,故万物莫能与之争 0x0040107B He who has a why to live can bear almost any how.

此文章的 撰写时间 可能有误

又到了开心的周末!

CSAPP Today:

  1. Amdahl’s law

    • \(Amdahl\) 定律: 设一个操作原来需要 \(T_{old}\) 的时间执行, 现在我们对其\(a\)的部分(即 \(\text{总部分}\times\text{a}\) 这部分进行\(1/k\)的优化(原来这部分 \(T\) 时间可以执行完, 现在加速到了 \(T/k\) ), 则
      • 没有加速的部分所需时间: \((1-a)\times T_{old}\)
      • 加速的部分所需时间: \((a\times T_{old})/k\)

    所以总体加速后的时间为 \[T_{new}=(1-a)\times T_{old} + (a\times T_{old})/k\] 所以加速比\(S=T_{old}/T_{new}\)就是

    \[S=\frac{T_{old}}{T_{new}}=\frac{T_{old}}{(1-a)\times T_{old} + (a\times T_{old})/k}=\frac{1}{(1-a)+a/k}\]

    常见的表示方法是用算出的加速比后加上一个”\(\times\)“,我们对 \(60\%\) 的部分进行优化, 这部分执行时间到了原来的 \(1/3\) , 则 \(a=0.6, k=3\) ,带入公式得出 \(S=1.67\) , 则加速比就是\(1.67 \times\), 读做”1.67倍”.

    • \(k\) 趋向于 \(\infty\) 时, 这部分时间可以忽略不计, 于是就有 \[S_{\infty}=\frac{1}{(1-a)}\] 即使 \(60\%\) 的系统可以加速到可以忽略时间的程度, 总体加速比也只有 \(2.5 \times\), 这体现了amdahl定律的一个重要思想: > 只有提升了系统的大部分, 才能更好的提升整个系统

    待更新, 先吃个饭

  2. 并行/并发

    • 并发是指同时处理多个活动
    • 并行是指通过并发来加速系统
      1. 线程级并发
        • 最初的系统并不是完全意义上的同时操作, 而是反复切换上下文(反 复 横 跳 上一篇有说上下文, 主要是指当前进程的主存/寄存器文件), 后来多核和超线程出现才有了真正的并发
        • 多核是指把多个CPU搞到一个集成电路板上, 每个CPU叫一个核心(core) 比如我的dell-inspiron 5590是4核心, 就是四个倒霉鬼被焊在电路板上了 (逃, 据工厂主 资本家 说未来他们可以焊接几百的核心到一块板子上
        • 超线程指的是一个核心执行多个线程, 主要也是线程切换实现的, 但是比普通的CPU横跳地更科学, 所以速度也更快, 比如如果这个线程需要一些时间加载一个数据, 那我就切走了 你自己玩, 我去干别的
        • 这就很好解释了为什么我的PC叫”四核心八线程”, 表示有四个核心, 每个核心是一个可以同时执行两个线程(跳板)的超线程核心
        • 现代CPU大多数都是多核多线程核心, 一般他们的结构都是每个核心分别有一个寄存器, 两个L1高速缓存(详见上一篇)和两个L1共用的L2高速缓存, 然后总体上有一个所有核心共用的高速缓存L3, 然后接到总线和主存, 其中每个核心中的两个L1高速缓存分别是数据和指令缓存. 所以4核心8线程的CPU一般来讲有 \(4 \times 3 + 1 = 13\)个高速缓存和\(4 \times 1=4\)个寄存器
      2. 指令级并发
        • 指同时执行多个指令, 这是个比较nb的概念, 之前可能一个指令执行很多个(3~10)时钟周期, 现在通过一个叫”流水线”的东西实现指令级并发, 可以一个时钟周期内执行上百个指令
        • 像上面那样, 一个时钟周期可以处理不止一个指令叫超标量, 大多数PC的CPU都支持这个 不会吧不会吧不会都0202年了还有人的电脑不支持超标量吧
      3. 单指令多数据
        • 比如处理单精度浮点数(float)加法是一个指令, 这叫单指令
        • 同时处理8对float加法, 这叫多数据
        • 这是同时执行的, 也叫SIMD, 不知道具体叫什么, 我猜\(Single\ Instruction\ Multi\ Data\)
        • 有时候cpu会对一些程序自动处理SIMD, 但更好的办法是编译器来解决这些, 比如GCC就支持向量变量

为什么我用中文输入法打出来cpu第一个是川普

阅读全文 »

此文章的 撰写时间 撰写时间 可能有误

继电器|真空管|晶体管

def ‘a new level of abstraction’ [-=>]

晶体管 [=>] 逻辑门(AND/OR/XOR/NOT)[=>] 半加器/全加器 [=>] ALU

晶体管 [=>] 逻辑门(AND/OR/XOR/NOT)[=>] 锁存器/门锁 [=>] 寄存器 + (并列|矩阵)+ 多路复用器 -> SRAM (definition linking to RAM

阅读全文 »

此文章的 撰写时间 撰写日期 绝对有问题

此文章 没有写完

了解Git:

Git是一个版本控制系统. 常用场景如下 ## 场景一: 程序员A写了个功能,但写好后怎么交?直接替换文件?非也 直接git merge master(下面会说) ## 场景二: 开发者A写了一个功能,然后提交到开发环境 开发者B发现开发者A代码里的一个bug,修好后提交到开发环境 开发者B修bug时写出了一个bug,只好返回原来版本(即下面要说的checkout)修bug

总之, git是一个在不断更新产品/修复bug过程中倒腾版本的东西 当然,也可以和github.com或gitee.com等代码托管平台(远程仓库)配合

阅读全文 »

此文章的 撰写时间 撰写日期 绝对有问题

此文章的部分图片可能无法加载。这是因为大概这一版的博客搭建在云服务器上所以图片没有用图床
为什么呢?难道云服务器流量不要钱吗?白嫖图床不好吗?

开新坑了,VSCode: 扩展开发攻略系列主要介绍如何从零开始(不需要Js/TS基础)开发一个VSCode插件

序: 写在前面的废话

由于英语不好谷歌翻译后的官方文档 很迷惑,我就打算自己简单翻翻看 翻一下 顺便加上一些注解

阅读全文 »

此文章的 撰写时间 撰写日期 绝对有问题

此文章的部分图片可能无法加载。这是因为大概这一版的博客搭建在云服务器上所以图片没有用图床
为什么呢?难道云服务器流量不要钱吗?白嫖图床不好吗?

概要

主要借助右键菜单和快捷键讲解一下package.json. 没错我就是标题党

添加右键菜单和快捷键

阅读全文 »

此文章的 撰写时间 可能有误

# CSAPP today: 1. 总线(传递字节)
2. IO桥和I/O设备通过控制器或适配器接入总线
3. CPU中有
* 总线接口
* ALU(逻辑算术单元)
* PC(程序计数器, 任何时刻都指向一条指令的地址), 寄存器文件(L0, 最小最快的存储单元)
CPU有(加载,存储,操作和跳转)操作
5. 可以通过DMA直接存储器存取技术直接交流磁盘和主存
4. 存储器有
* L0 寄存器;
* L1高速缓存;
* L2高速缓存;
* L3高速缓存;
* 主存(一组动态随机访问存储器DRAM的集合);
* 磁盘;
* 分布式文件系统/Web服务器文件;

--- 

从上到下, 每一层都更慢 每字节造价更低, 容量更大    
  1. 操作系统(防止失控程序滥用硬件, 提供统一简单的接口抽象给应用程序), 有四个重要概念:
    • 进程给程序一中独占访问cpu的假象, 多个进程互相跳转就是并发运行, 过程叫上下文切换; 上下文切换保存当前进程的上下文(各种状态 比如主存的内容);
    • 虚拟内存给程序一种独占主存的假象, 通过虚拟地址空间实现, 由上至下依次是:
      • 内核空间(程序不能调用内核空间定义的函数)->
      • 用户栈(比如函数调用栈和递归栈, 随着函数进入增大, 函数返回变小)->
      • 公共库(比如printf函数)->
      • 动态开辟的内存 堆(new运算符或malloc函数,可以变大变小)->
      • 读写数据-(全局变量)->
      • 程序本身的内存(固定的)
    • 文件是一个字节序列, 一切设备 I/O设备都可以看成文件; 通过这个概念可以方便的进行不同系统的操作, 如磁盘内容处理, 这一切通过unix I/O接口实现.

为什么不往下读了? 下面有数学

阅读全文 »
0%