Что такое OpenCL-эквивалент типа C ++ std :: vector :: size_type?

Эта тема была затронута в Где я должен использовать типы данных OpenCL? но это не ответило на мои вопросы.

(1) Каким должен быть тип связывания opencl и тип ядра opencl для типа C ++ std :: vector :: size_type?

(2) Как мне преобразовать std :: vector :: size_type в тип привязки, который вы упомянули в своем ответе (1), прежде чем устанавливать его в качестве ptr хоста в clCreateBuffer ()?

Причина, по которой мне нужно выше, заключается в том, что я пытаюсь передать размер вектора в свое ядро.

1

Решение

  1. Это зависит. 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,

  2. static_cast<cl_uint>(v.size()) или даже boost::numeric_cast<cl_uint>(v.size()) (который выдает исключение, если значение не может вписаться в cl_uint).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]