simd相关内容

AVX2 什么是基于面具的最有效的打包方式?

如果您有一个输入数组和一个输出数组,但您只想编写那些满足特定条件的元素,那么在 AVX2 中最有效的方法是什么? 我在 SSE 看到它是这样完成的:(来自:https://deplinenoise.files.wordpress.com/2015/03/gdc2015_afredriksson_simd.pdf) __m128i LeftPack_SSSE3(__m128 掩码,__m12 ..
发布时间:2021-12-01 15:34:09 C/C++开发

动态生成向量常数的最佳指令序列是什么?

“最佳"意味着最少的指令(或最少的 uop,如果有任何指令解码为多个 uop).以字节为单位的机器代码大小是相等 insn 计数的决胜局. 常量代本质上是新依赖链的开始,因此延迟很重要是不寻常的.在循环内生成常量也是不常见的,因此吞吐量和执行端口需求也大多无关. 生成常量而不是加载它们需要更多的指令(​​全零或全一除外),因此它确实消耗了宝贵的 uop 缓存空间.这可能是比数据缓存更有 ..
发布时间:2021-11-30 11:13:57 其他开发

为什么 gcc 不将 _mm256_loadu_pd 解析为单个 vmovupd?

我正在编写一些 AVX 代码,我需要从可能未对齐的内存中加载.我目前正在加载 4 个 doubles,因此我会使用内在指令 _mm256_loadu_pd;我写的代码是: __m256d d1 = _mm256_loadu_pd(vInOut + i*4); 然后我使用选项 -O3 -mavx -g 进行编译,随后使用 objdump 来获取汇编代码以及带注释的代码和行 (objdump -S ..
发布时间:2021-11-30 11:13:11 其他开发

进行水平 SSE 向量求和(或其他缩减)的最快方法

给定一个包含三个(或四个)浮点数的向量.总结它们的最快方法是什么? SSE(movaps、shuffle、add、movd)总是比 x87 快吗?SSE3 中的水平添加指令值得吗? 转移到 FPU 的成本是多少,然后是 faddp,faddp?最快的特定指令序列是什么? “尝试安排事物以便您一次可以对四个向量求和"将不被接受作为答案.:-) 例如为了对数组求和,您可以使用多个向量 ..
发布时间:2021-11-30 11:04:46 其他开发

x86/x64 处理器使用哪些寄存器进行浮点数学运算?

x86/x64 是否使用 SIMD 寄存器进行高精度浮点运算或专用 FP 寄存器? 我的意思是高精度版本,而不是常规的double精度. 解决方案 FPU 堆栈仍然可用并公开 80 位精度算术,正如@EricPostpischil 指出的那样(不确定处理器是否仍然具有完整的逻辑,或者这部分在硬件级别得到了模拟).它以 long double 类型提供给 GCC 中的开发人员.例如,为 ..
发布时间:2021-11-25 07:26:00 C#

'vector long long' 的可用性是什么?

我正在一台旧的 PowerMac G5(一台 Power4 机器)上进行测试.构建失败: $ make...g++ -DNDEBUG -g2 -O3 -mcpu=power4 -maltivec -c ppc-simd.cppppc-crypto.h:36: 错误:在 AltiVec 类型中使用“long long"无效制作:*** [ppc-simd.o] 错误 1 失败的原因是: typ ..
发布时间:2021-11-25 07:17:53 C#

用 4 个单独的双打加载 x64 ymm 寄存器的有效方法是什么?

加载 x64 ymm 寄存器的最有效方法是什么 4 个均匀间隔的双打,即一组连续的双打 0 1 2 3 4 5 6 7 8 9 10 .. 100我想加载例如 0, 10, 20, 30 4 个任意位置的双打 即我想加载例如 1, 6, 22, 43 解决方案 最简单的方法是 VGATHERQPD 这是 Haswell 及更高版本上可用的 AVX2 指令. VGATHERQPD ..
发布时间:2021-11-25 07:01:34 C#

.NET Framework 4.5 是否提供 SSE4/AVX 支持?

我想,我听说过,但不知道在哪里. 更新:我介绍了 JiT 解决方案 看来要来了.(我一个小时前才发现) 这里有几个链接 JIT最后提出.JIT 和 SIMD 即将结婚. 更新到 SIMD 支持 您需要最新版本的 RyuJIT 和 Microsoft SIMD 启用的矢量类型 (Nuget) ..
发布时间:2021-11-24 10:08:30 C#

SSE 指令添加数组的所有元素

我是 SSE2 指令的新手.我找到了一个指令 _mm_add_epi8 可以添加两个数组元素.但我想要一个可以添加数组所有元素的 SSE 指令. 我试图用这段代码来发展这个概念: #include #include #include void sse(unsigned char* a,unsigned char* b);无效主(){/* 无符号字符 *arr;arr=(unsigned c ..
发布时间:2021-11-18 04:07:01 其他开发

将 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 其他开发

图像处理中的边界检查

我想在处理图像处理中的任何过滤器时注意边界条件.我正在推断边界并创建新边界.例如,我有 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 其他开发

ARM NEON 如何使用索引更改值

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

向量中的内在 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 其他开发