Каково значение и цель аргумента `property` в clCreateContext - PullRequest
1 голос
/ 15 апреля 2020

Я реализую небольшое шаблонное приложение для приложений openCL, а точнее, сейчас создаю контекст.

Я читал документацию https://www.khronos.org/registry/OpenCL/sdk/1.2/docs/man/xhtml/clCreateContext.html

И я цитирую:

Указывает список имен свойств контекста и их соответствующих значений. За каждым именем свойства сразу же следует соответствующее требуемое значение. Список заканчивается 0. Свойства могут быть NULL, и в этом случае выбранная платформа определяется реализацией. Список поддерживаемых свойств описан в таблице ниже.

А вот и список ...

Однако я не могу понять, какова цель этих свойств, как именно они использовали для? Как указание этих свойств влияет на выполнение моей программы или только на дизайн? Я видел несколько примеров, когда этот аргумент просто установлен на 0 или nullptr.

Вы можете уточнить?

1 Ответ

0 голосов
/ 16 апреля 2020

Свойство CL_CONTEXT_PLATFORM позволяет выбрать идентификатор конкретной платформы. Для clCreateContext() это не очень полезно, так как в любом случае платформа будет неявно выбрана через список устройств. Однако для clCreateContextFromType() это позволяет вам создать контекст, например, для «всех графических процессоров в системе, использующих реализацию AMD» (в отличие от реализации Intel).

Другие свойства облегчают взаимодействие между OpenCL и другими графические или вычислительные библиотеки, такие как OpenGL, DirectX и тому подобное. Поэтому, если вы хотите обмениваться текстурами между OpenCL и OpenGL, это говорит вашей реализации Open CL , для которой в контексте Open GL вы будете предоставлять имена текстур, которые являются просто целочисленными дескрипторами и не уникальны для контекстов OpenGL.

С практической точки зрения вы передаете свойства в виде массива с нулем в конце, например:

cl_context_properties properties[] =
  {
    CL_CONTEXT_PLATFORM, selected_platform_id,
    0 // signals end of property list
  };
cl_int error = 0;
cl_context context = clCreateContextFromType(properties, CL_DEVICE_TYPE_GPU, NULL, NULL, &error);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...