1

このトピックは、 OpenCLデータ型をどこで使用する必要があるかで触れられました。しかし、それは私の質問に答えませんでした。

(1)C++タイプのstd:: vector :: size_typeの場合、バインディングopenclタイプとカーネルopenclタイプはどうあるべきですか?

(2)std :: vector :: size_typeを、ホストptrとしてclCreateBuffer()に設定する前に、(1)への回答で言及したバインディングタイプに変換するにはどうすればよいですか?

上記が必要な理由は、ベクトルのサイズをカーネルに渡そうとしているためです。

4

1 に答える 1

1
  1. 場合によります。cl_uint/uintcl_ulong/ulongは可能な代替手段です。ベクトルのサイズが最大で2³²-1の場合は、前者で十分です。その制限を超えた場合にのみ、cl_ulong/の使用を検討する必要がありますulong。その前に、他のいくつかの制限を破る可能性があります。たとえば、デバイスの最大許容バッファサイズ(CL_DEVICE_MAX_MEM_ALLOC_SIZE)やアドレス空間(CL_DEVICE_ADDRESS_BITS)などです。したがって、/を使用する非常に正当な理由がない限り、/に固執することをお勧めしcl_uintます。uintcl_ulongulong

  2. static_cast<cl_uint>(v.size())またはboost::numeric_cast<cl_uint>(v.size())(値がに収まらない場合は例外をスローしますcl_uint)。

于 2012-09-20T10:12:11.387 に答える