首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高通天蝎双核臂霓虹灯编码的问题?

高通天蝎双核臂霓虹灯编码的问题?
EN

Stack Overflow用户
提问于 2011-09-29 11:54:34
回答 3查看 1.2K关注 0票数 6

我正在为Android开发一个本机库,在这里我使用ARM程序集优化和多线程,以便在双核ARM芯片组MSM8660上获得最大的性能。在进行一些测量时,我注意到以下几点:

single-threaded库相比,具有NEON优化的single-threaded库比ARMv6优化的single-threaded库的要快( expected).

  • The multi-threaded库中的ARMv6 6E 217优化是E 118更快的E 219>比具有E 122ARMv6 6E 223优化的single-threaded库(以E 128NEONE 229优化为E 130慢速E 231single-threaded>优化)与single-threaded库相比,/code>具有NEON优化(绝对不是预期的!)。

我试着在网上到处搜索,想要解释一下为什么会这样,但到目前为止还没有找到任何解释。似乎所有的核心都有相同的霓虹灯管道或类似的东西,但是所有的原理图似乎都表明每个核心应该有自己的霓虹灯单元。有人知道为什么会这样吗?

EN

回答 3

Stack Overflow用户

发布于 2012-08-05 13:22:22

首先,你使用的是哪个图书馆?

你是对的,每个核心都有自己的霓虹灯单元,然而它是自己专有的'VeNum‘单元,而且没有提供太多的信息,它是为8x50中基于Cortex-A8的蝎子设计的,比ARM自己的霓虹灯SIMD的实现要好得多,不过,令人欣慰的是,他们(qcom)的硬件设计方式与基础参考设计兼容,所以大多数皮质代码-A8将很好地与Scorpion一起工作,尽管可能会有不同的指令定时会影响性能。

如果您使用"softfp“来编译您的程序,您将有大约20个周期的开销,您调用的每个函数都使用浮点参数,或者使用霓虹灯单元作为从ARM核到NEON单元的寄存器数据传输,反之亦然,有时会在等待管道冲洗的许多周期中暂停内核。

对于使用浮点单元的线程程序,内核必须在上下文切换期间保存FP寄存器,这样就会对线程造成额外的损失,因为我们已经知道从霓虹灯到arm移动寄存器的速度很慢,并且已知会导致管道阻塞。

此外,还有许多其他因素可能导致这种情况,例如编译器的优化不好、缓存丢失、没有使用蝎子的双重发行特性、指令调度不好以及线程从一个内核反复切换到另一个内核。

票数 2
EN

Stack Overflow用户

发布于 2011-10-02 10:43:07

可能是因为缓存丢失了。没有更多的信息是很难说的。

票数 0
EN

Stack Overflow用户

发布于 2011-11-25 12:09:17

我的猜测是,这是因为冲洗霓虹灯管道需要额外的循环惩罚。霓虹灯管道位于核心其余部分的后面,因此你会看到漏掉分支的额外循环惩罚,以此类推。

如果线程必须经常同步,或者如果您有很多锁,我想您将看到霓虹灯的巨大惩罚。

使用多线程代码来提高性能的唯一方法是,如果代码是令人尴尬的并行的,并且线程之间的通信非常少和不频繁的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7596936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档