sse相关内容

将浮点数相乘和相加

我有一项任务是将一些C++代码转换为ASM,我想知道我的想法是否有意义。首先,我会将整数转换为浮点数。我想得到数组数据到SSE寄存器,但这里有问题,因为我只想要3而不是4个整数,有什么方法可以克服这个问题吗?然后,我将使用CVTDQ2PS将这些整数转换为浮点数,并将这些数字保存在内存中。对于像0.393这样的常量数字,我会做3个浮点数的矢量,然后我会做同样的操作三次,所以我只考虑sepiaRed。 ..
发布时间:2022-09-05 23:01:41 C/C++开发

用于CPU架构的8位FFT?

我正在寻找一个FFT引擎,可以处理8位实数到复数的转换(大小为65K)。需要这样做是为了加快实时信号处理引擎的速度。它目前受到8位->fp32和fp32->8位转换的限制,以及实际的FFT受到内存带宽的限制(我们目前使用FFTW)。 我以为螺旋项目可能能够做到这一点http://spiral.net,但他们的网页上似乎只有一次或两次转换的代码。 有人知道有什么C或C++库可以做到这一点 ..
发布时间:2022-08-09 14:34:28 C/C++开发

GCC - 如何重新对齐堆栈?

我尝试构建一个使用 pthreads 和 __m128 SSE 类型的应用程序.根据 GCC 手册,默认堆栈对齐是 16 个字节.为了使用__m128,要求是16字节对齐. 我的目标 CPU 支持 SSE.我使用不支持运行时堆栈重新对齐的 GCC 编译器(例如 -mstackrealign).我不能使用任何其他 GCC 编译器版本. 我的测试应用程序如下所示: #include ..
发布时间:2022-01-22 12:30:57 其他开发

如何在 GCC 中以 32 字节边界对齐堆栈?

我正在为 Windows 64 位目标使用基于 GCC 4.6.1 的 MinGW64 构建.我正在玩新的英特尔 AVX 指令.我的命令行参数是 -march=corei7-avx -mtune=corei7-avx -mavx. 但是在堆栈上分配局部变量时,我开始遇到分段错误错误.GCC使用对齐的移动VMOVAPS和VMOVAPD来移动__m256和__m256d,这些指令需要32字节结盟 ..
发布时间:2022-01-22 12:22:43 其他开发

用某个值填充向量(SSE2)的最快方法.模板友好

我有这个模板类: 模板结构 A{双 v_sse __attribute__ ((vector_size (8*D)));A(双值){//这里是什么?}}; 用 val 的副本填充 v_sse 字段的最佳方法是什么?由于我使用向量,因此我可以使用 gcc SSE2 内在函数. 解决方案 如果我们可以编写一次代码,只需稍作调整就可以将其编译为更宽的向量,即使在自动向量化 ..
发布时间:2022-01-20 18:20:58 其他开发

NEON、SSE 和交错负载与随机播放

我试图理解“Iwillnotexist Idonotexist"在SIMD optimization of cvtColor using ARM NEON intrinsics上发表的评论: ...为什么不使用映射到 VLD3 指令的 ARM NEON 内部结构?这样可以省去所有的改组,简化和加速代码.英特尔 SSE 实施需要 shuffle,因为它缺少 2/3/4 路去交错加载指令,但您不 ..
发布时间:2022-01-17 14:10:28 其他开发

ARM NEON 的 SSE _mm_movemask_epi8 等效方法

我决定继续快速弯道优化并坚持_mm_movemask_epi8 SSE 指令.如何使用 uint8x16_t 输入为 ARM Neon 重写它? 解决方案 经过一些测试,看起来以下代码可以正常工作: int32_t _mm_movemask_epi8_neon(uint8x16_t 输入){const int8_t __attribute__ ((aligned (16))) xr[8] ..
发布时间:2022-01-17 13:34:22 其他开发

检查所有 __m128i 组件是否为 0 的最有效方法 [使用 <= SSE4.1 内在函数]

我正在使用 SSE 内在函数来确定一个矩形(由四个 int32 值定义)是否发生了变化: __m128i oldRect;//包含旧的左、上、右、下打包为 128 位__m128i 新矩形;//包含新的左、上、右、下打包为 128 位__m128i xor = _mm_xor_si128(oldRect, newRect); 此时,如果矩形没有更改,则生成的 xor 值将全为零.那么确定这一点 ..
发布时间:2022-01-14 14:48:37 C/C++开发

SIMD 对 64 位 * 64 位到 128 位的无符号乘法进行签名

我创建了一个使用 SIMD 执行 64 位 * 64 位到 128 位的函数.目前我已经使用 SSE2(实际上是 SSE4.1)实现了它.这意味着它同时做两个 64b*64b 到 128b 的产品.同样的想法可以扩展到 AVX2 或 AVX512,同时提供四个或八个 64b*64 到 128b 产品.我的算法基于 http://www.hackersdelight.org/hdcodetxt/mu ..
发布时间:2022-01-14 14:06:30 其他开发

加快浮动转换的速度?

我在 C++ 中的浮点类型转换很短,这对我的代码造成了瓶颈. 代码从一个硬件设备缓冲区转换而来,该缓冲区本身是短路的,这表示来自花哨的光子计数器的输入. 浮点因子= 1.0f/值;for (int i = 0; i 整数destination[i] = value*fact ..
发布时间:2022-01-13 08:13:23 C/C++开发

浮点向量的 SSE 缩减

如何使用 sse 内在函数获取浮点向量的总和元素(减少)? 简单的序列号: void(float *input, float &result, unsigned int NumElems){结果 = 0;for(auto i=0; i 解决方案 通常在循环中生成 4 个部分和,然后在循环后对 4 个元素进行水平求和,例如 #include #include ..
发布时间:2022-01-09 15:44:07 C/C++开发

SSE 寄存器返回,SSE 禁用

我的情况如下: 我正在为不允许 SSE 指令的内核编写代码 我需要做浮点运算 我正在为 x86_64 平台进行编译 这是一个说明问题的代码示例: int主要(int argc,char** argv){双 d = 0.0, dbase;uint64_t base_value = 300;d = (2200.0 - 1000.0)/(1000.0);dbase = d * base ..
发布时间:2022-01-09 10:44:43 其他开发

SSE 浮点算术是否可重现?

x87 FPU 以使用内部 80 位精度模式而著称,这通常会导致跨编译器和机器产生意外且不可重现的结果.在我的搜索中在 .NET 上可重现的浮点数学,我发现 .NET(Microsoft 和 Mono)的两个主要实现都发出 SSE 指令,而不是 64 位模式下的 x87. SSE(2) 对 32 位浮点数使用严格的 32 位寄存器,对 64 位浮点数使用严格的 64 位寄存器.通过设置适当的 ..
发布时间:2022-01-09 10:30:03 C#/.NET

是否有任何 JVM 的 JIT 编译器生成使用矢量化浮点指令的代码?

假设我的 Java 程序的瓶颈确实是一些紧密循环来计算一堆矢量点积.是的,我已经分析过了,是的,它是瓶颈,是的,它很重要,是的,算法就是这样,是的,我已经运行 Proguard 来优化字节码,等等. 这项工作本质上是点积.如,我有两个 float[50] ,我需要计算成对产品的总和.我知道处理器指令集的存在是为了快速批量执行此类操作,例如 SSE 或 MMX. 是的,我可以通过在 JN ..
发布时间:2022-01-09 10:13:30 Java开发

为什么 SSE scalar sqrt(x) 比 rsqrt(x) * x 慢?

我一直在分析我们在英特尔酷睿双核上的一些核心数学,在研究平方根的各种方法时,我发现了一些奇怪的东西:使用 SSE 标量运算,取倒数平方根更快并乘以得到 sqrt,而不是使用本机 sqrt 操作码! 我正在使用类似以下的循环对其进行测试: inline float TestSqrtFunction( float in );无效的测试函数(){#define ARRAYSIZE 4096#de ..
发布时间:2022-01-09 10:11:26 其他开发