OpenMp中的应用程序比串行代码c ++慢

时间:2017-06-22 22:00:42

标签: c++ performance openmp

我正在努力解决OpenMp任务

我必须优化几种方法的计算 - 其中包括直方图。

我花了3天时间尝试了大约50种不同的方法,但仍然如此 我的代码比串行执行慢

有人能告诉我我做错了什么吗? 你有什么线索如何解决这个问题吗?

以下是需要优化的代码: (par1通常小于10000,下面发布的代码放在某些方法中,在测试期间它被调用大约100次)

unsigned long index;
for (unsigned int par1 = 0; par1 < limit; par1++) {
    for (unsigned int par2 = 0; par2 < par1; par2++) {
        index = getDistance(par1, par2) / param;
        if (index < size) {
            hist[index]++;
        }
    }
}

...

问题是每次迭代需要完成的计算量是可以改变的 - 当迭代计数器增长时,操作量急剧增加

我知道减少可能是最好的方式,但我不知道如何 将它应用于此数组

这是我的一次尝试,但它比串行执行慢,(我将两个循环合并为一个):

unsigned long index; for (unsigned int par1 = 0; par1 < limit; par1++) { for (unsigned int par2 = 0; par2 < par1; par2++) { index = getDistance(par1, par2) / param; if (index < size) { hist[index]++; } } }

0 个答案:

没有答案