您的位置:首页 > 运维架构 > 网站架构

R700指令集架构参考手册第二章——2.5 程序状态

2010-12-28 23:52 323 查看
表2.5到表2.8概括了可被一个在一个R700程序中的单个线程所访问的R700程序状态的程序员的视点。



表不包括:

1、由R700硬件专门维护的状态,诸如内部循环控制寄存器

2、仅对主机软件可访问的状态,诸如配置寄存器,或

3、对许多执行线程的状态的复制



表2.5到2.8中的列头具有以下意思:

1、被R700软件访问——被执行在R700处理器上的软件,可读(R),可写(W),或可读写(R/W)。

2、被主机软件访问——被执行在主机处理器上的软件,可读(R),可写(W),或可读写(R/W)。表并不包括状态对象,诸如R700配置寄存器,仅对主机软件可访问。

3、每个线程的个数——对每个线程可用的这样的状态对象的个数。在某些情况下,最大个数被所有执行线程共享。

4、宽度——状态对象的位宽



表2.5 控制流状态



状态 被R700软件访问 被主机软件访问 #每个线程 位宽 描述



整型常量寄存器(I) R W 1 96(3 * 32) 为当前LOOP*指令的CF_DWORD1

微代码格式的CF_CONST域中所指定的

循环可变常量





循环索引(aL) R NO 1 13 一个寄存器,被LOOP*指令初始化,

并由硬件,在一个循环的每次迭代上

递增,基于CF_DWORD1微代码格式

的LOOP*指令的CF_CONST域中

提供的置。





栈 NO NO 芯片特定 芯片特定 硬件维护一单个、多条目的栈,用于

保存和恢复嵌套循环、像素(有效

掩膜和活动掩膜)、断言和其它指令

细节的状态。栈条目的总的个数在

所有执行线程之间被划分。







通用目的寄存器(GPR) R/W NO 127 - (2 * 子句临时GPR) 128(4 * 32) 每个线程可以访问多达127个

GPR,减去2倍的子句临时GPR的个数

四个GPR被保留作为仅针对一个ALU

子句的子句临时GPR(并从而不可被

访问以取和输出单元)。

GPR可以以一种或若干种格式保持

数据:ALU可以处理32位IEEE浮点

(带有特殊值的S23E8),32位

无符号整型,以及32位带符号整型。





子句临时GPR——NO; YES; 4; 128(4 * 32位); 含有子句临时变量的GPR。被每个线程所使用的子句临时GPR的个数减少了对线程可用的GPR的总数。



SIMD全局GPR——R/W; NO; 由驱动定义; 128(4 * 32位); 在内核执行期间,跨所有线程持久的GPR组。可以被用于在线程之间传递数据。



地址寄存器(AR)——W; NO; 1; 36(4 * 9位); 包含一个四元素向量索引的寄存器,被MOVA指令写。硬件读该寄存器。索引被用于一个常量文件(被称为常量瀑布)的相对寻址。该状态仅对一个ALU子句持续。当用于相对寻址时,一个特定向量元素必须被选择。



常量寄存器(CR)——R; W; 512; 128(4 * 32位); 包含常量的寄存器。每个寄存器被组织为一个向量的4个32位元素。软件可以使用CR亦或常量Cache,但不能同时使用。DirectX称这些为浮点常量(F)寄存器。



先前向量(PV)——R; NO; 1; 128(4 * 32位); 包含先前ALU.[X, Y, Z, W]操作的结果的寄存器(译者注:复数)。此状态仅对一个ALU子句持续。



先前标量(PS)——R; NO; 1; 32; 包含先前ALU.Trans操作的结果的一个寄存器。此状态仅对一个ALU子句持续。



本地数据共享(LDS)——R/W 读:达到16KB;写:16到256个字节。每个线程既能读又能写; NO; 片上共享存储器的每个SIMD。使用一个拥有者的写、共享的读模型,在一个SIMD的元素之间允许共享数据。应用程序应该查询ATI运行时函数来获得实际大小。



断言寄存器——R/W; NO; 1; 1; 包含断言位的一个寄存器。这些断言位被 ALU指令置1或清0作为计算某些条件的结果;这些位在后面使用,要么用于屏蔽一次写的结果,要么作为条件本身。一个ALU子句在这寄存器中计算断言位。在这寄存器中的一个断言位可以在一条控制流指令中被引用,以促使条件分支。此状态仅对一个ALU子句持续。



像素状态——NO; NO; 1; 192(64 * 2位)(译者注:这里不知道是书写错误还是啥???:)); 状态位反映了每个像素的活动状态,当条件指令被执行时。状态可以是活动、非活动分支、或非活动终止。



有效掩膜——NO; NO; 1; 64; 一个掩膜,指示哪些像素已被一个像素抹杀操作给抹杀。当一条CF_INST_KILL指令被执行时,该掩膜被更新。



活动掩膜——W(间接); NO; 1; 每个像素1位; 一个掩膜,指示哪些像素当前正被执行以及哪些不在(1 = 执行,0 = 跳过)。这可以通过PRED_SET* ALU指令来更新,但更新不会起效,直到ALU子句结束。CF_ALU指令可以用子句中最后的PRED_SET*指令的结果来更新此掩膜。



表2-7 取顶点状态



取顶点常量——R; W; 128; 84; 这些描述了缓存格式等等。



表2.8 取纹理和取常量状态



纹理采样器——NO; W; 18; 96; 每个VS、GS、PS程序类型有18个采样器(16个给DirecxtX,加上2个备用)可用,其中两个是备用的。一个纹理采样器常量被用于指定一个纹理如何被访问。它包含诸如过滤以及裁剪模式的信息。



纹理资源——NO; W; 160; 160; 每个VS、GS、PS程序类型有160个可用的资源,并且16个给FS(译者注:取子例程)程序类型。



边界颜色——NO; W; 1; 128(4 * 32位); 这被存储在纹理流水线中,但在取纹理指令中被引用。



双立方权重——NO; W; 2; 176; 这些定义了权重,一个水平的,一个垂直的,为双立方插值。该状态被存储在纹理流水线中,但在取纹理指令中被引用。



为Cleartype过滤的内核大小——这些定义了内核大小,一个水平的,一个垂直的,用于过滤微软的CleartypeTM子像素渲染显示技术。该状态被存储在纹理流水线中,但在取纹理指令中被引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: