工作负载的性质
工作负载的性质会影响性能,也有助于查明可能的性能瓶颈。例如,对于视频编码应用,应考虑以下常见的影响因素。
Compute-bound tasks(计算密集型任务)
如果是计算密集型任务,那么任务会在更快的CPU上更快的完成。如果任务是可并行化的,并且处理器数量增加可以使任务更快的完成,则任务也可以认为是计算密集型任务。计算密集型任务意味着任务的大部分时间都在使用CPU进行计算,而不是处理I/O或内存操作。取决于所使用的参数,许多视频编码任务(例如运动估计和预测,模式决策,变换和量化)都是计算密集型的任务。使用固定功能的硬件执行某些计算密集型任务的集成显卡极大提高了计算密集型任务的性能。
I/O-bound tasks(I/O密集型任务)
I/O密集型任务会随着I/O子系统的速度或I/O吞吐量的增加而更快的完成。通常,磁盘速度限制了I/O密集型任务的性能。从文件中读取原始视频数据并输入到视频编码器,尤其是读取高分辨率的未压缩视频数据,一般是I/O密集型任务。
Memory-bound tasks(内存密集型任务)
内存密集型任务的速度受可用内存容量和内存访问速度的限制。例如,将多个参考帧存储在内存中以用于视频编码的任务可能是内存密集型任务。更快的CPU可能会使得相同的任务从计算密集型转换为内存密集型。
Inter-process communication(进程间通信)
由于进程间的依赖性,并行执行的不同进程通常需要彼此通信。进程间通信在视频编码的并行任务中非常常见。可以使用消息传递,共享内存,或其他技术实现进程间通信。过多的进程间通信会降低性能。并且随着进程数量的增加,需要权衡进程执行和进程通信之间的平衡。实际上,即使要以增加计算或存储器操作为代价,并行视频编码器也需要最小化进程间的通信成本,从而获得更大的可扩展性。
Task scheduling(任务调度)
并行执行的任务的调度会影响整体性能,异构计算平台上更为明显。具有相同指令集架构(ISA,instruction set architecture)的异构多核处理器通常由小功率高效核和高性能核组成。通常,如果工作负载具有高级别的指令级并行性(ILP,instruction level parallelism),则小功率高效核可以实现良好的性能。另一方面,如果工作负载具备较高的内存级并行性(MLP,memory-level parallelism)或需要动态提取ILP,则高性能核可提供良好的性能。因此,通过分析不同类型的CPU核会如何利用工作负载的ILP和MLP特性,可以显著改善此类平台上的任务调度。另一方面,错误的调度决策可能导致次优的性能和过多的功耗。文献1中提供了一些技术用以了解哪些工作负载到核心的映射可能提供最佳性能。
Latency(延迟)
远程内存访问的通信延迟(delay)会导致延迟(latency)。延迟(latency)还会涉及到网络延迟(delay),缓存未命中以及由拆分事务中的竞争引起的延迟(delay)。延迟隐藏可以通过四种互补的方法来完成:
- 使用预取技术,在实际需要之前将指令或数据带到处理器附近。
- 使用硬件支持的一致缓存(coherent caches)2减少高速缓存未命中。
- 使用宽松内存一致性模型(relaxed memory consistency models)。
- 使用多上下文支持,从而使得CPU在遇到长延迟操作时可以从一个上下文切换到另一个上下文。
延迟影响系统响应。对于视频会议等实时视频通信应用,由于延迟会影响用户体验,因此延迟是一个重要的性能因素。
Throughput(吞吐量)
吞吐量用来衡量系统在单位时间内可以执行的任务量。吞吐量也称为系统吞吐量。CPU在单位时间内可以处理的任务数是CPU吞吐量。由于系统吞吐量来自CPU(和其他资源)吞吐量,当多个任务交叉执行时,CPU吞吐量会高于系统吞吐量。由于I/O,编译器和操作系统等带来的系统开销,因此CPU在很小的时间内内会保持空闲状态。在实时视频通信应用中,视频的平滑度取决于系统吞吐量。因此,优化系统中的所有阶段的性能非常重要,只有这样,某个阶段的低效率才不会影响系统的整体性能。
1. Scheduling Heterogeneous Multi-Cores through Performance Impact Estimation. ↩
2. 在计算机科学中,缓存一致性(英语:Cache coherence,或cache coherency),又译为缓存连贯性、缓存同调,是指保留在高速缓存中的共享资源,保持数据一致性的机制。其有多个译名,如:缓存一致性,高速缓冲存储器一致性,等建议译为:高速缓存间一致性。 ↩