Касаемо clRetatinKernel

Тема в разделе "OpenCL", создана пользователем _qwe8013, 7 июн 2025.

  1. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    127
    Представим, что я собрал OpenCL программу через "clBuildProgram". В исходниках программы есть один kernel, назовём его "the_kernel". Далее я делаю следующее:
    Код (C):
    1. kernel1 = clCreateKernel("the_kernel");
    2. kernel2 = clRetainKernel(kernel1);
    Теперь я хочу вызывать kernel1 и kernel2 из разных потоков. Вопрос в том, если я сделаю clSetKernelArg(kernel1) и clSetKernelArg(kernel2) с тем же индексом, второй вызов clSetKernelArg сотрёт то, что записал первый, или у этих объектов аргументы будут храниться отдельно?
     
  2. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    392
    Аргументы kernel1 и kernel2 хранятся отдельно.
    Вызов clSetKernelArg(kernel2, ...) не затрёт аргументы kernel1, потому что каждый cl_kernel объект имеет собственное состояние аргументов, даже если они указывают на один и тот же исходный kernel в программе.
     
    _qwe8013 нравится это.
  3. _qwe8013

    _qwe8013 Active Member

    Публикаций:
    2
    Регистрация:
    30 ноя 2016
    Сообщения:
    127
    Ясно, спасибо.