Я запускаю фильтр на изображении, и я выполняю вертикальный проход, за которым следует горизонтальный проход. Функция для этой задачи одинакова для обоих проходов, меняются только значения аргументов. Я вызываю функцию в цикле. Для векторизации операций в этой функции я должен написать отдельные вызовы функций для двух проходов. Теперь петля разделена на горизонтальные и вертикальные проходы. Из-за этого изменения добавлено «если условие», и я заметил, что даже если вычисления векторизованы, ядро занимает больше времени для выполнения. Я запустил код несколько раз, и среднее время, затраченное на векторизованный код, больше, чем исходный код. Это из-за того, что «если условие» включено в код?Действительно ли «если условия» влияют на производительность выполнения ядра в OpenCL?
Оригинальный код
global int* a;
for(int i = 0; i < 4; i++)
{
filter(a + i, b, c);
}
Модифицированный код
global int* a;
if(offset == 1)
for(int i = 0; i < 4; i++)
{
filter_vertical(a + i, b, c);
}
else
filter_horizontal(a, b, c);
Пожалуйста, покажите нам фрагмент вашего фрагмента кода. Способ использования выражения 'if' может изменить ответ. –