5

CPUメモリ(C++ 11コードを使用)で作成され、または同様の方法でGPUにコピーされたブール配列bool[]( ではないことに注意)でGPU計算を行う必要があります。std::vector<bool>cuMemCpy

最初の質問:

sizeof(bool)1 バイトを報告します。これは C++11 標準で保証されていますか?

2 番目の質問:

true( )はfalse常に ( ) として表され1ます0か (unsigned char表現で)、またはコンパイラーはここで自由を持っていますか? (必要に応じて、256 未満のゼロ以外の整数を使用できます)

3 番目の質問 (PTX 固有):

PTX 論理演算orでは、xor、 などは 8 ビットより大きい型でのみ動作します。つまり、unsigned intwithに対して論理演算を実行できますor.u32 <out>,<in1>,<in2>。ただし、C++11型は 8 ビットのように見えるため、これは、CPU から GPU メモリに直接コピーさboolれた の配列を操作できないことを意味するので、最初の配列をいくつかの型 PTX 論理演算に変換する必要がありますか? 、 、などで動作しますか?boolsboolsu32u16

4

1 に答える 1

1

最初の答え:

いいえ、これは保証されません。[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 である必要はありません。


2番目の答え:

オブジェクトの値表現が実装定義であることは確かですがbool、それを明示的に述べているものは見つかりません。私が得ることができる最も近いものは次の[basic.types]/4とおりです。

...自明にコピー可能な型の場合、値表現は、値を決定するオブジェクト表現のビットのセットです。これは、実装定義の値のセットの1つの個別の要素です。


3番目の答え:

わかりませんが、あなたの説明からすると、確かにタイプを変更する必要があるようです。

于 2012-10-15T11:26:30.547 に答える