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