Нейтральный элемент для min () и max () в сокращении OpenCL

я делаю сокращение (нахождение минимума и максимума)float[] массив на GPU через OpenCL.I '

м загружает некоторые элементы изglobal память вlocal память для каждой рабочей группы. Когда глобальный размер неt, кратный размеру рабочей группы, я дополняю глобальный размер, так что он становится кратным глобальному размеру. Рабочие элементы после конца массива помещают нейтральный элемент сокращения вlocal объем памяти.

Но что этот нейтральный элемент должен быть дляmax() - максимальная функция?Документация OpenCL дает,MAXFLOATHUGE_VALF а такжеINFINITY как очень большой положительный (или без знака)float ценности. Имеет ли смысл иметь нейтральный элемент, чтобы быть-INFINITY например?

Прямо сейчас ям используюHUGE_VALF в качестве нейтрального элемента дляmin(), но документы также говорят, чтоHUGE_VALF используется в качестве значения ошибки, так что, возможно, это 'плохая идея

Сокращение ядра (Код):

#define NEUTRAL_ELEMENT HUGE_VALF
#define REDUCTION_OP min

__kernel void reduce(__global float* weights,
                     __local float* weights_cached
                    )
{
  unsigned int id = get_global_id(0);

  // Load data
  if (id < {{ point_count }}) {
    weights_cached[get_local_id(0)] = weights[id];
  } else {
    weights_cached[get_local_id(0)] = NEUTRAL_ELEMENT;
  }

  barrier(CLK_LOCAL_MEM_FENCE);

  // Reduce
  for(unsigned int stride = get_local_size(0) / 2; stride >= 1; stride /= 2) {
    if (get_local_id(0) < stride) {
      weights_cached[get_local_id(0)] = REDUCTION_OP(weights_cached[get_local_id(0)], weights_cached[get_local_id(0) + stride]);
    barrier(CLK_LOCAL_MEM_FENCE);
  }

  // Save
  weights[get_group_id(0)] = weights_cached[0];
}

Редактировать: Я на самом деле в конечном итоге с помощьюfmin() а такжеfmax() вместе сNAN в качестве нейтрального элемента - это в основном гарантированно работает в соответствии сOpenCL документация так как числовое значение всегда будет возвращено (NAN возвращается только если дваNAN значения приведены).

Ответы на вопрос(1)

Ваш ответ на вопрос