rit*_*ter 5 c++ gpu boolean c++11 ptx
我需要对在CPU内存中创建的布尔数组bool[]
(注意,而不是a std::vector<bool>
)进行GPU计算(使用C++ 11代码),然后通过cuMemCpy
或类似地复制到GPU .
第一个问题:
sizeof(bool)
报告1个字节.这是否由C++ 11标准保证?
第二个问题:
是true
(false
)总是表示为1
(0
)(在unsigned char
表示中)还是编译器在这里有自由?(如果需要,它可以使用任何小于256的非零整数)
第三个问题(特定于PTX):
在PTX逻辑运算or
中xor
,等仅对大于8位的类型进行操作.那就是我可以在unsigned int
with 上进行逻辑运算or.u32 <out>,<in1>,<in2>
.但是,由于C++ 11 bool
类型似乎是8位,这是否意味着我无法操作bools
直接从CPU复制到GPU内存的数组,因此我需要将第一个数组转换bools
为某种类型的PTX逻辑操作可以操作上,也就是说u32
,u16
等?
第一个答案:
不,这不能保证。请参阅[expr.sizeof]/1
和相关脚注:
... sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 均为 1。应用于任何其他基本类型 (3.9.1) 的 sizeof 的结果是实现定义的。[注意:特别是, sizeof(bool)、sizeof(char16_t)、sizeof(char32_t) 和 sizeof(wchar_t) 是实现定义的75。...
75) sizeof(bool) 不需要为 1。
第二个答案:
我很确定bool
对象的值表示是实现定义的,但我找不到任何明确说明这一点的内容。我能得到的最接近的是[basic.types]/4
:
...对于普通可复制类型,值表示是对象表示中确定值的一组位,该值是实现定义的一组值的一个离散元素。
第三个答案:
我不知道,但从你的描述来看,你肯定必须改变类型。
归档时间: |
|
查看次数: |
303 次 |
最近记录: |