CMU 15-213 Intro to Computer Systems Lecture 10
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一讲介绍了程序优化。
总览
程序性能不仅仅是渐进复杂度
常数项也很重要!
根据代码编写方式很容易产生10:1的性能范围
必须在多个级别进行优化:
算法,数据表示,过程和循环
必须了解系统才能优化性能
程序如何编译和执行
现代处理器+内存系统如何运行
如何衡量程序性能并确定瓶颈
如何在不破坏代码模块化和通用性的情况下提高性能
编译器优化的局限性
在基本约束下运作
语言和编码风格可能会混淆对程序员而言显而易见的行为
大多数分析仅在程序内执行
大多数分析仅基于静态信息
如有疑问,编译器必须是保守的
通用优化方法代码移动/预计算
移动代码
减少执行计算的频率
如果计算产生相同的结果
尤其是将代码移出循环
例如将代码
v ...
Information Theory, Inference and Learning Algorithms Lecture 5
课程主页:http://www.inference.org.uk/mackay/itprnn/,http://www.inference.org.uk/itprnn_lectures/
课程视频:https://www.bilibili.com/video/BV14b411G7wn?from=search&seid=1786094286746981315,https://www.youtube.com/watch?v=BCiZc0n6COY&list=PLruBu5BI5n4aFpG32iMbdWoRVAA-Vcso6
课程书籍:https://book.douban.com/subject/1893050/
这次回顾第五讲,第五讲介绍了符号流码。
备注:笔记参考了中文书籍。
算数码设信源符号表为$\mathscr H_{X}=\left\{a_{1}, \cdots, a_{I}\right\}$,其中$a_I$表示“传输结束”。假设信源发出序列$x_{1}, x_{2}, \cdots, x_{n}, \cdots$,算数码的编码器和解码器使用条件概率$P\lef ...
Digital Signal Processing 1 Basic Concepts and Algorithms Week4
课程主页:https://www.coursera.org/learn/dsp1
这一讲介绍了Fourier Analysis: the Basics。
DFS(离散傅里叶序列)DFS是DFT的周期扩展,公式如下:
合成公式:
\mathbf x[n]=\frac{1}{N} \sum_{k=0}^{N-1}\mathbf X[k] e^{j \frac{2 \pi}{N} n k}, \quad n\in \mathbb Z分析公式:
\mathbf X[k]=\sum_{n=0}^{N-1}\mathbf x[n] e^{-j \frac{2 \pi}{N} n k}, \quad k\in \mathbb Z不难看出$\mathbf x[n]$和$\mathbf X[k]$的周期均为$N$,连续$ N $个傅立叶系数可捕获所有信息。
DFT,DFS,DTFT$L$周期的DFT假设原始信号为$\bar {\mathrm x}[n]$,考虑其周期扩张$\mathrm y[n]$:
\mathrm y[n]= \bar {\mathrm x}[n \mod M]现在对其做D ...
Information Theory, Inference and Learning Algorithms Lecture 4
课程主页:http://www.inference.org.uk/mackay/itprnn/,http://www.inference.org.uk/itprnn_lectures/
课程视频:https://www.bilibili.com/video/BV14b411G7wn?from=search&seid=1786094286746981315,https://www.youtube.com/watch?v=BCiZc0n6COY&list=PLruBu5BI5n4aFpG32iMbdWoRVAA-Vcso6
课程书籍:https://book.douban.com/subject/1893050/
这次回顾第四讲,第四讲介绍了符号码。
备注:笔记参考了中文书籍。
符号码定义总体 $X$ 的(二进制) 符号码 $C$ 是从 $x$ 的取值范围 $\mathscr{H}_{x}=\left\{a_{1}, a_{2}, \cdots, a_{I}\right\}$到$\{0,1\}^{+}$的一个映射。$c(x)$ 表示相对于 $x$ 的码字 $, l(x)$ ...
Information Theory, Inference and Learning Algorithms Lecture 3
课程主页:http://www.inference.org.uk/mackay/itprnn/,http://www.inference.org.uk/itprnn_lectures/
课程视频:https://www.bilibili.com/video/BV14b411G7wn?from=search&seid=1786094286746981315,https://www.youtube.com/watch?v=BCiZc0n6COY&list=PLruBu5BI5n4aFpG32iMbdWoRVAA-Vcso6
课程书籍:https://book.douban.com/subject/1893050/
这次回顾第三讲,第三讲介绍了信源编码定理。
备注:笔记参考了中文书籍。
如何度量随机变量的信息量结果为$x$的香农信息量定义为
h(x)=\log _{2} \frac{1}{P(x)}总体$X$的熵定义为香农信息量的期望
H(X) \equiv \sum_{x \in \mathscr{G}_{X}} P(x) \log \frac{1}{P(x)}下面给 ...
Digital Signal Processing 1 Basic Concepts and Algorithms Week3
课程主页:https://www.coursera.org/learn/dsp1
这一讲介绍了Fourier Analysis: the Basics。
通过改变基向量进行探索数学设置
让我们从有限长度的信号开始(即$ \mathbb {C} ^ {N} $中的向量)
傅立叶分析是对基向量的简单变换
基向量的改变会改观点
改变观点可以揭示事物(如果基向量选的好)
$\mathbb C^N$中的傅里叶基向量$\left\{\mathbf{w}^{(k)}\right\}_{k=0,1}, \ldots, N-1$是$\mathbb C^N$中正交基,其中$\mathbf w_{n}^{(k)}=e^{j \frac{2 \pi}{N} n k}$,也记作$\mathbf w_k[n]$。
证明:
\begin{aligned}
\begin{aligned}
\left\langle\mathbf{w}^{(k)}, \mathbf{w}^{(h)}\right\rangle &=\sum_{n=0}^{N-1}\left(e^{j \frac{2 \pi}{N} n k}\rig ...
CS224N Natural Language Processing with Deep Learning Lecture 18
课程主页:https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/
视频地址:https://www.bilibili.com/video/av46216519?from=search&seid=13229282510647565239
这里回顾CS224N Lecture 18的课程内容,这一讲主要介绍了Tree Recursive Neural Networks以及constituency parsing。
备注:图片均来自课程课件。
语言的语义解释–不只是词向量人们通过较小元素的语义组成来解释较大文本单元(实体,描述性术语,事实,论据,故事)的含义。
语言是递归的吗
在认知上有些争议(会产生长度无限的语言)
但是:递归对于描述语言是很自然的
[The person standing next to [the man from [the company that purchased [the firm that you used to work at]]]]
这是语言结构非常强大的先决条件
例如解析树 ...
CMU 15-213 Intro to Computer Systems Lecture 9
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一讲介绍了机器级编程5:高级主题。
内存布局x86-64 Linux内存布局
堆栈
运行时的堆栈(限制为8MB)
例如,局部变量
堆
根据需要动态分配
调用malloc(), calloc(), new()时使用
数据
静态分配的数据
例如,全局变量,静态变量,字符串常量
文本/共享库
可执行机器指令
只读
缓存区溢出回忆:内存引用错误示例typedef struct {
int a[2];
double d;
} struct_t;
double fun(int i) {
volatile struct_t s;
s.d = 3.14;
s.a[i] = 1073 ...
Digital Signal Processing 1 Basic Concepts and Algorithms Week2
课程主页:https://www.coursera.org/learn/dsp1
这一讲介绍了Signal Processing Meets Vector Space。
希尔伯特空间希尔伯特空间的三要素
向量空间:$H(V, \mathbb{C})$
$\forall x,y,z\in V,\alpha, \beta \in \mathbb C$,如下事实成立
\begin{array}{l}
x+y=y+x \\
(x+y)+z=x+(y+z) \\
\alpha(x+y)=\alpha y+\alpha x \\
(\alpha+\beta) x=\alpha x+\beta x \\
\alpha(\beta x)=(\alpha \beta) x \\
\exists 0 \in V \quad | x+0=0+x=x \\
\forall x \in V, \exists(-x) \quad | \quad x+(-x)=0
\end{array}
内积:$\langle\cdot, \cdot\rangle: V \times V \rightarrow \math ...
CMU 15-213 Lab2 Bomb Lab
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一部分回顾CSAPP的Bomb Lab。
x86-64参考资料:
https://web.stanford.edu/class/archive/cs/cs107/cs107.1166/guide_x86-64.html
https://cs.brown.edu/courses/cs033/docs/guides/x64_cheatsheet.pdf
首先进行利用反汇编命令得到方便阅读的代码:
objdump -d bomb
phase_10000000000400ee0 <phase_1>:
400ee0: 48 83 ec 08 sub $0x8,%rsp
400ee4: be 00 24 ...
CMU 15-213 Intro to Computer Systems Lecture 8
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一讲介绍了机器级编程4:数据。
数组
基本原则
T A [L];
上述声明表示数据类型为T,长度为L的数组
内存中是L*sizeof(T)个字节的连续分配区域
数组读取的例子#define ZLEN 5
typedef int zip_dig[ZLEN];
zip_dig cmu = { 1, 5, 2, 1, 3 };
zip_dig mit = { 0, 2, 1, 3, 9 };
zip_dig ucb = { 9, 4, 7, 2, 0 };
int get_digit(zip_dig z, int digit)
{
return z[digit] ...
CMU 15-213 Intro to Computer Systems Lecture 7
课程主页:http://www.cs.cmu.edu/afs/cs/academic/class/15213-f15/www/schedule.html
课程资料:https://github.com/EugeneLiu/translationCSAPP
课程视频:https://www.bilibili.com/video/av31289365/
这一讲介绍了机器级编程3:过程。
栈结构x86-64栈
通过栈规范管理内存区域
栈顶在低地址
寄存器%rsp为最小的堆栈地址
即“顶部”元素的地址
Push
pushq Src
将%rsp减少8
在给定的地址%rsp处写入操作数
Pop
popq Dest
在%rsp指定的地址处读取值
将%rsp增加8
将值存储在Dest(必须是寄存器)
调用约定传递控制例子考虑如下代码
void multstore
(long x, long y, long *dest) {
long t = mult2(x, y);
*dest = t;
}
0000000000400540 <multst ...