有什么方法可以在CUDA中使用类似位图的结构?

时间:2019-04-02 01:15:39

标签: cuda

c/c++中,我们可以使用1 bit表示0/1,但是我不知道如何在CUDA中完成这项工作。我检查了一些发布的问题,但没有找到答案。 我想在c / c ++中做的是这样的:

#ifndef CBITMAP_H_
#define CBITMAP_H_
#include <boost/dynamic_bitset.hpp>
class CBitMap{
public:
    ID base;
    boost::dynamic_bitset<> bits;

    CBitMap(ID minID,ID maxID):base(minID){
        bits.resize(maxID-minID+1,false);
    }

    bool ifContains(ID id){
        if(id < base || id > base+bits.size()-1) return false;
        return bits[id-base];
    }

    bool insert(ID id){
         bits[id-base] = true;
    }

    bool get(ID id){
        if(id < base || id > base+bits.size()-1) return false;
        return bits[id-base];
    }

    void set(ID id,bool v){
        bits[id-base] = v;
    }
};
#endif

工作取决于boost::dynamic_bitset<>,所以,我的疑问是:

  1. 是否可以在CUDA中使用类似的数据结构?如果是这样,如何 我应该定义数据来保存这些位吗?
  2. __ballot()可以用来满足我的需求吗?但是Nvidia API 提到:这是否意味着不应该考虑?
      

    “弃用通知:__any,__ all和__ballot已弃用   在所有设备的CUDA 9.0中都是如此。”

任何建议都值得赞赏。

0 个答案:

没有答案