问题标签 [sse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - SIMD/SSE 新手:简单的图像过滤
我对 SIMD/SSE 很陌生,我正在尝试做一些简单的图像过滤(模糊)。下面的代码使用水平方向的简单 [1 2 1] 权重过滤 8 位灰色位图的每个像素。我一次创建 16 个像素的总和。
至少对我来说,这段代码看起来很糟糕的是,其中有很多插入/提取,这不是很优雅,并且可能也会减慢一切。转移时是否有更好的方法将数据从一个 reg 包装到另一个 reg 中?
buf 是图像数据,16 字节对齐。w/h 是宽度和高度,是 16 的倍数。
c++ - 如何使用 _mm_extract_ps SSE GCC instrinc 函数将十六进制浮点数转换为 C/C++ 中的浮点数
我正在为 2D 卷积编写 SSE 代码,但 SSE 文档非常稀疏。我正在使用 _mm_dp_ps 计算点积并使用 _mm_extract_ps 来获得点积结果,但是 _mm_extract_ps 返回一个表示浮点数的十六进制,我不知道如何将此十六进制浮点数转换为常规浮点数。我可以使用 __builtin_ia32_vec_ext_v4sf 返回一个浮点数,但我想保持与其他编译器的兼容性。
我错过了什么?
一点帮助将不胜感激,谢谢。
OpenSUSE 11.2
GCC 4.4.1
C++
编译器选项
-fopenmp -Wall -O3 -msse4.1 -march=core2
链接器选项
-lgomp -Wall -O3 -msse4.1 -march=core2
x86 - Complex Mul and Div using sse Instructions
Is performing complex multiplication and division beneficial through SSE instructions? I know that addition and subtraction perform better when using SSE. Can someone tell me how I can use SSE to perform complex multiplication to get better performance?
c++ - SSE 与类对齐
有一些非常奇怪的问题,作为 c++ 的初学者,我不知道为什么。
出于某种原因,当我声明 DeviceSettings 时,应用程序崩溃导致 DXSize var 未正确对齐。
但这只有在 32 位模式下编译。在 64 位模式下工作正常...
有什么线索吗?我错过了一些明显的东西吗?
c - Ensure compiler always use SSE sqrt instruction
I'm trying to get GCC (or clang) to consistently use the SSE instruction for sqrt instead of the math library function for a computationally intensive scientific application. I've tried a variety of GCCs on various 32 and 64 bit OS X and Linux systems. I'm making sure to enable sse with -mfpmath=sse (and -march=core2 to satisfy GCCs requirement to use -mfpmath=sse on 32 bit). I'm also using -O3. Depending on the GCC or clang version, the generated assembly doesn't consistently use SSE's sqrtss. In some versions of GCC, all the sqrts use the instruction. In others, there is mixed usage of sqrtss and calling the math library function. Is there a way to give a hint or force the compiler to only use the SSE instruction?
optimization - SSE2 内在函数:直接访问内存
许多 SSE 指令允许源操作数是 16 字节对齐的内存地址。例如,各种 (un)pack 指令。PUNCKLBW 具有以下签名:
PUNPCKLBW xmm1, xmm2/m128
现在这对于内在函数似乎根本不可能。看起来必须使用 _mm_load* 内在函数来读取内存中的任何内容。这是 PUNPCKLBW 的内在函数:
__m128i _mm_unpacklo_epi8 (__m128i a, __m128i b);
(据我所知,__m128i 类型总是指一个 XMM 寄存器。)
现在,这是为什么呢?这是相当可悲的,因为我通过直接寻址内存看到了一些优化潜力......
c - 包装好的 SSE 花车上的翻转标志
我正在寻找最有效的方法来翻转包装在 SSE 寄存器中的所有四个浮点数上的符号。
我在英特尔架构软件开发手册中没有找到这样做的内在因素。以下是我已经尝试过的事情。
对于每种情况,我都循环了代码 100 亿次,并得到了指示的挂墙时间。我试图至少匹配 4 秒,这需要我的非 SIMD 方法,它只使用一元减号运算符。
[48 秒]
_mm_sub_ps( _mm_setzero_ps(), vec );
[32 秒]
_mm_mul_ps( _mm_set1_ps( -1.0f ), vec );
[9 秒]
编译器是带有 -O3 的 gcc 4.2。CPU 是 Intel Core 2 Duo。
c++ - 使用 SSE 计算无符号整数之间的绝对差
在 C 中是否有一种无分支技术来计算两个无符号整数之间的绝对差?例如,给定变量 a 和 b,我希望值 2 用于 a=3、b=5 或 b=3、a=5 的情况。理想情况下,我还希望能够使用 SSE 寄存器对计算进行矢量化。
x86 - SSE 访问冲突
我有代码:
从这里我得到:
运行程序时,错误发生在 _mm_add_ps 行。
original 使用 _aligned_malloc(..., 16); 以及传递给函数,所以就我对 sse 的理解而言,它不应该是不对齐的。
我想知道是否有人可以看到为什么会崩溃,因为我不明白为什么。
编辑:宽度和 col 始终是 4 的倍数。 Col 是 0 或 4,而 width 始终是 4 的倍数。
EDIT2:看起来我的原始数组未对齐。不会:
确保原件在函数内部对齐?
Edit3:这真的很奇怪。当我做:
断言失败
x86-64 - movlps 的 NASM 64 位立即地址给出“dword 数据超出范围”
我需要具有 64 位宽的立即地址的指令 movlps,根据英特尔手册,这应该是完全可能的。所以,像这样:
但我得到的只是 NASM 将操作数大小截断为 32 位并打印相应的警告:
我尝试了不同形式的 qword 前缀,但没有成功。