私は次の構造を持っています:
C++:
struct ss{
cl_float3 pos;
cl_float value;
cl_bool moved;
cl_bool nextMoved;
cl_int movePriority;
cl_int nextMovePriority;
cl_float value2;
cl_float value3;
cl_int neighbors[6];
cl_float3 offsets[6];
cl_float off1[6];
cl_float off2[6];
};
OpenCL:
typedef struct{
float3 nextPos;
float value;
bool moved;
bool nextMoved;
int movePriority;
int nextMovePriority;
float value2;
float value3;
int neighbors[6];
float3 offsets[6];
float off1[6];
float off2[6];
} ss;
これらの配列があり、それらを opencl バッファーに渡しますが、カーネルでそれらを操作すると、データが破損します。
これはアラインメントによるものだと思います。それに関する他の投稿を読みました
OpenCL のバッファでのデータの配置を理解するのに助けが必要です
しかし、それでも、配置を構造体に適切に設定する方法が完全にはわかりません。また、属性の整列およびパックされた修飾子を完全には理解していません。
そう:
Q1. 構造体が正しく機能するように調整する方法を教えてください。
Q2. すべてのアライメントの問題と修飾子を理解するために、私に説明するか、リンクを教えてもらえますか?
ありがとう。