共 1,394 篇文章
共 6,621 篇文章及评论
- 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) (108 篇文章) 日期: 六月 11, 2010 在 5:06 下午
在Media SDK用户定制功能提交篇中,用户任务根据I/O有效性将其提交入Media SDK执行队列。本篇文章主要讨论用户任务是如何在Media SDK中执行的。
Media SDK提供了两个函数来处理用户任务的执行:
mfxStatus (*Execute)(mfxHDL pthis, mfxThreadTask task, mfxU32 uid_p, mfxU32 uid_a);
mfxStatus (*FreeResources)(mfxHDL pthis, mfxThreadTask task, mfxStatus sts);
Execute()根据任务标识号执行用户任务,而FreeResources()将会在执行完用户任务后做相关的清理操作。
可能有人会问,如果我在执行前或者执行时调用FreeResources(),那么结果会如何呢?
Media SDK提供了强壮的处理机制,如果在未完成用户任务的时候调用FreeResources()就是等同于一个取消操作。因为用户程序可以根据自己的情况做出相应的动作而无需考虑Media SDK是否能够处理这种操作。
为了提高用户任务的性能,Media SDK尽量将其并行化处理,以便提高任务的性能;但从软件优化角度来看,应用尽量应该通过自己的具体情况,手动将一件事情分成若干个任务,再通过Submit将其加入执行队列。比如说,可以将一个帧分成若干个slice,对每个slice的具体操作可以放入不同用户任务中去处理,以便提高效率。因为对于多个任务,Media SDK能够根据自身有用的线程池进行并行处理(对于线程池支持的线程数取决于系统的核数和plugin支持的最大线程数)。
在执行Execute(),Meida SDK会根据不同的返回值进行相应的处理:
1.如果MFX_TASK_DONE返回,表示用户任务成功被执行。Media SDK会很高兴的通知用户,OK,恭喜你啦!
2.如果MFX_TASK_WORKING或者是MFX_TASK_BUSY。Media SDK是一个固执的执行者,它会在相关资源就绪后再次尝试。呵呵,不错,喜欢这种锲而不舍的精神!
3.其他返回值。Meida SDK会摇摇头,叹口气,“兄弟,我尽力了!”,然后将相关的错误信息返回给用户。对于错误处理中的取舍,完全取决于上层应用的强壮逻辑了。
用户模块的提交一个异步过程,它的执行过程也遵守这种条约。对于何时执行,如何执行取决于:
1.Media SDK当前的资源情况
2.帧数据是否已经准备就绪
3.用户是否强壮同步执行
如果帧之间有前后的依赖性,同步操作是推荐的,这样能够保证在后面编解码所需要的信息能够在处理时候已经就绪。对于日常的应用而言,可以考虑创建Surface池,再耗尽所以Surface单元的时候,再进行一次同步。如果在良好的状态下,这次同步可能是不需要的,因为在若干次提交Surface后,最前面的Surface已经处理完毕,这样就能够保证Surface池不会空,同步操作也就相应消亡了。
【小结】
- 用户任务的执行是Media SDK自动控制的,用户可以通过同步操作确保任务完成。
- 用户任务的取消可以随时进行,Media SDK有足够的机制保证执行的准确性。不过有一个前提,就是用户任务还未完成,否则只有错误代码会返回(结果已经输出了)。
分类: 图形和视觉计算, 并行计算, 英特尔® 软件网络 2.0
如需了解英特尔软件产品相关的性能和优化选项,请参阅优化注意事项.
评论 (0)
引用 (5)
- 浅析Media SDK新功能JoinSession – 英特尔® 软件网络博客 - 中文
2010年06月16日 22:52 - Media SDK 用户实例模块执行图解 – 英特尔® 软件网络博客 - 中文
2010年07月04日 21:23 - Media SDK2.0 Beta发布啦! – 英特尔® 软件网络博客 - 中文
2010年08月12日 19:43 - Media SDK2.0 Gold发布啦! – 英特尔® 软件网络博客 - 中文
2010年10月20日 18:24 - Intel Media SDK文章总汇 – 中文 - 英特尔® 软件网络
2011年09月27日 02:19

