Tag: cortex a8

高效的浮点比较(Cortex-A8)

有一个大的(~100 000) 浮点变量数组,并且有一个阈值(也是浮点 )。 问题是我必须将数组中的每个变量与阈值进行比较,但NEON标记传输需要很长时间(根据分析器约20个周期)。 有没有有效的方法来比较这些值? 注意:由于舍入误差无关紧要,我尝试了以下方法: float arr[10000]; float threshold; …. int a = arr[20]; // eg int t = threshold; if (t > a) {….} 但在这种情况下,我得到以下处理器命令序列: vldr.32 s0, [r0] vcvt.s32.f32 s0, s0 vmov r0, s0 <— takes 20 cycles as `vmrs APSR_nzcv, fpscr` in case of cmp r0, r1 floating point comparison 当转换发生在NEON时,无论是通过描述的方式还是浮点数来比较整数。

使用硬件计数器测量ARM Cortex-A8上的执行时间

我正在使用Exynos 3110处理器(1 GHz单核ARM Cortex-A8,例如在Nexus S中使用),并尝试测量特定function的执行时间。 我在Nexus S上运行了Android 4.0.3。我尝试了这个方法 [1] 如何在ARM Cortex-A8处理器中测量程序执行时间? 我加载了内核模块以允许在用户模式下读取寄存器值。 我正在使用以下程序来测试计数器: static inline unsigned int get_cyclecount (void) { unsigned int value; // Read CCNT Register asm volatile (“MRC p15, 0, %0, c9, c13, 0\t\n”: “=r”(value)); return value; } static inline void init_perfcounters (int do_reset, int enable_divider) { // in general enable all counters […]

如何在ARM Cortex-A8处理器中测量程序执行时间?

我正在使用一个名为i.MX515的基于ARM Cortex-A8的处理器。 有Linux Ubuntu 9.10发行版。 我正在运行一个用C编写的非常大的应用程序,我正在使用gettimeofday(); 用于衡量我的应用程序所用时间的函数。 main() { gettimeofday(start); …. …. …. gettimeofday(end); } 这种方法足以让我看看我的应用程序块占用了多少时间。 但是,现在,我正在尝试使用gettimeofday()计算时间的方法彻底优化我的代码,我看到连续运行之间有很多波动(在我的优化之前和之后运行),所以我不能确定实际执行时间,从而影响我的改进。 谁能告诉我应该怎么做? 如果通过访问循环计数器( ARM网站上为Cortex-M3建议的想法 ),任何人都可以向我指出一些代码,它给出了我在Cortex-A8上访问定时器寄存器时必须遵循的步骤吗? 如果这种方法不是很准确,那么请提出一些替代方案。 谢谢 跟进 跟进1:在Code Sorcery上编写了以下程序,生成了可执行文件,当我尝试在主板上运行时,我得到了 – 非法指令消息:( static inline unsigned int get_cyclecount (void) { unsigned int value; // Read CCNT Register asm volatile (“MRC p15, 0, %0, c9, c13, 0\t\n”: “=r”(value)); return value; } […]