В 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<>
Итак, мой запрос:
- Возможно ли использоватьпохожая структура данных в CUDA?Если да, то как мне определить данные для хранения этих битов?
- Можно ли использовать __ ballot () для удовлетворения моих потребностей?но Nvidia API упоминает, что: означает ли это, что это не должно рассматриваться?
"Уведомление об устаревании: __any, __all и __ballot устарели в CUDA 9.0 для всех устройств."
Любое предложение приветствуется.