技术开发 频道

大规模并行计算一定会成为趋势

  CUDA编程并不难,难在并行计算本身

  很多人认为,学习CUDA编程很难,其实并不是这样,邓培智谈到。一个C语言编程者几乎2天就能学会简单的CUDA编程的基本语法和方法,难度还在并行计算本身。比如,我们该如何判断,哪些应用是可以并行化的,该如何切分任务等等这些并行计算本身的问题。

  其实CUDA的语法很简单,实际上就是一个标准的C语言的扩展,必须有扩展来支持GPU的运行代码,必须有一些新的函数等东西。但是如果一个程序员会C语言,会很容易用CUDA编出第一个程序,但是难就难在解决工作中的问题,用CUDA迅速的解决。这个问题不是在于CUDA本身,而是你要把这个问题并行化进行高效处理得问题,可以说这个是并行计算的普遍性的问题。如果要使用别的并行计算方式,这些问题也同样存在的。 从语言本身来说,CUDA没有什么特别难的地方。如果你对你所开发的东西,如果有很深的了解,要转换起来很快,就像PhysX,它原来是是AGEIA开发的一个物理引擎,我们收购它以后,工程师一个月内就可以把软件移植到CUDA新的平台上运行起来了,PhysX是个相当复杂的程序,从这个指令转换到一个完全不同的架构上,这是需要很大的工作量。这个例子说明什么呢?说明只要你对你的工作有足够的了解,就可以很快的移植到CUDA架构上面来,CUDA还是很容易学习的。

     邓培智,“我希望开发者对CUDA的算法进一步的了解,看能不能把我的计算并行化。这些确实需要技巧,我相信在某些情况下这不是非常容易的事情,需要开发者去判断。但有些地方是很容易看,比如说带有连续的逻辑性,一步一步来,这个很难进行大规模的并行化。但是有些地方很容易并行化,因为需要很多数据可以并行来处理,也没有太多的数据相关情况。但是很多的情况都是有一定难度,这个需要开发者掌握一些技巧。CUDA入门很容易,但是进去对各种问题进行高效率求解,就需要有很多技巧。 这方面我了解到的国内的情况来看,对并行编程特别熟悉,或者特别有经验的开发者总的数量不见得是特别多。当然这跟国内大部分人的开发环境有关系。这个和过去大家很多人可能没有机会用到常规的大规模并行运算的计算机(比如说巨型机,它也是几千的GPU)有关,大多数人接触到的是PC机。在PC机上开发,是和并行计算开发的思维方式完全不一样的。我觉得这个需要去培养并行的思维方式,和并行编程的习惯,如果编程人员对这方面的了解和经验多了,CUDA编程所带来的回报是非常大的,这也是真正对并行编程的人有经验的那些用户往往对CUDA报有极大的信心的原因。归根结底,很多问题其实都是并行编程本身的问题,而不是CUDA的问题。”
 

0
相关文章