CPU多核计算概论
为什么需要CPU多核计算:
矛盾
1.日益增长的处理能力单核处理极限瓶颈的矛盾
其中,单核CPU频率接近极限,提高主频发热现象严重,继续提高主频会带来高发热问题,导致芯片运行不正常。
单核通过提高指令形式方法会带来一些移植上的麻烦,增加流水线是很困难的,从指令上提升CPU是很困难的。
单纯提高CPU的主频,会与储存器访问速度匹配问题没如果CPU的访问速度不能匹配储存器的速度,CPU的性能很难发挥。
2.对高性能的计算需求能力越来越高
网络服务,要求高并发
游戏软件,要求高并发
嵌入式系统,要求高处理能力等等
现在多核计算将会成为发展的趋势。
多核计算的架构:
指令数据方式
1.单指令流数据流
2.单指令流多数据流
3.多指令但数据流
4.多指令多数据流
硬件架构
1.多核CPU是将多个CPU集成在单个芯片上,每个CPU都是一个单独处理器,每个CPU和可以有独立的cache,也可以共享一个cache.
2.内存为多个CPU核心共享,CPU核心一般是对称的。
3.多核CPU编程中,要想充分发挥硬件的性能,就要采用多线程,多进程执行,使得每个CPU在同一时间有线程在执行。
4.多核CPU的多个线程是在并行执行,同一时刻多个线程的并行执行,单核是通过切换上下文执行,同一时刻只有一个线程。
多核CPU编程要解决的问题:
1串行编程,转变为并行编程。
2分布式编程
3程序设计
多核CPU编程遇到的问题:
1并发性
瓶颈在于CPU的外围设备,如储存器,IO口等。
单核要创建线程,使用API直接创建注册进内核。
多线程使用openMP等建立并行程序,包括编译一些指导语句,库函数等。
2CPU效率问题
程序并行化之后,会有CPU饥饿问题,如共享内存访问的问题,多个线程对共享数据都是只读操作,那么不需要加锁保护,如果是在写 操作,则需要加锁保护,这样会导致其他线程在等待限制线程的运行,导致CPU的效率降低,在此过程中,等同单线程的效率。
3任务的分解与调度的问题
进程可以创建多个线程,线程可以执行多个任务,如果任务分解的不好,就很难均匀分配到各个核心上。这是任务调度的问题。
4加速比性能问题
多核处理器的性能 < 单核处理器 x 核心数
5能耗问题
耗电比单核高