Параллельное векторизованное сокращение подмассивов в массиве без явной итерации - PullRequest
0 голосов
/ 03 июля 2018

У меня есть линейный массив arr, представляющий собой комбинацию элементов из нескольких меньших подмассивов. Положение каждого подмассива в большом массиве задается массивом offsets.

Например

Если arr = [1,2,4,3,6,4,8,9,12,3] и offsets = [0,2,4,9], то под-массивами являются [1,2,4], [3,6] и [4,8,9,12,3].

Теперь, учитывая массив arr и offsets, я бы хотел выполнить параллельное сокращение для каждого подмассива. Давайте предположим, что мы хотим найти max() каждого подмассива. Таким образом, результат, в нашем примере, будет [4,6,12]. Важным ограничением в этом случае является то, что операции должны быть строго векторизованы, и явная итерация в циклах не допускается. Например, в python что-то подобное не разрешено:

import numpy
arr = numpy.array([1,2,4,3,6,4,8,9,12,3])
offsets = numpy.array([0,2,4,9])
max_array = numpy.empty(num_sub_arrays)

for i in range(num_sub_arrays):     # Eliminate this loop!
    max_array[i] = numpy.max(arr[offsets[i]:offsets[i+1]])

Как я могу добиться этого? Также обратите внимание, что код должен быть как можно более общим, поскольку я планирую реализовать его на нескольких аппаратных средствах (CUDA, AVX и т. Д.).

Любые реализуемые подсказки относительно этого будут очень полезны!

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