![]() |
1
2
而不是
|
![]() |
2
0
请注意,内存不足的原因可能是您使用了
简而言之,在如此大的映像上以您的方式并行化操作是不可行的。将其并行化的正确方法是将图像切割成块,并在不同的线程上处理每个块。如果碎片很小(我敢假设这个名字),应该可以只使用一个小的重叠来处理瓷砖(瓷砖需要重叠,以便每个碎片都完全在瓷砖内部,至少在瓷砖上)。在这种情况下,删除重复项要复杂一些,因此并行化并不简单。 然而,我希望下面的建议根本没有必要对代码进行并行化。 从代码中可以清楚地看到,同一类的片段不会相互影响。但不清楚不同类的片段是否不接触(即,如果它们接触,代码将产生相同的输出)。 假设他们没有 ,可以避免两个循环。
其想法是一次性标记所有片段,不考虑类别。所以与其打电话
接下来,使用
从这一点开始,我们只处理
这可能是代码:
最后一个循环可能没有必要,我没有找到快速的替代方法。我无法想象它会很昂贵,但如果是这样的话,将其并行化或通过排序来改进它是微不足道的
可以使用@bla的建议重写上述代码
对于256x256、63个片段的小测试图像来说,这要快3到4倍。然而,考虑到您正在处理的图像的大小,我担心这实际上可能效率很低。 唯一知道的方法是尝试这两种方法并计时! 关于代码的一些注意事项:
将其初始化为空结构数组,但使用
这将创建L在水平轴上的最大投影(80k元素),然后在此范围内找到最大投影。与其他地方一样,重塑矩阵更有效:
|
![]() |
CocoaMix86 · 变量超出作用域后未回收内存[重复] 4 月前 |
![]() |
Yousef Dawood · javascript中的不变性是什么意思 10 月前 |
![]() |
SkyBlue · Java Spring服务的内存/垃圾收集器问题 11 月前 |
![]() |
f99 · 需要在内存位置使用指针-bad_alloc返回对象实例的建议吗? 11 月前 |