关注于视频技术领域的相关资讯,研发和产品

NVIDIA CUDA通用并行计算架构

2009-06-06 开发 查看评论 查看(1,080)

最近在学习NVIDIA的CUDA通用并行计算架构, 该架构是利用NVIDIA的GPU进行计算密集型、高度并行化的计算. 有兴趣的读者可以参见NVIDIA CUDA中文网英文网.

在学习的过程中,该并行架构的编程原理给我的感觉还算好理解, 主要的流程就是:

  1. Host (aka. CPU) 进行初始化程序及Host上的内存数据
  2. Host 将其内存区上的数据拷贝到Device (aka. GPU)的内存区
  3. 执行Device上的代码 (aka. Kernal函数)进行并行计算
  4. Device上的计算结束后,再将Device的内存区的数据拷贝回Host的内存区
  5. Host再进行后续代码工作

因此Host与Device之间的数据传输将是一个关键点,因为这是一个相对比较耗时的操作,直接影响整个程序的性能. 如果数据传输加Device上并行执行的时间开销要大于原本只需在Host上串行执行的时间开销的话,那这个并行架构就没有任何意义了.

对于视频编解码程序而言,这个数据传输的问题相对而言并不是一个很大的问题.

对于编码器而言,由于编码的复杂度相对比较高,大部分时间都集中编码过程,因此数据传输的开销相对比例很小,而且利用CUDA的page-locked memory来实现异步并行传输方式或DMA传输方式.

对于解码器而言,由于解码器相对简单,数据传输的开销比例可能会因此变得相对较大. 幸运的是,多数解码器的直接输出为屏幕显示,即解码器的本身就需要将解码后的图像数据拷贝到显卡(Device or GPU)的内存区,因此利用CUDA编程时,从Device的内存区回拷到Host的内存区这一步骤可以省去,因此相应的数据传输的开销可以说并没有增加.

综上所述, CUDA通用并行计算架构是很适合视频编解码技术的并行算法的实现.

本文来自: NVIDIA CUDA通用并行计算架构

发表评论

*
请输入验证码(不区分大小写)
Anti-spam image