CUDA C++编程指南(7.19&20)——C++语言扩展之Warp投票函数和Warp匹配函数

7.19. Warp投票函数

复制代码
int __all_sync(unsigned mask, int predicate);
int __any_sync(unsigned mask, int predicate);
unsigned __ballot_sync(unsigned mask, int predicate);
unsigned __activemask();

弃用通知:__any__all__ballot已在CUDA 9.0中对所有设备弃用。

移除通知:当目标设备的计算能力为7.x或更高时,__any__all__ballot将不再可用,应改用它们的同步变体。

warp投票函数允许给定warp中的线程执行归约-广播操作。这些函数接收warp中每个线程的整数predicate作为输入,并将这些值与零进行比较。比较结果通过以下方式之一在warp的active线程间进行组合(归约),并将单个返回值广播给每个参与的线程:

__all_sync(unsigned mask, predicate):

mask中所有未退出的线程评估predicate,当且仅当所有线程的predicate评估结果均为非零时返回非零值。

__any_sync(unsigned mask, predicate):

mask中所有未退出的线程评估predicate,当且仅当任意线程的predicate评估结果非零时返回非零值。

__ballot_sync(unsigned mask, predicate):

mask中所有未退出的线程评估predicate,并返回一个整数值。当且仅当warp中第N个线程的predicate评估结果非零且该线程处于活动状态时,该整数值的第N位将被置位。

__activemask():

返回调用线程束中当前所有活动线程的32位整数掩码。当调用__activemask()时,如果线程束中的第N条通道处于活动状态,则设置第N位。非活跃线程在返回的掩码中用0表示。已退出程序的线程始终标记为非活动状态。请注意,在__activemask()调用处收敛的线程不能保证在后续指令中保持收敛,除非这些指令是同步的线程束内置函数。

对于__all_sync__any_sync__ballot_sync,必须传入一个指定参与调用的线程掩码。每个参与线程必须设置代表其通道ID的位,以确保在硬件执行该内置函数前这些线程能正确汇聚。每个调用线程必须在掩码中设置自己的位,且掩码中指定的所有未退出线程必须使用相同的掩码执行相同的内置函数,否则结果将是未定义的。

这些内部函数不隐含内存屏障。它们不保证任何内存排序。

7.20. Warp匹配函数

__match_any_sync__match_all_sync 在warp内的线程之间执行变量的广播-比较操作。

支持计算能力7.x或更高的设备。

7.20.1. 概述

复制代码
unsigned int __match_any_sync(unsigned mask, T value);
unsigned int __match_all_sync(unsigned mask, T value, int *pred);

T 可以是 intunsigned intlongunsigned longlong longunsigned long longfloatdouble

7.20.2. 描述

__match_sync() 内部函数允许在对 mask 中指定的线程进行同步后,在线程束(warp)中的线程之间广播并比较值 value

__match_any_sync

返回mask中与value值相同的线程掩码

__match_all_sync

如果mask中所有线程的value值相同,则返回mask;否则返回0。如果mask中所有线程的value值相同,则谓词pred设为true;否则谓词设为false。

新的*_sync匹配内置函数接收一个掩码,指示参与调用的线程。每个参与线程必须设置一个代表其通道ID的位,以确保在硬件执行内置函数之前它们能正确汇聚。每个调用线程必须在掩码中设置自己的位,且掩码中指定的所有未退出线程必须使用相同的掩码执行相同的内置函数,否则结果将是未定义的。

这些内部函数不隐含内存屏障。它们不保证任何内存排序。

相关推荐
小a彤16 分钟前
GE 在 CANN 五层架构中的位置
人工智能·深度学习·transformer
石山代码20 分钟前
C++ 内存分区 堆区
java·开发语言·c++
前端若水30 分钟前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
Upsy-Daisy32 分钟前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
企学宝38 分钟前
企学宝5月专题课程丨《OpenClaw AI 智能体实战营:从零基础部署到全场景自动化落地》
人工智能·ai·企业培训
冬奇Lab1 小时前
让 AI Agent 更可靠:Harness Engineering 与多 Agent 系统工程实践
人工智能·llm·agent
放下华子我只抽RuiKe51 小时前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
想你依然心痛1 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“文思智脑“——PC端AI智能体沉浸式智能写作工作台
人工智能·ar·harmonyos·ai写作
冬奇Lab1 小时前
一天一个开源项目(第108篇):Andrej Karpathy Skills - 用一个 CLAUDE.md 文件修复 LLM 编码的四个顽疾
人工智能·开源·资讯
涛声依旧-底层原理研究所1 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer