已关闭
[Documentation|文档反馈]-“SPMD(Single Program, Multiple Data):每个线程运行同一份程序,但每个线程处理不同的数据元素。”这里应该是 SIMT,不是 SPMD #1573
magicbowen创建于  8月22日关闭于  20 天前
magicbowen
magicbowen
8月22日 创建
  1. 【文档链接】

https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/910/programug/Ascendcopdevg/docs/guide/入门教程/快速入门/异构系统与编程模型.md

  1. 【页面标记】

无

  1. 【问题类型】

内容错误(正确性)

  1. 【问题描述】

“SPMD(Single Program, Multiple Data):每个线程运行同一份程序,但每个线程处理不同的数据元素。”

这里应该是 SIMT,不是 SPMD

  1. 【预期结果】
  • 请填写预期结果
likedislike
shaonaiteshaonaite成员
8月24日 将 shaonaite 设为负责人
shaonaite
shaonaite成员
8月24日 评论:

你好。经确认,原文“SPMD(Single Program, Multiple Data)”表述正确。SPMD 描述的是程序组织方式,即多个执行实例运行同一份程序并处理不同数据。SIMT Kernel 采用的是 SPMD 编程方式。

likedislike
shaonaiteshaonaite成员
8月27日 将 ascendhjh 设为负责人
shaonaiteshaonaite成员
8月27日 移除了负责人 shaonaite
Aascendhjh成员
24 天前 关联了pull request:更新 SPMD+SIMD/SIMT编程模型描述
ascendhjh成员
24 天前 评论:

SPMD(Single Program, Multiple Data,单程序多数据)是一种程序级并行模型:多个独立计算单元同时执行同一份程序代码,但各自处理不同的数据分片。

SIMD(Single Instruction, Multiple Data,单指令多数据)与SIMT(Single Instruction, Multiple Threads,单指令多线程)同属指令驱动的并行执行范式:SIMD由单条指令同时驱动多个运算单元处理不同数据,硬件效率高但分支能力受限;SIMT以单条指令驱动多个线程并行执行,线程可独立分支,灵活性更强。

在Ascend C编程中,SPMD与SIMD/SIMT形成三种典型组合:

SPMD+SIMD:将AI Core抽象为逻辑核(Block),所有Block运行相同代码,以Block为视角编程,Block内部调用SIMD指令;
SPMD+SIMT:将硬件抽象为Grid→Thread Block→Thread架构,以Thread为视角编程,关注每个Thread需处理的数据;
SPMD+SIMD/SIMT混合:核函数本质遵循SPMD+SIMD,内部以向量函数(Vector Function, VF)为粒度进行SIMD与SIMT切换——SIMT VF抽象为一个SIMT Thread Block,内部基于Thread编程;SIMD VF内部直接调用SIMD指令。

为简化表述,以 SIMD 和 SIMT 分别指代对应的编程模型。

已提交PR更新描述:https://gitcode.com/cann/asc-devkit/pull/5938

likedislike
Aascendhjh成员
20 天前 issue状态由 进行中 改变为 已完成
Aascendhjh成员
20 天前 关闭了 issue
CANN-robotCANN-robot成员
19 天前 添加了label:resolved
Lliuliu876成员
18 天前 changed title from **文档反馈-内容错误(正确性)-“SPMD(Single Program, Multiple Data):每个线程运行同一份程序,但每个线程处理不同的数据元素。” 这里应该是 SIMT,不是 SPMD** to **[Documentation|文档反馈]-“SPMD(Single Program, Multiple Data):每个线程运行同一份程序,但每个线程处理不同的数据元素。”这里应该是 SIMT,不是 SPMD**
Lliuliu876成员
18 天前 issue类型由 任务 改变为 文档