simd相关内容

RealityKit – transform.rotate() 使对象的比例更大

我正在尝试旋转 RealityKit 入门代码中给出的钢盒,我使用此代码 steelBox.transform.rotation += simd_quatf(angle: radians,轴:SIMD3(0, 1, 0)) 尝试旋转对象. 然而,当物体旋转时,它也会在一维上变大. 这是为什么? 解决方案 如果您正在累积四元数旋转,您可能希望使用: steelBox.tra ..
发布时间:2021-11-17 21:34:30 移动开发

Xcode simd - 平移和旋转矩阵示例问题

不仅使用列优先与行优先违反直觉,Apple 关于“使用矩阵"的文档通过他们在 2D 中“构建"“转换矩阵"和“旋转矩阵"的示例进一步加剧了混乱. 根据 Apple 的文档翻译矩阵 () 翻译 翻译矩阵采用以下形式: 1 0 00 1 0tx ty 1 simd 库提供恒等矩阵的常量(矩阵沿对角线为 1,其他地方为 0).3 x 3 浮标单位矩阵是 matrix_identity_f ..
发布时间:2021-11-17 21:22:04 其他开发

使用 AVX512 生成蒙版的 BMI

我受到这个链接的启发https://www.sigarch.org/simd-instructions-thinked-harmful/ 查看 AVX512 的性能.我的想法是可以使用 AVX512 掩码操作删除循环后的清理循环. 这是我使用的代码 void daxpy2(int n, double a, const double x[], double y[]) {__m512d av ..
发布时间:2021-09-29 19:31:58 其他开发

使用 SSE2 和 AVX2 编译库

使用 VS2015 并编译具有 SSE2 指令和 AVX2 指令(仅在 CPU 中检测到时使用)的库,如果我使用 /arch:AVX2 编译库但仅调用SSE2 指令我得到“非法指令"(在 _mm_set1_epi32 上调用的第一个 SSE2 指令).但是,如果我使用 /arch:SSE2 编译 lib,它在调用 SSE2 指令时工作正常. 拱门设置是否相互排斥?如果不是,这应该如何解决?我 ..
发布时间:2021-09-18 20:05:53 C/C++开发

如何优化点积的 AVX 实现?

我尝试使用 AVX 实现这两个数组的点积 https://stackoverflow.com/a/10459028.但是我的代码很慢. A 和 xb 是双精度数组,n 是偶数.你能帮助我吗? const int mask = 0x31;int sum =0;for (int i = 0; i n)//填充{sum += A[ind] * xb[i].x;我++;ind = n * j + ..
发布时间:2021-09-18 18:56:38 其他开发

AVX2 列人口计数算法分别针对每个位列

对于我正在进行的项目,我需要计算翻录的 PDF 图像数据中每列的设置位数. 我正在尝试获取整个 PDF 作业(所有页面)中每一列的总设置位数. 数据一旦被翻录,就会存储在一个 MemoryMappedFile 中,没有后备文件(在内存中). PDF 页面尺寸为 13952 像素 x 15125 像素.可以通过将 PDF 的长度(高度)(以像素为单位)乘以以字节为单位的宽度来计算所 ..
发布时间:2021-09-18 18:56:29 C/C++开发

向量双双浮点运算

存在双精度浮点不够用的工作负载,因此需要四精度.这很少在硬件中提供,因此解决方法是使用 double-double,其中 128 位数字由一对 64 位数字表示.这不是真正的 IEEE-754 四精度 - 一方面,您不会获得任何额外的指数位 - 但在许多用途上已经足够接近,并且比纯软件实现快得多. 许多计算机提供向量浮点运算,最好将它们用于双双运算.这可能吗?特别是,在 https 中查看 ..

如何从 SSE2 __m128i 结构中提取字节?

我是 SIMD 内在函数的初学者,所以我会提前感谢大家的耐心等待.我有一个涉及无符号字节的绝对差异比较的应用程序(我正在处理灰度图像). 我尝试了 AVX、更现代的 SSE 版本等,但最终决定 SSE2 似乎足够并且对单个字节的支持最多 - 如果我错了,请纠正我. 我有两个问题:首先,加载 128 位寄存器的正确方法是什么?我想我应该传递与 128 的倍数对齐的负载内在数据,但这是否适 ..
发布时间:2021-09-17 19:16:41 其他开发

simd 的 pragma omp 不会在 GCC 中生成向量指令

简短:pragma omp for simd OpenMP 指令是否生成使用 SIMD 寄存器的代码? 更长:如 OpenMP 文档 中所述,“工作共享循环 SIMD 构造指定一个或多个相关循环的迭代将分布在使用 SIMD 指令的已经存在的线程之间[..]".从这个语句中,我希望以下代码 (simd.c) 在编译运行 时使用 XMM、YMM 或 ZMM 寄存器gcc simd.c -o si ..
发布时间:2021-09-17 19:16:38 其他开发

在进行矢量化计算时,R 是否利用 SIMD?

给定 R 中这样的数据框: +---+---+|X |是 |+---+---+|1 |2 ||2 |4 ||4 |5 |+---+---+ 如果对这个数据帧执行向量化操作,如下所示: data$Z 这是否会利用处理器的单指令多数据 (SIMD) 功能来优化性能?这似乎是它的完美案例,但我找不到任何能证实我的预感的东西. 解决方案 在我最初回答两年后,我刚刚获得了“好答案"徽章.感 ..
发布时间:2021-09-17 19:16:27 其他开发

什么是“矢量化"?

现在好几次,我在 matlab、fortran ……其他一些……中遇到过这个术语,但我从来没有找到解释它是什么意思,它有什么作用?所以我在这里问,什么是矢量化,例如“循环被矢量化"是什么意思? 解决方案 许多 CPU 具有“向量"或“SIMD"指令集,它们同时将相同的操作应用于两个、四个或更多个数据段.现代x86芯片有SSE指令,很多PPC芯片有“Altivec"指令,甚至有些ARM芯片有 ..
发布时间:2021-09-17 19:16:19 其他开发

std::vector<Simd_wrapper>内存中有连续的数据吗?

class Wrapper {民众://一些对值进行操作的函数___m128i 值_;};int main() {std::vector一种;a.调整大小(100);} vector a 中Wrapper 对象的value_ 属性是否总是占用连续内存,__m128i 值之间没有任何间隙 ? 我的意思是: [第一个包装器的 128 位][此处没有间隙][第二个包装器的 128 位] ... ..
发布时间:2021-09-17 19:12:18 C/C++开发

在 C# 中按元素相乘数组具有意想不到的性能

我想找到按元素相乘两个数组的最佳方法.这是一个更广泛的项目的一部分,其中性能但不是唯一的考虑因素. 我今天开始用 C# (Linqpad) 编写一些函数,所以它没有以任何方式进行优化.下面代码的输出如下: Environment.ProcessorCount: 4向量.Count: 4对于顺序:129ms,总和:2.30619276241231E+25Plinq:344ms ..
发布时间:2021-09-04 19:37:47 C#/.NET

C++ SSE 内部函数:将结果存储在变量中

我无法理解使用 SSE 内在函数将某些 SIMD 计算的结果存储回“正常变量".例如,_mm_store_ps 内在函数在“英特尔内在函数指南"中的描述如下: void _mm_store_ps (float* mem_addr, __m128 a) Store 128-bits(由4个压缩单精度(32-bit)组成)浮点元素)从 a 进入内存.mem_addr 必须对齐在 16 字节 ..
发布时间:2021-08-27 19:48:04 C/C++开发

使用 intel Intrinsics 赋值 - 水平添加

我想总结一个大向量 ary 的所有元素.我的想法是用横向总和来做. const int simd_width = 16/sizeof(float);浮动助手[simd_width];//取前4个元素const __m128 a4 = _mm_load_ps(ary);for(int i=0; i 我寻找了一种方法,通过该方法,我可以将结果向量直接分配给四边形 a4,就像 _mm_store ..
发布时间:2021-08-27 19:47:58 C/C++开发

将 __m128i 中的每个 DW 右移不同的量

我想将 __m128i 寄存器的每个元素右移不同的量.我知道如果我们想像下面这样左移,我知道这是可能的: __m128i mul_constant = _mm_set_epi32(8, 4, 2, 1);__m128i left_vshift = _mm_mullo_epi32(R, mul_constant); 但是,如果我们想把它右移,有什么解决办法? 解决方案 我终于做到了如下: ..
发布时间:2021-08-27 19:47:55 其他开发

如何将向量中的值相互添加

在我的代码中我解决了积分 y=x^2-4x+6 我使用了 SSE - 它允许我一次操作 4 个值.我编写了一个程序,用 0 到 5 的值将这个积分分解为五个 4 元素向量 n1、n2、n3、n4. .datan1: .float 0.3125,0.625,0.9375,1.25n2: .float 1.5625,1.875,2.1875,2.5n3:.float 2.8125,3.12500 ..
发布时间:2021-08-27 19:47:52 其他开发

有人可以解释这个 SSE BigNum 比较吗?

如果你看看这个 answer,作者设法为存储在 2 个 SSE 寄存器中的 2 个整数 bignum 创建了一个紧凑的比较算法.我没有很好地遵循它:) 到目前为止我做了什么: if l = a 和 e = a == b = {a[i] == b[i] ?〜0:0} 然后 a 但这似乎不是作者在做什么.我错过了什么?有什么需要大于比较的? 解决方案 我忽略了答案不是通用 ..
发布时间:2021-08-27 19:47:49 其他开发

乘法使用 SSE (x*x*x)+(y*y*y)

我正在尝试使用 SIMD 优化此功能,但我不知道从哪里开始. long sum(int x,int y){返回 x*x*x+y*y*y;} 反汇编后的函数如下所示: 4007a0: 48 89 f2 mov %rsi,%rdx4007a3: 48 89 f8 mov %rdi,%rax4007a6: 48 0f af d6 imul %rsi,%rdx4007aa: 48 0f af c7 ..
发布时间:2021-08-27 19:47:46 其他开发

如何使用_mm_extract_epi8 函数?

我正在使用 _mm_extract_epi8 (__m128i a, const int imm8) 函数,该函数具有 const int 参数.当我编译此 C++ 代码时,收到以下错误消息: 错误 C2057 预期常量表达式 __m128i a;for (int i=0; i 如何在循环中使用这个函数? 解决方案 首先,即使有可能,您也不希望在循环中使用它,并且您不想完全展开循 ..
发布时间:2021-08-27 19:47:37 C/C++开发