neon相关内容

将 ARM NEON 代码移植到 AARCH64,很多问题

我正在将一些 ARM NEON 代码移植到 64 位 ARM-v8,但我找不到关于它的好的文档. 很多功能好像都没有了,同样的功能不使用也不知道怎么实现. 所以,一般的问题是:我在哪里可以找到新 SIMD 实现的完整参考,包括如何执行许多 ARM-NEON 教程中解释的相同简单任务的说明? 关于特定功能的一些问题: 1 - 如何在 Dx 寄存器的所有通道中加载值?旧代码是 ..
发布时间:2021-11-17 22:46:45 其他开发

aarch64 上未对齐 SIMD 加载/存储的性能

较旧的答案表明 aarch64 支持未对齐的读/写并提到了性能成本,但不清楚答案是否也仅涵盖 ALU 或 SIMD(128 位寄存器)操作. 相对于对齐的 128 位 NEON 加载和存储,未对齐的 128 位 NEON 加载和存储在 aarch64 上慢多少(如果有的话)? 对于未对齐的 SIMD 加载和存储是否有单独的指令(如 SSE2 的情况),或者已知对齐的加载/存储与潜在未对 ..
发布时间:2021-11-17 22:45:09 其他开发

未知的寄存器名称“q0"在 asm (arm64)

我目前正在尝试为新的 arm64 架构编译我的库.我有一堆 NEON 程序集,对于所有这些程序集,我都收到错误 asm 中未知的寄存器名称“q0". 即使我写得这么简单: asm (“"::: "q0", "q1", "q2", "q3"); 我认为 arm64 支持 NEON.我错过了什么吗? 解决方案 “v0": scanon$ cat bar.cint foo(vo ..
发布时间:2021-11-17 22:43:42 其他开发

图像处理中的边界检查

我想在处理图像处理中的任何过滤器时注意边界条件.我正在推断边界并创建新边界.例如,我有 4x3 输入: //输入整数图像[4][3] =1 2 3 42 4 6 83 6 9 12//输出int extensionimage[6][5] =1 1 2 3 4 41 1 2 3 4 42 2 4 6 8 83 3 6 9 12 123 3 6 9 12 12 我的代码: #include #i ..
发布时间:2021-11-17 22:41:38 其他开发

霓虹灯中的成对加法

我想在 neon 中添加 int64x2_t 向量的 00 和 01 索引值.我找不到任何可以执行此功能的成对添加指令. int64x2_t sum_64_2;//我期待的结果应该是..//int64_t 结果 = sum_64_2[0] + sum_64_2[1]; neon 中是否有针对此逻辑的说明. 解决方案 你可以用两种方式来写.这个明确使用了 NEON VADD.I64 指令 ..
发布时间:2021-11-17 22:41:32 其他开发

霓虹灯对比

根据 Neon 文档: 如果一条车道的比较结果为真,则该车道的结果为所有位设置为 1.如果通道的比较结果为假,则所有位都为设置为零.返回类型是无符号整数类型. 我写了一小段代码来检查这个,我观察到的结果是 0 和 -1 而不是 0 和 1.谁能告诉我这背后的原因? 代码: float c1[4] = {12.0f,12.0f,12.0f,12.0f};浮动 c2[4] = {1 ..
发布时间:2021-11-17 22:41:28 其他开发

如何对 NEON 向量的所有车道进行 OR

我想使用 NEON 内在函数来优化以下代码. uint32x4_t c1;//4个元素,每个元素为0或1uint32x4_t c2;//4个元素,每个元素为0或1uint8_t 包 = 0;//无符号字符,用于结果/* 一些代码/*//需要优化包 |= (vgetq_lane_u32(c1, 0);包 |= (vgetq_lane_u32(c1, 1) ..
发布时间:2021-11-17 22:39:56 其他开发

ARM NEON 如何使用索引更改值

unsigned char changeValue(unsigned char pArray[256],unsigned char 值){返回 pArray[值];} 我怎样才能用大约 uint8x8_t 的霓虹灯改变这个函数?? 感谢您的帮助!! 解决方案 你不能 - NEON 没有收集负载.您可以像这样处理的唯一情况是您想要返回 8 或 16 个连续字节值. ..
发布时间:2021-11-17 22:38:31 其他开发

cortex-a15 故障的交叉编译 FFTW:协处理器偏移超出范围

我正在尝试为具有霓虹灯支持的 cortex-a15 ARM 处理器交叉编译 FFTW 3.3.3,但出现此错误: /tmp/ccsNpqyK.s:汇编器消息:/tmp/ccsNpqyK.s:1035:错误:协处理器偏移超出范围 这是我的配置: ./configure --prefix=/usr/fftw_3_float_neon_ARNDALE --with-slow-timer ..
发布时间:2021-11-17 22:37:45 其他开发

向量中的内在 Neon 交换元素

我想用 Neon Intrinsics 优化这些代码.基本上用给定的输入 0 1 2 3 4 5 6 7 8 将产生输出, 2 1 0 5 4 3 8 7 6 void func(uint8_t* src, uint8_t* dst, int size){for (int i = 0; i ..
发布时间:2021-11-17 22:37:22 其他开发

测试 NEON SIMD 寄存器在所有通道上是否相等

我正在使用 Neon Instrinsics 与 clang. 我想测试两个 uint32x4_t SIMD 值是否在所有通道上相等.所以不是 4 个测试结果,而是一个告诉我 A 和 B 是否在所有车道上相等的结果. 在英特尔 AVX 上,我会使用类似的东西: _mm256_testz_si256( _mm256_xor_si256( A, B ), _mm256_set1_epi6 ..
发布时间:2021-11-17 22:35:52 其他开发

如何在android中使用arm_acle C语言扩展

有很多在 android 上使用 arm neon 内在函数的例子,ndk 甚至有一个例子.我已经让它毫无问题地工作了. Arm 还提供 ACLE(Arm C 语言扩展),但我几乎找不到示例.arm 文档本身仅建议包含 arm_acle.h 头文件,但是我仍然遇到错误.Google 提供的帮助几乎为零 :) 此外,搜索 arm 社区委员会的结果也很少. 人们是不是不使用 acle,而是 ..
发布时间:2021-11-17 22:35:49 其他开发

在 uint8x8_t 霓虹寄存器中查找 min 元素的最小值和位置

考虑这段代码: uint8_t v[8] = { ... };int ret = 256;int ret_pos = -1;for (int i=0; i 它找到 min 元素的 min 和位置(ret 和 ret_pos).在 arm 霓虹灯中,我可以使用 pairwisemin 在 v 中找到最小元素,但是如何找到最小元素的位置? 更新:看我自己的回答,你有什么建议来改进它? ..
发布时间:2021-11-17 22:35:06 其他开发

如何使用 ARM Neon 内在函数矢量化 IF 块?

我想在 ARM 处理器上处理大量浮点数,使用 Neon 技术一次计算四个.对于加法和乘法之类的操作,一切都很好,但是如果我的计算进入 IF 块,我该怎么办?示例: //在非向量化的原代码中,A是一个很多浮点数的数组//数字,一次计算一个.现在他们已经打包//放入一个向量并一次处理四个...计算 A...如果 (A > 10.f){A = A+5.f;}别的{A = A+10.f;} 现在,我执 ..
发布时间:2021-11-17 22:33:55 其他开发

在ARM cortex-a系列上启用neon

我想在裸机皮质 A-15 上初始化 NEON cp.按照 ARM 的指令 我在平台初始化序列的末尾写了这个序列: MOV r0, #0x00F00000MRC p15, 0, r0, c1, c1, 2ORR r0, r0, #0x0C00BIC r0, r0, #0xC000MCR p15, 0, r0, c1, c1, 2为BMRC p15, 4, r0, c1, c1, 2BIC r0, ..
发布时间:2021-11-17 22:33:49 其他开发

使用 ARM 霓虹灯内在函数的深度转换

我正在尝试围绕 NEON 内在函数进行思考,并认为我可以从一个示例开始并提出一些问题. 在这个实验中,我想将 32 位 RGB 转换为 16 位 BGR.将以下代码转换为使用 NEON 内在函数的良好开端是什么?我在这里遇到的问题是 16 位与我能看到的任何内在都不匹配.有 16x4 16x8 等等.但我只是没有什么运气来围绕我需要如何解决这个问题.有什么提示吗? 这是我要转换的代码. ..
发布时间:2021-11-17 22:33:37 其他开发