![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ARM系统
文章平均质量分 67
神一样的老师
这个作者很懒,什么都没留下…
展开
-
从cpu_features源码看如何获得CPU信息
上一篇博文,提到可以用/proc/cpuinfo文件信息获得CPU的相关参数。在Linux下,cpu_features也是用 /proc/cpuinfo文件获得信息的,只是它对文件进行了解析处理。在Windows下,它是通过调用Windows API GetNativeSystemInfo来获得相关信息的。为什么cpu_features不直接用汇编获得相关信息呢?因为相关寄存器在用户态是无法访问的,需要在内核里面才能访问。不过cpu_features在FreeBSD中确实调用了汇编获得CPUID。原创 2024-08-09 07:12:34 · 95 阅读 · 0 评论 -
使用/proc/cpuinfo进行运行时CPU特性检测
一些标志可能是特定于ARM架构的,而其他一些可能是通用的或特定于其他CPU架构的。另外,不同的内核版本返回的标志也可能不同,比如ARMv8-A 64位内核使用 'asimd' 来支持高级SIMD,而ARMv7-A 32位内核使用 'neon'。因此,在ARMv8-A 64位内核上,查找 /proc/cpuinfo 中 "neon" 字符串的NEON检测代码将不起作用。文件在Linux系统中提供了关于CPU的详细信息,包括一系列的标志(flags),这些标志描述了CPU支持的特性和指令集扩展。原创 2024-08-09 07:11:32 · 770 阅读 · 0 评论 -
在ARM程序中启用自动向量化
NEON是作为一种附加的加载/存储架构设计的,它为C/C++等语言提供了良好的向量化编译器支持。这使得并行性水平很高。你可以为需要极高性能的应用手动编写NEON指令。它包括低成本的数据大小提升和降级。它还包括结构加载,能够访问在内存中交错的多个数据流。NEON指令可以作为常规ARM代码的一部分编写。这使得NEON编程比使用外部硬件加速器更简单、更有效。有NEON指令可用于读写外部内存,将数据在NEON寄存器和其他ARM寄存器之间移动,以及执行SIMD操作。原创 2024-08-08 10:46:04 · 384 阅读 · 0 评论 -
使用NEON内联函数进行编程
直接用汇编语言编写最优的NEON代码,或使用内联函数接口,需要对使用的数据类型以及可用的NEON指令有深入的理解。要知道使用哪些NEON操作,看看如何将算法分解为并行操作是有用的。例如,加法、最小值和最大值等可交换操作从SIMD的角度来看特别容易。这些内联函数指示编译器引用输入Q寄存器中的上D寄存器或下D寄存器。因此,这些操作不会转换为实际代码,但它们影响用于存储vec64a和vec64b的寄存器。上述代码显示,可以使用一个包含四个32位值的向量作为累加器和临时寄存器。这假设数组元素的总和适合32位通道。原创 2024-08-08 10:46:15 · 96 阅读 · 0 评论