数组中子数组的并行向量化约简,无需显式迭代

时间:2018-07-03 10:59:47

标签: arrays algorithm parallel-processing vectorization

我有一个线性数组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]

现在,给定数组arroffsets,我想对每个子数组执行并行归约。假设我们要查找每个子数组的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等)上实现它。

关于它的任何可实施的提示将非常有帮助!

0 个答案:

没有答案