跳转至

笔记

Latent Dirichlet Allocation (2003)

简介

该篇论文于2003年发表在“Journal of Machine Learning Research”期刊上,迄今引用次数已超过15000次,可见该论文对后来相关研究工作的影响之大。

首次正式将主题以隐变量的形式引入,形成一个三层贝叶斯模型,并且相比于之前和它最接近的pLSI文本模型,LDA的主题选取不再受训练集文本内容的束缚,是一个完全非监督且依据多个主题进行聚类的机器学习、数据挖掘领域的算法。

现实意义

在推荐系统的研究中,利用评论文本信息来提升推荐性能是近3-4年的一个热门研究领域,LDA及其改良的文本模型则是用来挖掘评论文本的主要方式。

早期文本模型

  1. TF-IDF文本模型(矩阵表示)
  2. LSI文本模型
  3. 第一个子矩阵代表了词与主题的关系,第二个子矩阵代表了主题本身,第三个子矩阵代表了主题与文档之间的关系。

LDA的建模介绍

  1. 用来训练文档的是基本块
  2. 每条指令说word
  3. 柏松分布

用变分推理求解LDA模型的参数

最重要的是LDA模型的两个参数,确定了后能在未知的文本里提取主题

Gensim简介、LDA编程实现、LDA主题提取效果图展示

  1. 统计词语出现的频率
  2. 为什么例子里的没有迭代次数呢?
  3. 调研为什么要pytorch tenceflow

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://zhuanlan.zhihu.com/p/28777266

https://blog.csdn.net/fish0058/article/details/25075591

https://blog.csdn.net/anqiu4023/article/details/102275607

https://pypi.python.org/pypi/lda

http://scikit-learn.org/dev/modules/generated/sklearn.decomposition.LatentDirichletAllocation.html#sklearn.decomposition.LatentDirichletAllocation

uops.info: Characterizing Latency, Throughput, and Port Usage of Instructions on Intel Microarchitectures (2019)

摘要

现代计算机微架构是最复杂的几个人造系统。在上面预测,解释和优化软件是困难的。我们需要其运行行为的可信模型,但是事实是稀缺的。

本文设计和实现了一种构建X86指令的延迟,吞吐量和端口使用的可信模型。并仔细探究了这三个指标的定义。尤其是latency的值在不同的操作数情况时是如何确定的。

同时其结果也是机器可读的。并且对已有的所有Intel架构都进行了测试。

官网有结果 http://www.uops.info

We also plan to release the source code of our tool as open source

1 简介

2 相关工作

Information provided by Intel

Measurement-based Approaches

3 Background

Pipeline of Intel Core CPUs

Assembler Instructions

Hardware Performance Counters

4 Definitions

Latency

Throughput

Port Usage

5 Algorithms

Port Usage

  1. Finding Blocking Instructions
  2. Port Usage Algorithm

Latency

  1. Register -> Register
  2. Both registers are general-purpose registers
  3. Both registers are SIMD registers
  4. The registers have different types
  5. Memory → Register
  6. Status Flags → Register
  7. Register → Memory
  8. Divisions

Throughtput

  1. Measuring Throughput
  2. Computing Throughput from Port Usage

Computing Throughput from Port Usage

Details of the x86 Instruction Set

Measurements on the Hardware

Analysis Using Intel IACA

Machine-readable Output

7 Evaluation

balabala~

8 Limitations

9 Conclusions and Future Work

我们的工具可以用来优化llvm-mca等软件。

Future work includes adapting our algorithms to AMD x86 CPUs. 官网已经实现了。

We would also like to extend our approach tocharacterize other undocumented performance-relevant aspects of the pipeline, e.g., regarding micro and macro-fusion, or whether instructions use the simple decoder, the complex decoder, or the Microcode-ROM.

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

LLVM Mca :with BHive (2019)

BHive

一种新的profiler,可以profile没有用户干预的内存访问的基本块。

基于这种profiler创建了BHive,来验证llvm-mca等模型。

BHive是用来评价llvm-mca这些模型的,实验基于各种收集来的一个基本块各种评价

I. INTRODUCTION

Automatically Profiling Basic Blocks

困难在于现有的 没有考虑 memory crash ??? .默认命中L1 cache

A key technical challenge with collecting a large basic block dataset is that there is no existing approach to profile an arbitrary basic block that has been removed from its program context.

(没懂?那为什么要removed from its program context) 因为要把常用的应用拆成小例子来评判,这些模型的准确性。

原理

运用隐含狄利克雷分布LDA,基于cpu资源的利用率,来cluster benchmark suite里的基本块

通过对各种类型最基本的代码块来进行profile,从而形成针对各种performance model的数据库。

现在已经有超过30万的基本块分析,来源于各种方向的应用,包括数值计算OpenBLAS,数据库SQLite,机器学习TensorFlow,密码学OpenSSL。

这么多的数据产生了一个用于评估performance model的新benchmark。

作者说performance modeling 研究的未来在于与其他先进技术的大规模定量比较

内存访问的处理

通过把虚拟页面映射到单个物理页面,来合法内存访问同时避免cache miss

II. 背景

Existing Performance Models

有两种model 1. 产生可以详细描述指令何时发射和退休的可解释执行路径的微架构模拟器,附带吞吐量预测。 2. 每条指令都有延迟、吞吐量查找表,相当于一个被寄存器分配器使用的额外开销估计器

各种model, 写到另一篇里了

  1. IACA
  2. llvm-mca
  3. OSACA
  4. Ithemal

Machine Code Profilers

  1. 通过 Agner Fog’s script 测量真实的,有周期,cache miss 等等。https://www.agner.org/optimize/testp.zip
  2. nanoBench也是。https://github.com/andreas-abel/nanoBench 可以指定processor?和 kernel模式。
  3. Unrolling
  4. 测量吞吐量的基本方法就是展开一个基本块的代码多次,然后测重复多次的代码。把展开的基本块latency除以unroll factor(典型值是100)
  5. 目的:
    1. 边缘化前几次warm up的latency值的影响。
    2. 减少收起数据的开销影响
  6. unroll factor就是循环展开次数。
  7. 局限性是,必须人工给代码块,不能自动profile一堆任意的基本块来系统性验证。???

III. PROFILING ARBITRARY BASIC BLOCKS

目标是在不需要手动干预的情况下分析任意基本块,以便测量的吞吐量与性能模型通常假定的定义和不变量相对应。关键的挑战是使这些基本块能够在不崩溃的情况下访问任意内存地址

由于基本块只是正常程序的一部分,导致根本不能单独正常运行。BHive做的事情就是,让他正常运行。

Handling Arbitrary Memory Accesses

这个代码块只有执行代码分配在0x4110a时,才能正常运行 1. Remapping Virtual Pages. 1. 一个基本块的所有虚拟内存页重新映射到一个物理页上,所以全部数据访问都命中L1。这样就可以执行97%的基本块。 2. 步骤 1. 把原本虚拟页全部unmap 1. 这会导致除了包含基本块指令的页之外的全部的连续的内存访问出问题??? 2. 在子进程里运行展开的基本块指令。 1. 这时对每个unmap的虚拟页的访问都会出错,但是主进程一种监视着。一旦中断就重新映射出错地址,然后重新开始跑。 2. Memory Initialization 1. 初始化一个中等大小0x12345600的物理页,允许都虚拟页都映射 3. Virtual page aliasing 1. 因为不同的虚拟页映射在同一个物理页的同一项导致memory dependences,要等待 2. 剔除6.28%的基本块 3. 可以通过增大物理页,来减小发生的概率。

Overall Profiling Workflow

通过重复运行基本块来计算吞吐量 1. Raw Measurement 1. 先从基本块里,产生不会memory crash的可执行部分。 2. unroll factor的选取。It uses 100 and 200 as the unroll factors for basic blocks smaller than 100 bytes; 50 and 100 for basic blocks between 100 bytes and 200 bytes; and finally 16 and 32 for basic blocks larger than 200 bytes 2. Filtering 1. 筛选执行代码满足理想化模型的执行结果,比如命中L1cache 2. L1 Cache Misses 1. 工具可以用硬件计数器监控指令和数据cache misses。拒绝所有cache miss的情况。 3. Unaligned Loads 1. 不连续的访存会很慢,解决方法就是去除所有有不连续的访存的。大约删除了0.18%的基本块 4. Subnormal Floating Point 1. 一些特殊的浮点数计算会比正常的浮点数计算慢20倍,去除了与MXCSR寄存器有关的0.1%的基本块。 2. https://stackoverflow.com/questions/8341395/what-is-a-subnormal-floating-point-number 5. Context Switches 1. 上下文切换(英语:context switch),又称环境切换,电脑术语,是一个存储和重建CPU的状态 (内文),因此令多个进程(process)可以分享单一CPU资源的计算过程。要切换CPU上的进程时,必需先行存储目前进程的状态,再将欲运行的进程之状态读回CPU中。 6. 可接受的评估公式 10%的误差??? 3. Throughput Calculation 1. 如果通过了基本块的筛选,用有记录的最小延迟计算吞吐量 4. Environment Variance 1. 由于环境的影响,导致结果有个稳定的偏移。至少执行5次,展开16次的基本块。取最小的5次作为结果。

Portability to Other Architectures

只要架构满足以下几点要求 1. 有将多个虚拟页面映射到几个物理页面的API。map multiple virtual pages to a few physical pages 1. without incurring a performance penalty due to unnecessary cache invalidation. We therefore require that the target processor has a physically tagged data cache(VIPT)??? 1. we additionally require that the page size is small enough so the indexing bits are not affected by address translation. 1. detecting cache misses, 2. and detecting or disabling floating-point underflow.

IV. BASIC BLOCK DATASET

应用的选择

  1. 尽可能还原现实生活的各个方面,
  2. 而且是用户的典型用法。
  3. Clang/LLVM (compiler), Redis (inmemory database), SQLite (database), and Gzip 是用高级语言C或者C++编写的,算法和数据结构有复杂的设计。
  4. OpenSSL (cryptography), OpenBLAS , Eigen (scientific computing),TensorFlow (machine learning) 代表的是核心循环是手动汇编优化过的高性能库。
  5. 其中Embree是 用Intel ispc (a data-parallel language)编写的。

We compiled all applications with the highest optimization settings defined by their build systems. 如果可以用上了AVX2。

使用DynamoRIO动态分析来提炼基本块。可以实现在运行时记录每个运行的基本块。我们采用动态分析,而不是静态反汇编。因为静态反汇编无法区别padding bytes from instructions。???

应用的例子除了FFmpeg and Gzip都是选择的官方的benchmark。 Eigen 采用的是 two sparse linear algebra workloads: sparse matrix-matrix multiplication (SpMM) and sparse matrix-vector multiplication (SpMV).

V. BASIC BLOCK CLUSTERING

一些基本块比其他的更难建模,???(建什么模,VI-B说明了什么)有内存依赖的基本块预测错误率更高。

采用了一种技术???(是应用在提取上) 基于处理器的使用聚类基本块。 这个技术有助于性能模型的设计和使用者更细粒度了解performance model,让他们能集中以后新添加的资源在有困难的那一类基本块。

  1. Methodology
  2. 具体方法
    1. 找到每个基本块的硬件使用率的表示 port-mapping representation
    2. 根据其聚类
  3. 对每条指令结合port使用
    1. 运用 Abel and Reineke A. Abel and J. Reineke, “uops.info: Characterizing latency, throughput, and port usage of instructions on intel microarchitectures,” in ASPLOS, 2019的结果 ???
    2. 例如???
      1. xor %rax, %rbx in Haswell is {p0156 → 1}
  4. 使用Latent Dirichlet Allocation (LDA)来构建topic model 模型(python 训练模型)
    1. 在语言处理上的应用是基于统计词频
    2. 在实际运用的时候,微指令操作会根据使用的port而有小不同。
      1. topics是分类的类别,6类
      2. documents是基本块
      3. α = 1/6 and β = 1/13.
    3. 为了推断每个微指令操作所属的类别,我们使用了SciKit Learn transform对于LDA的随机变化推断的默认实现
    4. 计算每个基本块的最有可能的类别作为其分类结果
  5. Results
  6. LDA将结果聚类后,根据基本块的内容,手动进行注名以及说明
  7. example
  8. 根据运行时频率确定其权重, 基于sample-based profiler??? (A portable sampling-based profiler for java virtual machines,)确定。
  9. 高性能的库如预期一样,向量化的基本块占比较多。
  10. 其余的无向量化的较多。OpenSSL and Gzip有许多位操作的。
  11. Case Study on Data-Center Applications
  12. 目的:作为测试例子,看这个聚类方法能不能找得到隐藏的热点、工作负载
  13. Methodology
    1. 第一步:首先将其基本块分成之前的几类,还是使用LDA
    2. 第二步:分类结果标注
    3. 第三步:比较聚类结果的perplexity值???
    4. ???有没有结合google的应用
  14. Results
    1. 添加新应用后,该值只是略微增长。说明模型的代表性好。???

VI. PERFORMANCE MODEL EVALUATION

在3种Intel架构上验证4种已有的性能模型 1. Methodology 1. 说明各个测试软件的版本。 2. Dataset 1. basic block dataset discussed in Section IV 3. Platform 1. balabala 3种架构的 Intel cpus 4. Evaluation Metrics 1. 测量吞吐量t和预测吞吐量t'\(\(err(t,t')=|\frac{t-t'}{t}|\)\) 2. 不以预测精度,而是以预测结果的相对关系为评分标准。 5. 额外能评估每个模型如何保持基本块吞吐量的顺序。使用Kendall’s tau系数(越大效果越好),而不是相对误差。测量的原因是使用者可能关心的不是绝对的数值精度,而是相对关系的准确率。比如优化软件的时候关心的不是具体耗时,而是哪个优化策略耗时更短。 2. Results 1. 2. IACA 第二好的,在向量化类模拟的最好 3. llvm-mca 最差的,尤其是和loads有关时。 4. Ithemal 除了向量基本块都是最好的。在memory dependence (Ld/St)尤其好,但是向量基本块不好,可能与训练集没有向量基本块有关。 5. OSACA 第三。由于还在开发中,使用还遇到5个bug。在遇到一些不认识的指令的时候,会直接按照nops空指令处理。 3. Examples of Modeling Bugs 1. 最后一个例子是由于模型错误调度微指令导致的 2. Modeling bug due to unsigned division 1. 例子是 a 64-bit by 32-bit unsigned division. 2. ??? 3. Modeling bug due to zero-idioms 1. 2. 对这种结果固定的特殊指令的快速处理。 4. Modeling bug due to mis-scheduling 1. 对于数据依赖,上下指令的寄存器有写后读。 2. Ithemal’s and OSACA忽略了该依赖 3. 4. llvm-mca 没有注意到(%rcx)是memory,没有依赖可以提前发射。

CONCLUSION

现有的静态分析器对内存依赖向量化块的建模还有困难。

github代码说明

  1. benchmark/sources下是各种软件的各个部分的16进制基本代码块和其出现概率,用csv格式(逗号分隔值 (Comma-separated values))存储
  2. benchmark/throughput是在各种架构下的各基本块的测量吞吐量,单位cycles per hundred-iterations.
  3. benchmark/disasm可以把16进制代码通过nasm变成汇编,
  4. timing-harness 吞吐量的计算(猜的)Skylake microarchitecture\(\(\frac{6632-1030}{2333-100}*100=250.8 (cyc/hundred\ iters)\)\)

BHive 被质疑的局限性

uops 的文章, Accurate Throughput Prediction of Basic Blocks on Recent Intel Microarchitectures

4.2 Extending BHive

BHive 运行逻辑

  1. 读入16进制代码和循环次数
  2. hhex2bin转换为二进制
  3. create_shm_fd
  4. shm_open, shm_unlinkcreates and opens a new, or opens or unlink an existing, POSIX shared memory object. O_RDWR Open the object for read-write access.O_CREAT the shared memory object if it does not exist. 777是类似文件读写执行组权限的东西 On success, shm_open() returns a file descriptor (a nonnegative integer)

  5. POSIX可移植操作系统接口The Portable Operating System Interface 是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。

  6. ftruncate — truncate截短 a file to a specified length
  7. define SIZE_OF_HARNESS_MEM (4096 * 3)

  8. measure开始测量
  9. int fds[2] ???
  10. pipe用于创建pipe,用来进程间通信的单向数据通路,传入变量用来返回引用自pipe末端的文件描述符file descriptors。第一个指向the read end of the pipe,第二个指向the write end of the pipe
  11. mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); munmap(void *addr, size_t length);- map or unmap files or devices into memory 在调用进程的虚拟地址空间里create a new mapping.
  12. fork()产生子进程
    1. fork()原理详解
      1. 复制之前的一模一样。
      2. fork() returns a zero to the newly created child process.
      3. fork() returns a positive value, the process ID of the child process, to the parent.
    2. 父进程
      1. define OFFSET_TO_COUNTERS 32

      2. 为什么声明一个偏移地址指针???
        1. struct pmc_counters 由5个uint64_t组成。 uint64 will always take 8 bytes。一个结构体40bytes
      3. attach_to_child(pid, fds[1]); pid是子进程pid
        1. ptrace(enum __ptrace_request request, pid_t pid,void *addr, void *data) - process trace 提供一种进程tracer跟踪控制另一个进程tracee的方法,可以修改被控制者的memory and registers.
        2. PTRACE_SEIZE Attach to the process specified in pid, making it a tracee of the calling process. Unlike PTRACE_ATTACH, PTRACE_SEIZE does not stop the process
        3. 子进程从fds[0]里读到x里,父进程把x的值写入 fds[1] ???
      4. check Performance Monitoring Counters (PMCs) supports
        1. rdpmc_open_attr initialize a raw ring 3 ReaDable PerforMance Counter
      5. last_failing_inst 和 mapping_done
      6. To kill child
        1. define MAX_FAULTS 1024 # 子进程产生的错误需要解决?

        2. wait挂起当前线程,直到有一个children结束,返回其PID
        3. WIFEXITEDWait_IF_EXITED 判断是否正常结束
        4. 如果错误打印出错信号(eg.11)指令指针寄存器RIP,指针寄存器RSP
        5. 函数是用汇编写的就离谱what is aux mem?
        6. 修改出错地方的寄存器,重新运行PTRACE_CONT Restart the stopped tracee process
        7. 最多执行MAX_FAULTS次
      7. 最后父进程杀死子进程
    3. 子进程
      1. 父进程测试是否支持PMCs,子进程使用
      2. harness.c :277

https://www.cnblogs.com/from-zero/p/13750852.html

需要进一步的研究学习

暂无

遇到的问题

  1. time 怎么算的the latency of the basic block?为什么打印15个呢?
  2. 还有中间的错误是怎么回事?
  3. 论文里的误差怎么算的?
  4. BHive整合了几个软件(整合了什么呢),应该是真实测量了得出真实吞吐量?还是也是模拟的?
  5. 和uops比怎么样
  6. 哪个数据是准确的,是BHive模拟的,还是真实测量的。
  7. 通过 Agner Fog’s script 测量真实的,有周期,cache miss 等等。https://www.agner.org/optimize/testp.zip
  8. nanoBench也是。https://github.com/andreas-abel/nanoBench 可以指定processor?和 kernel模式。
  9. 局限性是,必须人工给代码块,不能自动profile一堆任意的基本块来系统性验证。???
  10. BHvie的代码实现,移植到鲲鹏,然后根据PMU调准。

问题是x86的二进制或者汇编不能变成aarm64的二进制或者汇编。

开题缘由、总结、反思、吐槽~~

参考文献

https://github.com/ithemal/bhive

HDMI

HDMI

高清多媒体界面(英语:High Definition Multimedia Interface,缩写:HDMI)是一种全数字化影像和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可以同时发送音频和视频信号,由于音频和视频信号采用同一条线材,大大简化系统线路的安装难度。

与DP的区别

HDMI是被设计来取代较旧的模拟信号影音发送接口。HDMI继承DVI的核心技术“传输最小化差分信号”TMDS,从本质上来说仍然是DVI的扩展。画面是以逐行的方式被发送,并在每一行与每祯画面发送完毕后加入一个特定的空白时间(类似模拟扫描线),并没有将数据“Micro-Packet Architecture(微数据包架构)”化,也不会只更新前后两帧画面改变的部分。每张画面在该更新时都会被完整的重新发送。

而DisplayPort一开始则面向液晶显示器开发,采用“Micro-Packet Architecture(微数据包架构)”传输架构,视频内容以数据包方式传送,这一点同DVI、HDMI等视频传输技术有着明显区别。

更多先进特性对比: https://www.cnbeta.com/articles/tech/1034975.htm

历史

HDMI 1.4

2009年5月28日提出,最高支持4K×2K(3840×2160p@24 Hz/25 Hz/30 Hz或4096×2160p@24 Hz)

HDMI 2.0

2013年9月4日提出

  1. 新增2160p@50 YCbCr 4:2:0、2160p@60 YCbCr 4:2:0(4K分辨率)
  2. 传输带宽18Gbit/s 支持4096*2160*60Hz

HDMI 2.1

2017年1月4日提出

  1. 支持的最大分辨率为 10K/120 Hz

比特率编码

在早期的DP和HDMI标注中,数字信号大多使用8b/10b的比特率编码进行传输。在8b/10b编码模式下,意味着每8位数据在实际传输中需要10位的传输带宽,而这些多出来的冗余用来确保信号的完整性,这意味着他们只有80%的理论带宽可以用来传输数据。

而在最新的协议下,DP 2.0采用128b/132b进行传输,编码效率效率提升到97%,而HDMI 2.1则采用16b/18b进行传输,编码效率为88.9%。

加上同代的DP接口一般都拥有更高的传输速率,所以最新一代DP接口相对HDMI的拥有更高的数据速率。

数据表示

每个像素都拥有红色,绿色和蓝色(RGB)这三个数据点,或者使用亮度,蓝色色度差和红色色度差(YCbCr / YPbPr)三个数据点

各种接口速率

查看电脑USB接口

接口驱动更新

???

软件的帧率

Windows

Android

实际应用

联想2020R7000

type c,同时支持dp1.2的视频输出 21.6Gbps

HDMI2.0 18Gbps

怎么算

小米的显示器是DP1.4的接口 10bits

但是实际是8bits 下需要的带宽为为3*8*3440*1440*100Hz=11888640000bps 3种颜色每个8位。

11888640000bps / 0.8 = 14860800000bps 也不对,哪里有问题

实际

买了根DP1.4的线,但是只有DP1.2的口 但是144Hz带不动,会花屏,或者闪烁。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://zh.wikipedia.org/wiki/USB#%E6%A0%87%E5%87%86USB%E6%8E%A5%E5%8F%A3

https://www.cnbeta.com/articles/tech/1034975.htm

DP

DP

DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会(VESA)标准化的数字式视频接口标准。该接口免认证、免授权金,主要用于视频源与显示器等设备的连接,并也支持音频、USB和其他形式的资料。

用于取代传统的VGA、DVI。 DisplayPort是第一个依赖数据包化资料传输技术的显示连接端口。

历史

1.0

2006年5月发布。带宽10.8Gbps。DisplayPort 1.0的最大传输速度是8.64Gbit/s,长度是2米。已经废弃。

1.2

于2009年12月22日发布。它最大的改变是传输速度增加两倍到21.6Gbit/s(High Bit Rate 2(HBR2)mode),支持4K(4096X2160)60Hz,因此支授更高的分辨率、帧速率及色深。苹果公司设计的Mini DisplayPort亦兼容此标准。支持3D、支持多流(multi-streaming)。目前此版本是主流。

1.3

2014年9月15日,视频电子标准协会发布DisplayPort 1.3,带宽速度最高32.4 Gbps(HBR3),编码后有效带宽为25.92 Gbps,可支持4K(3840X2160)120hz、5K(5120X2880)60hz、8K(7680X4320)30hz。

1.4

2016年2月份最终版的DP 1.4连接端口规范,新标准基于2014年9月的DP 1.3规范,带宽不变但加入了显示压缩流(Display Stream Compression)技术、前向错误更正(Forward Error Correction)、高动态范围数据包(HDR meta transport),声道也提升到32声道1536 KHz采样率,一般情况下,DP1.4可提供4K 120Hz 8bit输出,若搭配DSC技术,可提供4K 144Hz 10bit输出。

DP1.4目前有严重BUG,无法进入bios或屏幕休眠后无法唤醒,20和30系显卡NVIDIA官方尚未放出修复更新,必须要显卡厂商自行修复,建议改用HDMI2.1

2.0

  1. 三倍数据带宽性能 之前版本的DisplayPort v1.4a提供了32.4 Gbps的最大链路带宽,四个通道中的每一个都以8.1 Gbps / lane的链路速率运行。使用8b / 10b信道编码,相当于25.92 Gbps的最大有效载荷。

DP 2.0将最大链路速率提高到20 Gbps / lane,并具有更高效的128b / 132b信道编码,最大有效载荷为77.37 Gbps - 与DP 1.4a相比,增加了三倍。

这意味着DP 2.0是第一个以60 Hz刷新率支持8K分辨率(7680 x 4320)的标准,全彩色4:4:4分辨率,包括每像素30位(bpp),支持HDR-10。

  1. 单显示分辨率??? 一个16K(15360×8640)显示器@ 60Hz和30 bpp 4:4:4 HDR(带DSC)

    一个10K(10240×4320)显示器@ 60Hz和24 bpp 4:4:4(无压缩) 双显示分辨率

    两个8K(7680×4320)显示器@ 120Hz和30 bpp 4:4:4 HDR(带DSC)

    两个4K(3840×2160)显示@ 144Hz和24 bpp 4:4:4(无压缩) 三重显示分辨率

    三个10K(10240×4320)显示器@ 60Hz和30 bpp 4:4:4 HDR(带DSC)

    三个4K(3840×2160)显示@ 90Hz和30 bpp 4:4:4 HDR(无压缩)

特点

  1. 完全兼容现有HDMI1.4a标准和旧的HDMI标准。
  2. 支持USB Type-C。
  3. 支持144Hz刷新率
  4. 支持6、8、10、12与16位色深。
  5. 1080p的有效传输带宽保证长度为5米。
  6. 多屏幕输出 DisplayPort 1.2支持MST(Multi-Stream Transport),单个DP可连接到多个显示器。要使用这项功能,显示器需要支持DP 1.2菊花链(Daisy-chaining),或使用MST Hub把DP一个拆成三个。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

USB & Thunderbolt & Type-C

USB

通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品。

最新一代的USB是USB4,传输速度为40Gbit/s。物理接头USB Type-A、Type-B接头分正反面,新型USB Type-C接头不分正反。

区分USB3.0

  1. 按颜色区分,接口内部是黑色的为USB2.0,蓝色或红色的为USB3.0
  2. 接口触点区分,USB2.0接口只有四个触点,而USB3.0有9个触点(外五内四)
    1. 4个(1个供电,2个数据,1个接地);USB 3.0拥有9个(另外4个提供给SuperSpeed技术);USB 3.1 Type-C拥有24个
  3. 还有一种是看接口标识,见下图

速率

接口样式

历史

USB 2.0

USB 2.0:2000年4月发布。增加更高的数据传输速率480Mbit/s(现在称作Hi-Speed,大约57MB/s),但受限于BOT传输协议和NRZI编码方式,实际最高传输速度只有35MByte/s左右。

USB 3.0(USB 3.1 Gen1/USB 3.2 Gen1)

USB 3.0于2008年11月发布,速度由480Mbps大幅提升到5Gbps。USB 3.0插座通常是蓝色的,并向下兼容USB 2.0和USB 1.x。USB 3.0引入了全双工传输,USB 1.x和USB 2.0则是半双工传输。

USB 3.1(USB 3.1 Gen2/USB 3.2 Gen2x1)

USB3.0推广小组于2013年7月31日宣布USB 3.1规格[10],传输速度提升为10Gb/s,比USB3.0的5Gb/s快上一倍,并向下兼容USB 2.0/1.0,如果要得到10Gb/s的传输速度仍需在主机、目标端同时具备对应的芯片才能达成,电力供应可高达100瓦。

USB Type-C接口

于2014年8月完成。与USB 3.1规格大致相同。但USB-C只是一个接口,不一定支持USB 3.x或Power Delivery(许多手机的Type-C仍然使用USB 2.0)

USB 3.2(USB 3.2 Gen2x2)

在USB Type-C接口上实现双通道,速度方面,使用USB 3.2主机连接USB 3.2存储设备,可以实现两条通道10Gbps的传输速度,理论上也就是相当接近于20Gbps。

另外,从USB 3.2开始,Type-C是唯一推荐的接口方案。

USB4

USB4项目集成Thunderbolt 3协议,USB4支持40Gbps的传输速度,固定Type-C口。

USB Type-C接口

特点

可选集成DisplayPort、HDMI、MHL。 可选集成Thunderbolt。 可选集成USB4。

Thunderbolt

Thunderbolt(又称“雷电”,苹果中国译为“雷雳”[4])是由英特尔发表的连接器标准,目的在于当作电脑与其他设备之间的通用总线,第一代与第二代接口是与Mini DisplayPort集成,较新的第三代开始改为与USB Type-C结合,并能提供电源。

历史

由于 Thunderbolt 1, 2使用的是苹果Mini Displayport,配件无法用在其他电子设备,普及程度远低于对手USB。

由于雷电协议需要额外的独立芯片支持,费用高昂。Intel决定把雷电协议开源给USB-IF。这间接促成了USB4的推出。 第三版(Thunderbolt 3) 2015年6月2日,COMPUTEX 2015 ,代号为Alpine Ridge,双倍带宽达到40 Gbit/s (5 GB/s)。Thunderbolt 3 物理接口改用USB Type-C。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

BHive : An Infrastructure for Adaptive Dynamic Optimization 2003 IEEE

摘要

动态优化逐渐显现出是一种解决传统静态汇编困难的好方法。 但是市面上有大量的针对开发静态优化的编译器框架,但是少有针对动态优化的。

我们实现了一种动态分析和优化的框架,为DynamoRIO动态代码修改系统提供了一种创建额外模块的交互界面。通过简单轻量的API就可以提炼许多DynamoRIO运行时的底层细节,但是只能在单指令流下,而且不同指令显示的细节也是不同的。

该API不仅可以用来优化,也可以instrumentation,热点分析和动态翻译。

为了展现架构的有效性,我们实现了若干优化,一些例子有40%提升,基于DynamoRIO平均有12%加速。

简介

随着现代软件的复杂,还有动态load,共享库等特性,静态分析越来越衰弱。静态分析器去分析整个程序是困难或者不可能的,而静态优化又受限于静态代码分析器的准确性。而且静态优化过多会导致出错时难以debug。

DynamoRIO

Client Interface

Instruction Representation

DynamoRIO API

DynamoRIO Client

Extensions for Adaptive Optimization

Extensions for Custom Traces

Examples

Redundant Load Removal

Strength Reduction

Indirect Branch Dispatch

Custom Traces

Experimental Results

Conclusions

就是这个动态框架好,使用范围广,前途光明

BHive的提取基本块的应该就是 bbuf

https://github.com/DynamoRIO/dynamorio/blob/master/api/samples/bbbuf.c

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Static Code Analysis

静态代码分析器的意义

在不运行程序的情况下,预测程序性能表现。得到估计时钟周期,资源占用情况,潜在的代码瓶颈等的分析。以便优化程序,或者为了更好的运行程序反过来对CPU的架构设计提出意见。

在预测的过程中,也会简单进行自动向量化,指令调度等工作。

比如你想看在arm架构下该程序下有什么瓶颈,但是你只有intel的机器,你就可以通过静态代码分析器来分析。但是当前的效果都不是太好。

已有的Static Code Analyzer

IACA

IACA (the Intel Architecture Code Analyzer) is a (2019: end-of-life) freeware, closed-source static analysis tool made by Intel

由于Intel对自己的处理器优化很了解,所有可以更好的预测。 比如 zero-idioms 和 micro-op fusions(聚合,将相邻指令变为一条指令)

zero-idioms —— The processor recognizes that certain instructions are independent of the prior value of the register if the two operand registers are the same. An instruction that subtracts a register from itself will always give zero, regardless of the previous value of the register.

Ithemal

Ithemal (Instruction THroughput Estimator using MAchine Learning) 基于hierarchical LSTM–based 方法。基本块预测器,但是是黑盒。

Long short-term memory (LSTM) is an artificial recurrent neural network (RNN) architecture used in the field of deep learning.

应该是准确度最高的

LLVM-mca

LLVM Machine Code Analyzer 受到IACA启发的相似的工具,是乱序超标量(多条流水线,每周期可以完成2条以上指令,如下图)微架构模拟器。 使用了LLVM后端的调度模型参数。这种重用调度模型的选择对llvm cost 模型提供了经验。其准确性于调度模型有关。

OSACA

Open Source Architecture Code Analyzer

是IACA的开源替代,也和llvm-mca很像。是参数化的乱序模拟器,但是参数来自测量的指令查找表

cost model

LLVM 和GCC 也有cost model,但是是指令层面的,不是基本块层面的。

比如LLVM 至少有3个: 1. a generic, per-instruction IR (Intermediate Representation) cost model for its target-independent optimizations 2. one for instruction scheduling (the scheduling model [14] is also used by llvm-mca); 3. another one for register allocation

基本概念

throughput

Predicting the (average) number of clock cycles a processor takes to execute a block of assembly instructions in steady state

performance models / Processor performance models

指代静态代码分析器,就是别名。

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://github.com/RRZE-HPC/OSACA

Kunpeng

多线程SMT (Simultaneous multithreading)

统一的调度器复杂度超级高,只有Intel实现了,但是效果很好。

什么是CPU Die

良品率会更高

自研OpenBLAS+ ,毕申编译器,自研MPI

片间一致性可以到达4P到16P???。Intel可以达到8P

问题

  1. 虽然说是保密的,但是鲲鹏930,950应该已经出来了
  2. 930,950是异构的核(是大小核吗?)

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

https://bbs.huaweicloud.com/blogs/268031