Эта тема была затронута в Где я должен использовать типы данных OpenCL? но это не ответило на мои вопросы.
(1) Каким должен быть тип связывания opencl и тип ядра opencl для типа C ++ std :: vector :: size_type?
(2) Как мне преобразовать std :: vector :: size_type в тип привязки, который вы упомянули в своем ответе (1), прежде чем устанавливать его в качестве ptr хоста в clCreateBuffer ()?
Причина, по которой мне нужно выше, заключается в том, что я пытаюсь передать размер вектора в свое ядро.
Это зависит. cl_uint
/uint
а также cl_ulong
/ulong
Возможны альтернативы. Первое достаточно, когда размер вашего вектора не больше 2³² — 1. Если и только если вы превысите этот предел, вам следует подумать об использовании cl_ulong
/ulong
, Скорее всего, вы нарушите некоторые другие ограничения, прежде чем это произойдет, например, максимально допустимый размер буфера (CL_DEVICE_MAX_MEM_ALLOC_SIZE
) или адресное пространство (CL_DEVICE_ADDRESS_BITS
) устройства. Так что мой совет будет придерживаться cl_uint
/uint
если нет очень веских причин для использования cl_ulong
/ulong
,
static_cast<cl_uint>(v.size())
или даже boost::numeric_cast<cl_uint>(v.size())
(который выдает исключение, если значение не может вписаться в cl_uint
).
Других решений пока нет …