【问题标题】:OpenCL reduction - 2D matrix to 1-D arrayOpenCL 缩减 - 2D 矩阵到 1-D 数组
【发布时间】:2016-10-04 01:27:38
【问题描述】:

我有一个大小为 MxN 的二维数组,其中 N 是大于或等于 16 的 2 的幂,M 是不是 2 的幂的任意整数。例如,数组 A 的大小可以是200x32。

我想通过对数组的行执行减少(添加)操作来将数组 A 减小到 1x32 的大小。我遇到的大多数缩减都是通过使用 Blelloch/Hillis 扫描算法添加连续元素来将数组缩减为单个值。但在我的情况下,连续的元素是不相关的,不能添加。但是,我需要添加元素 [1, 33, 65...] 和元素 [2,34,66..] 等等。

由于这不是合并访问,解决此问题的最佳方法是什么?

【问题讨论】:

    标签: arrays parallel-processing opencl gpgpu reduction


    【解决方案1】:

    它是合并的:

    WorkItem1 -> 1 + 33 + 65 + ...
    WorkItem2 -> 2 + 34 + 66 + ...
    WorkItem3 -> 3 + 35 + 67 + ...
    ...
    

    如您所见,一组线程中的所有内存操作都是针对连续内存位置的。

    另外为了进一步优化,你可以尝试做向量操作,但我猜编译器已经自己优化了。

    【讨论】:

    • 我不确定我是否正确理解它,因为我正在学习这个。内存位置 1、33、65 在内存中不是连续布局的。这种合并访问是如何实现的?
    • 合并访问是指每次时钟的“t”时间所有内存访问都是连续的。工作项 1 没有运行并完成,然后工作项 2 开始,依此类推。相反,所有这些都同时运行。而所需的内存是 t1->[1,32], t2->[33,64], ... 以此类推
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2013-05-09
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多