草庐IT

iphone - IOS/iPad/iPhone 的最大速度

coder 2023-07-29 原文

我使用 OpenCViOS 开发了计算密集型应用程序。当然很慢。但它比我的 PC 原型(prototype)慢了大约 200 倍。所以我正在优化它。从最初的 15 秒开始,我就能获得 0.4 秒的速度。我想知道我是否找到了所有东西以及其他人可能想要分享的东西。我做了什么:

  1. 将 OpenCV 中的“double”数据类型替换为“float”。 Double 是 64 位的,32 位的 CPU 不能轻易处理它们,所以 float 给了我一些速度。 OpenCV 经常使用 double。

  2. 将“-mpfu=neon”添加到编译器选项。副作用是模拟器编译器不再工作的新问题,任何东西都只能在 native 硬件上测试。

  3. 用 90 个值查找表替换了 sin()cos() 实现。加速是巨大的!这与 PC 有点相反,在 PC 中,此类优化不会带来任何加速。有以度为单位的代码,此值已转换为 sin()cos() 的弧度。此代码也已删除。但是查找表完成了这项工作。

  4. 启用“缩略图优化”。一些博客文章的建议恰恰相反,但这是因为拇指通常会使 armv6 上的速度变慢。 armv7 没有任何问题,而且速度更快,体积更小。

  5. 为了确保 thumb 优化和 -mfpu=neon 最好地工作并且不会引入崩溃,我完全删除了 armv6 目标。我所有的代码都编译为 armv7,这也在应用商店中列为要求。这意味着最低 iPhone 将是 3GS。我认为放弃旧的是可以的。无论如何,较旧的 CPU 速度较慢,如果安装在旧设备上,CPU 密集型应用会提供糟糕的用户体验。

  6. 我当然用-O3标志

  7. 我从 OpenCV 中删除了“死代码”。通常在优化 OpenCV 时,我会看到我的项目显然不需要的代码。例如,通常有一个额外的 "if()" 来检查像素大小是 8 位还是 32 位,我知道我只需要 8 位。这会删除一些代码,为优化器提供更好的机会来删除更多内容或替换为常量。代码也更适合缓存。

还有其他技巧和想法吗?对我来说,启用 thumb 并用查找替换三角函数是插入因素,让我感到惊讶。也许您还知道可以做些什么来让应用飞速发展?

最佳答案

如果您正在进行大量浮点计算,那么使用 Apple 的 Accelerate 将对您大有裨益。框架。它旨在使用浮点硬件对向量进行并行计算。

我也会一一解决你的问题:

1) 这不是因为 CPU,而是因为从 armv7 时代开始,浮点处理器硬件中只会计算 32 位浮点运算(因为苹果更换了硬件)。 64 位的将改为在软件中计算。作为交换,32 位操作变得更快。

2) NEON是新的浮点处理器指令集的名称

3) 是的,这是众所周知的方法。另一种方法是使用我上面提到的 Apple 框架。它提供了并行计算 4 个值的 sin 和 cos 函数。这些算法在汇编和 NEON 中进行了微调,因此它们在使用最少的电池的同时提供了最大的性能。

4) 新的 armv7 实现的 thumb 没有 armv6 的缺点。禁用建议仅适用于 v6。

5) 是的,考虑到现在 80% 的用户使用 iOS 5.0 或更高版本(armv6 设备在 4.2.1 结束支持),这在大多数情况下是完全可以接受的。

6) 当您在 Release模式下构建时,这会自动发生。

7) 是的,虽然这不会像上述方法那样产生很大的影响。

我的建议是查看 Accelerate。这样您就可以确保充分利用浮点处理器的全部功能。

关于iphone - IOS/iPad/iPhone 的最大速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11219240/

有关iphone - IOS/iPad/iPhone 的最大速度的更多相关文章

  1. ruby-on-rails - 需要帮助最大化多个相似对象中的 3 个因素并适当排序 - 2

    我需要用任何语言编写一个算法,根据3个因素对数组进行排序。我以度假村为例(如Hipmunk)。假设我想去度假。我想要最便宜的地方、最好的评论和最多的景点。但是,显然我找不到在所有3个中都排名第一的方法。Example(assumingthereare20importantattractions):ResortA:$150/night...98/100infavorablereviews...18of20attractionsResortB:$99/night...85/100infavorablereviews...12of20attractionsResortC:$120/night

  2. ruby - 获取数组中值的最大连续出现次数 - 2

    下面有没有更优雅的方法来实现这个:输入:array=[1,1,1,0,0,1,1,1,1,0]输出:4我的算法:streak=0max_streak=0arr.eachdo|n|ifn==1streak+=1elsemax_streak=streakifstreak>max_streakstreak=0endendputsmax_streak 最佳答案 类似于w0lf'sanswer,但通过从chunk返回nil来跳过元素:array.chunk{|x|x==1||nil}.map{|_,x|x.size}.max

  3. java - Ruby 和 Java 的速度 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在我在网上找到的每个基准测试中,Ruby似乎都很慢,比Java慢得多。Ruby的人只是说这无关紧要。您能举个例子说明RubyonRails(以及Ruby本身)的速度真的无关紧要吗?

  4. iOS快捷指令:执行Python脚本(利用iSH Shell) - 2

    文章目录前言核心逻辑配置iSH安装Python创建Python脚本配置启动文件测试效果快捷指令前言iOS快捷指令所能做的操作极为有限。假如快捷指令能运行Python程序,那么可操作空间就瞬间变大了。iSH是一款免费的iOS软件,它模拟了一个类似Linux的命令行解释器。我们将在iSH中运行Python程序,然后在快捷指令中获取Python程序的输出。核心逻辑我们用一个“获取当前日期”的Python程序作为演示(其实快捷指令中本身存在“获取当前日期”的操作,因而此需求可以不用Python,这里仅仅为了演示方便),核心代码如下。>>>importtime>>>time.strftime('%Y-%

  5. ruby-on-rails - Ruby 的 range step 方法导致执行速度很慢? - 2

    我有这段代码:date_counter=Time.mktime(2011,01,01,00,00,00,"+05:00")@weeks=Array.new(date_counter..Time.now).step(1.week)do|week|logger.debug"WEEK:"+week.inspect@weeks从技术上讲,代码有效,输出:SatJan0100:00:00-05002011SatJan0800:00:00-05002011SatJan1500:00:00-05002011etc.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效

  6. ruby - capybara 增加最大允许页面加载时间 - 2

    我有一个页面,有时加载时间超过一分钟。假设这是预期的行为并且不会改变。在这些情况下,我得到Net::ReadTimeout。请注意,这是在通过单击上一页上的按钮导航到页面之后,而不是ajax请求。因此Capybara.using_wait_time没有帮助。我尝试了一些激进的方法(其中一些我知道行不通),例如:设置page.driver.browser.manage.timeouts的implicit_wait、script_timeout和page_load。遍历整个对象空间并设置所有Selenium::WebDriver::Remote::Http::Default的timeout

  7. Ruby - 找到哈希最大值的键 - 2

    我有一个散列,我想返回散列最大值的键(或键/值对)。所以,如果只有一个真正的最大值,它将返回那个键;但是,如果有多个具有相同值的键/值对,它将返回所有这些键。我如何在Ruby中完成此操作?my_hash.max_by{|k,v|v}#onlyreturnsonekey/valuepair 最佳答案 如果你想要所有对,我会做类似的事情max=my_hash.values.maxHash[my_hash.select{|k,v|v==max}] 关于Ruby-找到哈希最大值的键,我们在Sta

  8. Ruby:获取具有最大值的哈希对 - 2

    这是一个哈希值,用于跟踪我拥有的每种水果的数量fruits={"apples"=>10,"pears"=>15,"bananas"=>15,"grapes"=>12}我想知道哪种水果我吃得最多。如果有决胜局,则将它们全部归还。 最佳答案 #easymax_quantity=fruits.values.maxmax_fruits=fruits.select{|k,v|v==max_quantity}.keys#fastmax_quantity=-1.0/0.0max_fruits=[]fruits.eachdo|k,v|ifv>max

  9. ruby-on-rails - XPath 或 CSS 解析速度更快(对于 HTML 文件上的 Nokogiri)? - 2

    我想知道NokogiriXPath或CSS解析是否可以更快地处理HTML文件。速度有何不同? 最佳答案 Nokogiri没有XPath或CSS解析。它将XML/HTML解析为单个DOM,然后您可以使用CSS或XPath语法进行查询。CSS选择器在要求libxml2执行查询之前在内部转换为XPath。因此(对于完全相同的选择器)XPath版本会快一点点,因为CSS不需要先转换成XPath。但是,您的问题没有通用答案;这取决于您选择的是什么,以及您的XPath是什么样的。很有可能,您不会编写与Nokogiri创建的相同的XPath。例如

  10. iOS适配Unity-2019 - 2

    iOS适配Unity-2019背景由于2019起,Unity的Xcode工程,更改了项目结构。Unity2018的结构:可以看Targets只有一个Unity-iPhone,Unity-iPhone直接依赖管理三方库。Unity2019以后:Targets多了一个UnityFramework,UnityFramework管理三方库,Unity-iPhone依赖于UnityFramwork。所以升级后,会有若干的问题,以下是对问题的解决方式。问题一错误描述error:exportArchive:Missingsigningidentifierat"/var/folders/fr//T/Xcode

随机推荐