Как определить функции в OpenCL?

Как определить функции в OpenCL? Я попытался построить одну программу для каждой функции. И это не сработало.

float AddVectors(float a, float b)
{
    return a + b;
}

kernel void VectorAdd(
    global read_only float* a,
    global read_only float* b,
    global write_only float* c )
{
    int index = get_global_id(0);
    //c[index] = a[index] + b[index];
    c[index] = AddVectors(a[index], b[index]);
}

person Kayhano    schedule 01.08.2010    source источник


Ответы (1)


Вам не нужно создавать одну программу для каждой функции, вместо этого вы создаете программу для набора функций, помеченных __kernel (или kernel), и потенциально вспомогательных функций (таких как ваша функция AddVectors), используя, например, вызов clCreateProgramWithSource.

Ознакомьтесь с базовыми руководствами от Apple, AMD, NVIDIA.

person Stringer    schedule 02.08.2010
comment
Я только что проверил это. Не получил никаких ошибок, поэтому он может работать. Также только что узнал, что clBuildProgram не является потокобезопасным. Итак, мы помещаем все программы в один файл cl не просто так. - person huseyin tugrul buyukisik; 23.01.2014