版本须知

TopsPlatform 1.0.2

TopsPlatform_v1.0.2版本上TopsCC及TopsRuntime实现了部分的内部优化,TopsProfiler在S60/S60G上支持单机多卡profiling,TopsGDB对GDB版本作了升级

新增

  • TopsCC优化整型vector除法性能

  • TopsCC增强bank conflict算法,提升程序性能

  • 支持Event底层使用hardware timer计算时间

  • 默认打开kmd odte ifb和vmsys prefetch

  • 支持S60/S60G单机多卡profiling

  • 加载Driver时默认打开kernel profiler

  • Profiling时支持RAS enable

  • 更新GDB版本,从12.1更新到13.2 GDB 13.2 Changes

变更

  • NA

修复

  • S60/S60G不支持SIP上的kernel程序运行时的强杀

  • topsEventRecord会造成host memory的泄露

  • 修复DTE操作的size >= 4GB时报错返回

  • kernel越界访问或L2L3多sip搬运等错误情况就会产生DTE、PTE问题

  • S60/S60G上使用一个event来同步多个stream时无效,可能造成硬件错误

  • 缺少 acosh asinh atanh cbrt copysign logb 的函数接口

  • 修复需要用户显式添加reserve_r29_for_scavenge属性

  • 如果算子编译的时候不添加fgcu参数,并尝试去收集dma操作时,pti会抛出 the activities missed meta and not find meta for this sip launch debug message

  • 尝试profile sdte/cdte时如果未增加-fgcu参数,会有assert sdma failed call trace

  • i20上批量执行op+cpu profile用例会抛出unable to handle kernel paging request at 0000000000002559

  • gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据

  • TopsGDB attach/ -p pid 形式调试hang的程序,无法查看到gcu线程

已知问题

  • TopsCC kernel函数不支持纯虚类子类的实例化

  • Launch TopsCC kernel时,线程总数(grid dim * block dim)不能大于1024

  • topscc使用-O0编译报错

  • 循环中更新leaptr的offset, 出现tar spill happen

  • kernel使用两个private DTE比只使用一个带来性能下降

  • cmake不能够使用topscc作为cc(c语言编译器)

  • S60/S60G不支持local关键字修饰的动态数组

  • ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台

  • 当使用-O0对topscc kernel进行编译时,执行该kernel的操作会默认为同步操作

  • 打开staging memcpy功能时,如果EFRT_STAGING_BUFFER_SIZE设置很小(如4KB),在直接使用系统接口malloc()分配的内存进行H2D或D2H操作时可能看到比较大的性能下降。topsHostMalloc()分配的内存,或进行过topsHostRegister()注册的内存则不会受到影响

  • attach 方式做kernel profile会引起rpc链接失败,从而导致attach无法进行数据收集

  • topsdnn 进行legacy profiler 收集不到 gcu op 的数据

  • S60先进行 legacy 只收集op 的profiler,再进行收集全部数据的kernel profiler ,kernel profielr 收集不到sdte的数据

TopsPlatform 0.9.0

TopsPlatform_v0.9.0版本首次在S6/S60上使能TopsGDB和TopsProfiler,TopsCC及TopsRuntime提供了更丰富的功能

新增

  • 支持Staging Memcpy功能

  • TopsCC支持软流水

  • TopsCC支持Barrier同步方式

  • TopsCC在S6/S60上支持Block超发

  • TopsRuntime增加打印启动的kernel信息

  • TopsRuntime增加TopsMemGetInfoExt API以提供每个MC上的内存使用信息

  • TopsGDB在S6/S60设备上支持C/C++源码级别的调试,包括断点、单步执行、backtrace、查看栈变量和device变量、exception/abort信号捕获

  • TopsGDB支持多卡环境

  • TopsProfiler在S6/S60上支持单卡单进程

  • IDE提供configuration的TopsGDB选项,供用户选择使用

  • efsmi增加强制reset某张卡

变更

移除TopsCC的elemwise、reduction、nn计算接口

修复

  • 将设备端函数代码直接写在调用者(caller)的内部和采用函数内联(forceinline)这两种方式生成的代码大小不一致

  • printf以格式转换说明符结尾时,会多输出(null)

  • printf(“%%”)多打印了一个%

  • kernel 函数中最多定义 8 个 constexpr,超过会出现运行时错误

  • 某些intrinsic函数参数需要强制转换成addrespace(5)才能编译

  • i20上启用TOPS_ENABLE_DTE_CHECK宏之后,DTE一些错误行为会导致程序hang

  • 使用char*类型的指令报错

  • 内层循环中使用printf+set_address之后,qa的targ地址发生变化,导致store出现错误

  • 在同一块memory中,使用循环load和store qacc, 出现core dump,dacc store 地址更新出错

  • LLVM ERROR: unsupported swap.smr spill

  • Kernel输入参数为nullptr,应用程序异常退出

  • topscc中set address store结果错误

  • Fix 无法从const section进行memcpy h2d的问题

  • trace-api 在 kernel_profile=1 attach 模式下,收集不到数据

  • 收集不到ODMA event的数据

  • Profiler算子kernel气泡大

  • Factor profiler收集OP meta data时没有shape信息

已知问题

  • TopsCC kernel函数不支持纯虚类子类的实例化

  • Launch TopsCC kernel时,线程总数(grid dim * block dim)不能大于1024

  • Topscc使用-O0编译报错

  • kernel使用两个private DTE比只使用一个带来性能下降

  • cmake不能够使用topscc作为cc(c语言编译器)

  • 循环中更新leaptr的offset, 出现tar spill happen

  • ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台

  • S6/S60不支持local关键字修饰的动态数组

  • 当使用-O0对topscc kernel进行编译时,执行该kernel的操作会默认为同步操作

  • S6/S60上不支持SIP上的kernel程序运行时的强杀

  • topsEventRecord会造成host memory的泄露

  • S6/S60上使用一个event来同步多个stream时无效,可能造成硬件错误

  • 对4G以上的host memory进行topsMemset、topsMemcpy等操作时,可能造成DTE Error

  • 打开staging memcpy功能时,如果EFRT_STAGING_BUFFER_SIZE设置很小(如4KB),在直接使用系统接口malloc()分配的内存进行H2D或D2H操作时可能看到比较大的性能下降。topsHostMalloc()分配的内存,或进行过topsHostRegister()注册的内存则不会受到影响

  • 如果算子编译的时候不添加fgcu参数,并尝试去收集dma操作时,pti会抛出 the activities missed meta and not find meta for this sip launch debug message

  • 尝试profile sdte/cdte时如果未增加-fgcu参数,会有assert sdma failed call trace

  • i20上批量执行op+cpu profile用例会抛出unable to handle kernel paging request at 0000000000002559

  • KMD安装时需增加环境变量kernel_profile=1,才能使能topscc profiler

  • gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据

  • TopsGDB attach/ -p pid 形式调试hang的程序,无法查看到gcu线程

TopsPlatform 0.8.1

TopsPlatform v0.8.1版本包含了如下新功能:TopsCC在S6、S60设备上使能、TopsGDB在i20上支持C/C++源码级别调试、TopsProfiler实现TopsCC-Profiler和Factor-Profiler的整合

新增

  • TopsCC在S6、S60设备上使能

  • 支持配置dma的offset/layout参数的数组初始化,如: config_deslice(hbm_output, csb_input, {0, 0, 0, 0})

  • 新增Runtime API:

    • topsExtSetProfileMeta for setting profile meta data

    • topsExecutableGetConstManagedData for getting weight to be refit

    • topsExecutableGetConstManagedDataV2 for getting weight to be refit

    • topsExecutableUpdateRuntimeResource for weight in-place replacement

    • topsExecutableLoadConstData for sharing constant in different executable

    • topsExecutableLoadConstDataV2 for sharing constant in different executable

    • topsExecutableQueryInputName for get executable input name

    • topsExecutableQueryOutputName for get executable output name

    • topsExtMallocWithBankV2 for expand topsExtMallocWithBank with flags parameter

    • topsExtMallocWithAffinity for malloc dev memory with logical memory bank

    • topsScatterInplace for replace scatter old sub mem with new sub mem descriptor

    • topsDeviceEnablePeerAccessRegion for setup p2p access mapping with peer device’s specified address region

    • topsDeviceDisablePeerAccessRegion for destroy p2p access mapping with peer device’s specified address region

  • TopsGDB在i20上支持C/C++源码级别的调试,包括断点、单步执行、backtrace、查看栈变量和device变量

  • TopsProfiler支持GCU指定事件和活动的采集

  • TopsProfiler支持CPU堆栈和内存等信息采集

  • TopsProfiler输出各种采集数据信息

  • TopsProfiler控制采集程序的启停

变更

  • TopsCC v0.8.1存在默认安装路径及库名字的改变,默认安装路径从/opt/topscc变为/opt/tops,请在使用时做相应修改

  • TopsGDB默认安装路径从/opt/topscc变为/opt/tops,请在使用时做对应修改

  • Runtime3.0库的默认安装路径从/usr变为/opt/tops,请在使用时做相应修改

  • Runtime2.0中头文件路径含dtu字样改成gcu,为兼容原用法,目前保留dtu软链接。软链接将在下次发布中去除,请在该段时间内完成相应修改

修复

  • 在__device__ __forceinline__函数内L1数值错乱

  • 编译报错:Incomplete scavenging after 2nd pass

  • matmul精度问题

  • topscc编译出来的二进制size较大,比factor编译的code size大3~4倍

  • 二维数组使用vstore编译报错如下:Incomplete scavenging after 2nd pass

  • 使用4个cdma,6个sdma,然后调用printf,hang

  • 1c12s同时d2c,只启动了2个cdma,预期启动4个cdma

  • 支持使用数组初始化列表来配置dmaoffset/layout参数

  • TopsCC 在 scorpio 上运行,cfunc kernel intrinsic 指令行为与预期不符

  • TopsCC反汇编intrinsic指令与预期不符,没有打包。需要加attribute

  • 在T20、T21上TopsGDB通过Ctrl+D强制结束后再使用存在异常

已知问题

  • kernel c++不能支持纯虚成员函数

  • TopsCC在S60上只支持单Block

  • TopsCC在S6、S60设备上不支持libtopscxx提供的计算接口

  • kernel使用两个private DTE比只使用一个带来性能下降

  • cmake不能够使用topscc作为cc(c语言编译器)

  • ctrl+c或者SIP超时后,这之前的printf信息不能输出到控制台

  • 将设备端函数代码直接写在调用者(caller)的内部和采用函数内联(forceinline)这两种方式生成的代码大小不一致

  • printf以格式转换说明符结尾时,会多输出(null)

  • printf(“%%”)多打印了一个%

  • kernel 函数中最多定义 8 个 constexpr,超过会出现运行时错误

  • 某些intrinsic函数参数需要强制转换成addrespace(5)才能编译

  • [gcu300]不支持local关键字修饰的动态数组

  • [gcu200]启用TOPS_ENABLE_DTE_CHECK宏之后,DTE一些错误行为会导致程序hang

  • Build topscc kernel with -O0 flag and the kernel launch will be synchronized by default

  • TopsGDB仅支持单卡环境,暂不支持多卡环境

  • TopsGDB在i20设备上支持C/C++源码调试;在T20、T21设备上支持汇编级别的调试,对于S6、S60等设备的支持以及T20、T21设备上源码调试功能将在后续版本支持

  • 必须增加环境变量kernel_profile=1,才能使能topscc profiler

  • gcu-utilzation 在kernel_profile=1 的情况下,收集不到数据

  • trace-api 在 kernel_profile=1 attach 模式下,收集不到数据

  • 收集不到ODMA event的数据

  • factor profiler收集OP meta data时没有shape信息,Topscc profiler不支持获取OP meta data的shape信息