并行与分布式计算笔记2
主函数之外的变量是全局的,被所有线程共享,一般用于通信。
在堆上申请的,可能是共享的。
栈上的变量一般是私有的,只有某个线程能够使用。
线程是有限的,如果创建的线程太多,对操作系统而言是个灾难。
创建一个线程大概要1e4个cpu时钟,线程间切换大概要1e3个cpu时钟。
线程的调度取决于:
操作系统的硬件,如果线程太多会执行不过来。
调度器的设计。
程序员的干预,可以设定线程跑在哪个CPU核心。
有一些硬件本身支持多线程,线程间切换会快很多,大概10左右cpu时钟。
线程切换:
执行一定指令后切换(细粒度)
当线程遇到需要花很多时间的操作如cache miss切换,线程会off-cpu。‘;(粗粒度)
将ILP和TLP结合
TLP是将几个指令流同时进行,可以把这里的指令换成ILP的指令。
这种方法称为同时多线程(Simultaneous Multi-threading),Intel称之为超线程。
内存系统的latency和bandwidth
latency是请求的发出到返回的时间。
bandwidth是单位时间内能从内存中取出的数据量。