我想减少opencl。
我有一个复数MXN数组,其中每个复数都存储为float2(即val.x和val.y在内存中顺序排列)。我想对原点位于整数索引(x_off,y_off)的子数组进行归约。子数组的尺寸为mXn,并完全封闭在较大的外部数组中(因此,我们无需检查越界条件)。所有维度(M,N,m,n)都不是2的幂。但是,我可以确保所有维度都是8、16或32的某个倍数(或较小的数字会使算法更简单)。 M和N通常在768到4096之间。m和n通常在64到2048之间。
减少是确定范数平方的最大值(即mXn子数组上的val.x * val.x + val.y * val.y的最大值)。重要的是要理解,较大的外部数组包含float2,而减小的值是单个float。
有人能建议一种使用opencl(甚至CUDA)在GPU上计算速度快或至少正确的方法吗?
当前,我将子阵列复制到另一个阵列,然后使用标准归约技术。我想避免复制,因为我有大约200个外部数组,每个外部数组都有大约1000个不同的子数组。
谢谢。