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

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

相关推荐
AI自动化工坊4 小时前
Late框架技术深度解析:5GB VRAM实现10倍AI编码效率的工程架构
人工智能·5g·架构·ai编程·late
我是大聪明.4 小时前
DeepSeek V4 Pro + 华为昇腾910:国产大模型落地的性能实测与深度解析
人工智能·华为
故事还在继续吗4 小时前
C++20关键特性
开发语言·c++·c++20
机器之心4 小时前
Generalist之后,罗剑岚团队推出LWD,也要变革具身智能训练范式
人工智能·openai
IT_陈寒4 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
传说故事4 小时前
【论文阅读】Diffusion Forcing: Next-token Prediction Meets Full-Sequence Diffusion
论文阅读·人工智能·diffusion
xixixi777775 小时前
三重筑基:5G-A超级上行提速千兆,电联低频共享扫平盲点,800V HVDC算电协同破局
人工智能·5g·ai·大模型·算力·通信·信通院
jkyy20145 小时前
AI运动数字化:以技术重塑场景,健康有益赋能全域运动健康管理
大数据·人工智能·健康医疗
金融小师妹5 小时前
4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构
大数据·人工智能·重构·逻辑回归
2601_949925185 小时前
AI Agent如何重构跨境物流的决策?
大数据·人工智能·重构·ai agent·geo优化·物流科技