Найти позицию первой 1 в несортированном массиве? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть несортированный массив, содержащий только 0 и 1.Как лучше всего найти позицию первой 1 в массиве, используя n процессорных ядер?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Предполагая, что вы заранее знаете длину массива, назовите эту длину k.Разбейте массив на n частей, имеющих индексы [0, k / n], [k / n + 1, 2 * k / n], ..., [(n-1) k / n + 1, k).Создайте статическую переменную для хранения индекса наименьшей части и инициализируйте его как INT_MAX (или эквивалентный).Назначьте одно ядро ​​процессора (или поток) для последовательного прохождения индексов в каждой части, проверяя индекс, в котором найдена первая 1, относительно значения статической переменной, и записывая новый индекс, если он меньше (и возвращая).Мьютексы / семафоры должны использоваться для управления чтением / записью для статической переменной.Используйте thread_join (или эквивалентный) для синхронизации завершения этой операции для каждого потока, затем напечатайте (или верните) индекс из основного потока.

0 голосов
/ 08 октября 2018

Пусть каждый процессор проверяет значение и возвращает свой собственный индекс для 1 и n для 0.

Далее каждый другой процессор возвращает минимум возвращенного значения и что его правый сосед вернул.

Тогда каждый четвертый процессор и так далее ...

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