计算模式
计算模式通常指的:用特定计算资源完成特定计算任务所采用的计算策略。计算资源主要指运算器和存储器,当然若其他设备影响因素较大的情况下也考虑控制器,输入输出设备;计算任务多种多样,可以是简单的加减乘除,也可以是稍复杂的向量运算,矩阵运算等。
计算模式的演变动力通常来自于人类日益增长的计算任务需求和明显紧缺的计算资源之间的矛盾,正是这种矛盾的推动,才导致了从CPU到GPU,再到NPU等专用芯片的发展势头。进一步说,正是由于单体计算遇到的性能造价上的性价比瓶颈,才造就了异构并行计算的流行。
显而易见,人类目前能掌握和利用的微观技术是存在极限的,毕竟和之前芯片几十上百纳米的芯片工艺进展处境不同,当前几纳米级别的芯片制造技术要想单体计算性能几倍十几倍的增加,对应的造价可能就会几十倍上百倍的增加,而这样的处境还不如多造几个计算单体。因此,在没有进一步的单体计算硬件技术的大进步,大概率多体并行计算会是大趋势。
换句话说,类似GPU的发展前景相对CPU要好很多。当然如果量子计算机和生物计算机等更高效的单体计算形式出现后,或许芯片硬件发展的重心估计又会重回单体计算。
计算顺序
"计算顺序"是指执行计算任务或操作时的顺序。它决定了计算过程中每个步骤的执行顺序和相互关系。计算顺序可以是线性的,按照一定的顺序依次执行,也可以是并行的,同时执行多个计算任务。在编程和算法设计中,确定良好的计算顺序是非常重要的,因为它直接影响到程序的正确性和效率。
对于一个具体的计算任务而言,如果让其按部就班的顺序执行计算,那么就是一种串行计算顺序;如果对其进行特定的划分成为多个比较独立的子任务,然后分别计算时,这种方式便是并行计算。在没有针对的具体计算任务而言,串行计算和并行计算不存在优劣之分。当前并行计算的流行,只是技术水平和流行任务的时代缩影罢了。
串行计算按照顺序执行,通常比较直观,易于理解和编写代码,不涉及多个任务之间的同步和竞争条件,因此避免了并发问题。串行计算只能依次执行每个任务,无法充分利用多核处理器或并行计算资源,因此在并行任务和相同造价的硬件条件下效率相对较低,对于处理大规模数据或复杂任务,串行计算可能会导致计算时间过长。
并行计算能够同时执行多个任务或多个子任务,充分利用多核处理器或并行计算资源,因此可以显著提高计算效率,并行计算能够有效处理大规模数据或复杂任务,加速计算过程。但是并行计算涉及任务之间的同步、通信和数据共享等问题,编写并行程序相对复杂,容易引入错误和调试困难,并行计算涉及任务之间的同步、通信和数据共享等问题,编写并行程序相对复杂,容易引入错误和调试困难。
选择串行计算还是并行计算取决于任务的性质、数据规模、计算资源等因素。通常情况下,对于小规模数据或简单任务,串行计算可能更适合;而对于大规模数据或复杂任务,使用并行计算能够更好地发挥计算资源的性能优势。
计算分配
给定计算任务和计算资源后,使用何种策略去完成任务有时候不一定简单。计算策略的选择可以根据问题的性质、数据的特点、计算资源的限制以及求解目标等因素来确定。
如果是从任务划分和资源分配的角度分析,计算分配大概有三种模式:流水线模式的流水计算,多线程模式的共享计算,多进程模式的分布计算。
倘若计算任务可划分为多个阶段,各个阶段之间的依赖关系较弱,那么可以各个任务阶段分配固定的计算资源,并以流水线的方式合作完成计算任务,比较典型的就是CPU内部的指令流水线,从这个角度看CPU内部分工存在一定的并行计算味道。如果计算任务存在相当多的逻辑关联和依赖,那么合适的办法就是采用多线程的那种共享计算,即存储器是共享的,处理器也是共享的,要使用的时候可以按照时间片轮流着使用,彼此之间使用同步机制合作。
但是如果计算任务可以划分为比较独立的多个部分,那么适合每部分独享私有的计算资源,完成计算任务后进行统一汇总。这种情况不太适合共享模式,因为同步机制的问题可能造成处理器调度的资源浪费。比较典型的例子就是GPU的工作模式,它内部存在相当多的独立计算资源单位,用以完成任务的独立部分。