【问题标题】:fast comparison of arrays in iOSiOS中数组的快速比较
【发布时间】:2012-03-09 22:49:39
【问题描述】:
我需要在一个更大的二维值数组周围移动一个小的二维值数组,并将大于较小数组中相应值的较大数组的任何值设置为较小数组的值。想想图像合成,有点像,但使用两个 2D 浮点数组。我需要尽可能快地做很多次。只是想知道是否有某种方法可以使用 NEON Assembly、Accelerate 框架或其他我没听说过的方法进行优化。有什么比双嵌套 for 循环来比较和替换值要快得多吗?例如,将值存储为一维数组而不是二维数组会更快吗?或者更快地访问跨行而不是每列的值?只是试图挤出任何额外的速度,但不知道如何。
【问题讨论】:
标签:
iphone
arrays
optimization
neon
accelerate-framework
【解决方案2】:
如果你需要比较structs的一维C数组,你可以试试memcmp()看看它是否比for循环更有效。如果您负担得起某种数组哈希,则可以在数组不同的情况下显着提高性能。例如,如果您有一个浮点数组,则可以将它们的总和用作哈希。如果数组的哈希值不同,则根本不必比较数组。另一方面,如果您期望数组实际上大部分时间都是相等的,那么哈希的计算只会减慢速度。
在哈希计算方面发挥创意也可能有所帮助。在二维数组的情况下,哈希可能是一维数组哈希的多项式,甚至是带有元数据的struct,如数组大小、一维数组哈希的哈希等。
编辑:在我的机器上 memcmp() 在最坏情况下(当数组相等时)比较大型浮点数组时,比直接单线程 for 循环快大约 2 倍。