【发布时间】:2019-06-25 07:56:15
【问题描述】:
我想做的是: 我在第一个(行)维度中有一个“扩展”数组。例如,我有一个 1080 行和 1920 列的图像。这个扩展数组是 (8*1080) 行和 1920 列,8 表示“行块”大小。 我想要做的是制作一个大小为 8x1 的新数组。 这个新数组将保存第 i 个(i=0 到 7)的每个块的总和。
在上面的示例中,新数组的第一个元素 (i=0) 将是扩展数组中这些像素的总和(线性索引,按列):
0, 8(因为 8 是第二块的第一个元素),16(第三块).....
另一个例子是第二个元素:
1、9、17、...
我认为这可以并行化?我正在尝试解决这个问题,但我无法解决,我尝试了 gfor,但找不到解决方法,arrayfire 不可能吗?任何帮助表示赞赏!
我曾尝试使用 gfor,但无法解决问题。
这是我尝试过的一些代码:rx 是 8x1 (p_squared_1 = 8) 并且 rx_all 是扩展的 (p_squared*rows, columns) 数组。 注意我使用的是 seq "+" 运算符,因为如果我尝试写 "i+p_squared_1" 会有歧义,我认为......这是我的错误,但我找不到另一种方法来添加一个值一个 seq 对象)。
af::array rx(p_squared_1, 1);
gfor(af::seq i, rows*cols*(p_squared_1-1)) {
rx(i) = af::sum<float>(rx_all(i.operator+( (const int)p_squared_1)));
}
af::eval(rx);
cout << af::sum<float>(rx);
我希望得到一个 8x1 数组,其中每个第 i 个元素是扩展数组中每个块的第 i 个元素的总和。
【问题讨论】:
标签: c++ parallel-processing sum opencl arrayfire