【发布时间】:2018-02-04 10:30:49
【问题描述】:
为简单起见,我假设经线大小为 8。 我有掩码 10110110,由 __ballot 函数返回,如上:
int cond = xxxx ? 1 : 0;
mask = __ballot(cond);
现在,我需要线程集合中满足条件的线程的相对位置。
在上面的示例中,车道 id = {1,2,4,5,7} 满足条件。 但是,如何用掩码计算相对位置。比如我下面有个函数:
mask = 10110110
function(mask, 1) -> 0
function(mask, 2) -> 1
function(mask, 4) -> 2
function(mask, 5) -> 3
function(mask, 7) -> 4
如何按位运算来实现这个功能?
【问题讨论】:
-
请注意,一般情况下,您不应编写以下划线开头的函数或变量名称。 C11 §7.1.3 Reserved identifiers 表示以两个下划线或一个下划线和一个大写字母开头的名称无条件保留用于实现,因此
__ballot()最好由您的系统提供,而不是您编写的内容。 -
@JonathanLeffler 我假设您指的是
__ballot。这是特定于 CUDA 的语法,不是由 OP 创建的,请参阅 here ,其中显示了__ballot_sync;以前的 CUDA 版本定义了一个函数__ballot作为实现的一部分。 -
@RobertCrovella:很好——我的评论很好地涵盖了这个案例。是系统提供的东西,所以使用是OK的,我的评论也是这么说的。
标签: c++ c cuda bit-manipulation