● Tegra2的软肋
采用Tegra2的诸多手机及平板电脑刚出现的时候,最让用户关心的便是这些平板电脑的Flash硬件加速性能。从NVIDIA公布的构架细节来看,Tegra2是拥有硬件加速Flash的能力的,异构设计的Geforce ULP将传统桌面Geforce构架的ROP单元进行了拆解,从中分离出了独立的可编程混合单元PBU(Programmable Blend Unit),通过他来完成硬件Flash加速的工作。由于安卓系统运行在JAVA Dalvik虚拟机环境下,NVIDIA甚至利用JAVA Dalvik先天的多线程优势为Flash应用开辟了独立的线程,这样Geforce ULP的异构构架可以更好的配合CPU,充分发挥并行处理能力。
然而,在实际应用过程中,大部分用户发现使用Tegra2的手机和平板电脑产品都没有达到NVIDIA官方宣称的流畅无压力的硬解Flash水平,某些场合下Tegra2平台的手机似乎可以完美流畅播放甚至是bilibili弹幕级得Flash应用,但大多数时候采用Tegra2的手机和平板电脑在遇到多Flash应用时或多或少的都会存在拖帧等不流畅的问题。这是为什么呢?
答案其实并不复杂——因为Flash player 10需要处理器提供支持neon指令集。
neon指令集是ARM构架下的一组SIMD浮点指令集,主要用于Vector指令的并行吞吐及加速执行,简单地说neon就是ARM CPU的SSE指令集。根据Adobe及NVIDIA公布的细节,Flash的硬件加速需要CPU对Vector指令进行吞吐以及解析,在完成编码、滤镜、对象以及材质确定等基本风格处理之后才能交由Geforce ULP进行处理。如果没有neon指令集的加速,ARM CPU以纯通用处理的形式完成上述指令的吞吐不仅极其缓慢,而且会极大地增加系统的功耗。
不巧,Tegra2构架的Cortex A9处理器,忘记把neon指令集带在身上了。
失去了neon指令集的支持,不仅Flash的硬解会受到影响,其他需要大量Vector吞吐的场合,比如高清视频的播放等都会受到极大地影响,这使得Geforce ULP的异构设计所产生的优势被极大的削弱甚至完全抵消。PBU可以高效同时低耗的解决Flash加速问题,VDP和VEP芯片也可以很好的完成视频加速,但如果没有neon指令集,这些单元的特性基本上都无法得到完全的发挥。而一般用户并不知道也无需知道这些细节,他们只会埋怨NVIDIA没有提供最为优秀的产品,这使得Geforce ULP乃至整个Tegra2构架的最终性能都蒙上了一层阴影,