1

領域に応じて異なるタイプとして解釈したい cl_mem オブジェクトを介して OpenCL カーネルに渡すバッファがあります。

kernel void do_something(global void * data) {
    global double * offset_ptr = data + 20;
    global uint * offset2_ptr = data + 40;

    offset_ptr[5] = 4.0;
    offset2_ptr[2] = 5;
}

私の問題は2行目と3行目です。コンパイラから次のメッセージが表示されます。

Bitcasts between pointers of different address spaces is not legal.Use AddrSpaceCast instead.
%26 = bitcast i8 addrspace(1)* %19 to i8*

または似たようなもの。これを修正できます

... = (global) data + 20;

しかし、これは問題を覆い隠しているように感じ、アドレス空間に関する基本的なことを誤解しています。プログラムに別のエラーを導入すると、これらの同じ行が次のようになります。

warning: incompatible integer to pointer conversion initializing '__global double *__attribute__((address_space(16776963)))' with an expression of type 'unsigned int'

私はここで何をすべきですか?

4

0 に答える 0