11. 兼容性¶
为了让同一份代码可以同时适配GCU210和GCU300硬件,我们定义了一种新的抽象硬件架构:AGCU(Abstract GCU),用来表示一种基于硬件架构之上的抽象硬件架构设定。如果一份代码按照对应AGCU200的限制条件进行编写,就可以确保同时适配GCU210和GCU300。在使用TopsCC编译时,可以指定-arch agcu200进行编译,这样编译器会额外进行兼容性检查,并编译出在GCU210和GCU300都可以运行的代码。
# 编译产生只可以运行在GCU210上的程序
topscc -arch gcu210 source.cc
# 编译产生只可以运行在GCU300上的程序
topscc -arch gcu300 source.cc
# 编译产生可以运行在GCU210和GCU300上的程序
topscc -arch gcu210,gcu300 source.cc
# 编译产生可以运行在GCU210和GCU300上的程序,且进行编译期兼容性检查
topscc -arch agcu200 source.cc
因为硬件架构还在快速演进,因此AGCU的兼容范围只限定在最近的两代硬件之间。如下图所示,针对AGCU200编译的代码,只能确保在GCU210和GCU300上运行;如果需要在未来的GCU400上运行,则需要以AGCU300为目标来编译代码,这可能需要对原有针对AGCU200的代码做部分修改。
11.1. AGCU计算能力 (AGCU Compute Capability)¶
AGCU功能支持 (Feature Supported per AGCU Capability)¶
Feature Support |
2.0 |
3.0 |
---|---|---|
直接访问全局内存 |
No |
Partial |
DTE支持融合操作 |
No |
Yes |
DTE支持下采样操作 |
No |
Yes |
AGCU技术参数(Technical Specifications per AGCU Capability)¶
技术参数 |
2.0 |
3.0 |
---|---|---|
线程网格中包含线程块的最大维度 |
3 |
3 |
在X维度上,线程网格中包含线程块的最大数量 |
1024 |
1024 |
在Y或Z维度上,线程网格中包含线程块的最大数量 |
1024 |
1024 |
线程网格中包含线程块的最大数量 |
1024 |
1024 |
线程块中包含线程的最大维度 |
3 |
3 |
在X或Y维度上,线程块中包含线程的最大数量 |
12 |
12 |
在Z维度上,线程块中包含线程的最大数量 |
12 |
12 |
线程块中包含线程的最大数量 |
12 |
12 |
默认向量宽度 |
128 B |
128 B |
单个SIP可驻留的最大线程数量 |
1 |
1 |
每个线程的最大标量寄存器数量 |
32 |
32 |
每个线程的最大向量寄存器数量 |
32 |
32 |
每个线程的最大输入向量寄存器数量 |
32 |
32 |
每个线程的最大向量累积寄存器数量 |
1024 |
2048 |
每个SIP的最大向量累积寄存器数量 |
1024 |
4096 |
每个线程的最大特殊矩阵寄存器数量 |
4 |
4 |
每个线程的最大堆栈容量 |
16 KB |
16 KB |
每个核函数的最大常量数据段容量 |
10 KB |
10 KB |
每个核函数的最大参数容量 |
4 KB |
4 KB |
每个线程的最大本地内存容量 |
1 MB |
1 MB |
每个SIP的最大本地内存容量 |
1 MB |
1 MB |
每个线程块的最大共享内存容量 |
24 MB |
24 MB |
每个计算单元集群的最大共享内存容量 |
24 MB |
64 MB |
每个SIP的最大本地DTE VC数量 |
16 |
12 |
每个线程的最大本地DTE VC数量 |
16 |
12 |
每个计算单元集群的最大共享DTE VC数量 |
32 |
16 |
每个线程的最大共享DTE VC数量 |
32 |
不支持 |
每个线程块的最大共享DTE VC数量 |
32 |
16 |
每个SIP的最大mbx数量 |
64 |
16 |
每个线程的最大mbx数量 |
64 |
16 |
每个SIP的最大barrier数量 |
不支持 |
4 |
每个线程的最大barrier数量 |
不支持 |
4 |
每个计算单元集群的最大barrier数量 |
不支持 |
16 |
每个线程块的最大barrier数量 |
不支持 |
4 |
每个线程网格的最大barrier数量 |
不支持 |
4 |
11.2. 二进制兼容 (Binary Compatibility)¶
直接针对具体硬件进行编译产生的二进制可执行文件不支持二进制兼容。例如,针对GCU210编译出的二进制文件无法直接运行在GCU300上,需要重新进行编译产生新的二进制可执行文件,才可以运行在GCU300上。
针对AGCU200编译产生的二进制可执行文件,可以同时运行在GCU210和GCU300上。这是推荐开发者使用的方式。
11.3. 汇编指令兼容 (Assembly Compability)¶
从GCU210到GCU300,支持汇编指令兼容。GCU210核函数代码中的嵌入式汇编或者独立的汇编代码,不需要修改就可以编译成GCU300上的指令。