基础知识:
1、计算机体系结构基础
2、C语言程序设计
3、计算机算啊基础
4、线性代数
https://developer.nvidia.com/computeworks NAIDIA CUDA Zone
一、CPU体系架构概述
1、什么是CPU?
大多冯诺依曼体系结构,执行指令,处理数据的器件、增加了复杂功能、包含大量晶体管。
指令举例:
算术:add r3,r4 ->r4
访存:load [r4] -> r7
控制: jz cnd(如果是0,跳转)
对于一个编译好的程序,最优化目标:
每个指令需要的几个时钟周期*每个时钟周期所用的时间
两条线:数据线,指令线。
CPU一条指令为一个基本的操作单元,最常用指令MAC,乘加指令,a= b*c+d
流水线、乱序执行
寄存器reg,算术逻辑单元ALU,L1一级缓存,L2二级缓存,RAM,硬盘。
桌面应用
1、少量线程 一段指令代码,无存储空间 轻量级进程
2、大量分支交互操作
3、大量存储器访问
指令集并行,流水线极大地减少时钟周期 问题:有依赖性关系的指令 现在大概都是十几级
旁路可以解决相互依赖的问题,不需要写入memory。
流水线分支预测:猜测下一条指令、基于过去的分支记录
分支预测器增加了面积。
分支断定:用条件语句替换分支
CPI越小小号,ICP越大越好
ADD R0,R1->R2
ADD_V (R0,R1,R2......R7)->
峰值IPC为N
OoO可以使IPC接近理想
延迟是第一个数据来到第一个数据出,吞吐是单位时间内可以同时多少
SRAM 6个晶体管可以搭起来、DRAM断电消失
Caching缓存 数据放在尽可能近的位置
存储器设计:
分区(Banking)避免多端口、一致性、控制器多通道,增加带宽
线程:指令流+私有的寄存器,程序计数器、栈(先进先出)+共享全局变量、堆