G8X的TPC结构图

每个Multiprecessor所管理的结构

G80的线程管理调度器被命名为GigaThread,从前缀“Giga”我们就可以感受到它强大的调度能力和充沛的资源。G80将128个Unified Streaming Precessor(通用流处理器)分成8组,每组称为一个“TPC”,每个TPC有2个线程和分支管理调度器(Multiprocessor),每个Multiprocessor都具备有16KB的On-Chip Shared memory,总共16个Multiprocessor被一个宽度超过2000bit的Crossbar网络连接起来。G80的Multiprocessor把每份data都用一个Thread管理,每个pixel,每个vertex都算成一个Thread。通过On-Chip Shared memory(片上共享缓存),G80能以32个pixel或vertex(2TCP 32SP)为一个warp(Thread切换的基本单位,可以理解为像素阵列)来切换Thread。每个TCP内都可以混进任意不同的VS、PS指令。为了保证流水线足够的平行性,G80在同一个时间段内流水线一共可以维持总共8192个Thread。G80的所有On-Chip Shared memory、Global memory、Constant Memory、Texture Memory都是独立的,所以G80的片内cache一共是16KB×16 + 8KB×8 + 8KB×8 = 384KB,加上128KB独立的L2 Cache,G80的片内缓存一共是512KB!相比之下,R580的流水线一共可以维持最多512个Thread,而且并不是Per pixel的,每个Thread都要负责管理一个4×4的像素块;R580的片上缓存不会超过100KB。小熊在线www.beareyes.com.cn
G80的分层Thread体系中的On-Cinp Memory

所有的这一切都为G80的流水线提供了几乎无穷无尽的动力。不管存储器延迟带来多少个stall,不管Shader如何复杂多变,G80的GigaThread线程管理调度器都可以掩盖延迟,调整Thread顺序,优化Shader流程,让每一个平行管线都时刻能保持充沛的处理状态。举个例子,比如:
code:
add r1, r2, r3
add r3, r1, r2
这种相关性的指令,第二条指令需要使用第一条指令的结果, 由于流水线的关系, add指令可能需要n个周期才retire, 所以第二个add需要等待流水线完成才能进行处理。遇到这样的情况,G80就直接切换到其他的thread,最大限度的保证处理单元的利用率。小熊在线www.beareyes.com.cn
G8X的分支性能减少了指令间的依存性

由于Multi-thread会成为影响Shader效率的重要关键,而被视为未来GPU效率的重大影响因素。GPU的性能越来越不再是只单纯地受到流水线数量、Shader数量或是时钟频率等的因素影响,而越来越难以判断了。比方说,即使(理论效能XXX GFLOPS)有高有低,但因为Multi-thread之类的Shader控制结构的不同会影响效率,实际上的性能高下可能又是另外一回事了。G8X架构体系将Multi-threading架构推向了新的高峰。小熊在线www.beareyes.com.cn
|