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的位,以确保在硬件执行内置函数之前它们能正确汇聚。每个调用线程必须在掩码中设置自己的位,且掩码中指定的所有未退出线程必须使用相同的掩码执行相同的内置函数,否则结果将是未定义的。

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

相关推荐
NAGNIP2 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab3 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab3 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP7 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年7 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼7 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS7 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区8 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈9 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
端平入洛9 小时前
delete又未完全delete
c++