系统配置
有一些可配置的系统参数会在不同程度上影响工作负载的性能,例如视频编码速度。接下来会对这些参数进行介绍。
Number of cores(CPU/GPU的核数)
CPU和GPU的内核的数量对于提高工作负载的性能有直接的影响。将工作负载分配到不同的核处理可以提高计算速度。通常,所有的核应处于相同的性能状态,以实现最佳的资源利用率。6.4.1节中会详细介绍CPU的性能状态。
CPU and GPU frequencies(CPU/GPU的频率)
CPU/GPU的核(CPU/GPU core)以及CPU/GPU(CPU/GPU package1)的时钟频率是决定编码任务执行速度的主要因素。视频编码任务可以利用全硬件加速(利用CPU和GPU共同完成)来实现。此时,CPU和GPU的资源利用率,CPU和GPU时钟频率的差异,任务之间的依赖性,相应的数据的访问延迟等因素是性能优化的关键因素。
Memory size and memory speed(内存容量和速度)
对于视频编码和处理任务而言,内存越大越好。对于越来越高的视频分辨率,更大容量的内存会避免产生过多的内存分页。并且,更高的内存速度也有助于加速视频编码任务。
Cache configurations(缓存配置)
高速缓存是内置在CPU或其他硬件单元中的快速存储器,或者是位于单独芯片上的快速存储器。高速缓存用于存放经常重复的指令和数据,从而避免CPU利用较慢的系统总线从内存加载和存储数据,进而提升整个系统的速度。
L1级缓存一般内置于CPU且为CPU专有,不在多个CPU中共享。而L2级缓存则驻留在CPU旁边的单独芯片上。某些CPU内置了L1和L2缓存,并将缓存芯片指定为3级(L3)缓存。
使用L3级缓存可显着提高视频编码和处理任务的性能。类似地,集成GPU也具有多层缓存。此外,具有嵌入式动态随机存取存储器(eDRAMs, embedded dynamic random access memories)的最新处理器通常为视频编码任务产生高出10%~12%的性能。
Data access speed(数据访问速度)
除了调度延迟之外,固定存储器(NVM, non-volatile memory)2的存储速度和存储类型也会影响数据的可用性。 例如,SSD硬盘比传统的机械硬盘的数据访问速度要快。硬盘中的磁盘缓存与CPU中的缓存是相同的原理。在单独的RAM段中存储经常访问的硬盘数据,从而避免硬盘的频繁检索。视频编码应用程序经常需要访问重复数据,因此,磁盘缓存可以显着提高编码器的性能。
Chipset and I/O throughput(I/O吞吐量)
编码任务经常需要处理未压缩的视频,某些处理任务也会输出以非压缩格式的视频。对于这些任务,I/O操作经常成为其性能瓶颈,特别是对于具备更高分辨率的视频。对于I/O密集型(I/O-bound)3任务,适当优化的芯片组可以解决读写I/O的瓶颈,从而提高整体性能。提高I/O操作效率和降低I/O延迟的技术有:视频数据在并行磁盘阵列上的智能存储,磁盘搜索优化,磁盘调度以及自适应磁盘预取。
System clock resolution(系统时钟频率)
Windows系统的默认计时器精度(timer resolution)为15.625ms,因此每秒会产生64个计时器中断。对于视频编码之类的任务,与视频帧相关的所有操作必须在指定的时间内完成(例如,对于30 fps的视频处理每帧的时间为33ms),此时默认的定时器精度是不够的。对于15.625ms的定时器精度,33ms的处理时间可能会跨越多个时钟周期,这可能需要等到下一个可用的CPU周期才能继续执行任务。编码任务之间经常存在依赖关系(例如DCT变换必须在可变长编码之前执行),因此在调度这些任务时,必须仔细考虑定时器的精度和功耗,从而获得最佳的性能。在许多应用中,1ms的定时器精度通常是更好的选择。
BIOS
可以通过BIOS调整与性能相关的参数,其中包括:
- PCIe(peripheral component interconnect express )延迟和时钟门控(clock gating)4。
- ACPI5设置。例如,禁用休眠。
- CPU配置。例如,启用预读取邻近的缓存数据的功能6。
- CPU和图形的功耗(power)管理控制。例如,允许支持两个以上的频率范围,允许turbo模式,允许CPU在未充分利用时进入C状态(C-states)7,配置C状态延迟,设置中断响应时间限制,启用图形渲染。第6章会讨论C状态的详细信息。
- 启用超频。例如,设置图形超频频率。
Graphics driver(显卡驱动)
显卡驱动包含各种性能优化,尤其是针对硬件加速的视频编码和处理任务。适当的或者更新的显卡驱动有利于获得最佳性能。
Operating system(操作系统)
操作系统(OS)会进行许多优化,以便提高运行时(run-time)环境的性能。 OS还控制进程和线程的优先级。例如,ART和Dalvik分别是运行Android应用程序的新、旧运行时(run time)。虽然Dalvik是一个即时(JIT)运行时,其仅在需要时才执行代码。但是在Android 4.4引入的ART运行时则在代码需要执行之前就已经执行。Android 4.4中的Dalvik和ART之间的比较表明,ART模式带来了更强大的性能和电池效率。2014年10月16日,Google发 Android 5.0,ART全面取代Dalvik成为Android虚拟机运行环境。至此,Dalvik退出历史舞台,AOT(Ahead-of-time)也成为唯一的编译模式。
Power settings(电源设置)
除了TDP(thermal design power,散热设计功耗)8之外,英特尔在Y-系列移动处理器中又提出了SDP (Scenario Design Power,场景设计功耗)的概念。虽然TDP规定了在最坏情况下的实际工作负载,但SDP规定了特定使用场景下的功耗。SDP可用于对特定目的的设计需求和系统冷却功能进行基准测试和功耗特性评估。通常,具有较高的TDP(或SDP)的处理器可以提供更高的性能。因此,根据需要,用户可以选择具有更高TDP的系统。但是,在某些平台上,操作系统通常提供不同的功耗模式,例如高性能模式,正常模式或省电模式。不同的模式控制系统进入各种级别的空闲状态。不同的功耗模式对性能有着显著影响,特别是对于视频编码和处理应用程序。
1. package是封装好了的,肉眼看到的CPU/GPU处理器。CPU最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu的核,然后就是一个物理cpu封装,再往后就是cpu阵列。 ↩
2. 指当电流关掉后,所存储的数据不会消失的计算机存储器。 ↩
3. I/O-bound:指的是系统的CPU效能相对硬盘/内存的效能要好很多。此时,系统大部分的状况是CPU在等I/O(硬盘/内存)的读/写,此时CPU Loading不高。CPU-bound(计算密集型)指的是系统的硬盘/内存效能相对CPU的效能要好很多。此时,系统大部分的状况是CPU Loading 100%,CPU要读/写(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。 ↩
4. 时钟门控(Clock-Gating)一直以来都是降低微处理器功耗的重要手段,主要针对寄存器翻转带来的动态功耗。 ↩
5. ACPI(Advanced Configuration and Power Management Interface)表示高级配置和电源管理接口。对于Windows2000,ACPI定义了Windows 2000、BIOS和系统硬件之间的新型工作接口。这些新接口包括允许Windows 2000控制电源管理和设备配置的机制。 ↩
6. 计算机在读取数据时,会智能的认为要读取的数据旁边或邻近的数据也是需要的,那么其在处理的时候就会将这些邻近的数据预先读取出来,这样会大大加快读取速度。BIOS里的 adjacent cache line prefetch 就是这项命令的开关,如果不需要预读取功能,可以将其关闭。 ↩
7. ACPI定义系统处理器的电源状态,要么为活跃状态(正在执行),要么为睡眠状态(未执行)。处理器电源状态被设计为C0,C1,C2,C3...Cn。C0电源状态是活跃状态,即CPU执行指令。C1到Cn都是处理器睡眠状态,即和C0状态相比,处理器处理器消耗更少的能源并且释放更少的热量。C0是CPU的正常工作模式,CPU处于100%运行状态。C后的数越高,CPU睡眠得越深,CPU的功耗被降低得越多,同时需要更多的时间回到C0模式。 ↩
8. TDP主要是提供给计算机系统厂商,散热片/风扇厂商,以及机箱厂商等等进行系统设计时使用的。一般TDP主要应用于CPU,CPU TDP值对应系列CPU的最终版本在满负荷时可能会达到的最高散热热量,散热器必须保证在处理器TDP最大的时候,处理器的温度仍然在设计范围之内。 ↩