异构并行计算课程大纲
课程主要研究异构编程、大规模并行处理器的概念、语言、方法和模式,自2012年首次发布以来,异构并行编程的内容和结构在此基础上得到了显著改进,其中包括并行计算架构、数据并行编程模式,内存带宽管理技术和并行算法模式。
课程概述
从移动设备到超级计算机,所有计算机系统正朝着大规模异构并行计算机的方向发展,功效和计算能力更加突出,与此同时,计算机领域也在积极创建函数库和相关工具,为系统使用提供便利;想实现高效可靠的计算系统,了解低级编程语言是必不可少的,本课程旨在帮助学生了解低级编程接口的本质,以及如何应用这些接口实现程序目的。CUDA C语言很好地平衡了用户控件和冗长问题,将作为本课程前半部分的教学工具,学生还可以进一步学习与之密切相关的编程接口,如OpenCL,OpenACC和C++AMP。
本课程是目前唯一一套面向应用的计算机科学与工程初级课程,主要内容包括:数据并行执行模型,内存模型的地址管理,减少带宽消耗的切片技术,并行算法模式,计算与通信重叠以及各种异构并行编程接口,这些概念为大家学习其他并行编程系统奠定了坚实基础。
课程大纲
第一周:综合介绍异构计算,CUDA C语言以及基于内核的并行编程,实验概览,附编程作业:使用CUDA C语言进行向量求和。
第二周:内存模型的地址管理,节约内存带宽的切片技术,边界条件的处理以及系统性能方面的问题,附编程作业:使用CUDA C进行简单的矩阵乘法。
第三周:并行卷积模式,附编程作业:使用CUDA C进行平铺矩阵乘法。
第四周:并行扫描模式,附编程作业:基于CUDA C的卷积并行算法。
第五周:直方图并行模式和原子操作,附编程作业:基于CUDA C的并行扫描。
第六周: 数据传输与任务并行,附编程作业:基于CUDA C的直方图并行算法。
第七周:OpenCL,C++AMP和OpenACC简介,附编程作业:使用CUDA C数据流进行向量求和。
第八周:课程总结,其他相关的编程模型——Thrust,Bolt和CUDA FORTRAN,附编程作业:选择OpenCL,C++AMP或 OpenACC进行矩阵乘法。
第九周:完成剩余的实验作业,附可加分的选做编程作业,可选择OpenCL,C++AMP或OpenACC进行操作。
听取前面两位对我的批评意见,现在来重写评论
1. 课程内容:
课程内容主要可以分为三大板块,一,CUDA基础,包括硬件架构,基本编程模式以及相关API,这一部分需要参考两本书,一个是老师的推荐教材Programming Massively Parallel Processors,另一个是CUDA by Examples,后面的是API简介,CUDA编程思想主要参考前一本;二,并行计算范式,课上总共讲了Tiled Matrix Multiplication, Convolution, List Reduction, List Scan, Histogram五种范式,推荐教材Programming Massively Parallel Processors还有一种更常用的,处理Sparse Matrix的范式;三,其他并行计算语言,包括OpenCL, OpenACC和C++ AMP三类。
整体来说难度不大,是入门并行计算与CUDA的好课,但是遗憾在于编程作业不过瘾,个人感觉综合性稍微大一些的PA只有Image Equalization一个,过了这个之后的Assignments更像是只为了熟悉基本语法。Image Processing有很多非常适合练习并行计算的算法,希望未来开课时能加入更多有应用背景的编程练习。
总之还是很感谢老师的课程,目前我的Image Processing已经将CUDA整合到其中,充分利用Stream之后效率提升非常惊人,认证花钱花得还是很值得的。
下一阶段打算刷一下Udacity NVDIA开的课,进一步深入研究并行计算算法,以及并行计算在CV中的应用。