- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CUDA、BSGP和SPAP调研报告-肖韬南京大学计算机系.pptx
周昆教授的GPU相关项目调研报告肖韬 南京大学计算机系 2010.10.28CUDA?是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。使用经过扩展的C语言来为CUDA?架构编写程序。 与CPU相比,GPU有更多的晶体管被用于数据处理。通用并行计算模型单指令、多数据执行模式 (SIMD)所有线程执行同一段代码(1000s threads on the fly)大量并行计算资源处理不同数据data centric model: 数据被组织成很多的streamkernel: 并行地作用于每一个流中的数据stream/kernel抽象模型把数据间的依赖性暴露给了编程者。第一个基于BSP的GPU编程语言在GPU上进行通用计算的类C的串行编程语言只需提供少量的信息(即barriers)来描述GPU上的并行任务易于编写、理解、维护不牺牲运行性能(与CUDA语言编程相比)BSGP编程模型不能与GPU的stream processing模型直接对应,因此需要BSGP编译器将BSGP的源代码转换为GPU的stream代码这就必须解决两大挑战:barrier synchronization的同步问题怎样生成高效的stream code开始BSGP编程BSGP中的几个基本概念barrier图示 所有的同一个kernel的所有线程执行流都要在同一个 barrier处同步 在流处理模型中,barrier只有一种形式:等待kernel终止 在某一个kernel的内部无法进行barrier所谓collective operation,即指所有线程必须同时进行的操作求prefix sum的图示collective scanspawn(n) { statements; } n个线程将被创建来并行地执行statements语句有些操作(如资源分配以及kernel配置)必须由外界来进行借助于require块,允许在BSGP代码中插入CPU控制代码运行时,CPU控制代码将先于superstep被执行使用fork和kill来生成和销毁线程线程通讯机制原语操作(reduce, scan , sort等)其他的特征线程之间的通讯只允许发生在barrier处忽略processor间数据的局部性以上两点很好地符合了stream processing的特点1. Inline all calls to functions with barriers2. Perform optimizations to reduce data dependencies3. Separate CPU code and GPU code. Generate kernels and kernel launching code4. Convert reference to CPU variables to kernel parameters5. Find all values needing to be saved, i.e., values used outside the defining superstep6. Generate code to save and load the values found in Step 57. Generate temporary stream allocationsSPAP — Same Program for All Processors.目前的系统上有多核CPU与多核GPU希望能够充分利用这种异构型的计算能力不同的处理器有不同的计算模型(从指令级别到算法级别)例如,在x86处理器上线程的总数最好与CPU核的总数相等以避免上下文切换;但是在nVidia的GPU上线程数越多越好。使用容器(container)将有关处理器并发和性能相关的方面抽象了出来每一个container是一个具有类似于STL接口的原语(primitive)为每一个container提供了与特定处理器相关的最优化实现container的行为一致性(behavior consistency)从编程者的角度来看,一个SPAP container的行为跟其对应的串行程序(counterpart)的效果相同编程者将计算任务表达为若干个work unitsSPAP将这些work units动态地划分为若干个子集根据处理器的可用性与计算性能将这些子集分配到各个处理器上任务划分(partition)与分配(dispatch)将不断地进行,直到所有的work units被处理完毕提出了SPAP的概念实现了SPAP系统,包括SPAP编译器与运行时系统(针对x86的CPU和可以使用CUDA 的GPU)利用SPAP实现了一系列的应用,如AES加密、HTML词法分析器、JPEG编
文档评论(0)