提高Media SDK效率之内存选择篇

作者: Yanqing Wang (Intel) (108 篇文章) 日期: 一月 21, 2010 在 8:52 下午

Media SDK使用内存缓冲来输入/输出视频数据,内存缓冲的不同种类将会直接影响编解码的效率。内存缓冲可以是一块在系统内存中的连续块(通过malloc或者new来分配),也可以是显卡内存的连续块(通过Microsoft Direct3D9 Surface函数来分配)。那么内存缓冲的种类由谁来决定呢?本篇文章就是以此为基础,讨论在不同情况下程序如何选择内存缓冲种类的问题。

在讨论内存缓冲对编解码影响之前,笔者先讨论下面三种情况下的内存数据传送问题。
- 系统内存间数据如何传送?
对于程序员而言,这个是最为简单的日常编程事项。一般的使用方式是memcpy,在一些数据较大情况下(超过L3的cache尺寸时候,用movntqa等指令)。不管何种方式,都是CPU-BASED的代码,在SIMD下效率很高。

- 显存间数据是如何传送的?
它类似于系统内存之间的数据传送,并且显存的带宽和速率都很高,传送速度更快。

- 显存和系统内存间数据是如何传送的?
通过DMA方式传送内存数据,速度依赖于DMA的带宽和速率(普通DMA的传送速率在33.3MB/s,而Ultra DMA最高也不过100MB/s)。相比与上述两种情况,它的传送速度明显慢。

从上面的三种情况可以看出,程序一定要尽量避免出现系统内存和显存之间的数据传送,那么Media SDK在什么配置下会出现此类尴尬状态呢?

提高Media SDK效率之初始化设置篇中,程序通过MFX_IMPL_AUTO参数根据当前平台来自动选择硬件或软件编解码,并能通过mfxStatus MFXQueryIMPL(mfxSession session, mfxIMPL *impl)函数来获取当前平台的编解码方式。根据当前平台的使用方法,下面再进行分别讨论。

a)使用硬件编解码方式
硬件编解码方式主要是通过显卡的硬件加速达到高效编解码的作用,也就是说它的核心是显卡。如果我们使用系统内存为其提供缓存,会出现什么情况呢?显然,在数据输出/输出时,程序必将会有显存和系统内存之间的数据传送作用,效能将受到严重影响。在此情况下,程序的最好选择就是显存,否则必将受到性能惩罚!

b)使用软件编解码方式
很显然,软件编解码的核心是CPU。如果我们使用显存作为其缓冲,那么必将导致显存和系统内存之间的数据交互,也就会导致速度低下的程序出现,故此,系统内存是它的不二选择!

【小结】
Media SDK中内存类型的选择分两步走:
1. 使用MFXQueryIMPL函数来查询当前的编解码方式。
2. 根据编解码方式(MFX_IMPL_SOFTWARE为软件;MFX_IMPL_HARDWARE为硬件)来决定内存选用类型。为了便于日后方便查询,笔者建立了一个小表格,如表1所示,以供参考。

                                表1 编解码内存选取
此外,笔者对Media SDK的两种不同内存类型在解码器下做了一个简单的比较。在软件解码方式下,显存选取要比内存选取慢了近1倍,这个是相当可观的数字!切忌,正确选取内存是高效程序的基本点!

分类: 图形和视觉计算, 并行计算, 英特尔® 软件网络 2.0

如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.

 评论 (6)

2010年01月21日 03:59


pearlboy
如果使用的是英特尔的集成显卡,那么是不是没有显存和内存的区别啦?因为它们都是用内存的,没有独立显存。
2010年01月22日 16:02


Pangbeibei
编程时,能选显存就选显存,能用硬件就用硬件,考虑这么多,麻烦!
2010年01月26日 17:07

Yanqing Wang (Intel)
Yanqing Wang (Intel)总分:
10,793
黑带
英特尔的集成显卡一般是通过BIOS来设置显存的大小,这块显存虽然从物理内存中获取,但是当系统启动后是无法直接通过CPU来访问的,也 是要通过DMA方式。网友可以通过任务管理器比较系统内存的变化,不难发现设置不同的BIOS值后,它的值的相应变化。
2010年01月27日 03:11


cping01
有没有针对英特尔显卡内存和显存之间数据传送的高效方法啊?
2010年01月28日 04:37


jasonliu
听说在它的驱动里面有函数可调用,不知道是否是真的!
2010年01月29日 15:14


pearlboy
这个应该是常见问题,可能操作系统就有的吧!

 引用 (3)


 写评论  

欲获得技术支持,请访问软件支持页面.
姓名 (必填)*

电子邮件 (必填,不在本页面显示)*

您的 URL (可选)


评论*