使用场景
在介绍动态shape之前,我们先了解固定shape的使用场景。
固定shape使用场景是:在编译时指定shape大小,运行时不需要指定shape大小。在开发固定shape算子过程中,一个算子源代码可以支持多个固定shape,只是在编译时明确了shape的实际值。
而动态shape使用场景是:在编译时不指定shape大小,在运行时传入实际的shape大小。算子编译后的二进制文件支持任意shape,或者一个或多个shape范围。
- 固定shape的优点:
- 由于固定shape在编译时指定shape大小,所以在编译时决定所有tensor的大小,存储空间利用率高。
- 在编译时可以针对实际的shape大小做针对性优化。
- 固定shape和动态shape相比,算子代码里的循环次数等操作不需要在运行时实时计算。而是在编译时计算,因为这些计算属于Scalar操作,由于昇腾AI处理器擅长并行指令运行,不擅长逻辑计算。如果有太多的Scalar操作可能会打断并行指令的运行,从而导致性能下降。
- 固定shape和动态shape相比,由于指令的参数是常量,不是变量,编译工具在编译时知道确切操作数据大小,所以不会额外插入同步。不会导致本来多个指令可以并行执行,变成串行执行,从而导致性能下降。
父主题: 概述