我在我的代码中对 float* 内存块进行了一些计算。由于我正在处理图像,因此我必须使用宽度 * 高度点和 180 次旋转来执行此操作。我正在启动 180 个线程(每度旋转 1 个),因为这是代码中唯一可并行化的过程。我旋转图像,并为每次旋转获取每个点的结果浮点值。我有另一个 float* 块,它存储每个点的当前最大值。
if(resultMap[i] < convrst)
{
resultMap[i] = convrst;
rMap[i] = (unsigned char)r0;
oMap[i] = (unsigned char)index;
}
使用 resultMap 存储当前的最大值。convrst 是卷积的结果,如果当前结果高于之前的结果,则保存该值,加上该点的半径(r0)和旋转(索引)。r0 最初是一个 int,以及索引。i 是一个从 0 到 imgsize-1 的计数器
如果没有 { } 部分中的分配,整个代码将在 2 秒内完成,而分配则需要 50 秒(这没有考虑到在该代码中我省略了锁以避免同步问题)。
为什么该代码这么慢,我该怎么做才能让它更快完成?