论文部分内容阅读
随着现代科技的进步以及电子产业的飞速发展,GPU运算性能已经被人们开发到无以复加的地步。从以前的单一作为显卡处理器,到现在的大型并行计算处理器.GPU还担当了很多本该是CPU的工作。同时,由于GPU独特的硬件结构,使得在处理大型的并行计算的时候,GPU的处理速度要远远的超过CPU。GPU在通用计算领域有着明显的优势:它的并行性强,能够承受高密度的运算,还可以有效的减少在程序运行过程中GPU和CPU之间频繁的通信。因此,人们对GPU的计算处理能力也是越来越重视。CUDA平台的出现为人们提供了一种这样的编程模型:它不需要学习太多的语言,只需对已有的编程语言就行扩展,大大的降低了CUDA的门槛。随着英伟达新一代显卡Fermi架构的发布,CUDAC编程也被越来越多的人所熟知。CUDAC其实是C语言编程的一个扩展。而PTX是一个利用GPU的可扩展的并行计算。由于永不满足的市场需求、实时驱动的实现、高清晰度三维图形,可编程图形处理器已经演变成为一个高度并行的、多线程的处理器,同时具有庞大的计算能力和较高的内存带宽。GPU处理器特别适合解决此类问题,可以表示为数据并行计算(相同程序执行在许多数据单元中平行的、高强度的内存操作)。因为执行的是同样的程序,所以每个数据元对复杂的流量控制有一个较低的要求。PTX定义了一个虚拟机和通用并行线程执行的指令集。它在安装时被翻译为目标硬件的指令集,通过对PTX的使用,GPU可以作为可编程并行计算机。就像普通的编译过程一样,在GPU中的编程也是要经过高级语言到低级语言,到汇编语言再到二进制语言的过程。从编程语言方面就是从CUDA C到PTX到sass再到cubin的过程。为了准确的计算出程序在GPU中被执行时的指令延迟,我们就要首先排除一切干扰条件,保证我们结果的正确性。如果直接把程序在GPU中执行,那么得到的最终时钟周期内就会包括程序在硬件中由高级道低级的转化过程,那么得出的结果就不能准确的说明问题。因此,在计算时钟周期的时候,我们需要把二进制文件输入硬件中进行执行,这样才能避免转化时间干扰我们最后的结果。首先我们要通过编程来计算出在一个PTX程序中的各条PTX指令的数目。首先设定一个count数组,数组中的每一个count代表一个PTX指令的数目,最后在一个TXT中输出这些指令的数目。进行指令统计程序的目的是为了对每条指令的延迟做出统计,这样就能对一个PTX程序的时钟延迟时间做出预报。通过对GPU的硬件结构分析,来计算出每条PTX指令的时钟延迟。由于指令在GPU中是流水线的方式来执行的,所以我们就可以通过指令在GPU中的工作流程来推算出PTX指令的时钟延迟的一个计算公式,并且通过这个公式可以得出每条PTX指令的延迟,从而可以计算出一个PTX程序的时钟延迟。