簡體   English   中英

如何獲得設定位的相對位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM