我正在努力解决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]++;
}
}
}