[英]How to get the relative position in set bit
為了簡化表達,我假設扭曲大小為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
如何通過按位操作實現此功能?
為了獲得相對位置,我只需要屏蔽投票屏蔽的特定部分並計算這些屏蔽位。 使用CUDA的__popc
對位數進行計數,就像
int function(int mask, int pos)
{
int m = (1 << pos) - 1;
return __popc(mask & m);
}
這樣,您可以計算從最右邊的位到給定pos處的位的設置位的數量,這是您所描述的設置位的相對位置。 請注意,該代碼實際上不會計算給定位置的位,而只會計算該位之前的所有設置位。 如果您不能或不想使用__popc
,則可以看到為僅位操作(因此可移植)的代碼計算漢明權重的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.