ios - 我是否应该通过编程将计算量大的任务放在 IOS 上的单独线程上以利用多核?

标签 ios iphone

我正在和我的团队在 IOS 上制作一个实时图像处理应用程序。我正在处理自定义计算内核(主要在 CPU 而不是 GPU 上),我的队友处理 GUI。当我在玩具应用程序上测试我的内核时,内核(忽略任何 IO 开销)以每张图像 100 毫秒的速度稳定运行。然而,当放入全功能的时,它会减慢到每张图像 500 毫秒。

我已经检查过数据几乎是一样的,我只是在同一台 iphone6 上测量内核消耗的时间。在功能齐全的应用程序中几乎没有任何其他计算,所以我不确定是什么落后了。尽管 GPU 处理绝对是一种替代方案并且我正在研究它,但我想知道现在是否有任何技巧可以使用。

目前,计算部分没有明确的多线程,所以我的简单猜测是:我是否应该通过编程将计算部分放在一个单独的线程上,以便可以利用第二个核心?

[更新]

事实证明,我在将代码打包为库时犯了一些错误,因为复制源代码效果很好。我还没有弄清楚我的问题,我将把它发布在 separate question 上.

最佳答案

GPU Acceleration

这在很大程度上取决于您正在执行的任务,GPU 是特定任务的一个很好的子集,简单地使用它有时甚至会减慢速度。 Check this out

作为 Quartz 框架 e.t.c 一部分的许多基于图像的任务都是 GPU 加速的(比如模糊)。此外,如果您使用像 OpenCV 这样的库,您可以在某些任务上开箱即用地获得 GPU 加速。

除非您是真正的专业人士,否则我会避免专门使用 GPU,而让您使用的框架和库为您完成。

Concurrency

将密集型任务放在后台线程中肯定会有所帮助。请注意它的含义(即您不能从后台线程进行任何 UIKit 调用。

关于ios - 我是否应该通过编程将计算量大的任务放在 IOS 上的单独线程上以利用多核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34872622/

相关文章:

ios - 过于频繁地重新计算路线的问题

ios - 在委托(delegate)方法返回时使用 Cocoa 异步库的 Phonegap 插件中缺少回调 ID

html - iphone5 上的 iframe 问题默认将宽度设置为 980 px

ios - 苹果 watch : contexts not sending between view controllers

iphone - 无法让 Xcode 查看我的发行版认证?代码符号错误: The identify 'iPhone Distribution' doesn't match any identity in any profile?

ios - 如何使用完成处理程序对 SCNNode 应用一些更改

ios - iPhone 中的运行时类创建

ios - UserDefaults 可以在每次 .synchronize() 之后继续保存新数据吗?

html - 移动网页布局不一致问题

iphone SDK检测Wifi和运营商网络