如何在 ARM Cortex-a8 中使用乘法和累加内在函数?

2024-01-01

如何使用GCC提供的乘累加内在函数?

float32x4_t vmlaq_f32 (float32x4_t , float32x4_t , float32x4_t);

谁能解释一下我必须传递给这个函数的三个参数。我的意思是源寄存器和目标寄存器以及函数返回什么?

Help!!!


简单地说,vmla 指令执行以下操作:

struct 
{
  float val[4];
} float32x4_t


float32x4_t vmla (float32x4_t a, float32x4_t b, float32x4_t c)
{
  float32x4 result;

  for (int i=0; i<4; i++)
  {
    result.val[i] =  b.val[i]*c.val[i]+a.val[i];
  }

  return result;
}

所有这些都会编译成一条汇编指令:-)

您可以在 3D 图形的典型 4x4 矩阵乘法中使用这个 NEON 汇编器内在函数,如下所示:

float32x4_t transform (float32x4_t * matrix, float32x4_t vector)
{
  /* in a perfect world this code would compile into just four instructions */
  float32x4_t result;

  result = vml (matrix[0], vector);
  result = vmla (result, matrix[1], vector);
  result = vmla (result, matrix[2], vector);
  result = vmla (result, matrix[3], vector);

  return result;
}

这可以节省几个周期,因为您不必在乘法后将结果相加。加法的使用非常频繁,以至于乘法累加 hsa 如今已成为主流(甚至 x86 也在最近的一些 SSE 指令集中添加了它们)。

另外值得一提的是:像这样的乘法累加运算是very常见于线性代数和 DSP(数字信号处理)应用。 ARM 非常聪明,实现了快速路径Cortex-A8 NEON 核心内部。如果 VMLA 指令的第一个参数(累加器)是前面的 VML 或 VMLA 指令的结果,则此快速路径启动。我可以详细说明,但简而言之,这样的指令系列的运行速度比 VML / VADD / VML / VADD 系列快四倍。

看看我的简单矩阵乘法:我就是这样做的。由于这种快速路径,它的运行速度比使用 VML 和 ADD 而不是 VMLA 编写的实现快大约四倍。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ARM Cortex-a8 中使用乘法和累加内在函数? 的相关文章

随机推荐

  • 使用由单个安装程序安装的 SQLite 的 Java 桌面应用程序

    我是与数据库交互的 Java 桌面应用程序编程的初学者 我的目标是制作一个简单的java应用程序 它使用数据库在本地存储数据 经过一番谷歌搜索后 我发现 SQLite Derby 可以满足我的需求 我用谷歌搜索了 SQLite 和 Derb
  • App 类中的静态上下文 - 内存泄漏

    为了能够在应用程序中的任何位置获取应用程序上下文 我创建了这样的 App 类 public class App extends Application private static Context mContext public stati
  • 带 if 语句的 Postgresql 函数

    我怎样才能使这个伪代码在 Postgresql 中工作 create or replace function getf arg character varying 255 returns int as if arg a then retur
  • Python 网页抓取被阻止

    我想抓取德国房地产网站 immobilienscout24 de 的网页 我想下载给定 URL 的 HTML 然后离线使用该 HTML 它不适合商业用途或出版 我也不打算向该网站发送垃圾邮件 它只是用于编码练习 我想编写一个 python
  • 核心数据谓词日期比较

    我试图获取与用户 selectedDate 匹配的实体中的所有对象 它是 NSDate 核心数据代码很好 但我的谓词一直返回 0 结果 数据库中的日期与用户选择的日期相同 应如何使用谓词将 selectedDate 与实体中的日期进行比较
  • 使用 VS 2005 C# 将 Excel 转换为 Oracle 数据库

    我想构建一个实用程序 可以将 Excel 工作表 列是固定的 但工作表可以是任意数量 中的数据导入到 Oracle 数据库 你能建议我应该如何 读取Excel表格 n张 最好的方法 验证数据 批量插入数据库 我关心的是这里的表现 每张纸可以
  • 为什么 cython 嵌入插件在 python 解释器中比 rust-c 接口版本具有更高的性能?

    我想问一些关于python解释器的底层原理的问题 因为我自己搜索的过程中并没有得到太多有用的信息 我最近一直在使用 rust 编写 python 插件 这为 python 的 cpu 密集型任务提供了显着的加速 并且与 c 相比 编写速度也
  • C++ tmpnam 替代方案

    我有一个 C 库 它使用tmpnam NULL 创建一个临时文件 我需要破解这个 因为它在根文件夹 c 或 中生成临时文件 因此它需要管理权限 如何使用有效的临时路径将此功能更改为其他功能 Thanks Though tmpnam返回前面加
  • OBJECT 和 EMBED 标签是否始终位于顶部?

    我有一个我制作的网站 我在该网站上流式传输视频 它开始 看起来很酷 但我用 CSS 制作的菜单总是在视频下方 因此某些链接会在对象后面消失 有谁知道我是否可以解决这个问题 我想我尝试过一次 z index 无济于事 我刚刚重新发布了这个问题
  • 这种语言有下推自动机(PDA)吗?

    the language is An B 2n Cn where n gt 0 我认为是有的 因为你可以这样处理 推入A 推入B 每个C从堆栈中弹出3次 如果没有C并且堆栈为空 则返回true 否则返回false 使用泵引理来证明这不是上下
  • TypeScript 错误 TS2403:后续变量声明必须具有相同的类型

    我的 TypeScript 项目似乎遇到了一些编译错误 完整的错误是 node modules types mocha index d ts 2680 13 error TS2403 Subsequent variable declarat
  • 有适合新手的 XML/XSD 教程吗?

    有谁知道任何关于 XSD XML 的新手教程 这些教程简单地解释了事情 但详细介绍了如何做事情 以下是有关使用 XSD 验证 XML 的教程 http www ibm com developerworks xml tutorials x v
  • 数据表 colspan 排序

    当引入 colspan 或 rowspan 时 Datatable jquery 插件会出现错误 有没有其他办法可以渡过 只需使用一些 jQuery 手动完成即可 function var tableRows myDatatable tbo
  • C++ 一个标头多个源

    I have a large class Foo1 class Foo public void apples1 void apples2 void apples3 void oranges1 void oranges2 void orang
  • isinstance(x, list) 迭代包含字符串和列表的列表时

    At 由内而外迭代嵌套列表 https stackoverflow com questions 14960380 iterating nested list inside out 14960687 comment21002419 14960
  • 根据 WooCommerce 产品类别禁用特定购物车商品数量字段

    在我使用的 woocommerce 中从 WooCommerce 产品类别的购物车中隐藏 删除商品 https stackoverflow com questions 54033207 hide remove item from cart
  • 如何运行Hadoop程序?

    我已经在笔记本电脑上安装了 Hadoop 并成功运行了安装指南中给出的示例程序 但是 我无法运行程序 rohit renaissance1 hadoop ch2 hadoop MaxTemperature input ncdc sample
  • PermissionError:pip 从 8.1.1 升级到 8.1.2

    我正在尝试将 pip 从 8 1 1 升级到 8 1 2 但它显示以下 PermissionError WinError 5 Access is denied 如何升级pip C gt python m pip install upgrad
  • 如何处理 multiprocessing.Pool 中的初始化错误?

    当初始化程序抛出如下错误时 脚本将不会停止 我想在开始主进程之前中止 不要运行 do something from multiprocessing import Pool import contextlib def initializer
  • 如何在 ARM Cortex-a8 中使用乘法和累加内在函数?

    如何使用GCC提供的乘累加内在函数 float32x4 t vmlaq f32 float32x4 t float32x4 t float32x4 t 谁能解释一下我必须传递给这个函数的三个参数 我的意思是源寄存器和目标寄存器以及函数返回什