14 Matching Annotations
  1. May 2023
  2. github.com github.com
    1. llvm-project Public

      LLVM,是一种编译器,用于优化代码。

    1. ubuntu终端窗口切换

      在终端上的任务里的tabs可以看到快捷键。 CTRL+ Pgup

    2. while read -r pid mem cmd; do
      • 因为top命令得到的是按照内存使用大小排序后的结果,所以不需要全遍历该结果,只要某一条cmd使用的内存小于80%,那么剩下的cmd都不需要检查,可以降低cpu消耗。
    1. Tag
      • tag在一般情况下是由硬件自动设置和管理的,不可由软件直接修改。
    2. Intel 大多数处理器的L1 Cache都是32KB,8-Way 组相联,Cache Line 是64 Bytes。

      如果是 2-way组相联或者 4-way组相联,其他不变,会发生啥? 对于4-way组相联场景: * 32KB的可以分成,32KB / 64 = 512条cache line。 * 因为有4way,于是会每一way有 512 / 4 = 128 条 cache line。 * 于是每一路就有 128 * 64 = 8192 bytes的内存,即8kB。 为了方便索引内存地址,tag和offset不变,只有index需要调整。 * inex:内存地址后续的7个bits则是在这一way的是cache line索引,2^7 = 128刚好可以索引128条cache line。 对于 2-way场景以后补充。

    3. 内存

      内存还是缓存?在这里内存已经通过8way的cache line映射到L1 cache,所以这里用内存也是OK的。

    4. 数据就从内存向上,先到L3,再到L2,再到L1,最后到寄存器

      数据在某些场景下需要从磁盘(硬盘)获取,比如数据为加载到内存,系统引导启动过程,数据被修改或者更新等等。 数据在其他一些场景是不需要从磁盘(硬盘)获取,数据已经在程序启动时加载到内存,数据被缓存了。

    5. Intel Core i7-8700K ,是一个6核的CPU,每核上的L1是64KB(数据和指令各32KB),L2 是 256K,L3有2MB(我的苹果电脑是 Intel Core i9-8950HK,和Core i7-8700K的Cache大小一样)

      我的电脑cpu是 intel core i7 12700H,是一个14核的cpu,6个大核和8个小核,每个核上L1数据缓存是48KB,L1指令缓存是32KB,L2是1.25MB,L3为所有核共享,有24MB。 通过查找一手资料(intel官网,本机设备规格)和二手资料(cpuz,chatgpt)对比所得。

    6. L1、L2、L3的越离CPU近就越小,速度也越快,越离CPU远,速度也越慢

      L1、L2、L3的容量越离CPU近就越小。

    1. 将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度
      • 现在pipeline不局限于指令处理过程拆分,只要符合通过多个处理单元并行执行来加速的处理流程都叫做pipeline,类似互联网行业中的高并发。
      • 补充一下计算机指令处理拆分的步骤,包括指令获取,指令解码,指令执行,访问内存,结果回写这几个。
      • 之前在学习NVIDIA的cuda C/C++ stream & concorency(or parallel)时里面也使用了pipeline,它是把stream 跟 concurrency结合起来,把kernel,H2D,D2H这三个执行拆分开执行达到pipeline的目的。可以实现串行,即一级流水线。也可以实现二级、三级、四级甚至更高级别的流水线架构。但并不是流水线级别越高越好,因为流水线之前是有依赖关系的,如何处理不好会导致依赖循环等问题,导致整个流水线失败。因此需要做好流水线的级别和并发之间的平衡。
  3. developer.arm.com developer.arm.com
    1. AMBA
      • amba包含的协议接口有 AMBA CHI、AMBA AXI、AMBA ACE、AMBA AHB、AMBA APB、 AMBA AXI-LITE Stream、AMBA CXS、AMBA DTI、AMBA LTI、AMBA ATB、AMBA LPI、AMBA ATP、AMBA GFB这13种。其中我们现在常用的是AXI、AHB、APB这三种。
    1. 分段模型
      • 分段模型有实模式,保护模式,长模式,虚拟8086模式。
    2. 在分段机制的基础上完成虚拟地址到物理地址的转换过程
      • 分段机制是指把程序(或者叫可执行文件)划分为代码段,bss段,data段.其中代码段只可读,bss段用来保存未初始化的变量,dada段用来保存初始化的全局变量。
    3. 80x86
      • intel公司提供的cpu架构,是一种32位的RISC架构,后来跟amd提出的64位架构合并统称为 x86_64 cpu架构。
      • 除了上面的x86_64 cpu架构外,在pc端或者服务端还有著名的arm v系列架构,包括 v7,v8,v9等等。
      • 80x86目前已经被x86_64架构替代。当前pc端和server端使用的主流架构是x86_64.