Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Mstx Report Soft Sync

ASecurity

分析 AscendC 算子中自实现的软同步代码,判断其所属同步语义(核间 barrier/set-wait、卡间 barrier/signal),并接入 mssanitizer 的 Sanitizer 接口(sanitizer_report.h)上报软同步语义,避免 racecheck 对软同步误报。触发:算子存在自实现软同步(GM 地址轮询、flag 计数、跨核/跨卡信号等)需要配合 mssanitizer 检测、需要上报软同步语义、需要判断某段同步代码属于哪种同步语义时。

31 stars
0 votes
0 copies
0 views
Added 9/23/2026
design

Security Analysis

A100/100

Scanned 9/23/2026

Install to Claude Code

$npx -y skills add kali20gakki/msAgent --skill mstx-report-soft-sync --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mstx Report Soft Sync?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Mstx Report Soft Sync
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kali20gakki-mstx-report-soft-sync/badge)](https://www.skillsdirectory.com/skills/kali20gakki-mstx-report-soft-sync)

More formats (shields.io, HTML) on the badges page.

Download with Pro
Files
SKILL.md
---
name: mstx-report-soft-sync
description: 分析 AscendC 算子中自实现的软同步代码,判断其所属同步语义(核间 barrier/set-wait、卡间 barrier/signal),并接入 mssanitizer 的 Sanitizer 接口(sanitizer_report.h)上报软同步语义,避免 racecheck 对软同步误报。触发:算子存在自实现软同步(GM 地址轮询、flag 计数、跨核/跨卡信号等)需要配合 mssanitizer 检测、需要上报软同步语义、需要判断某段同步代码属于哪种同步语义时。
---

# 算子软同步语义分析与 mssanitizer 上报

## 概述

mssanitizer 的 racecheck 会检测访存竞态。算子中由用户自行实现的软同步(轮询 GM 地址 / 写 flag / 计数等)会被 racecheck 误判为竞态,需要通过 `sanitizer_report.h` 提供的 `Sanitizer` 接口上报同步语义,让检测器识别这些软同步、跳过误报。

- 接口头文件:`$ASCEND_HOME_PATH/tools/mssanitizer/include/sanitizer_report.h`
- 完整接口签名、结构体字段、参数说明见 [references/sanitizer-interface.md](references/sanitizer-interface.md)

## 软同步语义分类

| 语义 | 场景 | 上报结构体(`Sanitizer::`) |
|------|------|------------------------------|
| 核间 barrier | 同卡多个核到达同步点后一起继续 | `MstxCrossCoreBarrier` |
| 核间 set/wait | 核 A 发信号,核 B 等待后才继续 | `MstxCrossCoreSetFlag` / `MstxCrossCoreWaitFlag` |
| 卡间 barrier | 跨卡所有核到达后继续(隐含全流水+核间 barrier) | `MstxCrossNpuBarrier` |
| 卡间 signal | 基于 GM 地址写值 + 轮询该地址满足条件 | `MstxSignalSet` / `MstxSignalWait` |

## 处理流程

### 步骤 1:识别自实现软同步

**排除项(无需上报)**:

- 直接调用已封装的软同步接口,如 `aclshmem_signal_wait_until`、`aclshmemx_signal_op`、`aclshmem_barrier_all` 等(这些内部已上报)。
- 硬件同步(非软同步):`SetFlag`/`WaitFlag`/`PipeBarrier`(核内事件同步)、`CrossCoreSetFlag`/`CrossCoreWaitFlag`(硬件核间同步)。

**识别特征(自实现软同步,需上报)**:

- GM 地址轮询:`while (*(__gm__ T*)addr != value)`、`while (ReadGmByPassDCache(ptr) != target)`
- 写 flag / 计数:`*(__gm__ T*)addr = value`、`WriteGmByPassDCache(ptr, v)`、`AtomicAdd(flag, n)`
- 配合 `dcci_cacheline(s)` 显式刷新 dcache 的轮询/写值

### 步骤 2:判断同步语义

按三个维度归类:

1. **参与方**:核内(同核流水)→ 跨核(同卡不同 core)→ 跨卡(不同 device/rank)。
2. **同步方式**:barrier(所有参与方到达才释放)→ set/wait(一方发布、另一方等待)→ signal(基于 GM 地址写值+轮询)。
3. **happens-before 粒度**:决定能否消除「数据区」的写-读误报(关键!)。

对照「软同步语义分类」表确定上报结构体。

**语义选择关键经验**(来自 allgather 实测):

- **同卡多核软同步 → 用核间 barrier(`MstxCrossCoreBarrier`)或核间 set/wait(`MstxCrossCoreSetFlag`/`WaitFlag`)**。其 happens-before 是**全局**的(barrier 之前所有写 → 之后所有读),能消除「数据区」写-读误报。
- **跨卡软同步 → 用卡间 signal(`MstxSignalSet`/`Wait`)或卡间 barrier(`MstxCrossNpuBarrier`)**。`signal` 的 happens-before **按地址**(文档「仅与保存信号的地址有关」),只消除 signal 地址(flag 区)的误报,**无法跨到数据区**——若误报发生在「生产者写数据 vs 消费者读数据」这类数据区竞争,signal 上报无效,应改用 barrier 语义。

判断方法:先看 racecheck 误报的**地址是否等于软同步 flag 地址**(是→signal 即可;否、且为数据区写-读→barrier/set-wait)。

### 步骤 3:先封装宏,再插入上报

为避免每个同步点重复构造结构体,仿照 shmem 内部 `shmemi_mstx_report.h` 的写法,**在算子文件顶部先定义一组宏**封装 `sanitizer_report.h` 的 `Sanitizer::` 接口(不依赖 shmem 内部头文件,便于移植到其他算子仓)。宏名改用 `MSTX_SOFT_SYNC_` 前缀,与 shmem 内部的 `MSTX_*` 宏区分,避免编译期冲突:

```cpp
#include "sanitizer_report.h"

#ifdef __MSTX_DFX_REPORT__
#define MSTX_SOFT_SYNC_FUSE_SCOPE_START() Sanitizer::SanitizerFuseScopeStart()
#define MSTX_SOFT_SYNC_FUSE_SCOPE_END() Sanitizer::SanitizerFuseScopeEnd()
#define MSTX_SOFT_SYNC_SIGNAL_SET_REPORT(addr_, val_)     \
    do {                                        \
        Sanitizer::MstxSignalSet soft_sync_set__{};  \
        soft_sync_set__.addr = (uint64_t)(addr_);    \
        soft_sync_set__.value = (val_);              \
        Sanitizer::SanitizerReport(soft_sync_set__); \
    } while (0)
#define MSTX_SOFT_SYNC_SIGNAL_WAIT_REPORT(addr_, cmp_, val_)        \
    do {                                                  \
        Sanitizer::MstxSignalWait soft_sync_wait__{};          \
        soft_sync_wait__.addr = (uint64_t)(addr_);             \
        soft_sync_wait__.cmpValue = (val_);                    \
        soft_sync_wait__.cmpOp = (Sanitizer::CompareOp)(cmp_); \
        Sanitizer::SanitizerReport(soft_sync_wait__);          \
    } while (0)
#define MSTX_SOFT_SYNC_CROSS_CORE_BARRIER_REPORT(core_num)         \
    do {                                                           \
        Sanitizer::MstxCrossCoreBarrier soft_sync_barrier__{};     \
        soft_sync_barrier__.usedCoreNum = (core_num);              \
        Sanitizer::SanitizerReport(soft_sync_barrier__);           \
    } while (0)
#else
#define MSTX_SOFT_SYNC_FUSE_SCOPE_START()
#define MSTX_SOFT_SYNC_FUSE_SCOPE_END()
#define MSTX_SOFT_SYNC_SIGNAL_SET_REPORT(addr_, val_)
#define MSTX_SOFT_SYNC_SIGNAL_WAIT_REPORT(addr_, cmp_, val_)
#define MSTX_SOFT_SYNC_CROSS_CORE_BARRIER_REPORT(core_num)
#endif
```

然后在每个同步点插入:

```cpp
// set 侧(写 flag / 发信号)
MSTX_SOFT_SYNC_FUSE_SCOPE_START();
/* user-defined 软同步逻辑:写 flag、put、AtomicAdd 等 */
MSTX_SOFT_SYNC_FUSE_SCOPE_END();
MSTX_SOFT_SYNC_SIGNAL_SET_REPORT(flag_addr, written_value);

// wait 侧(轮询 flag / 等信号)
MSTX_SOFT_SYNC_FUSE_SCOPE_START();
/* user-defined 软同步逻辑:while 轮询 */
MSTX_SOFT_SYNC_FUSE_SCOPE_END();
MSTX_SOFT_SYNC_SIGNAL_WAIT_REPORT(flag_addr, Sanitizer::CompareOp::EQ, expected_value);
```

要点:

- `SanitizerFuseScopeStart()` / `SanitizerFuseScopeEnd()` 包裹的自定义软同步指令不会被 racecheck 检测,`SanitizerReport(record)` 上报同步语义。
- signal 的 set/wait 通过 `addr` 配对:对称内存下 set 方写入的地址与 wait 方轮询的地址数值相同。
- `(uint64_t)` 强转兼容 `GM_ADDR` 的指针/整型两种底层类型。
- 宏受 `__MSTX_DFX_REPORT__` 门控:非 mssanitizer 构建时为空,不影响普通编译。其余语义(barrier、set/wait)可仿照同一模式扩展对应宏。

## 参考资料

- [references/sanitizer-interface.md](references/sanitizer-interface.md) - Sanitizer 接口签名、结构体字段、CompareOp 枚举、参数说明
- [references/recognition-examples.md](references/recognition-examples.md) - 自实现软同步识别与归类的典型样例

Attribution

kali20gakkikali20gakki
View sourceMore from kali20gakki →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Responsive Design

Implement modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first breakpoint strategies. Use when building adaptive interfaces, implementing fluid layouts, or creating component-level responsive behavior.

397922 votes

Mermaid Diagrams

Creating and refining Mermaid diagrams with live reload. Use when users want flowcharts, sequence diagrams, class diagrams, ER diagrams, state diagrams, or any other Mermaid visualization. Provides best practices for syntax, styling, and the iterative workflow using mermaid_preview and mermaid_save tools.

2102 votes

sleek-design-mobile-apps

Use when the user wants to design a mobile app, create screens, build UI, or interact with their Sleek projects. Covers high-level requests ("design an app that does X") and specific ones ("list my projects", "create a new project", "screenshot that screen").

5711 votes

swiftui-design-skill

SwiftUI frontend visual design skill. Creates beautiful, distinctive iOS/macOS interfaces that avoid generic AI slop patterns. Covers design direction, layout systems, typography, color, spacing, brand integration, and design review. Use when designing new SwiftUI views, reviewing UI quality, creating iOS prototypes, choosing visual styles, improving app aesthetics, or when the UI looks generic or AI-generated.

1801 votes

Ios Hig

Use when designing iOS interfaces, implementing accessibility (VoiceOver, Dynamic Type), handling dark mode, ensuring adequate touch targets, providing animation/haptic feedback, or requesting user permissions. Apple Human Interface Guidelines for iOS compliance.

761 votes
View all in design →