4.3
实现并行计算具备的条件:
(1)多个物理处理单元,否则只能实现逻辑上的并行;
(2)通信机制(网络与协议);
(3)编程架构:多线程,多进程,协程;进程与线程的概念:
(1)程序是初始数据和指令的静态集合,进程是程序的一次动态运行。
(2)操作系统是现将程序的指令和数据加载至内存,然后将内存的起始地址交给PC寄存器,然后将控制权释放给CPU;CPU先从PC寄存器开始执行,执行之后将下一条指令地址给PC寄存器;
(3)线程是进程的组成基本单元,也是操作系统调度的最小单位,每个进程至少包含一个线程(称主线程);
(4)进程间是独立的地址空间;无法通过共享存储来交换数据;通过消息方式通信;
(5)线程间是共享地址空间;通过共享存储来交换数据;通过内存通信(加锁);
注:共享内存操作是很危险的,需要通过锁的方式保护临界资源;
3.明确地址空间越界的原因,进行安全访问:
(1)访问不该访问的位置:逻辑上不该但实际上不会报错;访问了不能访问的位置,直接导致内存异常报错;
(2)全局变量和局部变量在地址空间内的组织方式是不同的:
堆(heap):全局变量和静态变量;
栈(satck):临时变量;其中会用沙箱机制保护函数返回;
- 进程间通信:
(1)首先要明确“我是谁”:即自身进程编号;
(2)其次要明确“还有谁”:即其他进程数量;
(3)以“数值规格化”为例:
输入:A组数据[x1:y1]; B组数据[x2:y2];
输出:B组数据通过公式 (b-x2)*(y1-x1)/(y2-x2)+x1 线性转换至[x1:y1区间];
求解:求的局部最值-->归一求得全局最值-->广播给各进程求得相应值-->归一整合;
4.10
- 合理分布数据使得进程间负载均衡:
以“求质数个数”为例子:
for(i=pidn;i=(pid+1)n;i++)分布会导致pid过大的进程计算数值过大而计算速度慢;
for(i=pid; i=max; i=i+n)分布会导致某个进程的所有数都不是质数,但仍要判断计算; - 加速比的概念;