Рассчитать условное среднее - PullRequest
3 голосов
/ 23 августа 2011

Я новичок в программировании cuda и заинтересован в реализации алгоритма, который при последовательном кодировании вычисляет два или более средних из вектора за один проход.Какова будет эффективная схема для выполнения чего-то подобного в cuda?

Есть два вектора длины N, значения элементов и значения индикатора, определяющие, к какому подмножеству относится каждый элемент.

Есть лиэффективный способ сделать это за один проход, или это должно быть сделано за M проходов, где M - количество вычисляемых средств и использование вектора индексных ключей для значений элементов каждого подмножества?

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

Этого можно достичь одним проходом данных за один вызов thrust :: redu_by_key .В частности, посмотрите на пример "суммарной статистики" , который вычисляет несколько статистических свойств одного вектора одновременно.Вы можете обобщить этот метод до reduce_by_key, который вычисляет сокращения по многим субвекторам параллельно.Ваши «значения индикатора» будут представлять собой «ключи», которые reduce_by_key использует для определения того, к какому подвектору принадлежит каждый элемент.

2 голосов
/ 23 августа 2011

Разделите каждый вектор на более мелкие векторы и используйте потоки для суммирования требуемых элементов каждого субвектора. Затем объедините суммы и сгенерируйте глобальные средства. Я бы попытался генерировать средства М одновременно, а не проходы М.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...