共 1,303 篇文章
共 6,316 篇文章及评论
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
提高Media SDK效率之多线程篇
作者: Yanqing Wang (Intel) (99 篇文章) 日期: 一月 28, 2010 在 4:16 下午
提高Media SDK效率之初始化设置篇和提高Media SDK效率之内存选择篇中,笔者已经对Media SDK的两个重要配置部分进行了分析和总结。本节,我们将着重讨论如何使用多线程技术提高视频Converter的效能(一种视频的常用应用)。
在运用Media SDK进行格式转换时,一般要涉及三大模块,他们是Decoder,VPP和Encoder,数据输入输出如图1所示。

图1 基本数据输入输出图
从图1可以看出,每经过一个模块,都要对数据进行同步操作。在此期间,其他两个模块是处于空闲状态,是一个典型的串行处理过程。对于英特尔的多核技术,它的多核利用率是最低的,相应的效率也较差。
那么如何对现有流程进行多线程化呢?
本文提供了一种最简单的方法,即对每个模块线程化。它在实际运用中并非是最佳方案,之所以采用它,仅仅是为了提供一种思路。请参考图2所示。

图2 模块线程化输入输出图
图2将Decoder,VPP和Encoder三个模块分别线程化,在彼此之间以队列(queue)为数据交换。
简单的工作模式如下:
- 若队列为空,后级模块等待数据。
- 若队列被填充,前级模块通知后级模块。
- 若无输入数据,前级模块通知后级模块结束工作,后自行了断。
虽然这种线程化的工作增加的程序的复杂性,但是对于赢得的性能而言是值得的。在理想状态下,我们看到三个模块的并行工作,转化时间的长短取决于最为耗时模块。
【小结】
- Media SDK仅仅提供硬件加速能力,线程化工作展开于具体应用。
- 三个模块线程化仅仅是一种简单参考实现,不是最佳方案。如何充分利用英特尔的多核技术,应该建立在具体分析的基础之上。英特尔提供了丰富的性能检测和优化工具,他们能够帮助程序员找出关键问题所在。
- VPP模块是可选的,如果应用没有采用,就将Decoder后的队列直接连接到Encoder之前。
分类: 图形和视觉计算, 并行计算, 英特尔® 软件网络 2.0
如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.
评论 (3)
| 2010年01月29日 16:12
Guoyc1810 | Queue的内存从哪里分配?显存中还是系统内存中? |
| 2010年02月01日 23:47
Yanqing Wang (Intel)
|
请参考:http://software.intel.com/zh-cn/blogs/2010/01/21/media-sdk-4/ 它讲述如何选择内存分配。 |
引用 (2)
- 英特尔® 软件网络博客 - 中文 » 提高Media SDK效率之异步优化篇
2010年02月03日 21:05 - Intel Media SDK文章总汇 – 中文 - 英特尔® 软件网络
2011年09月27日 03:18



huangzb