R700家族处理器实现了一个并行微架构,不仅仅为计算图形应用,而且也为通用目的流应用提供了卓越的平台。任何可以被映射到一个2D矩阵的数据密集应用可作为运行在R700家族处理器上的候选。
图1.1展示了R700家族处理器的集成块图
它包括了一个数据并行处理器(DDP)阵列,一个命令处理器,一个存储器控制器,以及其它逻辑(没有展示)。R700命令处理器读取主机写到系统存储器地址空间中的存储器映射R700寄存器。当命令完成时,该命令处理器将硬件产生的中断发送给主机。R700存储器控制器可以直接访问R700本地存储器和主机指定的系统存储器区域。为了满足读写请求,存储器控制器执行一个直接存储器访问(DMA)控制器的功能,包括计算基于存储器中所请求的数据格式的存储器地址偏移。
一个主机应用不能直接写R700本地存储器,但是它可以命令R700将程序和数据在系统存储器和R700存储器之间进行拷贝。对于CPU写到GPU 存储器有两种方法:
1、请求GPU的DMA引擎,通过指向CPU存储器上源数据的位置,然后指向它所要写的GPU存储器中的偏移,把数据写到那里。
2、加载一个内核运行在着色器上,着色器通过PCIe连接访问存储器,然后对这些数据进行处理,最后将它们存储在GPU存储器中。
一个完整的R700应用包括两部分:
1、一个运行在主机处理器上的程序,以及
2、运行在R700处理器上的程序(译者注:复数),被称为内核(kernel)。
R700程序受主机命令控制,这些命令:
1、设置R700内部基地址和其它配置寄存器,
2、指定R700所要操作的数据域,
3、无效化并冲刷R700上的Cache,以及
4、使R700开始执行一个程序。
R700驱动程序运行在主机上。
DPP阵列是R700处理器的心脏。该阵列被组织为一组SIMD流水线,每条流水线相互独立,对浮点或整型数据流并行操作。SIMD流水线可以处理数据,或通过存储器控制器,对存储器读写数据。一条SIMD流水线中的计算可以是带条件的。写到存储器的输出也可以是带条件的。
主机命令请求一条SIMD流水线执行一个内核,通过给它传递:
1、一个标识符对(x, y)
2、一个条件值,以及
3、内核代码在存储器中的位置。
当SIMD流水线收到请求时,它从存储器加载指令和数据,开始执行,然后一直继续,直到内核结束。当内核在运行时,R700硬件自动地从存储器取指令和数据到片上Cache;R700软件在这里不扮演任何角色。R700软件也可以从片外存储器将数据加载到片上GPR和Cache。
概念上,每个SIMD流水线维护一个对存储器的独立的接口,该接口由索引对以及一个标识请求类型(程序指令、浮点常量、整型常量、布尔常量、输入读,或输出写)的一个域组成。输入、输出和常量的索引对通过从流水线中硬件维护的程序状态请求R700指令而被指定。
R700程序不支持异常、中断、错误,或任何其它可以打断其流水线操作的事件。特别地,它不支持IEEE浮点异常。在图1.1中所展示的从命令处理器到主机的软件中断表示,为发送命令完成和相关管理功能而由硬件产生的中断。
图1.2从程序员的角度展示了一个R700应用的三个版本的数据流。最顶上的版本(a)是一个图形应用,包含了一个几何着色程序和一个DMA拷贝程序。中间版本(b)不包含几何着色程序和DMA拷贝程序。底部版本(c)是一个通用目的应用。方块表示运行在DPP阵列上的程序。圆和云表示非可编程硬件功能。对于图形应用,链中的每个块处理一个特定种类的数据,并将其结果继续传递给下一个块。对于通用目的应用,只有一个处理块执行所有的计算。
图1.2缩略语:
CS——计算着色器程序
DC——DMA拷贝程序
GS——几何着色器程序
PaC——参数Cache
PoC——位置Cache
PS——像素着色器程序
RB——环缓存
VS——顶点着色器程序
数据流序列通过从本地R700存储器或系统存储器读2D顶点、2D纹理或其它2D数据启动;它通过写2D像素或其它2D数据结果到本地R700存储器结束。R700处理器通过潜在地保持在不同执行阶段的上百个线程的踪迹,并通过叠交计算操作和存储器访问操作来隐藏存储器延迟。