ios - 优化 iOS 应用程序的迭代循环

标签 ios arrays swift optimization instruments

<分区>


想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post .

关闭 7 年前

这个问题听起来有点愚蠢;但由于我是编程新手,我想你们中的一些人可能会在这方面帮助我。我有以下代码片段:

    for k in 0..<64{
        for i in 0..<14{
            for j in 0..<14{
                for di in 0..<5{
                    for dj in 0..<5{
                        for q in 0..<32{
                            A2[0][j][i][k] = A2[0][j][i][k] + T2[0][j+dj+1][i+di+1][q]*W2[k][q][dj][di]

                        }
                    }
                }
            }
        }
    }

在这里你可以看到 for 循环运行了 64*14*14*5*5*32 = 10035200 次。当我查看 Instruments 的性能时,我发现这部分代码占用了 57.4% 的运行性能时间。我在下面发布了快照。

Performance Snapshot!

有什么办法可以优化吗?我想到了将它转换成一维数组并进行计算;但这只会使代码在可读性方面更加困惑。

编辑:

 var A2: [[[[Float]]]] = [[[[Float]]]](count: 1, repeatedValue: [[[Float]]](count: 14, repeatedValue: [[Float]](count: 14, repeatedValue: [Float](count: 64, repeatedValue: Float()))))

 var T2: [[[[Float]]]] = [[[[Float]]]](count: 1, repeatedValue: [[[Float]]](count: 20, repeatedValue: [[Float]](count: 20, repeatedValue: [Float](count: 32, repeatedValue: Float()))))


    for k in 0..<32{
        for i in 0..<14{
            for j in 0..<14{
                T2[0][i+3][j+3][k] = HP1[0][i][j][k]
            }
        }
    }

HP1是之前计算好的数组; W2是预先计算好的,据此进行上述计算。

最佳答案

只是一个简单的开始:您有 i、j 和 k 的三个循环,然后有三个内部循环,您可以在其中将内容添加到同一元素 A2 [0][i][j][k]。所以你拿这个:

for di in 0..<5{
    for dj in 0..<5{
        for q in 0..<32{
            A2[0][j][i][k] = A2[0][j][i][k] + T2[0][j+dj+1][i+di+1][q]*W2[k][q][dj][di]
         }
    }
}

并将其更改为:

let sum = A2[0][j][i][k]
for di in 0..<5{
    for dj in 0..<5{
        for q in 0..<32{
            sum += T2[0][j+dj+1][i+di+1][q]*W2[k][q][dj][di]
         }
    }
}
A2[0][j][i][k] = sum

现在我假设您不止一次执行此操作(因为 1000 万并不算多),所以也许可以告诉我们您如何多次调用此操作 - 也许这就是您可以保存某些内容的地方。

顺便说一句。对于此类问题,您可能会发现调试版本和发布版本之间存在巨大 差异。

如果您可以重新排列数组 W2 以便您可以将其作为 W2[k][dj][di][q] 访问,那可能会有很大帮助。

关于ios - 优化 iOS 应用程序的迭代循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36873883/

上一篇:javascript - react-native 中的 clonewithrows 数组问题

下一篇:ios - NSInvalidArgumentException 使用 UISegmentedControl

相关文章:

使用 .p8 文件后未收到 iOS Firebase 云消息通知

iphone - 如何在 iOS 设备上的触摸周围显示圆圈?

ios - 使用closePath函数关闭贝塞尔路径和手动关闭有什么区别?

Javascript 追加 JSON 对象

arrays - 使用 bool 数组在 O(n) 中查找字符串的第一个非重复字符?

swift - 在ARKit中渲染新图像时如何清除内存?

ios - MapBox iOS SDK 框架

ios - 如何在后台队列上渲染上下文?

Javascript 使用 json 中的值编写循环并将其嵌套数据作为 json 对象传递给循环

ios - 在 Swift 中将 PFObject (Parse) 转换为 JSON?