C++ 在GPU上查找最小值需要太多内存操作

C++ 在GPU上查找最小值需要太多内存操作,c++,gpgpu,openacc,C++,Gpgpu,Openacc,我有9个2D数组,我想计算8个数组中每个元素的最小值,并将它们存储在第9个数组中。我已经写了一个代码,但它需要很多内存操作。 我的GPU是Nvidia GTX 1060,我使用OpenACC加速。 你能帮我优化这段代码,用更少的运算找到最小值吗? 这是我的密码 for (int i=1; i<(height); i++) { for (int j=0; j <( width); j++) { ( thresh_array[i-1][j] &l

我有9个2D数组,我想计算8个数组中每个元素的最小值,并将它们存储在第9个数组中。我已经写了一个代码,但它需要很多内存操作。 我的GPU是Nvidia GTX 1060,我使用OpenACC加速。 你能帮我优化这段代码,用更少的运算找到最小值吗? 这是我的密码

    for (int i=1; i<(height); i++)
{
    for (int j=0; j <( width); j++)

    {
        ( thresh_array[i-1][j] < top_left[i-1][j])? :  thresh_array[i-1][j] = top_left[i-1][j];
        ( thresh_array[i-1][j] < top[i-1][j])? :  thresh_array[i-1][j] = top[i-1][j];
        ( thresh_array[i-1][j] < top_right[i-1][j])? :  thresh_array[i-1][j] = top_right[i-1][j];
        ( thresh_array[i-1][j] <left[i-1][j])? :  thresh_array[i-1][j] = left[i-1][j];
        ( thresh_array[i-1][j] < right[i-1][j])? :  thresh_array[i-1][j] = right[i-1][j];
        ( thresh_array[i-1][j] < bot[i-1][j])? :  thresh_array[i-1][j] = bot[i-1][j];
        ( thresh_array[i-1][j] < bot_left[i-1][j])? :  thresh_array[i-1][j] = bot_left[i-1][j];
        ( thresh_array[i-1][j] <bot_right[i-1][j])? :  thresh_array[i-1][j] = bot_right[i-1][j];
    }
}

for(int i=1;我不确定这是否会增强您的代码,但我会从
i
开始:
for(int i=0,n=height-1;i
…当您更改循环范围时,可以将每个
[i-1]
替换为
[i]
.Btw.在
高度-1
之前停止循环正确吗?不知道更多细节,我不能确定,但它看起来有点可疑…这是一种非常模糊的写入
min
的方法…而且…编译器应该对此进行优化,但以防万一,尝试找到局部变量的最小值,然后将其存储到目标数组。@Scheff没问题,但它并没有提升我的代码。我试图做的是将一个像素与其8个相邻像素进行比较,然后找到8个像素中的最小值,所有这些值都是双精度而不是整数。@MichaelNastenko我找到了另一种方法。使用相同的概念,一次只比较3个值。它确实改善了内存操作所以现在我想知道是否有一种方法可以用更少的代码行来比较更多的元素。