已关闭
[Question|问题咨询]: CV融合场景下,Matmul类使用CS架构对性能有多大影响 #1389
哪能港侬捏创建于  8月3日关闭于  8月10日
哪能港侬捏
哪能港侬捏
8月3日 创建

Welcome to ask questions and discuss with other members.

问题描述

环境:Ascend910_9382
cann版本:9.0.0
cpu:arm架构

在优化一个算子的时候,发现使用了cann头文件中的matmul::Matmul类。
我的算子要做的是每cube处理一个matmul操作,产生一个矩阵写入GM,然后通知vector进行反量化处理。同步关系中只有vector依赖cube的生产。
采集了这个算子的profiling,发现aic_scalar_ratio占比极高,达到了接近90%。并且在cube计算完以后还需等待vector结束,此时cube的scalar存在大量的空转。
image.png
用ai分析了matmul的代码,ai给出的结论是:在这个算子中,matmul使用了busy_polling的CS架构,cube为server,vector为client。

想求证以下问题:

  1. ai分析的是否正确:matmul使用了busy_polling的CS架构?
  2. 假设1成立的前提下,busy_polling对性能造成多大的影响。个人理解只要是busy_polling,必然会占用scalar的一些开销,这会对指令发射、标量计算产生多大影响?
  3. 在这种简单的同步关系下,有没有除了CS架构以外的解决方案。
likedislike
pandengpandeng成员
8月3日 将 pandeng01 设为负责人
pandeng
pandeng成员
8月3日 评论:

你好,这个问题将由@hw-zjy为您解答

likedislike
hw-zjy成员
8月3日 评论:

问题已确认,正在定位中

likedislike
hw-zjy成员
8月3日 评论:

你好,以下是对问题的答复:
1、你说提的CS架构指的是Matmul的MIX模式,是否是MIX模式需要看算子的写法,在CV分离架构下默认为MIX模式,即AIV驱动cube侧,通过MatmulClient(AIV)驱动MatmulService(cube)
2、在MIX模式下,会在AIV与AIC侧之间通过消息通信框架中专消息,带来额外的scalar性能开销,scalar相比cube only会多10%左右
3、可以使用纯Cube模式,在该模式下完成Matmul计算,可减少消息通信的性能开销,提升算子性能。具体实现请参考https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/programug/Ascendcopdevg/docs/guide/算子实践参考/优秀实践/Matmul性能调优案例/Matmul高阶API使能纯Cube模式.md

likedislike
哪能港侬捏
哪能港侬捏
8月4日 评论:

你的回答无法解决我的问题,我现在的场景就是CV融合的MIX场景,不可能使用纯cube模式,在所有cube计算完以后再计算vector。

你们有没有尝试比对过在不使用这套通信框架的前提下,实现相同MIX场景下的功能。和使用通信框架时的性能差异有多少?

likedislike
hw-zjy成员
8月4日 评论:

你好,可以使用纯CUBE模式跑matmul,插入核间同步后交替执行cube-vector指令,具体实现可参考用例:https://gitcode.com/cann/asc-devkit/tree/master/examples/01_simd_cpp_api/04_advanced_api/00_matmul/matmul_fused_manual

通过msopprof工具收集性能数据,对比MIX模式与CUBE模式的scalar开销,CUBE模式开销可降低22%,msopprof工具指南:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/devaids/optool/docs/zh/user_guide/msopprof_performance_data.md

likedislike
哪能港侬捏
哪能港侬捏
8月10日 评论:

好的谢谢,我们尝试一下

likedislike
哪能港侬捏哪能港侬捏
8月10日 issue状态由 进行中 改变为 已完成
哪能港侬捏哪能港侬捏
8月10日 关闭了 issue