さまざまなサイズ(8ビット、16ビット、32ビット、64ビット)の整数を格納するために、グローバルメモリのバイトバッファを使用する際に問題があります。Cuda:連続したさまざまなサイズのデータを格納するためにグローバルメモリを使用する
ポインタの値に4バイトの整数ではない整数を格納すると(たとえば、私が8ビット整数を格納したため)、アドレスは切り捨てられ、以前のデータは消去されます。いずれか使用して、このコード例では
__global__ void kernel(char* pointer)
{
*(int*)(pointer+3)=3300000;
}
、整数は、(ポインタ)に格納されている(ポインタ)、(ポインタ+ 1)、(ポインタ+ 2)、(ポインタ+ 3)は、考慮ポインタであります4の倍数。
ハードウェアレベルで32ビットブロックで構成されていますか? この作業を行う方法はありますか?
なぜ 'int'ポインタを使って、*コンパイラが最適な配列を決めるのはなぜですか?何百もの専門家が可能な限りハードウェアで最高の状態で動作するように設計されたテクノロジの一部です。 –
私はさまざまなサイズのデータを格納する必要があります:char、int、long long intなどです。私のプロジェクトでは、intポインタを使用して、charを格納する必要があるたびに24ビットのメモリを失うことはできません。 (等価なコードはCで完全に正常に動作するので、私はCudaの特異性のようです)。 – Ndech
Cudaにはワードサイズのアライメントが必要です。それは交渉可能ではありません。非32ビット整列アドレスを32ビット型にキャストすることはできません。 – talonmies