转自:AMD开发者关系经理、2012异构开发大赛评委 谢海波博士
近期一些开发者在论坛中反映对AMD异构开发( APU/GPU应用)大赛的内容、赛制等有不明白的地方,我们借此机会解释一下,希望能够帮助大家更好地理解大赛,以便在初赛阶段就能提交高质量的作品,为后期的比赛打下更好的基础。
1. 大赛目的
大赛的目的,一是吸引对GPGPU已有概念或感兴趣的开发者投身到OpenCL编程里来。随着各大主要计算平台的先后采用,OpenCL作为第一个面向异构系统通用目的并行编程的开放、免费标准,正逐渐成为异构并行计算领域里领先的应用编程接口(API)。AMD为OpenCL编程提供了完整的解决方案。二是希望在计算机视觉、多媒体、科学计算等领域的开发者和产品公司能关注GPU所带来的加速和性能提升。
同时,我们希望能够帮助更多以C++和Java编程的主流程序员了解如何设计并行算法,了解GPGPU和利用GPU进行能够做什么,这将有助于异构计算的推广和普及。
2. 如何看待大赛命题
此次的大赛命题还是非常开放的。因为大赛的目的是吸引更多的同学投入到异构环境编程,或更通俗的说是CPU+GPU编程,所以大家可以选择任何你喜欢的语言,任何你熟悉的领域去设计命题。甚至你可以不要写GPU代码,而是充分利用已存在的经过GPU加速的函数库,去完成你的作品。
当然如何选择命题可能会对评委产生不同的影响。大赛命题主要是三个方面:开源项目的GPU加速;经典算法的GPU实现;基于第三方类库(要求是GPU加速的第三方类库)的新颖应用。
1. 如果大家如果积极主动参与开源社区建设,对众多开源项目中的一些项目进行GPU加速,那就功德无量,评委会对此加分。
2. 经典算法,我们着重看算法在业界的地位和使用价值。比如FFT算法,大量用于图像处理、语音处理等商业软件中;比如稀疏矩阵的分解,可能是求解高阶常微分方程或偏微分方程的典型方法,大量用于科学计算,比如电力系统、气象系统等行业;再比如K-means算法,能有效提高大数据分析的能力。这些算法要求实用性好,不能自己闭门造车搞个并行度很好的算法,却是为了数据并行而并行,没有任何实用价值,这种做法恐怕不会获得评委的青睐。评委一旦发现同学采用了经典算法,也会着重从算法并行设计、优化技巧等方面进行考量。
3. 采用第三方库进行开发,尽管不需要自己去实现GPU代码,但你最起码得展现出自己对GPGPU的理解,评委也需要仔细考虑命题的实用性和新颖性。
另外,为了鼓励Java/Aparapi和C++ AMP编程,评委将会特别关注这些作品。如果命题好,即便性能实现上存在一些问题,在初赛阶段仍有胜出的机会哦。
3. 大赛各个阶段需要提交的内容
大赛分为3个阶段:初赛,复赛和决赛。每个阶段对参赛者要求不同。
初赛只需要让参赛者通过一份文档告诉我们,你想做个什么东西,这个东西好不好玩,有没有商业价值或学术价值;如果想把这个东西完成,你大概考虑怎么做并行化,性能大概是个什么样子等等,只需要告诉我们就行,如果有CPU代码最好,没有也无所谓。目的是让同学把理论和实践结合起来,不要闭门造车。如果是一些算法的优化,可以结合你应用的领域,在文档中说明应用的例子。
复赛才开始要求编码,包括CPU代码和GPU移植。这个阶段AMD会给比赛选手提供设备,并指导如何进行编写和优化。需要完成论文和代码的一部分优化工作,提交给评委就评估大家可能的工作结果。这个阶段就需要提交代码了,包括ppt和设计文档。
复赛完成,基本上大家的设计工作就完成,进入决赛重点优化阶段。请始终保持清醒的头脑,得出自己的GPU代码优化方法,并按照这个方法一步步完成最终的结果提交。最终需要提交ppt、代码、可执行文件等等。
4. 结语:
不要把异构计算和异构大赛考虑得那么神秘。懂异构的,利用大赛资源学习和提高,通过分享帮助他人;不懂异构的,欢迎进入异构时代,来感受下技术发展对你程序设计带来的利弊,并分享到社区。我们后续有相关的博客征文活动。
大家对大赛有任何疑问,请在这里跟帖,我们会尽快回复。