2016-10-02 2 views
0

Предположим, я хочу использовать графический процессор для поиска определенного значения в несортированном 1D массиве размером 2^L, где L - положительное четное целое число. Все значения в массиве уникальные. Можно ли использовать параллельное сокращение (метод пинг-понга), чтобы уменьшить результат поиска до одного номера?Использование техники пинг-понга для поиска значения в массиве 1D?

Моя интуиция говорит мне, что это возможно, но я понятия не имею, как начать. Может кто-нибудь мне помочь? Я застрял на нем целыми днями! Любое предложение приветствуется, спасибо!

+0

Почему вы хотите использовать сокращение? Вам нужно найти какое-либо событие, или первое, или все из них? – Dimaleks

+0

@Dimaleks: 1-й номер –

+0

Ожидаете ли вы, что будет много случаев? Я имею в виду, что в обычном сценарии у вас будет встречаться каждые 10 элементов или 10 000? – Dimaleks

ответ

1

Если каждый из ваших потоков записывает 0 или их (1D индекс + 1) в выходной буфер в зависимости от того, нашли ли они искомое значение, вы можете запустить prefix sum позже и найти (1D index + 1), который соответствует искомому значению в выходном буфере в O (log n) вместо O (n), что было бы альтернативой, когда вы просто перебираете всю вещь.