Я начинал с OpenCL и хотел создать cl::Context
с несколькими устройствами. Изучая спецификации OpenCL 1.2 C ++ Wrapper Api, я нашел этот конструктор для cl::Context
:
Конструктор
cl::Context::Context(VECTOR_CLASS<Device>& devices, cl_context_properties * properties = NULL, void (CL_CALLBACK * pfn_notify)( const char * errorinfo, const void * private_info, ::size_t cb, void * user_data) = NULL, void * user_data = NULL, cl_int * err = NULL)
создает контекст OpenCL.
devices - указатель на вектор уникальных устройств, возвращаемых cl :: Platform :: getDevices. Если указано более одного устройства, критерии выбора могут применяться, чтобы определить, можно ли использовать указанный список устройств для создания контекста.
...
Myвопросы: каковы «критерии», применяемые реализацией OpenCL? Как я могу гарантировать, что список устройств, которые я передаю, совместим? Какие устройства совместимы (т. Е. Должны ли они быть одним и тем же типом устройства или чем-то еще?) И должны ли они быть от одной и той же платформы / поставщика (это подразумевается «уникальными устройствами, возвращаемыми cl :: Platform :: getDevices»")?
Конструктор установит код ошибки на CL_INVALID_DEVICE
, если devices содержит недопустимое устройство.